diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasThermoMachineSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasThermoMachineSystem.cs index aec4376641..7592b3abc6 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasThermoMachineSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasThermoMachineSystem.cs @@ -26,6 +26,7 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems SubscribeLocalEvent(OnThermoMachineUpdated); SubscribeLocalEvent(OnThermoMachineLeaveAtmosphere); SubscribeLocalEvent(OnGasThermoRefreshParts); + SubscribeLocalEvent(OnGasThermoUpgradeExamine); // UI events SubscribeLocalEvent(OnToggleMessage); @@ -68,7 +69,7 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems var matterBinRating = args.PartRatings[component.MachinePartHeatCapacity]; var laserRating = args.PartRatings[component.MachinePartTemperature]; - component.HeatCapacity = 5000 * MathF.Pow(matterBinRating, 2); + component.HeatCapacity = component.BaseHeatCapacity * MathF.Pow(matterBinRating, 2); switch (component.Mode) { @@ -88,6 +89,20 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems DirtyUI(uid, component); } + private void OnGasThermoUpgradeExamine(EntityUid uid, GasThermoMachineComponent component, UpgradeExamineEvent args) + { + switch (component.Mode) + { + case ThermoMachineMode.Heater: + args.AddPercentageUpgrade("gas-thermo-component-upgrade-heating", component.MaxTemperature / (component.BaseMaxTemperature + component.MaxTemperatureDelta)); + break; + case ThermoMachineMode.Freezer: + args.AddPercentageUpgrade("gas-thermo-component-upgrade-cooling", component.MinTemperature / (component.BaseMinTemperature - component.MinTemperatureDelta)); + break; + } + args.AddPercentageUpgrade("gas-thermo-component-upgrade-heat-capacity", component.HeatCapacity / component.BaseHeatCapacity); + } + private void OnToggleMessage(EntityUid uid, GasThermoMachineComponent component, GasThermomachineToggleMessage args) { component.Enabled = !component.Enabled; diff --git a/Content.Server/Atmos/Portable/PortableScrubberSystem.cs b/Content.Server/Atmos/Portable/PortableScrubberSystem.cs index a9cf9d9d2a..005bf8f44e 100644 --- a/Content.Server/Atmos/Portable/PortableScrubberSystem.cs +++ b/Content.Server/Atmos/Portable/PortableScrubberSystem.cs @@ -40,6 +40,7 @@ namespace Content.Server.Atmos.Portable SubscribeLocalEvent(OnDestroyed); SubscribeLocalEvent(OnScrubberAnalyzed); SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); } private bool IsFull(PortableScrubberComponent component) @@ -179,5 +180,11 @@ namespace Content.Server.Atmos.Portable 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 a3c809c385..8dec5153af 100644 --- a/Content.Server/Bed/BedSystem.cs +++ b/Content.Server/Bed/BedSystem.cs @@ -35,6 +35,7 @@ namespace Content.Server.Bed SubscribeLocalEvent(OnPowerChanged); SubscribeLocalEvent(OnEmagged); SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); } private void ManageUpdateList(EntityUid uid, HealOnBuckleComponent component, BuckleChangeEvent args) @@ -142,5 +143,10 @@ namespace Content.Server.Bed if (component.Emagged) 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/Botany/Systems/SeedExtractorSystem.cs b/Content.Server/Botany/Systems/SeedExtractorSystem.cs index b65899b56b..ada0603864 100644 --- a/Content.Server/Botany/Systems/SeedExtractorSystem.cs +++ b/Content.Server/Botany/Systems/SeedExtractorSystem.cs @@ -21,6 +21,7 @@ public sealed class SeedExtractorSystem : EntitySystem SubscribeLocalEvent(OnInteractUsing); SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); } private void OnInteractUsing(EntityUid uid, SeedExtractorComponent seedExtractor, InteractUsingEvent args) @@ -58,4 +59,9 @@ public sealed class SeedExtractorSystem : EntitySystem 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/Cloning/CloningSystem.cs b/Content.Server/Cloning/CloningSystem.cs index 1936b28a5c..211d5811f6 100644 --- a/Content.Server/Cloning/CloningSystem.cs +++ b/Content.Server/Cloning/CloningSystem.cs @@ -65,6 +65,7 @@ namespace Content.Server.Cloning.Systems SubscribeLocalEvent(OnComponentInit); SubscribeLocalEvent(OnPartsRefreshed); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnDeconstruct); SubscribeLocalEvent(Reset); SubscribeLocalEvent(HandleMindAdded); @@ -88,6 +89,12 @@ namespace Content.Server.Cloning.Systems 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); + } + private void OnDeconstruct(EntityUid uid, CloningPodComponent component, MachineDeconstructedEvent args) { _serverStackSystem.SpawnMultiple(_material.GetMaterialAmount(uid, "Biomass"), 100, "Biomass", Transform(uid).Coordinates); diff --git a/Content.Server/Construction/ConstructionSystem.Machine.cs b/Content.Server/Construction/ConstructionSystem.Machine.cs index 8f8cb641da..aa0c33a465 100644 --- a/Content.Server/Construction/ConstructionSystem.Machine.cs +++ b/Content.Server/Construction/ConstructionSystem.Machine.cs @@ -1,16 +1,22 @@ using System.Linq; using Content.Server.Construction.Components; +using Content.Server.Examine; using Content.Shared.Construction.Prototypes; +using Content.Shared.Verbs; using Robust.Shared.Containers; +using Robust.Shared.Utility; namespace Content.Server.Construction; public sealed partial class ConstructionSystem { + [Dependency] private readonly ExamineSystem _examineSystem = default!; + private void InitializeMachines() { SubscribeLocalEvent(OnMachineInit); SubscribeLocalEvent(OnMachineMapInit); + SubscribeLocalEvent>(OnMachineExaminableVerb); } private void OnMachineInit(EntityUid uid, MachineComponent component, ComponentInit args) @@ -25,6 +31,33 @@ public sealed partial class ConstructionSystem RefreshParts(component); } + private void OnMachineExaminableVerb(EntityUid uid, MachineComponent component, GetVerbsEvent args) + { + if (!args.CanInteract || !args.CanAccess) + return; + + var markup = new FormattedMessage(); + RaiseLocalEvent(uid, new UpgradeExamineEvent(ref markup)); + if (markup.IsEmpty) + return; // Not upgradable. + + markup = FormattedMessage.FromMarkup(markup.ToMarkup().TrimEnd('\n')); // Cursed workaround to https://github.com/space-wizards/RobustToolbox/issues/3371 + + var verb = new ExamineVerb() + { + Act = () => + { + _examineSystem.SendExamineTooltip(args.User, uid, markup, getVerbs: false, centerAtCursor: false); + }, + Text = Loc.GetString("machine-examinable-verb-text"), + Message = Loc.GetString("machine-examinable-verb-message"), + Category = VerbCategory.Examine, + IconTexture = "/Textures/Interface/VerbIcons/pickup.svg.192dpi.png" + }; + + args.Verbs.Add(verb); + } + public List GetAllParts(MachineComponent component) { var parts = new List(); @@ -143,3 +176,43 @@ public sealed class RefreshPartsEvent : EntityEventArgs public Dictionary PartRatings = new Dictionary(); } + +public sealed class UpgradeExamineEvent : EntityEventArgs +{ + private FormattedMessage Message; + + public UpgradeExamineEvent(ref FormattedMessage message) + { + Message = message; + } + + /// + /// Add a line to the upgrade examine tooltip with a percentage-based increase or decrease. + /// + public void AddPercentageUpgrade(string upgradedLocId, float multiplier) + { + var percent = Math.Round(100 * MathF.Abs(multiplier - 1), 2); + var locId = multiplier switch { + < 1 => "machine-upgrade-decreased-by-percentage", + 1 or float.NaN => "machine-upgrade-not-upgraded", + > 1 => "machine-upgrade-increased-by-percentage", + }; + var upgraded = Loc.GetString(upgradedLocId); + this.Message.AddMarkup(Loc.GetString(locId, ("upgraded", upgraded), ("percent", percent)) + '\n'); + } + + /// + /// Add a line to the upgrade examine tooltip with a numeric increase or decrease. + /// + public void AddNumberUpgrade(string upgradedLocId, int number) + { + var difference = Math.Abs(number); + var locId = number switch { + < 0 => "machine-upgrade-decreased-by-amount", + 0 => "machine-upgrade-not-upgraded", + > 0 => "machine-upgrade-increased-by-amount", + }; + var upgraded = Loc.GetString(upgradedLocId); + this.Message.AddMarkup(Loc.GetString(locId, ("upgraded", upgraded), ("difference", difference)) + '\n'); + } +} diff --git a/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs b/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs index 6355b378d7..c95f24ced1 100644 --- a/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs +++ b/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs @@ -54,6 +54,7 @@ namespace Content.Server.Kitchen.EntitySystems SubscribeLocalEvent(OnPowerChanged); SubscribeLocalEvent(OnSuicide); SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent((u,c,_) => Wzhzhzh(u,c)); SubscribeLocalEvent(OnEjectMessage); @@ -276,6 +277,11 @@ namespace Content.Server.Kitchen.EntitySystems component.CookTimeMultiplier = MathF.Pow(component.CookTimeScalingConstant, cookRating - 1); } + private void OnUpgradeExamine(EntityUid uid, MicrowaveComponent component, UpgradeExamineEvent args) + { + args.AddPercentageUpgrade("microwave-component-upgrade-cook-time", component.CookTimeMultiplier); + } + public void UpdateUserInterfaceState(EntityUid uid, MicrowaveComponent component) { var ui = _userInterface.GetUiOrNull(uid, MicrowaveUiKey.Key); diff --git a/Content.Server/Lathe/LatheSystem.cs b/Content.Server/Lathe/LatheSystem.cs index 14878721d2..185d019945 100644 --- a/Content.Server/Lathe/LatheSystem.cs +++ b/Content.Server/Lathe/LatheSystem.cs @@ -39,6 +39,7 @@ namespace Content.Server.Lathe SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnPowerChanged); SubscribeLocalEvent(OnPartsRefresh); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnLatheQueueRecipeMessage); SubscribeLocalEvent(OnLatheSyncRequestMessage); @@ -276,6 +277,11 @@ namespace Content.Server.Lathe 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); + } protected override bool HasRecipe(EntityUid uid, LatheRecipePrototype recipe, LatheComponent component) { diff --git a/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerSystem.cs b/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerSystem.cs index 69d0fc4b48..0f0c9d2e51 100644 --- a/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerSystem.cs +++ b/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerSystem.cs @@ -94,6 +94,7 @@ namespace Content.Server.Medical.BiomassReclaimer SubscribeLocalEvent(OnAfterInteractUsing); SubscribeLocalEvent(OnClimbedOn); SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnPowerChanged); SubscribeLocalEvent(OnSuicide); SubscribeLocalEvent(OnReclaimSuccessful); @@ -104,7 +105,7 @@ namespace Content.Server.Medical.BiomassReclaimer { if (args.Handled) return; - + if (HasComp(uid)) return; @@ -194,6 +195,12 @@ namespace Content.Server.Medical.BiomassReclaimer 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 OnReclaimSuccessful(ReclaimSuccessfulEvent args) { if (!TryComp(args.Reclaimer, out var reclaimer)) diff --git a/Content.Server/Power/EntitySystems/UpgradeBatterySystem.cs b/Content.Server/Power/EntitySystems/UpgradeBatterySystem.cs index 55698a7ff6..6571e1cf09 100644 --- a/Content.Server/Power/EntitySystems/UpgradeBatterySystem.cs +++ b/Content.Server/Power/EntitySystems/UpgradeBatterySystem.cs @@ -12,6 +12,7 @@ namespace Content.Server.Power.EntitySystems base.Initialize(); SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); } public void OnRefreshParts(EntityUid uid, UpgradeBatteryComponent component, RefreshPartsEvent args) @@ -23,5 +24,14 @@ namespace Content.Server.Power.EntitySystems batteryComp.MaxCharge = MathF.Pow(component.MaxChargeMultiplier, capacitorRating - 1) * component.BaseMaxCharge; } } + + 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 index f20b330bbb..2219f7c3bf 100644 --- a/Content.Server/Power/EntitySystems/UpgradePowerSystem.cs +++ b/Content.Server/Power/EntitySystems/UpgradePowerSystem.cs @@ -15,9 +15,11 @@ public sealed class UpgradePowerSystem : EntitySystem { SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnSupplierMapInit); SubscribeLocalEvent(OnSupplierRefreshParts); + SubscribeLocalEvent(OnSupplierUpgradeExamine); } private void OnMapInit(EntityUid uid, UpgradePowerDrawComponent component, MapInitEvent args) @@ -51,6 +53,16 @@ public sealed class UpgradePowerSystem : EntitySystem 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)) @@ -77,4 +89,11 @@ public sealed class UpgradePowerSystem : EntitySystem break; } } + + private void OnSupplierUpgradeExamine(EntityUid uid, UpgradePowerSupplierComponent component, UpgradeExamineEvent args) + { + // UpgradePowerSupplierComponent.PowerSupplyMultiplier is not the actual multiplier, so we have to do this. + if (TryComp(uid, out var powa)) + args.AddPercentageUpgrade("upgrade-power-supply", powa.MaxSupply / component.BaseSupplyRate); + } } diff --git a/Content.Server/Singularity/EntitySystems/EmitterSystem.cs b/Content.Server/Singularity/EntitySystems/EmitterSystem.cs index 93b6b78b6b..6e49a47f30 100644 --- a/Content.Server/Singularity/EntitySystems/EmitterSystem.cs +++ b/Content.Server/Singularity/EntitySystems/EmitterSystem.cs @@ -39,6 +39,7 @@ namespace Content.Server.Singularity.EntitySystems SubscribeLocalEvent(ReceivedChanged); SubscribeLocalEvent(OnInteractHand); SubscribeLocalEvent(OnRefreshParts); + SubscribeLocalEvent(OnUpgradeExamine); } private void OnInteractHand(EntityUid uid, EmitterComponent component, InteractHandEvent args) @@ -109,6 +110,13 @@ namespace Content.Server.Singularity.EntitySystems 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)); + // TODO: Remove this and use UpgradePowerDrawComponent instead. + args.AddPercentageUpgrade("upgrade-power-draw", component.PowerUseActive / (float) component.BasePowerUseActive); + } + public void SwitchOff(EmitterComponent component) { component.IsOn = false; diff --git a/Resources/Locale/en-US/atmos/portable-scrubber.ftl b/Resources/Locale/en-US/atmos/portable-scrubber.ftl index c4071b4acc..8aadf076d9 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 84d5a5ed28..c586a594a9 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/components/gas-thermomachine-component.ftl b/Resources/Locale/en-US/components/gas-thermomachine-component.ftl index 5afd87e988..0554c4fa8b 100644 --- a/Resources/Locale/en-US/components/gas-thermomachine-component.ftl +++ b/Resources/Locale/en-US/components/gas-thermomachine-component.ftl @@ -5,3 +5,7 @@ comp-gas-thermomachine-ui-temperature = Temperature (K): comp-gas-thermomachine-ui-toggle = Toggle comp-gas-thermomachine-ui-status-disabled = Off comp-gas-thermomachine-ui-status-enabled = On + +gas-thermo-component-upgrade-heating = maximum temperature +gas-thermo-component-upgrade-cooling = minimum temperature +gas-thermo-component-upgrade-heat-capacity = heat capacity diff --git a/Resources/Locale/en-US/kitchen/components/microwave-component.ftl b/Resources/Locale/en-US/kitchen/components/microwave-component.ftl index ed177d59e1..74bbd553d9 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 ## Bound UI diff --git a/Resources/Locale/en-US/lathe/components/lathe-component.ftl b/Resources/Locale/en-US/lathe/components/lathe-component.ftl new file mode 100644 index 0000000000..3f70bff642 --- /dev/null +++ b/Resources/Locale/en-US/lathe/components/lathe-component.ftl @@ -0,0 +1,2 @@ +lathe-component-upgrade-speed = speed +lathe-component-upgrade-material-use = material use diff --git a/Resources/Locale/en-US/machine/machine.ftl b/Resources/Locale/en-US/machine/machine.ftl index 858eab4f82..8f9887d49c 100644 --- a/Resources/Locale/en-US/machine/machine.ftl +++ b/Resources/Locale/en-US/machine/machine.ftl @@ -1 +1,11 @@ machine-insert-item = {THE($user)} inserted {THE($item)} into {THE($machine)}. + +machine-upgrade-increased-by-percentage = [color=yellow]{CAPITALIZE($upgraded)}[/color] increased by {$percent}%. +machine-upgrade-decreased-by-percentage = [color=yellow]{CAPITALIZE($upgraded)}[/color] decreased by {$percent}%. +machine-upgrade-increased-by-amount = [color=yellow]{CAPITALIZE($upgraded)}[/color] increased by {$difference}. +machine-upgrade-decreased-by-amount = [color=yellow]{CAPITALIZE($upgraded)}[/color] decreased by {$difference}. +machine-upgrade-not-upgraded = [color=yellow]{CAPITALIZE($upgraded)}[/color] not upgraded. + +upgrade-power-draw = power draw +upgrade-max-charge = max charge +upgrade-power-supply = power supply 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 31dad3cb7f..0c0b8faf59 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! \ No newline at end of file +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 c5afeeb173..81f9778e5e 100644 --- a/Resources/Locale/en-US/medical/components/cloning-pod-component.ftl +++ b/Resources/Locale/en-US/medical/components/cloning-pod-component.ftl @@ -1 +1,4 @@ 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 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 0000000000..2d8a18c263 --- /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/singularity/components/emitter-component.ftl b/Resources/Locale/en-US/singularity/components/emitter-component.ftl index ef17336644..2c316e1d6b 100644 --- a/Resources/Locale/en-US/singularity/components/emitter-component.ftl +++ b/Resources/Locale/en-US/singularity/components/emitter-component.ftl @@ -10,3 +10,6 @@ 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