From 69b38efaec743ffaad361fdd03f0207b26c451c3 Mon Sep 17 00:00:00 2001 From: coolmankid12345 <55817627+coolmankid12345@users.noreply.github.com> Date: Thu, 19 Oct 2023 20:50:44 -0400 Subject: [PATCH 01/39] Yeah (#21112) Co-authored-by: coolmankid12345 --- Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs b/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs index 54b45f59e94..78568820e96 100644 --- a/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs @@ -144,8 +144,8 @@ private void OnPlayerJobAssigned(RulePlayerJobsAssignedEvent ev) { _antagSelection.EligiblePlayers(comp.HeadRevPrototypeId, comp.MaxHeadRevs, comp.PlayersPerHeadRev, comp.HeadRevStartSound, "head-rev-role-greeting", "#5e9cff", out var chosen); - if (!chosen.Any()) - GiveHeadRev(chosen, comp.RevPrototypeId, comp); + if (chosen.Any()) + GiveHeadRev(chosen, comp.HeadRevPrototypeId, comp); else { _chatManager.SendAdminAnnouncement(Loc.GetString("rev-no-heads")); From 2cb47e59163c12e750e3d10c223a59f955e9395d Mon Sep 17 00:00:00 2001 From: "I.K" <45953835+notquitehadouken@users.noreply.github.com> Date: Thu, 19 Oct 2023 19:52:34 -0500 Subject: [PATCH 02/39] fix botany tools and air tank wide swing animations (#21103) * change rotations of botany tools * change gas tank wide swing rotation --- .../Entities/Objects/Specific/Hydroponics/tools.yml | 7 +++++++ Resources/Prototypes/Entities/Objects/Tools/gas_tanks.yml | 1 + 2 files changed, 8 insertions(+) diff --git a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml index bdc8c2ee632..c939cc9ca1c 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml @@ -13,6 +13,8 @@ state: icon - type: ItemCooldown - type: MeleeWeapon + wideAnimationRotation: 135 + swingLeft: true damage: types: Slash: 10 @@ -33,6 +35,7 @@ state: icon - type: ItemCooldown - type: MeleeWeapon + wideAnimationRotation: 90 damage: types: Slash: 7 @@ -51,6 +54,7 @@ state: icon - type: ItemCooldown - type: MeleeWeapon + wideAnimationRotation: 135 damage: types: Slash: 10 @@ -78,6 +82,8 @@ state: icon - type: ItemCooldown - type: MeleeWeapon + wideAnimationRotation: 135 + swingLeft: true damage: types: Slash: 10 @@ -100,6 +106,7 @@ state: icon - type: ItemCooldown - type: MeleeWeapon + wideAnimationRotation: 45 damage: types: Blunt: 10 diff --git a/Resources/Prototypes/Entities/Objects/Tools/gas_tanks.yml b/Resources/Prototypes/Entities/Objects/Tools/gas_tanks.yml index 0fde43be318..09d99452137 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/gas_tanks.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/gas_tanks.yml @@ -31,6 +31,7 @@ explosionType: Default maxIntensity: 20 - type: MeleeWeapon + wideAnimationRotation: 45 attackRate: 0.8 damage: types: From d4aeba84d18a177dd60e4219c9710576fdadd80a Mon Sep 17 00:00:00 2001 From: IntegerTempest <30300017+IntegerTempest@users.noreply.github.com> Date: Fri, 20 Oct 2023 08:46:32 +0300 Subject: [PATCH 03/39] add craft rollerbed & wheelchair (#21110) --- .../Entities/Structures/Machines/lathe.yml | 8 +++++ .../Prototypes/Recipes/Lathes/medical.yml | 33 +++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 37932f87caf..e492c08b5d3 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -114,6 +114,10 @@ - FoodPlateSmallPlastic - SprayBottle - PowerCellSmall + - VehicleWheelchairFolded + - RollerBedSpawnFolded + - CheapRollerBedSpawnFolded + - EmergencyRollerBedSpawnFolded - MicroManipulatorStockPart - MatterBinStockPart - CapacitorStockPart @@ -664,6 +668,10 @@ - PillCanister - BodyBag - ChemistryEmptyBottle01 + - VehicleWheelchairFolded + - RollerBedSpawnFolded + - CheapRollerBedSpawnFolded + - EmergencyRollerBedSpawnFolded - Medkit - MedkitBurn - MedkitToxin diff --git a/Resources/Prototypes/Recipes/Lathes/medical.yml b/Resources/Prototypes/Recipes/Lathes/medical.yml index 1de2e7290c2..c09b4bbd3e9 100644 --- a/Resources/Prototypes/Recipes/Lathes/medical.yml +++ b/Resources/Prototypes/Recipes/Lathes/medical.yml @@ -203,3 +203,36 @@ completetime: 4 materials: Plastic: 400 + +- type: latheRecipe + id: VehicleWheelchairFolded + result: VehicleWheelchairFolded + completetime: 1 + materials: + Steel: 500 + Plastic: 300 + +- type: latheRecipe + id: RollerBedSpawnFolded + result: RollerBedSpawnFolded + completetime: 1 + materials: + Steel: 600 + Plastic: 300 + +- type: latheRecipe + id: CheapRollerBedSpawnFolded + result: CheapRollerBedSpawnFolded + completetime: 1 + materials: + Steel: 600 + Plastic: 300 + +- type: latheRecipe + id: EmergencyRollerBedSpawnFolded + result: EmergencyRollerBedSpawnFolded + completetime: 1 + materials: + Steel: 600 + Plastic: 300 + From 5ae3a02ed52fd21e0ba64a17a475fab0896fa62b Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 20 Oct 2023 01:47:37 -0400 Subject: [PATCH 04/39] Automatic changelog update --- Resources/Changelog/Changelog.yml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 411594cd144..834fb62867e 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,10 +1,4 @@ Entries: -- author: deltanedas - changes: - - {message: The Vim exosuit is now smaller and lighter for better maneuverability., - type: Tweak} - id: 4529 - time: '2023-08-12T19:03:08.0000000+00:00' - author: Potato1234_x changes: - {message: Added trash carts. Expect these to be mapped into maintenance soon., @@ -2924,3 +2918,8 @@ Entries: 20TC', type: Tweak} id: 5028 time: '2023-10-19T15:19:33.0000000+00:00' +- author: IntegerTempest + changes: + - {message: Added lathe printing for rollerbed & wheelchairs., type: Add} + id: 5029 + time: '2023-10-20T05:46:33.0000000+00:00' From 5734f02de596d24e88bd4d07cb22d64a885bc437 Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Fri, 20 Oct 2023 00:05:33 -0700 Subject: [PATCH 05/39] Fix ghost actions disappearing when toggling visibility of other ghosts (#21033) --- Content.Client/Ghost/GhostSystem.cs | 13 ++++++++----- Content.Server/Ghost/GhostSystem.cs | 27 --------------------------- 2 files changed, 8 insertions(+), 32 deletions(-) diff --git a/Content.Client/Ghost/GhostSystem.cs b/Content.Client/Ghost/GhostSystem.cs index 3ace889f278..5727534109e 100644 --- a/Content.Client/Ghost/GhostSystem.cs +++ b/Content.Client/Ghost/GhostSystem.cs @@ -1,7 +1,6 @@ using Content.Client.Movement.Systems; using Content.Shared.Actions; using Content.Shared.Ghost; -using Content.Shared.Popups; using Robust.Client.Console; using Robust.Client.GameObjects; using Robust.Client.Graphics; @@ -33,9 +32,10 @@ private bool GhostVisibility _ghostVisibility = value; - foreach (var ghost in EntityQuery(true)) + var query = AllEntityQuery(); + while (query.MoveNext(out var uid, out _, out var sprite)) { - ghost.Item2.Visible = true; + sprite.Visible = value || uid == _playerManager.LocalPlayer?.ControlledEntity; } } } @@ -103,7 +103,10 @@ private void OnToggleGhosts(EntityUid uid, GhostComponent component, ToggleGhost return; Popup.PopupEntity(Loc.GetString("ghost-gui-toggle-ghost-visibility-popup"), args.Performer); - ToggleGhostVisibility(); + + if (uid == _playerManager.LocalPlayer?.ControlledEntity) + ToggleGhostVisibility(); + args.Handled = true; } @@ -204,7 +207,7 @@ public void OpenGhostRoles() public void ToggleGhostVisibility() { - _console.RemoteExecuteCommand(null, "toggleghosts"); + GhostVisibility = !GhostVisibility; } } } diff --git a/Content.Server/Ghost/GhostSystem.cs b/Content.Server/Ghost/GhostSystem.cs index 064e25957a1..6789be390eb 100644 --- a/Content.Server/Ghost/GhostSystem.cs +++ b/Content.Server/Ghost/GhostSystem.cs @@ -6,7 +6,6 @@ using Content.Server.Roles.Jobs; using Content.Server.Warps; using Content.Shared.Actions; -using Content.Shared.Administration; using Content.Shared.Examine; using Content.Shared.Eye; using Content.Shared.Follower; @@ -16,11 +15,9 @@ using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; using Content.Shared.Movement.Events; -using Content.Shared.Popups; using Content.Shared.Storage.Components; using Robust.Server.GameObjects; using Robust.Server.Player; -using Robust.Shared.Console; using Robust.Shared.Physics.Components; using Robust.Shared.Physics.Systems; using Robust.Shared.Timing; @@ -357,28 +354,4 @@ public bool DoGhostBooEvent(EntityUid target) return ghostBoo.Handled; } } - - [AnyCommand] - public sealed class ToggleGhostVisibility : IConsoleCommand - { - public string Command => "toggleghosts"; - public string Description => "Toggles ghost visibility"; - public string Help => $"{Command}"; - - public void Execute(IConsoleShell shell, string argStr, string[] args) - { - if (shell.Player == null) - shell.WriteLine("You can only toggle ghost visibility on a client."); - - var entityManager = IoCManager.Resolve(); - - var uid = shell.Player?.AttachedEntity; - if (uid == null - || !entityManager.HasComponent(uid) - || !entityManager.TryGetComponent(uid, out var eyeComponent)) - return; - - entityManager.System().SetVisibilityMask(uid.Value, eyeComponent.VisibilityMask ^ (int) VisibilityFlags.Ghost, eyeComponent); - } - } } From 3a561ed993a0f3992355a48ee043153f380ee751 Mon Sep 17 00:00:00 2001 From: Sirionaut <148076704+Sirionaut@users.noreply.github.com> Date: Fri, 20 Oct 2023 19:06:56 +0200 Subject: [PATCH 06/39] fixed localization for guardian (#21101) --- Content.Server/Guardian/GuardianSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/Guardian/GuardianSystem.cs b/Content.Server/Guardian/GuardianSystem.cs index 118574db3f7..b6121a7fbda 100644 --- a/Content.Server/Guardian/GuardianSystem.cs +++ b/Content.Server/Guardian/GuardianSystem.cs @@ -218,7 +218,7 @@ private void OnHostStateChange(EntityUid uid, GuardianHostComponent component, M if (args.NewMobState == MobState.Critical) { - _popupSystem.PopupEntity(Loc.GetString("guardian-critical-warn"), component.HostedGuardian.Value, component.HostedGuardian.Value); + _popupSystem.PopupEntity(Loc.GetString("guardian-host-critical-warn"), component.HostedGuardian.Value, component.HostedGuardian.Value); _audio.Play("/Audio/Effects/guardian_warn.ogg", Filter.Pvs(component.HostedGuardian.Value), component.HostedGuardian.Value, true); } else if (args.NewMobState == MobState.Dead) From 68aa295a385e99ad9f8ba1a26f9f74b6726fe81c Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Fri, 20 Oct 2023 21:21:49 +0100 Subject: [PATCH 07/39] Add internal temperatures for cooking meats (#20659) --- .../Body/Systems/ThermalRegulatorSystem.cs | 5 +- .../ConstructionSystem.Interactions.cs | 26 +++++--- .../InternalTemperatureComponent.cs | 48 +++++++++++++++ .../Components/TemperatureComponent.cs | 16 +++-- .../Temperature/Systems/TemperatureSystem.cs | 59 +++++++++++++++++-- .../Entities/Objects/Consumable/Food/meat.yml | 26 ++++++++ 6 files changed, 158 insertions(+), 22 deletions(-) create mode 100644 Content.Server/Temperature/Components/InternalTemperatureComponent.cs diff --git a/Content.Server/Body/Systems/ThermalRegulatorSystem.cs b/Content.Server/Body/Systems/ThermalRegulatorSystem.cs index 60d2e389da3..a9556be7738 100644 --- a/Content.Server/Body/Systems/ThermalRegulatorSystem.cs +++ b/Content.Server/Body/Systems/ThermalRegulatorSystem.cs @@ -35,7 +35,8 @@ private void ProcessThermalRegulation(EntityUid uid, ThermalRegulatorComponent c // implicit heat regulation var tempDiff = Math.Abs(temperatureComponent.CurrentTemperature - comp.NormalBodyTemperature); - var targetHeat = tempDiff * temperatureComponent.HeatCapacity; + var heatCapacity = _tempSys.GetHeatCapacity(uid, temperatureComponent); + var targetHeat = tempDiff * heatCapacity; if (temperatureComponent.CurrentTemperature > comp.NormalBodyTemperature) { totalMetabolismTempChange -= Math.Min(targetHeat, comp.ImplicitHeatRegulation); @@ -49,7 +50,7 @@ private void ProcessThermalRegulation(EntityUid uid, ThermalRegulatorComponent c // recalc difference and target heat tempDiff = Math.Abs(temperatureComponent.CurrentTemperature - comp.NormalBodyTemperature); - targetHeat = tempDiff * temperatureComponent.HeatCapacity; + targetHeat = tempDiff * heatCapacity; // if body temperature is not within comfortable, thermal regulation // processes starts diff --git a/Content.Server/Construction/ConstructionSystem.Interactions.cs b/Content.Server/Construction/ConstructionSystem.Interactions.cs index 21daabdb5da..11dd0b2bf04 100644 --- a/Content.Server/Construction/ConstructionSystem.Interactions.cs +++ b/Content.Server/Construction/ConstructionSystem.Interactions.cs @@ -380,16 +380,28 @@ private HandleResult HandleInteraction(EntityUid uid, object ev, ConstructionGra if (ev is not OnTemperatureChangeEvent) break; - if (TryComp(uid, out var tempComp)) + // prefer using InternalTemperature since that's more accurate for cooking. + float temp; + if (TryComp(uid, out var internalTemp)) { - if ((!temperatureChangeStep.MinTemperature.HasValue || tempComp.CurrentTemperature >= temperatureChangeStep.MinTemperature.Value) && - (!temperatureChangeStep.MaxTemperature.HasValue || tempComp.CurrentTemperature <= temperatureChangeStep.MaxTemperature.Value)) - { - return HandleResult.True; - } + temp = internalTemp.Temperature; + } + else if (TryComp(uid, out var tempComp)) + { + temp = tempComp.CurrentTemperature; + } + else + { + return HandleResult.False; } - return HandleResult.False; + if ((!temperatureChangeStep.MinTemperature.HasValue || temp >= temperatureChangeStep.MinTemperature.Value) && + (!temperatureChangeStep.MaxTemperature.HasValue || temp <= temperatureChangeStep.MaxTemperature.Value)) + { + return HandleResult.True; + } + + return HandleResult.False; } case PartAssemblyConstructionGraphStep partAssemblyStep: diff --git a/Content.Server/Temperature/Components/InternalTemperatureComponent.cs b/Content.Server/Temperature/Components/InternalTemperatureComponent.cs new file mode 100644 index 00000000000..1e456d4410b --- /dev/null +++ b/Content.Server/Temperature/Components/InternalTemperatureComponent.cs @@ -0,0 +1,48 @@ +using Content.Server.Temperature.Systems; + +namespace Content.Server.Temperature.Components; + +/// +/// Entity has an internal temperature which conducts heat from its surface. +/// Requires to function. +/// +/// +/// Currently this is only used for cooking but animal metabolism could use it too. +/// Too hot? Suffering heatstroke, start sweating to cool off and increase thirst. +/// Too cold? Suffering hypothermia, start shivering to warm up and increase hunger. +/// +[RegisterComponent, Access(typeof(TemperatureSystem))] +public sealed partial class InternalTemperatureComponent : Component +{ + /// + /// Internal temperature which is modified by surface temperature. + /// This gets set to on mapinit. + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float Temperature; + + /// + /// Thermal conductivity of the material in W/m/K. + /// Higher conductivity means its insides will heat up faster. + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float Conductivity = 0.5f; + + /// + /// Average thickness between the surface and the inside. + /// For meats and such this is constant. + /// Thicker materials take longer for heat to dissipate. + /// + [DataField(required: true), ViewVariables(VVAccess.ReadWrite)] + public float Thickness; + + /// + /// Surface area in m^2 for the purpose of conducting surface temperature to the inside. + /// Larger surface area means it takes longer to heat up/cool down + /// + /// + /// For meats etc this should just be the area of the cooked surface not the whole thing as it's only getting heat from one side usually. + /// + [DataField(required: true), ViewVariables(VVAccess.ReadWrite)] + public float Area; +} diff --git a/Content.Server/Temperature/Components/TemperatureComponent.cs b/Content.Server/Temperature/Components/TemperatureComponent.cs index 7330ebf9ba5..ec00a570f96 100644 --- a/Content.Server/Temperature/Components/TemperatureComponent.cs +++ b/Content.Server/Temperature/Components/TemperatureComponent.cs @@ -1,8 +1,7 @@ +using Content.Server.Temperature.Systems; using Content.Shared.Atmos; using Content.Shared.Damage; using Content.Shared.FixedPoint; -using Robust.Shared.Physics; -using Robust.Shared.Physics.Components; namespace Content.Server.Temperature.Components; @@ -14,6 +13,9 @@ namespace Content.Server.Temperature.Components; [RegisterComponent] public sealed partial class TemperatureComponent : Component { + /// + /// Surface temperature which is modified by the environment. + /// [DataField, ViewVariables(VVAccess.ReadWrite)] public float CurrentTemperature = Atmospherics.T20C; @@ -47,16 +49,12 @@ public sealed partial class TemperatureComponent : Component [DataField, ViewVariables(VVAccess.ReadWrite)] public float AtmosTemperatureTransferEfficiency = 0.1f; - [ViewVariables] public float HeatCapacity + [Obsolete("Use system method")] + public float HeatCapacity { get { - if (IoCManager.Resolve().TryGetComponent(Owner, out var physics) && physics.FixturesMass != 0) - { - return SpecificHeat * physics.FixturesMass; - } - - return Atmospherics.MinimumHeatCapacity; + return IoCManager.Resolve().System().GetHeatCapacity(Owner, this); } } diff --git a/Content.Server/Temperature/Systems/TemperatureSystem.cs b/Content.Server/Temperature/Systems/TemperatureSystem.cs index 27521cadf63..646f60eb636 100644 --- a/Content.Server/Temperature/Systems/TemperatureSystem.cs +++ b/Content.Server/Temperature/Systems/TemperatureSystem.cs @@ -12,6 +12,7 @@ using Content.Shared.Rejuvenate; using Content.Shared.Temperature; using Robust.Server.GameObjects; +using Robust.Shared.Physics.Components; namespace Content.Server.Temperature.Systems; @@ -19,8 +20,8 @@ public sealed class TemperatureSystem : EntitySystem { [Dependency] private readonly AlertsSystem _alerts = default!; [Dependency] private readonly AtmosphereSystem _atmosphere = default!; - [Dependency] private readonly IAdminLogManager _adminLogger = default!; [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly IAdminLogManager _adminLogger = default!; [Dependency] private readonly TransformSystem _transform = default!; /// @@ -43,6 +44,8 @@ public override void Initialize() SubscribeLocalEvent>( OnTemperatureChangeAttempt); + SubscribeLocalEvent(OnInit); + // Allows overriding thresholds based on the parent's thresholds. SubscribeLocalEvent(OnParentChange); SubscribeLocalEvent( @@ -55,6 +58,34 @@ public override void Update(float frameTime) { base.Update(frameTime); + // conduct heat from the surface to the inside of entities with internal temperatures + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var comp, out var temp)) + { + // don't do anything if they equalised + var diff = Math.Abs(temp.CurrentTemperature - comp.Temperature); + if (diff < 0.1f) + continue; + + // heat flow in W/m^2 as per fourier's law in 1D. + var q = comp.Conductivity * diff / comp.Thickness; + + // convert to J then K + var joules = q * comp.Area * frameTime; + var degrees = joules / GetHeatCapacity(uid, temp); + if (temp.CurrentTemperature < comp.Temperature) + degrees *= -1; + + // exchange heat between inside and surface + comp.Temperature += degrees; + ForceChangeTemperature(uid, temp.CurrentTemperature - degrees, temp); + } + + UpdateDamage(frameTime); + } + + private void UpdateDamage(float frameTime) + { _accumulatedFrametime += frameTime; if (_accumulatedFrametime < UpdateInterval) @@ -104,7 +135,7 @@ public void ChangeHeat(EntityUid uid, float heatAmount, bool ignoreHeatResistanc } float lastTemp = temperature.CurrentTemperature; - temperature.CurrentTemperature += heatAmount / temperature.HeatCapacity; + temperature.CurrentTemperature += heatAmount / GetHeatCapacity(uid, temperature); float delta = temperature.CurrentTemperature - lastTemp; RaiseLocalEvent(uid, new OnTemperatureChangeEvent(temperature.CurrentTemperature, lastTemp, delta), true); @@ -114,6 +145,7 @@ private void OnAtmosExposedUpdate(EntityUid uid, TemperatureComponent temperatur ref AtmosExposedUpdateEvent args) { var transform = args.Transform; + if (transform.MapUid == null) return; @@ -122,11 +154,30 @@ private void OnAtmosExposedUpdate(EntityUid uid, TemperatureComponent temperatur var temperatureDelta = args.GasMixture.Temperature - temperature.CurrentTemperature; var tileHeatCapacity = _atmosphere.GetTileHeatCapacity(transform.GridUid, transform.MapUid.Value, position); - var heat = temperatureDelta * (tileHeatCapacity * temperature.HeatCapacity / - (tileHeatCapacity + temperature.HeatCapacity)); + var heatCapacity = GetHeatCapacity(uid, temperature); + var heat = temperatureDelta * (tileHeatCapacity * heatCapacity / + (tileHeatCapacity + heatCapacity)); ChangeHeat(uid, heat * temperature.AtmosTemperatureTransferEfficiency, temperature: temperature); } + public float GetHeatCapacity(EntityUid uid, TemperatureComponent? comp = null, PhysicsComponent? physics = null) + { + if (!Resolve(uid, ref comp) || !Resolve(uid, ref physics, false) || physics.FixturesMass <= 0) + { + return Atmospherics.MinimumHeatCapacity; + } + + return comp.SpecificHeat * physics.FixturesMass; + } + + private void OnInit(EntityUid uid, InternalTemperatureComponent comp, MapInitEvent args) + { + if (!TryComp(uid, out var temp)) + return; + + comp.Temperature = temp.CurrentTemperature; + } + private void OnRejuvenate(EntityUid uid, TemperatureComponent comp, RejuvenateEvent args) { ForceChangeTemperature(uid, Atmospherics.T20C, comp); diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml index 21a100841db..35057aeacd9 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml @@ -25,10 +25,26 @@ Quantity: 5 - type: Item size: 5 + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.25,-0.25,0.25,0.25" + # less mass so it can cook faster, a single strip of bacon isnt 5kg + density: 1 + mask: + - ItemMask + restitution: 0.3 # fite me + friction: 0.2 # let air cook and freeze meat for cooking and preservation - type: AtmosExposed - type: Temperature currentTemperature: 290 + # required for cooking to work + - type: InternalTemperature + thickness: 0.02 + area: 0.02 # arbitrary number that sounds right for a slab of meat - type: Material - type: PhysicalComposition materialComposition: @@ -84,6 +100,8 @@ - type: SliceableFood count: 3 slice: FoodMeatCutlet + - type: InternalTemperature + conductivity: 0.43 - type: Construction graph: MeatSteak node: start @@ -159,6 +177,10 @@ Quantity: 2 - ReagentId: Fat Quantity: 9 + - type: InternalTemperature + conductivity: 0.44 + thickness: 0.004 # bacon is thin so faster to cook than a steak + area: 0.0075 # ~5x15cm - type: Construction graph: Bacon node: start @@ -232,6 +254,8 @@ - type: SliceableFood count: 3 slice: FoodMeatChickenCutlet + - type: InternalTemperature + conductivity: 0.41 - type: Construction graph: ChickenSteak node: start @@ -324,6 +348,8 @@ Quantity: 5 - ReagentId: Fat Quantity: 3 + - type: InternalTemperature + thickness: 0.1 # very big, do cook it in lava - type: Construction graph: GoliathSteak node: start From f7108af8b00150ffb48d89c63bd6060ba5da5dbc Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 20 Oct 2023 16:22:53 -0400 Subject: [PATCH 08/39] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 834fb62867e..2757000f83c 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: Potato1234_x - changes: - - {message: Added trash carts. Expect these to be mapped into maintenance soon., - type: Add} - - {message: Added janitorial trash carts that can be locked and unlocked by janitors. - These are for janitors to store trash bags instead of lugging them around., - type: Add} - id: 4530 - time: '2023-08-12T19:05:33.0000000+00:00' - author: PJB3005 changes: - {message: 'Nanotrasen finally decided to give engineering departments something @@ -2923,3 +2914,10 @@ Entries: - {message: Added lathe printing for rollerbed & wheelchairs., type: Add} id: 5029 time: '2023-10-20T05:46:33.0000000+00:00' +- author: deltanedas + changes: + - {message: Meats now cook based on internal temperature. Don't make steak in a + plasma fire unless you want to scorch the outside before the inside can even + cook., type: Tweak} + id: 5030 + time: '2023-10-20T20:21:49.0000000+00:00' From 82627cab15a7980138c437052d2e6b52efe4ce73 Mon Sep 17 00:00:00 2001 From: Ed <96445749+TheShuEd@users.noreply.github.com> Date: Sat, 21 Oct 2023 00:00:24 +0300 Subject: [PATCH 09/39] Orewall and cobblestone wall pack (#21034) * start work * remove crafting things * remove * fix yml * remove all pebbles add sand stone add sand cobblestone wall add asteroid cobblestone wall resprite basaltand snow walls * add new walls * :trollface: --- .../Entities/Structures/Walls/asteroid.yml | 586 ++++++++++++++++++ .../Entities/Structures/Walls/walls.yml | 105 ++++ .../Reagents/Materials/materials.yml | 2 +- .../Recipes/Construction/structures.yml | 2 +- .../Walls/cobblebrick.rsi/cobblebrick0.png | Bin 0 -> 1237 bytes .../Walls/cobblebrick.rsi/cobblebrick1.png | Bin 0 -> 941 bytes .../Walls/cobblebrick.rsi/cobblebrick2.png | Bin 0 -> 1237 bytes .../Walls/cobblebrick.rsi/cobblebrick3.png | Bin 0 -> 941 bytes .../Walls/cobblebrick.rsi/cobblebrick4.png | Bin 0 -> 965 bytes .../Walls/cobblebrick.rsi/cobblebrick5.png | Bin 0 -> 1065 bytes .../Walls/cobblebrick.rsi/cobblebrick6.png | Bin 0 -> 965 bytes .../Walls/cobblebrick.rsi/cobblebrick7.png | Bin 0 -> 257 bytes .../Structures/Walls/cobblebrick.rsi/full.png | Bin 0 -> 815 bytes .../Walls/cobblebrick.rsi/meta.json | 47 ++ .../cobblebrick_andesite.rsi/cobblebrick0.png | Bin 0 -> 1241 bytes .../cobblebrick_andesite.rsi/cobblebrick1.png | Bin 0 -> 973 bytes .../cobblebrick_andesite.rsi/cobblebrick2.png | Bin 0 -> 1241 bytes .../cobblebrick_andesite.rsi/cobblebrick3.png | Bin 0 -> 973 bytes .../cobblebrick_andesite.rsi/cobblebrick4.png | Bin 0 -> 999 bytes .../cobblebrick_andesite.rsi/cobblebrick5.png | Bin 0 -> 1075 bytes .../cobblebrick_andesite.rsi/cobblebrick6.png | Bin 0 -> 999 bytes .../cobblebrick_andesite.rsi/cobblebrick7.png | Bin 0 -> 257 bytes .../Walls/cobblebrick_andesite.rsi/full.png | Bin 0 -> 828 bytes .../Walls/cobblebrick_andesite.rsi/meta.json | 47 ++ .../cobblebrick_asteroid.rsi/cobblebrick0.png | Bin 0 -> 1162 bytes .../cobblebrick_asteroid.rsi/cobblebrick1.png | Bin 0 -> 910 bytes .../cobblebrick_asteroid.rsi/cobblebrick2.png | Bin 0 -> 1162 bytes .../cobblebrick_asteroid.rsi/cobblebrick3.png | Bin 0 -> 910 bytes .../cobblebrick_asteroid.rsi/cobblebrick4.png | Bin 0 -> 935 bytes .../cobblebrick_asteroid.rsi/cobblebrick5.png | Bin 0 -> 1023 bytes .../cobblebrick_asteroid.rsi/cobblebrick6.png | Bin 0 -> 935 bytes .../cobblebrick_asteroid.rsi/cobblebrick7.png | Bin 0 -> 251 bytes .../Walls/cobblebrick_asteroid.rsi/full.png | Bin 0 -> 796 bytes .../Walls/cobblebrick_asteroid.rsi/meta.json | 47 ++ .../cobblebrick_basalt.rsi/cobblebrick0.png | Bin 0 -> 1269 bytes .../cobblebrick_basalt.rsi/cobblebrick1.png | Bin 0 -> 1112 bytes .../cobblebrick_basalt.rsi/cobblebrick2.png | Bin 0 -> 1269 bytes .../cobblebrick_basalt.rsi/cobblebrick3.png | Bin 0 -> 1112 bytes .../cobblebrick_basalt.rsi/cobblebrick4.png | Bin 0 -> 1111 bytes .../cobblebrick_basalt.rsi/cobblebrick5.png | Bin 0 -> 1160 bytes .../cobblebrick_basalt.rsi/cobblebrick6.png | Bin 0 -> 1111 bytes .../cobblebrick_basalt.rsi/cobblebrick7.png | Bin 0 -> 255 bytes .../Walls/cobblebrick_basalt.rsi/full.png | Bin 0 -> 884 bytes .../Walls/cobblebrick_basalt.rsi/meta.json | 47 ++ .../cobblebrick_chromite.rsi/cobblebrick0.png | Bin 0 -> 1472 bytes .../cobblebrick_chromite.rsi/cobblebrick1.png | Bin 0 -> 1024 bytes .../cobblebrick_chromite.rsi/cobblebrick2.png | Bin 0 -> 1477 bytes .../cobblebrick_chromite.rsi/cobblebrick3.png | Bin 0 -> 1024 bytes .../cobblebrick_chromite.rsi/cobblebrick4.png | Bin 0 -> 1055 bytes .../cobblebrick_chromite.rsi/cobblebrick5.png | Bin 0 -> 1146 bytes .../cobblebrick_chromite.rsi/cobblebrick6.png | Bin 0 -> 1055 bytes .../cobblebrick_chromite.rsi/cobblebrick7.png | Bin 0 -> 258 bytes .../Walls/cobblebrick_chromite.rsi/full.png | Bin 0 -> 980 bytes .../Walls/cobblebrick_chromite.rsi/meta.json | 47 ++ .../cobblebrick_sand.rsi/cobblebrick0.png | Bin 0 -> 1294 bytes .../cobblebrick_sand.rsi/cobblebrick1.png | Bin 0 -> 1126 bytes .../cobblebrick_sand.rsi/cobblebrick2.png | Bin 0 -> 1294 bytes .../cobblebrick_sand.rsi/cobblebrick3.png | Bin 0 -> 1126 bytes .../cobblebrick_sand.rsi/cobblebrick4.png | Bin 0 -> 1140 bytes .../cobblebrick_sand.rsi/cobblebrick5.png | Bin 0 -> 1111 bytes .../cobblebrick_sand.rsi/cobblebrick6.png | Bin 0 -> 1140 bytes .../cobblebrick_sand.rsi/cobblebrick7.png | Bin 0 -> 258 bytes .../Walls/cobblebrick_sand.rsi/full.png | Bin 0 -> 904 bytes .../Walls/cobblebrick_sand.rsi/meta.json | 47 ++ .../cobblebrick_snow.rsi/cobblebrick0.png | Bin 0 -> 1484 bytes .../cobblebrick_snow.rsi/cobblebrick1.png | Bin 0 -> 1024 bytes .../cobblebrick_snow.rsi/cobblebrick2.png | Bin 0 -> 1484 bytes .../cobblebrick_snow.rsi/cobblebrick3.png | Bin 0 -> 1024 bytes .../cobblebrick_snow.rsi/cobblebrick4.png | Bin 0 -> 1043 bytes .../cobblebrick_snow.rsi/cobblebrick5.png | Bin 0 -> 1196 bytes .../cobblebrick_snow.rsi/cobblebrick6.png | Bin 0 -> 1043 bytes .../cobblebrick_snow.rsi/cobblebrick7.png | Bin 0 -> 255 bytes .../Walls/cobblebrick_snow.rsi/full.png | Bin 0 -> 1083 bytes .../Walls/cobblebrick_snow.rsi/meta.json | 47 ++ .../Structures/Walls/rock.rsi/meta.json | 47 +- .../Walls/rock.rsi/rock_andesite.png | Bin 0 -> 930 bytes .../Walls/rock.rsi/rock_andesite_east.png | Bin 0 -> 254 bytes .../Walls/rock.rsi/rock_andesite_north.png | Bin 0 -> 223 bytes .../Walls/rock.rsi/rock_andesite_south.png | Bin 0 -> 189 bytes .../Walls/rock.rsi/rock_andesite_west.png | Bin 0 -> 241 bytes .../Walls/rock.rsi/rock_chromite.png | Bin 0 -> 724 bytes .../Walls/rock.rsi/rock_chromite_east.png | Bin 0 -> 265 bytes .../Walls/rock.rsi/rock_chromite_north.png | Bin 0 -> 225 bytes .../Walls/rock.rsi/rock_chromite_south.png | Bin 0 -> 193 bytes .../Walls/rock.rsi/rock_chromite_west.png | Bin 0 -> 257 bytes .../Structures/Walls/rock.rsi/rock_sand.png | Bin 0 -> 737 bytes .../Walls/rock.rsi/rock_sand_east.png | Bin 0 -> 236 bytes .../Walls/rock.rsi/rock_sand_north.png | Bin 0 -> 228 bytes .../Walls/rock.rsi/rock_sand_south.png | Bin 0 -> 225 bytes .../Walls/rock.rsi/rock_sand_west.png | Bin 0 -> 238 bytes 90 files changed, 1068 insertions(+), 3 deletions(-) create mode 100644 Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick0.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick1.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick2.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick3.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick4.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick5.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick6.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick7.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick.rsi/full.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick.rsi/meta.json create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick0.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick1.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick2.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick3.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick4.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick5.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick6.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick7.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/full.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/meta.json create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick0.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick1.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick2.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick3.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick4.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick5.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick6.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick7.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/full.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/meta.json create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick0.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick1.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick2.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick3.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick4.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick5.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick6.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick7.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/full.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/meta.json create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick0.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick1.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick2.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick3.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick4.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick5.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick6.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick7.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/full.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/meta.json create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick0.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick1.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick2.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick3.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick4.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick5.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick6.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick7.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/full.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/meta.json create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick0.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick1.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick2.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick3.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick4.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick5.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick6.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick7.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/full.png create mode 100644 Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/meta.json create mode 100644 Resources/Textures/Structures/Walls/rock.rsi/rock_andesite.png create mode 100644 Resources/Textures/Structures/Walls/rock.rsi/rock_andesite_east.png create mode 100644 Resources/Textures/Structures/Walls/rock.rsi/rock_andesite_north.png create mode 100644 Resources/Textures/Structures/Walls/rock.rsi/rock_andesite_south.png create mode 100644 Resources/Textures/Structures/Walls/rock.rsi/rock_andesite_west.png create mode 100644 Resources/Textures/Structures/Walls/rock.rsi/rock_chromite.png create mode 100644 Resources/Textures/Structures/Walls/rock.rsi/rock_chromite_east.png create mode 100644 Resources/Textures/Structures/Walls/rock.rsi/rock_chromite_north.png create mode 100644 Resources/Textures/Structures/Walls/rock.rsi/rock_chromite_south.png create mode 100644 Resources/Textures/Structures/Walls/rock.rsi/rock_chromite_west.png create mode 100644 Resources/Textures/Structures/Walls/rock.rsi/rock_sand.png create mode 100644 Resources/Textures/Structures/Walls/rock.rsi/rock_sand_east.png create mode 100644 Resources/Textures/Structures/Walls/rock.rsi/rock_sand_north.png create mode 100644 Resources/Textures/Structures/Walls/rock.rsi/rock_sand_south.png create mode 100644 Resources/Textures/Structures/Walls/rock.rsi/rock_sand_west.png diff --git a/Resources/Prototypes/Entities/Structures/Walls/asteroid.yml b/Resources/Prototypes/Entities/Structures/Walls/asteroid.yml index 5ecbb8214c9..e64af7cbaec 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/asteroid.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/asteroid.yml @@ -766,3 +766,589 @@ - map: [ "enum.EdgeLayer.West" ] state: rock_snow_west - state: rock_artifact_fragment + + +# Sand variants +- type: entity + id: WallRockSand + parent: WallRock + components: + - type: Sprite + sprite: Structures/Walls/rock.rsi + layers: + - state: rock_sand + - map: [ "enum.EdgeLayer.South" ] + state: rock_sand_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_sand_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_sand_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_sand_west + +- type: entity + id: WallRockSandGold + parent: WallRockSand + description: An ore vein rich with gold. + suffix: Gold + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreGold + - type: Sprite + layers: + - state: rock_sand + - map: [ "enum.EdgeLayer.South" ] + state: rock_sand_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_sand_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_sand_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_sand_west + - state: rock_gold + +- type: entity + id: WallRockSandPlasma + parent: WallRockSand + description: An ore vein rich with plasma. + suffix: Plasma + components: + - type: OreVein + oreChance: 1.0 + currentOre: OrePlasma + - type: Sprite + layers: + - state: rock_sand + - map: [ "enum.EdgeLayer.South" ] + state: rock_sand_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_sand_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_sand_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_sand_west + - state: rock_phoron + +- type: entity + id: WallRockSandQuartz + parent: WallRockSand + description: An ore vein rich with quartz. + suffix: Quartz + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreSpaceQuartz + - type: Sprite + layers: + - state: rock_sand + - map: [ "enum.EdgeLayer.South" ] + state: rock_sand_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_sand_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_sand_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_sand_west + - state: rock_quartz + +- type: entity + id: WallRockSandSilver + parent: WallRockSand + description: An ore vein rich with silver. + suffix: Silver + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreSilver + - type: Sprite + layers: + - state: rock_sand + - map: [ "enum.EdgeLayer.South" ] + state: rock_sand_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_sand_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_sand_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_sand_west + - state: rock_silver + +- type: entity + id: WallRockSandTin + parent: WallRockSand + description: An ore vein rich with steel. + suffix: Steel + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreSteel + - type: Sprite + layers: + - state: rock_sand + - map: [ "enum.EdgeLayer.South" ] + state: rock_sand_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_sand_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_sand_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_sand_west + - state: rock_tin + +- type: entity + id: WallRockSandUranium + parent: WallRockSand + description: An ore vein rich with uranium. + suffix: Uranium + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreUranium + - type: Sprite + layers: + - state: rock_sand + - map: [ "enum.EdgeLayer.South" ] + state: rock_sand_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_sand_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_sand_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_sand_west + - state: rock_uranium + + +- type: entity + id: WallRockSandBananium + parent: WallRockSand + description: An ore vein rich with bananium. + suffix: Bananium + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreBananium + - type: Sprite + layers: + - state: rock_sand + - map: [ "enum.EdgeLayer.South" ] + state: rock_sand_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_sand_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_sand_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_sand_west + - state: rock_bananium + +- type: entity + id: WallRockSandArtifactFragment + parent: WallRockSand + description: A rock wall. What's that sticking out of it? + suffix: Artifact Fragment + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreArtifactFragment + - type: Sprite + layers: + - state: rock_sand + - map: [ "enum.EdgeLayer.South" ] + state: rock_sand_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_sand_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_sand_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_sand_west + - state: rock_artifact_fragment + +# Chromite variants +- type: entity + id: WallRockChromite + parent: WallRock + components: + - type: Sprite + sprite: Structures/Walls/rock.rsi + layers: + - state: rock_chromite + - map: [ "enum.EdgeLayer.South" ] + state: rock_chromite_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_chromite_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_chromite_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_chromite_west + +- type: entity + id: WallRockChromiteGold + parent: WallRockChromite + description: An ore vein rich with gold. + suffix: Gold + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreGold + - type: Sprite + layers: + - state: rock_chromite + - map: [ "enum.EdgeLayer.South" ] + state: rock_chromite_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_chromite_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_chromite_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_chromite_west + - state: rock_chromite + +- type: entity + id: WallRockChromitePlasma + parent: WallRockChromite + description: An ore vein rich with plasma. + suffix: Plasma + components: + - type: OreVein + oreChance: 1.0 + currentOre: OrePlasma + - type: Sprite + layers: + - state: rock_chromite + - map: [ "enum.EdgeLayer.South" ] + state: rock_chromite_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_chromite_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_chromite_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_chromite_west + - state: rock_phoron + +- type: entity + id: WallRockChromiteQuartz + parent: WallRockChromite + description: An ore vein rich with quartz. + suffix: Quartz + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreSpaceQuartz + - type: Sprite + layers: + - state: rock_chromite + - map: [ "enum.EdgeLayer.South" ] + state: rock_chromite_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_chromite_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_chromite_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_chromite_west + - state: rock_quartz + +- type: entity + id: WallRockChromiteSilver + parent: WallRockChromite + description: An ore vein rich with silver. + suffix: Silver + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreSilver + - type: Sprite + layers: + - state: rock_chromite + - map: [ "enum.EdgeLayer.South" ] + state: rock_chromite_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_chromite_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_chromite_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_chromite_west + - state: rock_silver + +- type: entity + id: WallRockChromiteTin + parent: WallRockChromite + description: An ore vein rich with steel. + suffix: Steel + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreSteel + - type: Sprite + layers: + - state: rock_chromite + - map: [ "enum.EdgeLayer.South" ] + state: rock_chromite_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_chromite_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_chromite_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_chromite_west + - state: rock_tin + +- type: entity + id: WallRockChromiteUranium + parent: WallRockChromite + description: An ore vein rich with uranium. + suffix: Uranium + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreUranium + - type: Sprite + layers: + - state: rock_chromite + - map: [ "enum.EdgeLayer.South" ] + state: rock_chromite_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_chromite_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_chromite_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_chromite_west + - state: rock_uranium + + +- type: entity + id: WallRockChromiteBananium + parent: WallRockChromite + description: An ore vein rich with bananium. + suffix: Bananium + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreBananium + - type: Sprite + layers: + - state: rock_chromite + - map: [ "enum.EdgeLayer.South" ] + state: rock_chromite_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_chromite_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_chromite_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_chromite_west + - state: rock_bananium + +- type: entity + id: WallRockChromiteArtifactFragment + parent: WallRockChromite + description: A rock wall. What's that sticking out of it? + suffix: Artifact Fragment + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreArtifactFragment + - type: Sprite + layers: + - state: rock_chromite + - map: [ "enum.EdgeLayer.South" ] + state: rock_chromite_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_chromite_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_chromite_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_chromite_west + - state: rock_artifact_fragment + +# Andesite variants +- type: entity + id: WallRockAndesite + parent: WallRock + components: + - type: Sprite + sprite: Structures/Walls/rock.rsi + layers: + - state: rock_andesite + - map: [ "enum.EdgeLayer.South" ] + state: rock_andesite_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_andesite_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_andesite_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_andesite_west + +- type: entity + id: WallRockAndesiteGold + parent: WallRockAndesite + description: An ore vein rich with gold. + suffix: Gold + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreGold + - type: Sprite + layers: + - state: rock_andesite + - map: [ "enum.EdgeLayer.South" ] + state: rock_andesite_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_andesite_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_andesite_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_andesite_west + - state: rock_andesite + +- type: entity + id: WallRockAndesitePlasma + parent: WallRockAndesite + description: An ore vein rich with plasma. + suffix: Plasma + components: + - type: OreVein + oreChance: 1.0 + currentOre: OrePlasma + - type: Sprite + layers: + - state: rock_andesite + - map: [ "enum.EdgeLayer.South" ] + state: rock_andesite_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_andesite_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_andesite_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_andesite_west + - state: rock_phoron + +- type: entity + id: WallRockAndesiteQuartz + parent: WallRockAndesite + description: An ore vein rich with quartz. + suffix: Quartz + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreSpaceQuartz + - type: Sprite + layers: + - state: rock_andesite + - map: [ "enum.EdgeLayer.South" ] + state: rock_andesite_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_andesite_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_andesite_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_andesite_west + - state: rock_quartz + +- type: entity + id: WallRockAndesiteSilver + parent: WallRockAndesite + description: An ore vein rich with silver. + suffix: Silver + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreSilver + - type: Sprite + layers: + - state: rock_andesite + - map: [ "enum.EdgeLayer.South" ] + state: rock_andesite_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_andesite_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_andesite_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_andesite_west + - state: rock_silver + +- type: entity + id: WallRockAndesiteTin + parent: WallRockAndesite + description: An ore vein rich with steel. + suffix: Steel + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreSteel + - type: Sprite + layers: + - state: rock_andesite + - map: [ "enum.EdgeLayer.South" ] + state: rock_andesite_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_andesite_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_andesite_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_andesite_west + - state: rock_tin + +- type: entity + id: WallRockAndesiteUranium + parent: WallRockAndesite + description: An ore vein rich with uranium. + suffix: Uranium + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreUranium + - type: Sprite + layers: + - state: rock_andesite + - map: [ "enum.EdgeLayer.South" ] + state: rock_andesite_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_andesite_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_andesite_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_andesite_west + - state: rock_uranium + + +- type: entity + id: WallRockAndesiteBananium + parent: WallRockAndesite + description: An ore vein rich with bananium. + suffix: Bananium + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreBananium + - type: Sprite + layers: + - state: rock_andesite + - map: [ "enum.EdgeLayer.South" ] + state: rock_andesite_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_andesite_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_andesite_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_andesite_west + - state: rock_bananium + +- type: entity + id: WallRockAndesiteArtifactFragment + parent: WallRockAndesite + description: A rock wall. What's that sticking out of it? + suffix: Artifact Fragment + components: + - type: OreVein + oreChance: 1.0 + currentOre: OreArtifactFragment + - type: Sprite + layers: + - state: rock_andesite + - map: [ "enum.EdgeLayer.South" ] + state: rock_andesite_south + - map: [ "enum.EdgeLayer.East" ] + state: rock_andesite_east + - map: [ "enum.EdgeLayer.North" ] + state: rock_andesite_north + - map: [ "enum.EdgeLayer.West" ] + state: rock_andesite_west + - state: rock_artifact_fragment diff --git a/Resources/Prototypes/Entities/Structures/Walls/walls.yml b/Resources/Prototypes/Entities/Structures/Walls/walls.yml index be2927fcb98..51d611ba8d0 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/walls.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/walls.yml @@ -1143,3 +1143,108 @@ - type: Icon sprite: Structures/Magic/forcewall.rsi state: forcewall + +- type: entity + parent: BaseWall + id: WallCobblebrick + name: cobblestone brick wall + description: Stone by stone, perfectly fitted together to form a wall. + components: + - type: Tag + tags: + - Wall + - RCDDeconstructWhitelist + - type: Sprite + sprite: Structures/Walls/cobblebrick.rsi + - type: Icon + sprite: Structures/Walls/cobblebrick.rsi + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: IconSmooth + key: walls + base: cobblebrick + +- type: entity + parent: WallCobblebrick + id: WallBasaltCobblebrick + name: basalt brick wall + components: + - type: Sprite + sprite: Structures/Walls/cobblebrick_basalt.rsi + - type: Icon + sprite: Structures/Walls/cobblebrick_basalt.rsi + - type: IconSmooth + key: walls + base: cobblebrick + +- type: entity + parent: WallCobblebrick + id: WallSnowCobblebrick + name: snow brick wall + description: A cold, not-so-impenetrable wall. + components: + - type: Sprite + sprite: Structures/Walls/cobblebrick_snow.rsi + - type: Icon + sprite: Structures/Walls/cobblebrick_snow.rsi + - type: IconSmooth + key: walls + base: cobblebrick + +- type: entity + parent: WallCobblebrick + id: WallAsteroidCobblebrick + name: asteroid stone brick wall + components: + - type: Sprite + sprite: Structures/Walls/cobblebrick_asteroid.rsi + - type: Icon + sprite: Structures/Walls/cobblebrick_asteroid.rsi + - type: IconSmooth + key: walls + base: cobblebrick + +- type: entity + parent: WallCobblebrick + id: WallSandCobblebrick + name: sandstone brick wall + components: + - type: Sprite + sprite: Structures/Walls/cobblebrick_sand.rsi + - type: Icon + sprite: Structures/Walls/cobblebrick_sand.rsi + - type: IconSmooth + key: walls + base: cobblebrick + +- type: entity + parent: WallCobblebrick + id: WallChromiteCobblebrick + name: chromite brick wall + components: + - type: Sprite + sprite: Structures/Walls/cobblebrick_chromite.rsi + - type: Icon + sprite: Structures/Walls/cobblebrick_chromite.rsi + - type: IconSmooth + key: walls + base: cobblebrick + +- type: entity + parent: WallCobblebrick + id: WallAndesiteCobblebrick + name: andesite brick wall + components: + - type: Sprite + sprite: Structures/Walls/cobblebrick_andesite.rsi + - type: Icon + sprite: Structures/Walls/cobblebrick_andesite.rsi + - type: IconSmooth + key: walls + base: cobblebrick diff --git a/Resources/Prototypes/Reagents/Materials/materials.yml b/Resources/Prototypes/Reagents/Materials/materials.yml index 4c94798dbf3..e9a0cad37df 100644 --- a/Resources/Prototypes/Reagents/Materials/materials.yml +++ b/Resources/Prototypes/Reagents/Materials/materials.yml @@ -98,4 +98,4 @@ unit: materials-unit-piece icon: { sprite: Objects/Materials/materials.rsi, state: bones } color: "#896f5e" - price: 0 + price: 0 \ No newline at end of file diff --git a/Resources/Prototypes/Recipes/Construction/structures.yml b/Resources/Prototypes/Recipes/Construction/structures.yml index 3539cc20656..d1b711ec0a7 100644 --- a/Resources/Prototypes/Recipes/Construction/structures.yml +++ b/Resources/Prototypes/Recipes/Construction/structures.yml @@ -1078,4 +1078,4 @@ sprite: Structures/Doors/secret_door.rsi state: closed conditions: - - !type:TileNotBlocked + - !type:TileNotBlocked \ No newline at end of file diff --git a/Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick0.png b/Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick0.png new file mode 100644 index 0000000000000000000000000000000000000000..d829c8fb0fdc54382448992339c3de827986f249 GIT binary patch literal 1237 zcmV;`1SPx(k4Z#9RCt`-Tit5gNEH5BR+42b6{B1^Cb|d>hTIfN-k>i~*yq@X+2<(q1@;Y= zg}qq_EqmdR1PU>xlCiAuh4;cf)3H2bw?5P8tUm}zeC!P8)0y+17Z8Hi7Z>%Abk?XK8AceZIS6o!vSCrt(n`?8v8O2>_Tc7U(C5_w!pP zfI!MWOeR+OTq(>QG7iKL0IZciOH->Q06@K5>g(Wo&yPY30c7f=SR961@=7T!bG_#n zh#=spD7JpLDHewzDy7if$b2Xd0584#6(-KoR4Zmf+KZ9)Vy!e;OWKRsXN#}^0O%)) z)ybv37`Nm5o!1{H6FhqGiDC#aQ7MHu47Kw8B(a)&r4;)taRk)MC88i$D>qxe=DP1E z;{;8RL+pkjrWUz*?~7T*K2ID0W{f9iM}un91qd=f<^irj$8&>i0i+nk^{s|R11FgWGzS@n!rb{LZ;%2u0XBsw@#%)4b(|&T z=>r}Juqo5+bk+oPI!sC%#9>y-~68B=UIj*2*gAJuVL`e{Jvf;@vtF53fKftse5RC zZ^|XXTNEH=UGsZi^L*c66F{?j;M;VECcFO!u&=zA;007qceWes`$M;qe zPOcx|+UYSNwIATk37WpZL@}#&dImpZ;qh2_xdLe~)`O9>7jKz7^$Mk!d=p*>AV+v} zb!nXr^^@du=K?oZmw5N~4FFh`A7q*6xd5Ahvaa!U6aR0=_dCN-@(WTEq1MY$+7^$3 zK-UT8hDdWwj(iGTx8FZ}Wa%KXA!4q?0NX1wqkISec$Fl29M6G>6&Vv|Tiv!`K}!Ge z*WX^w6Gwo#Cul=i*V_DTY50#q906u8Ar8Z>HMwF|A??K|>)OkbBp}EK*!BcnnWZn~ z0U;J}=>G+1dAj+U4~QVZwI^82Dva_WZpZh|9Rx1KTme^sL?jH1KH?zDFv^EIByu3a z0uI5fD2b?(bAl$C_xpSH4~~U63vlfhe9!*DF%U(-d6qfoEAd>J=yatJGft9 z%DHHrfX#q(b)Dzh%n$7sm~t*!FNXN{<9#FH00000NkvXXu0mjf%}Yel literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick1.png b/Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick1.png new file mode 100644 index 0000000000000000000000000000000000000000..629682fae7730cfd91764c554ab8e99e1ba4064d GIT binary patch literal 941 zcmV;e15*5nP)Px&XGugsRCt{2Tfu7EKoET?wPc$}V3d<%qC;pf`~T|CApflXA62@Wa&wf_hokUW<5TEFy38U{NY@GKcAm)u7At9 zSO>0sA5T$)GuN#=r;fj$&sp~u7ht(s<=c_tl=v`?Yk4l@1<0~|y9|Qb^XmAv5EtOw z^YZuU%S#^acCS}Dw~229aRCOF1pr90EFTnYiQ9*7i#P1Qpb0dX;bvPLTod0G;sUs* z1GuLH0Ivy;w#3!(T!>GByV=9ek{q~*x88~1^041dV6>I@+fBn|+ImDnP2Tc9R zRwTq}x|Ow?cuBB*z<5*7$7!0s)ZtKzv%jtjN`6xt)l$!mA@IH8G`f|ewhC`;Sw{=U2< zv?M`by<|;WyVolXvWb@hTY$$xP5u-`wdXhS#|B$~^BsmJjAJab3`5JR{JM*HX|M&L z&{i?*_tyjL_ZxX>uuDM3 zzOM`8*a#O0bUvW-0i6#x#!WgO(D{JQ2N>%EL>D7~^@7T^@5Ao(@E8O*S0cte9pG;E zu+=6|}-b=hirU-S}Ts2ZOm2@{`7$*QdC62XX zY@7hTv`!e418A`7ZvoUM3d#q%yUL6Z;3oMN#zSWSw$TWgG%0%xv^{BY=v|2XsE5^8o-lAJF-L&IfF8NFVSQXvr%0?@oeI P00000NkvXXu0mjfIKRDj literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick2.png b/Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick2.png new file mode 100644 index 0000000000000000000000000000000000000000..d829c8fb0fdc54382448992339c3de827986f249 GIT binary patch literal 1237 zcmV;`1SPx(k4Z#9RCt`-Tit5gNEH5BR+42b6{B1^Cb|d>hTIfN-k>i~*yq@X+2<(q1@;Y= zg}qq_EqmdR1PU>xlCiAuh4;cf)3H2bw?5P8tUm}zeC!P8)0y+17Z8Hi7Z>%Abk?XK8AceZIS6o!vSCrt(n`?8v8O2>_Tc7U(C5_w!pP zfI!MWOeR+OTq(>QG7iKL0IZciOH->Q06@K5>g(Wo&yPY30c7f=SR961@=7T!bG_#n zh#=spD7JpLDHewzDy7if$b2Xd0584#6(-KoR4Zmf+KZ9)Vy!e;OWKRsXN#}^0O%)) z)ybv37`Nm5o!1{H6FhqGiDC#aQ7MHu47Kw8B(a)&r4;)taRk)MC88i$D>qxe=DP1E z;{;8RL+pkjrWUz*?~7T*K2ID0W{f9iM}un91qd=f<^irj$8&>i0i+nk^{s|R11FgWGzS@n!rb{LZ;%2u0XBsw@#%)4b(|&T z=>r}Juqo5+bk+oPI!sC%#9>y-~68B=UIj*2*gAJuVL`e{Jvf;@vtF53fKftse5RC zZ^|XXTNEH=UGsZi^L*c66F{?j;M;VECcFO!u&=zA;007qceWes`$M;qe zPOcx|+UYSNwIATk37WpZL@}#&dImpZ;qh2_xdLe~)`O9>7jKz7^$Mk!d=p*>AV+v} zb!nXr^^@du=K?oZmw5N~4FFh`A7q*6xd5Ahvaa!U6aR0=_dCN-@(WTEq1MY$+7^$3 zK-UT8hDdWwj(iGTx8FZ}Wa%KXA!4q?0NX1wqkISec$Fl29M6G>6&Vv|Tiv!`K}!Ge z*WX^w6Gwo#Cul=i*V_DTY50#q906u8Ar8Z>HMwF|A??K|>)OkbBp}EK*!BcnnWZn~ z0U;J}=>G+1dAj+U4~QVZwI^82Dva_WZpZh|9Rx1KTme^sL?jH1KH?zDFv^EIByu3a z0uI5fD2b?(bAl$C_xpSH4~~U63vlfhe9!*DF%U(-d6qfoEAd>J=yatJGft9 z%DHHrfX#q(b)Dzh%n$7sm~t*!FNXN{<9#FH00000NkvXXu0mjf%}Yel literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick3.png b/Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick3.png new file mode 100644 index 0000000000000000000000000000000000000000..629682fae7730cfd91764c554ab8e99e1ba4064d GIT binary patch literal 941 zcmV;e15*5nP)Px&XGugsRCt{2Tfu7EKoET?wPc$}V3d<%qC;pf`~T|CApflXA62@Wa&wf_hokUW<5TEFy38U{NY@GKcAm)u7At9 zSO>0sA5T$)GuN#=r;fj$&sp~u7ht(s<=c_tl=v`?Yk4l@1<0~|y9|Qb^XmAv5EtOw z^YZuU%S#^acCS}Dw~229aRCOF1pr90EFTnYiQ9*7i#P1Qpb0dX;bvPLTod0G;sUs* z1GuLH0Ivy;w#3!(T!>GByV=9ek{q~*x88~1^041dV6>I@+fBn|+ImDnP2Tc9R zRwTq}x|Ow?cuBB*z<5*7$7!0s)ZtKzv%jtjN`6xt)l$!mA@IH8G`f|ewhC`;Sw{=U2< zv?M`by<|;WyVolXvWb@hTY$$xP5u-`wdXhS#|B$~^BsmJjAJab3`5JR{JM*HX|M&L z&{i?*_tyjL_ZxX>uuDM3 zzOM`8*a#O0bUvW-0i6#x#!WgO(D{JQ2N>%EL>D7~^@7T^@5Ao(@E8O*S0cte9pG;E zu+=6|}-b=hirU-S}Ts2ZOm2@{`7$*QdC62XX zY@7hTv`!e418A`7ZvoUM3d#q%yUL6Z;3oMN#zSWSw$TWgG%0%xv^{BY=v|2XsE5^8o-lAJF-L&IfF8NFVSQXvr%0?@oeI P00000NkvXXu0mjfIKRDj literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick4.png b/Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick4.png new file mode 100644 index 0000000000000000000000000000000000000000..5dc8dab560e80297d4af4c3c3c84f7bcc1a83ecf GIT binary patch literal 965 zcmV;$13LVPP)Px&e@R3^RCt{2o6l<7KoG{ilzR1tNMMvx60Ac=2;`gxDfBt|Fnx|f?|p@w3!$M0 znKhzzJB|D#A*Kn^Z5@#DJ1|P|5E}$Ly+tA+-O@L zjeeT}s?`eKXoONq%!{JFA0Gz*fXMTVw&$DxFL@3C2sgj_p>a-tlQ@Pq8Ua9K1RM%y zd;oQpIv)su(a0=(oo78}P0G@TyMbc*-WN26^!F$GTI7>nhyA%e=h zC@?=z+fIxC02oJ6r|mRJ8dJg)&Iq6~!~sJbFvI}>hB#n|1BN(Y!y)4U)?OL_zI^`l z8hIY>e*NBRzfRBV;af_Hrz}G#1VZ1(&*>Bovl;stI2a!RG;iC>n94%RoxgV981(_y z>3KbGX&$S;J`oCmlQ=fn^xha1fPxef0a&N7sPolo1)w|Z?VDbl;JhfD8S-s<5nvoe z7-KyGDAIEUqf>x_6q@(I+9{GhpdiO3j0$i+eSG8e+D_3mj86f|+jlW93WUCIy6L?b z;sBFhHpBr#9I%}s4jAHqAr5dh4q)%aFDH{%&gcL8e85eb;w8^Jm$feY!)(TV1Qu)o z7RzP*zHNDIUy zpU~NDVQd+s&d`xoyK_3bE!YCY$3eZ;lf$ETvUS;Q!=3`WPHLXB49^`tPiOB7BYOe0 zkWqzl0$q077!ja-mIti&1A!2jYwWf$<^;XcfpvWW=kwhE3s|oZFX&+7XXj#F0HB#h-{+cx^(jzFi9m=qouZAB z&d$ZU0J<8$L)Hia4hTSXgzCQFG)dm<9Cz8dk)(A2XlRe4sLmaz_X(YSUz~7)rIK1# zum9D~!TJbj*AA$Em{8H#_r|Cr1Kto$4 n^!;@QeP3(mVtqSo`*{5?z!om`LE8!Q00000NkvXXu0mjf$%(jJ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick5.png b/Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick5.png new file mode 100644 index 0000000000000000000000000000000000000000..52860683ac4fc85afa50840812ca18846271035b GIT binary patch literal 1065 zcmV+^1lIeBP)Px&<4Ht8RCt`_TT71GKoETs1^+a*gv@F{VlmQ)3vh+(Bjp@9OwJK0`&?lzfFfmq zL|Bc5TAm+0RT*&9-)c?-@gC2yJr3mSN(bhWMzrK^WgS+`dVI=0DyFz13-n4 z$#}#%zc>K^kZm^lb+O$7*pWbY8`v2S0HN!$&i#?~+b%>_mdN(TzN9GtAlTn^+Yl#U z7{~f`vEAY&O)-cfxV;`$N?D&@+y#8c(LPRb!0q+mI}RQUaws0CqF|k0oB#rmU@m>~ zdow7`<_p$&#a)1mOxL+y@++m_8+U)D6jqkz7boD@9bF~~mis?}LwNuf#0dbZ2Aasr za<>|cJRrIsvARJg2rvyKr0X2M+!6=(_r0UN^_N(Fqp- zjt9d-<5UQ7K%9W-)8pBn;Y^0a3E*D#>Z?3Ov4J-tZ@f6ThQB@j{3MH*z*7iYE;V7vnmSxFt1Cal|+bY`D5=T z!5ReV?wSVXWeMML{xO?DTs0(1<5mH5g=-$_cFOx(YOgX?GW_jxxw4Mh5(E5KD&a$s=2@^ z{a+eZ_5*-sy}t|o4_GLNoAmude)xj16h=g--Q@g^_TK^>w z)#d^D{sQq1kxP0CZmLD*lAeN_YLWt)`v>ad)QiADf_R@`Q~yAHoEzc<0L}da=6h}u z#9g4Nf1o~obKT-i{R6i93&aU%>K{0EZjcM&F@Tmf?Hrr^18tle6kh?ro4;peiD18V z4xl2e-0ZnQGM+SpcXw{EE|QpPx&e@R3^RCt{2o6l<7KoG{ilzR1tNMMvx60Ac=2;`gxDfBt|Fnx|f?|p@w3!$M0 znKhzzJB|D#A*Kn^Z5@#DJ1|P|5E}$Ly+tA+-O@L zjeeT}s?`eKXoONq%!{JFA0Gz*fXMTVw&$DxFL@3C2sgj_p>a-tlQ@Pq8Ua9K1RM%y zd;oQpIv)su(a0=(oo78}P0G@TyMbc*-WN26^!F$GTI7>nhyA%e=h zC@?=z+fIxC02oJ6r|mRJ8dJg)&Iq6~!~sJbFvI}>hB#n|1BN(Y!y)4U)?OL_zI^`l z8hIY>e*NBRzfRBV;af_Hrz}G#1VZ1(&*>Bovl;stI2a!RG;iC>n94%RoxgV981(_y z>3KbGX&$S;J`oCmlQ=fn^xha1fPxef0a&N7sPolo1)w|Z?VDbl;JhfD8S-s<5nvoe z7-KyGDAIEUqf>x_6q@(I+9{GhpdiO3j0$i+eSG8e+D_3mj86f|+jlW93WUCIy6L?b z;sBFhHpBr#9I%}s4jAHqAr5dh4q)%aFDH{%&gcL8e85eb;w8^Jm$feY!)(TV1Qu)o z7RzP*zHNDIUy zpU~NDVQd+s&d`xoyK_3bE!YCY$3eZ;lf$ETvUS;Q!=3`WPHLXB49^`tPiOB7BYOe0 zkWqzl0$q077!ja-mIti&1A!2jYwWf$<^;XcfpvWW=kwhE3s|oZFX&+7XXj#F0HB#h-{+cx^(jzFi9m=qouZAB z&d$ZU0J<8$L)Hia4hTSXgzCQFG)dm<9Cz8dk)(A2XlRe4sLmaz_X(YSUz~7)rIK1# zum9D~!TJbj*AA$Em{8H#_r|Cr1Kto$4 n^!;@QeP3(mVtqSo`*{5?z!om`LE8!Q00000NkvXXu0mjf$%(jJ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick7.png b/Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick7.png new file mode 100644 index 0000000000000000000000000000000000000000..057ca4de0019c4f2e858f716e33515e65afa41a7 GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|c6+)whE&XX zd+Q+Q;Q*ck0n4SujNIE_%Cz>~;CXns*=?6}%ZHUo}(+SSkg`Tcoy&NKPh59=2& zL^%XA=q}J~5W67az@5RhfYpTc0@Ey}492ssrp^2K{m-=9`3{U*8kXT!=!;ug>X(`Q kX?xXMpqv*PnD-`v*j{9pf?yiUHx3vIVCg!0Me#e`Tzg` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick.rsi/full.png b/Resources/Textures/Structures/Walls/cobblebrick.rsi/full.png new file mode 100644 index 0000000000000000000000000000000000000000..ee90ee5784f92cbe1c743d257ed1d74bd00a6589 GIT binary patch literal 815 zcmV+~1JL}5P)Px%=}AOER9J<@SIcVSFcdv0i5vw>VBA$(nnjsXn05dE1G*k44P7L(fq@!>W$aj4 zbQbYdC0WX&?aZ7_$i0&8`&b&G$B*mlcl<*vR;v*JjLG=V`8>M#t*US?<#+4f7pv81 zY#UD|lfmXvDF8sT*&q|*TlC#_i{9q@m===p*P;kU(P)h(qB})@nde9*6Li}xfW8ET z*P_6=l)+4p=akOSnq%~@y%PlE0HumHa>ks^t=2{tT62ot#u>0{l16JI^o`rHS^w*= zIaVKZ;9N?xF$9@%$dsEyC|e|#DR<ikgtmZ>qyU$?rwgC zs%{7RQYp-)Q`Z3-t=1-r$K?w$A%ZDvwMMB_P~U2e$K^}ViAHNv@-zQX8jn_MvoTgb z9;tUo)>=I_W6TiKAOmkzWfqkIqjqiW$Vl!-Th*;GPQhhDgn0mfGsDzWz7dfmP+f<0 z-!n4hMkZ74I6-UdDYLPc2Y8;F0|+8X@bL8P$f!y0Z*QQwZeS!60vSGtYT$q`r25H} zV_keSr5)M*?TxeN;psVO{Gw;Q7!i$uUD}(?CYq*FDbo-3=#fE@Bmj1qunkfWRo#L! z<}{+?01)Q^(ot6YlK42Jr+|*)0e=j4taoKqm@+|L6csID{JPMNryUzsuVu`UYdA_APi1Dr9Zrd8cSrW~s4 zOk~t_WIV?GpW*=;LmMFjAsOK!&(Uff<$LEckG`-f*jpj2wNuHJv%-unPBtSkL* zB6UBc_hozU12z%)@~`OaHBlb8%=75Ogy4_Sse1cO;5a~@U*@?Xju~Uo=hj#B6g>cp tfbiq=FFi;Nel3?+tX88D3I5mf{14mSSqqdGg53ZB002ovPDHLkV1n>tf*b$< literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick.rsi/meta.json b/Resources/Textures/Structures/Walls/cobblebrick.rsi/meta.json new file mode 100644 index 00000000000..c5029fedeba --- /dev/null +++ b/Resources/Textures/Structures/Walls/cobblebrick.rsi/meta.json @@ -0,0 +1,47 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Created by TheShuEd for Space Station 14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "full" + }, + { + "name": "cobblebrick0", + "directions": 4 + }, + { + "name": "cobblebrick1", + "directions": 4 + }, + { + "name": "cobblebrick2", + "directions": 4 + }, + { + "name": "cobblebrick3", + "directions": 4 + }, + { + "name": "cobblebrick4", + "directions": 4 + }, + { + "name": "cobblebrick5", + "directions": 4 + }, + { + "name": "cobblebrick6", + "directions": 4 + }, + { + "name": "cobblebrick7", + "directions": 4 + } + ] + } + \ No newline at end of file diff --git a/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick0.png b/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick0.png new file mode 100644 index 0000000000000000000000000000000000000000..afbb79696634b9d0c58437dc15f43c87557d8181 GIT binary patch literal 1241 zcmV;~1Sb25P)Px(lSxEDRCt`-TRm?gNf3QLEs|whVg_a;3t^EA0saq6c*!Lf`a^Q&U$xmvx3}RX zmt2Vd!xEST8I6!;V1~P0%MyVvV5{8>J&aAYZ|Zmw0@L7Dy{@XRFAg9C7dN-hyL|7< zr;i7meLrx%Yzr4Rx6hqUr*J(>=WyJ{yX;*#0lM&hb5qD@8UX;7%O|u>Th{lloB#p| ze?J--*S~*zEL`J23<1DOc*kuRH30zP*<6`J(P!QYF$9pRlVFZpUt7=81^i|MSvoKL z%r5we{U0nKOXv9h?NR-05{%wEJ~=A<%q|c?fa5llU?zB;56|i#XDGqSl`i78a z?KXb<{j;@wMQA`#96%>d{vb(WJWM74fUqCp`tpjsw+Ibz+y<7*r!^9EMAJy~2P=&@ zYqu2{9I$d}0Qlq2zn-_LW!Mjuv&zy1?nfgWpB$l9JH&WAX6N%)*$-xgtRd z*d{>rd*CJA&DZuNr^D86fwKO+t$x03unC~vJ@C@qq0a9A0c;=${SJg4CKJ^Z9o!8znxW(uqy|Ejr=v72 z?l&7MPtYes@?&!3Q^?$Y{pDwt3?d66`bZ40J~E@58)+T~B1U9%=w)?N%S|^o8xTi; zJ|}3x!(^h=-v$Zd2+(T@`7ya9iQ#!Z9wrkjLy~|X0!(v)s~co}PSBR%1QAZK?Dqm? zy+#g1Xh6}NV3NcL`ymE*gTfgEE<|VmP@EtU2{elYtfI@XAF3;n0}&cf20f!BqHOsB zF&dyFZ{M$(KiC!GG@xj{;5G9HyFe5H-5|jIXtXtDE}K7iE5r~$C)*8z()j{?or}tS zz?V-S52(c+&*q3{b5${>`GWjIU+1FobeK@p&*%RI0fv)$MEaF$00000NkvXXu0mjf DXh%CC literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick1.png b/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick1.png new file mode 100644 index 0000000000000000000000000000000000000000..ac003cb33f26907a49c20ad70e0d77c156da8fef GIT binary patch literal 973 zcmV;;12X)HP)Px&he}yZP!xvWR7FC7#796v77+^>%+jGV9=mkuQZ;R*Z22#p`UkpI z>c`lnOGlVHbiqSdq96+i8lX*3B!+aL$MHw(OMEWAH7A)v@n29&KuIR*%Xy(8P3Fs)ww9o0Yq>--}iY^v@l>Zo`Hi_%l-4dF48$@ zF$93F?ihKLHQ60TkLs z({ShR-q#6{t_mqhkj67DaRpWqa(SVy8nyvvXJ?Vx^3UJceMNd2 zunjnR^%4iIR^+UZ>I7huFi%G#6iWru!}~Aq@=PaN|!wyNyPyA#;L(UC!`Jm zTJ`Zxbh@S)YH-jAsRr~1{ZP^iCPm$lJ_NQ|=W`~G7F8gS)d5)@kktWc93-m)vN|BE z1GKFJly`_69iQB^+if)VYd9T^aMWsIq-{5>aX7?9p(IgdwqKBf% zYlzjeq#jE<1L#t@m@j=*B@HFn4H?RNgo4nrd0H#R+8N;eEkGJKRkaxcbh6&x0?@ny zxXlN$yUMhPfM9Xt?+vznJqEJ7O0+PbQmtXVzK$%HciCg0%@By2AQ?>qUDNap30Y`k vfS0TeKvoB2bpVjn0a+c8)dBz6WgYMj58frbXZC%V00000NkvXXu0mjf&*jE) literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick2.png b/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick2.png new file mode 100644 index 0000000000000000000000000000000000000000..afbb79696634b9d0c58437dc15f43c87557d8181 GIT binary patch literal 1241 zcmV;~1Sb25P)Px(lSxEDRCt`-TRm?gNf3QLEs|whVg_a;3t^EA0saq6c*!Lf`a^Q&U$xmvx3}RX zmt2Vd!xEST8I6!;V1~P0%MyVvV5{8>J&aAYZ|Zmw0@L7Dy{@XRFAg9C7dN-hyL|7< zr;i7meLrx%Yzr4Rx6hqUr*J(>=WyJ{yX;*#0lM&hb5qD@8UX;7%O|u>Th{lloB#p| ze?J--*S~*zEL`J23<1DOc*kuRH30zP*<6`J(P!QYF$9pRlVFZpUt7=81^i|MSvoKL z%r5we{U0nKOXv9h?NR-05{%wEJ~=A<%q|c?fa5llU?zB;56|i#XDGqSl`i78a z?KXb<{j;@wMQA`#96%>d{vb(WJWM74fUqCp`tpjsw+Ibz+y<7*r!^9EMAJy~2P=&@ zYqu2{9I$d}0Qlq2zn-_LW!Mjuv&zy1?nfgWpB$l9JH&WAX6N%)*$-xgtRd z*d{>rd*CJA&DZuNr^D86fwKO+t$x03unC~vJ@C@qq0a9A0c;=${SJg4CKJ^Z9o!8znxW(uqy|Ejr=v72 z?l&7MPtYes@?&!3Q^?$Y{pDwt3?d66`bZ40J~E@58)+T~B1U9%=w)?N%S|^o8xTi; zJ|}3x!(^h=-v$Zd2+(T@`7ya9iQ#!Z9wrkjLy~|X0!(v)s~co}PSBR%1QAZK?Dqm? zy+#g1Xh6}NV3NcL`ymE*gTfgEE<|VmP@EtU2{elYtfI@XAF3;n0}&cf20f!BqHOsB zF&dyFZ{M$(KiC!GG@xj{;5G9HyFe5H-5|jIXtXtDE}K7iE5r~$C)*8z()j{?or}tS zz?V-S52(c+&*q3{b5${>`GWjIU+1FobeK@p&*%RI0fv)$MEaF$00000NkvXXu0mjf DXh%CC literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick3.png b/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick3.png new file mode 100644 index 0000000000000000000000000000000000000000..ac003cb33f26907a49c20ad70e0d77c156da8fef GIT binary patch literal 973 zcmV;;12X)HP)Px&he}yZP!xvWR7FC7#796v77+^>%+jGV9=mkuQZ;R*Z22#p`UkpI z>c`lnOGlVHbiqSdq96+i8lX*3B!+aL$MHw(OMEWAH7A)v@n29&KuIR*%Xy(8P3Fs)ww9o0Yq>--}iY^v@l>Zo`Hi_%l-4dF48$@ zF$93F?ihKLHQ60TkLs z({ShR-q#6{t_mqhkj67DaRpWqa(SVy8nyvvXJ?Vx^3UJceMNd2 zunjnR^%4iIR^+UZ>I7huFi%G#6iWru!}~Aq@=PaN|!wyNyPyA#;L(UC!`Jm zTJ`Zxbh@S)YH-jAsRr~1{ZP^iCPm$lJ_NQ|=W`~G7F8gS)d5)@kktWc93-m)vN|BE z1GKFJly`_69iQB^+if)VYd9T^aMWsIq-{5>aX7?9p(IgdwqKBf% zYlzjeq#jE<1L#t@m@j=*B@HFn4H?RNgo4nrd0H#R+8N;eEkGJKRkaxcbh6&x0?@ny zxXlN$yUMhPfM9Xt?+vznJqEJ7O0+PbQmtXVzK$%HciCg0%@By2AQ?>qUDNap30Y`k vfS0TeKvoB2bpVjn0a+c8)dBz6WgYMj58frbXZC%V00000NkvXXu0mjf&*jE) literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick4.png b/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick4.png new file mode 100644 index 0000000000000000000000000000000000000000..45b294e9f25cc2a492d3624664adf567890326c7 GIT binary patch literal 999 zcmVPx&p-DtRRCt{2o4;?`KorNnsfrW<5;g%TLPRWNFiVHdVeHZ+W7!C&CG=X>wo-92`|%*pB5 zL#x$7eXokk!2pNtHY~dW0I1dK=$-e_*l$GFF8X}{z`HkZaWxv@`1PwDmG+-0e*diy z_%i^&bUFcm1%q^tx?0;Z&H$5Z4?t)Hy4yh5c>p+QHnq0*Ts{- z0eK#f=K=rOW*(rlmIi?DKYl(OG@JPR^~*}Vd(@4FZ{W{xIT)Z+E}~G_#c(*pw@)9H zzk>?eM*#V4;Lj58T6m{d-|ei?8U(vX-DtihKNjykQ7RW<*;SoQZ;Vz0P?ADM0KzRS z>O3VmX=!iPWD*43v6~p+xXHu-bjK&x-qMuEjaC<+B!&DQ2!kTU14?pCLaPCK=e?z% z7Y~Z2q1^@6$<*Aji$Y;ncheh@=K(rDEYAb-JYY3>9+2k&c^+VF9-zDyKRG>nPwyLx7(XLTn+}QuS?UpP&U9}yB+;c z)10`sFCx=9P@V-WyRtORiF^Apof~b_Aa#b0wBntU>0BrqpjN9#b3Fw-dL%7P=SDdO z^v-)LuZQ~r$$JAbJu9@V1;j!|5!w?-)49=NfW@=Ckm+;+%dWs3yQw-i+Ja!*pC9|2 z3oQnqeZYfeGx`&+%XCh(?FS?U!*z8olviTEeqSi924BADJnhw>?uw19VYNOG))%O} zU-kC_>=h!q%ibOfy8)6aOR|F906=)4B94Ts(P&}Tkm)M08-R||;=#1zIJoHdrMfCc z)Cr2)=$kxOfqevsHGuK!>*%Vm8$ebAxXl_tzyJeK9iiyY9miQ(IVR~J-mA6GZU7qE zjr~TncOYITWcsEU5d_JfX^TDX-!feV_7M=T9hh8usP9#mIw{jPh1~%0!xH+zL=rOn zv9KFJJXj&9prTYRCLXtut_r&WXlRRs6=ZiP6n3S$D(nUr4u^@_?9boS_saBj_y;Vg VDY^L@TQ2|r002ovPDHLkV1gwE&Da0{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick5.png b/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick5.png new file mode 100644 index 0000000000000000000000000000000000000000..72c3f5d722249ad4d0d370c008b2687cc8ab681b GIT binary patch literal 1075 zcmV-31kC%1P)Px&?MXyIRCt`_TR(5wP!Rv6DpHh0;$M-FMK&|Q(xEdRyL9QA zrAtTi9l{VcEDH$-g9IoNLpr$kcs39>aP~bpKM4iD7kJ#ycjvoz_f8;;PoKX$0zj#B zidi^C+qO}umH_~7-ZbF$U06*^jol6g0DzmTYm7V(A3wZ5IcEJ=NBw#REEg-3N~dVl zYiev3&H(^HFadxVAx_U>U0<9409dad)ceW(6hK4*-EANe9sn*|E!MSPvwquwST0t$ z8x8>gvv7)8IK}zJSuSgf6VSG8^?q_6316w!(5TnokNwQo7dL@QwXAHM{6M2#L#0|q zx6@JoNB&^sd93S;6F?vmbk!%j*PWu{{(>X?P|m^MUlK!eo`jPL=vfb`PGX%66z1B@U5*a*1qIx84K0NM3r ztEFE0xIWJfBYXg`-x=|9L#-^T+1% z$AVP@vT#yagN=a8Rtw*M{^0t$+`vKr2~Q4f;&i3&5s$;%;{X7v{%-acXJ{}70>56Jfyh5mh0Ht0t$m86gxCX4( t52{>Fi0>f|VzEHs;s5}tHNq@ofxl6)F=Io+$gThY002ovPDHLkV1ifU>Bay6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick6.png b/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick6.png new file mode 100644 index 0000000000000000000000000000000000000000..45b294e9f25cc2a492d3624664adf567890326c7 GIT binary patch literal 999 zcmVPx&p-DtRRCt{2o4;?`KorNnsfrW<5;g%TLPRWNFiVHdVeHZ+W7!C&CG=X>wo-92`|%*pB5 zL#x$7eXokk!2pNtHY~dW0I1dK=$-e_*l$GFF8X}{z`HkZaWxv@`1PwDmG+-0e*diy z_%i^&bUFcm1%q^tx?0;Z&H$5Z4?t)Hy4yh5c>p+QHnq0*Ts{- z0eK#f=K=rOW*(rlmIi?DKYl(OG@JPR^~*}Vd(@4FZ{W{xIT)Z+E}~G_#c(*pw@)9H zzk>?eM*#V4;Lj58T6m{d-|ei?8U(vX-DtihKNjykQ7RW<*;SoQZ;Vz0P?ADM0KzRS z>O3VmX=!iPWD*43v6~p+xXHu-bjK&x-qMuEjaC<+B!&DQ2!kTU14?pCLaPCK=e?z% z7Y~Z2q1^@6$<*Aji$Y;ncheh@=K(rDEYAb-JYY3>9+2k&c^+VF9-zDyKRG>nPwyLx7(XLTn+}QuS?UpP&U9}yB+;c z)10`sFCx=9P@V-WyRtORiF^Apof~b_Aa#b0wBntU>0BrqpjN9#b3Fw-dL%7P=SDdO z^v-)LuZQ~r$$JAbJu9@V1;j!|5!w?-)49=NfW@=Ckm+;+%dWs3yQw-i+Ja!*pC9|2 z3oQnqeZYfeGx`&+%XCh(?FS?U!*z8olviTEeqSi924BADJnhw>?uw19VYNOG))%O} zU-kC_>=h!q%ibOfy8)6aOR|F906=)4B94Ts(P&}Tkm)M08-R||;=#1zIJoHdrMfCc z)Cr2)=$kxOfqevsHGuK!>*%Vm8$ebAxXl_tzyJeK9iiyY9miQ(IVR~J-mA6GZU7qE zjr~TncOYITWcsEU5d_JfX^TDX-!feV_7M=T9hh8usP9#mIw{jPh1~%0!xH+zL=rOn zv9KFJJXj&9prTYRCLXtut_r&WXlRRs6=ZiP6n3S$D(nUr4u^@_?9boS_saBj_y;Vg VDY^L@TQ2|r002ovPDHLkV1gwE&Da0{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick7.png b/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick7.png new file mode 100644 index 0000000000000000000000000000000000000000..16827d09ac3117491e21e0ddbd16a94dbf0b1efc GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|c6+)whE&XX zdut=_p#UC+!1jk3mkhLcc~4JNjIrsw^L3h^y7{&L#}n?&f1hvs-)jExw0|2V|FLr| zU^QXAz%+{~gVC39OT#jTD2HGM-36KrVi(rry_Bp!pTF}jn}`E<1|EfYq!;FYHvU(C i@U8g*B!kh^pJh!q;i+>=zZ(qn27{-opUXO@geCwMH&+(` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/full.png b/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/full.png new file mode 100644 index 0000000000000000000000000000000000000000..2ad3175d89cdd4742fc5e7f705372992a1b8c62f GIT binary patch literal 828 zcmV-C1H=4@P)Px%_DMuRR9J<@SIth_KoI_dh=h_z`C%=|4sba%|?+>1St42j%zb{3!F`- zio|NQ!XbAq;~0bC$axa<5gn&%%|8BR94it4o(RZP0(dIJVA$6_E{iR^;}ObY<6QF+ zKgU7k+~Dr^UK!2c+}7=NoNM;=n>eVPBlV#RLU<6uQ=8CfkzEK+vk!)SWqS^)1pe4} zHlPq5!bND=ucHV+^467BYpPJp8~Eo3U4{<7F2 zT!c;%Rk^E@ADElcjF!b#eOOmNvN!b%Cq(G>I!c(V6DW&nl)Al+swoGrEzgYXX0~~r zso<2HKlat%76CrPCIJd^GMQkVB)eKycCrcKX(VV3pE8a{9T*JzY6HT_WP)!$zH2sW z($611VVxva5H7){4jcloj8wlW<483n&n%b+IGIcU0P7?{xCouW&u24KG2B9QSOpy6 z;o*1fG09Z2azyGRC?F9D7oirAlF0K6gJEB5M2!GYuLIOSBa zAF{c8+|GZ-UALr09mw+x!8|~?2x~i9*9aYaDqgJvL?X{K)eq;hnf0UO^3|2*SsieZ zAokSJ=H~v`hfHN{NjMts1Atvu`kzYlQom_yybo|8GVOok=WA+p;A}d@GLEfL(KE3} z=_P*tCeR2F^RwynU7lkcls(Y!IDL-?DTjKTlHq?n&;J0FQ*2uXtLHiZ0000Px(L`g(JRCt`-TRm^9Fcdv~LPB5(!N3A*va#}e`rG<@y0SGZT^O)X9fX9GH?-H! zA*S@jevhl1r4c5z?(y~g&J&p6a5!A<`QGVtdUDw}aQU(?91e#|Q537|!!RI866@OO zbaL8zcLGe|!!W#AS4sf@=6Qw?!u$Ta6F?y0yRNgYpU-EU&u8!ZvLOKY6h283t0n-z zG)?+CtiAKMU_$_@ItiAh>D9WFQm?JOa}Rzw{|65khT%%RZGzFWIF47}xd$vXAW0I; z^SpY;vn@*vW^4j#K|7?eUEV*0RYG25p`WV@6AF3w&DQt{Q$H^ zq-pBK3pnM{0Py_$d`Z)ERV}Nk(#A?kiLUDq$1#E+!2A2Vb3X41XALk3&GCcr%TD2f1l-qkcsp_IBJgg_eb@$uohy)(SnfU2srYg(dhTV2SQrU}4j*h`=H zhBEvA{ciqw}oC&ZAM1fBn$JTZhm(vG45MUFA zEPN0ItHN@~1OX4}@Lp|gUtm!Y+7r%KpeTxO`}e?VfB(Wk3!Dj<=UM-?89ZBmf0`zI z%>?XDf-?aW{A~5_X+6(#gki|W6L@ulTmAcKn$UF}t60EGO%T}b-<#{4;LQtc_3wT4 z^L@jafGo>&`b!4SSMUCR!1)S%*Sj|hA|@WH9st1Fzn4;?X&NgD4_6QPZl;I8wI1Nj z2%5IQMBn!}HG_XK@OUr0T!AdhbYmpTvMZIRS|KO3H{pc<)OC&H z@dyA`;mfjQ-52oE7$E_hrnzZ`l3m~$2<@JZ(zJLOhB{9$Cq$NGa%5BLx`vbzFE1}n zGO#R&m?JU3^~g+BRr;NW9FsH4>b8~}%^9RcQ?pbg_VYHwo;!~YiSu0WC` z$nzXR2t9j1per$sqn9B`fDr+y_dTkrLen&> zGYGC=p#i{pfk_Mj|FR8^&2q6=7Pz!uDml8AaZBWPlIzkf1+a4*Px&NJ&INRCt{2TQSe7FcdxC3kmsXLU3@A)sfXje~iD)KjY%c=&B0?gjkG;$@d1| z?JFYS<5t?2a1w)XsMuqBd)i*VU>VEh@`qFYcszb_%6pu`Ca_p6P?jaaFl@c2i$5NZ ztmj)7;C{cWqY$FOODQ{fF02bsRh2r@`?mYK_@S^azOzy9JoCq_)5o;BYvY_#W0^BnBi&qJ|~_xL&WdsNKig1ltG1aSY&5DSGMG`*_&^I;+Qc6@+g&+u8x4Ve94YmN(v}+&gdFt55+Xnj^oX_W0?sBOg`WbKIsE~0}OsEHXsH7RR91007*qoM6N<$f*vfVI{*Lx literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick2.png b/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick2.png new file mode 100644 index 0000000000000000000000000000000000000000..be4cb50141bfd9aaa715480993b7ce3c83c5cd33 GIT binary patch literal 1162 zcmV;51aPx(L`g(JRCt`-TRm^9Fcdv~LPB5(!N3A*va#}e`rG<@y0SGZT^O)X9fX9GH?-H! zA*S@jevhl1r4c5z?(y~g&J&p6a5!A<`QGVtdUDw}aQU(?91e#|Q537|!!RI866@OO zbaL8zcLGe|!!W#AS4sf@=6Qw?!u$Ta6F?y0yRNgYpU-EU&u8!ZvLOKY6h283t0n-z zG)?+CtiAKMU_$_@ItiAh>D9WFQm?JOa}Rzw{|65khT%%RZGzFWIF47}xd$vXAW0I; z^SpY;vn@*vW^4j#K|7?eUEV*0RYG25p`WV@6AF3w&DQt{Q$H^ zq-pBK3pnM{0Py_$d`Z)ERV}Nk(#A?kiLUDq$1#E+!2A2Vb3X41XALk3&GCcr%TD2f1l-qkcsp_IBJgg_eb@$uohy)(SnfU2srYg(dhTV2SQrU}4j*h`=H zhBEvA{ciqw}oC&ZAM1fBn$JTZhm(vG45MUFA zEPN0ItHN@~1OX4}@Lp|gUtm!Y+7r%KpeTxO`}e?VfB(Wk3!Dj<=UM-?89ZBmf0`zI z%>?XDf-?aW{A~5_X+6(#gki|W6L@ulTmAcKn$UF}t60EGO%T}b-<#{4;LQtc_3wT4 z^L@jafGo>&`b!4SSMUCR!1)S%*Sj|hA|@WH9st1Fzn4;?X&NgD4_6QPZl;I8wI1Nj z2%5IQMBn!}HG_XK@OUr0T!AdhbYmpTvMZIRS|KO3H{pc<)OC&H z@dyA`;mfjQ-52oE7$E_hrnzZ`l3m~$2<@JZ(zJLOhB{9$Cq$NGa%5BLx`vbzFE1}n zGO#R&m?JU3^~g+BRr;NW9FsH4>b8~}%^9RcQ?pbg_VYHwo;!~YiSu0WC` z$nzXR2t9j1per$sqn9B`fDr+y_dTkrLen&> zGYGC=p#i{pfk_Mj|FR8^&2q6=7Pz!uDml8AaZBWPlIzkf1+a4*Px&NJ&INRCt{2TQSe7FcdxC3kmsXLU3@A)sfXje~iD)KjY%c=&B0?gjkG;$@d1| z?JFYS<5t?2a1w)XsMuqBd)i*VU>VEh@`qFYcszb_%6pu`Ca_p6P?jaaFl@c2i$5NZ ztmj)7;C{cWqY$FOODQ{fF02bsRh2r@`?mYK_@S^azOzy9JoCq_)5o;BYvY_#W0^BnBi&qJ|~_xL&WdsNKig1ltG1aSY&5DSGMG`*_&^I;+Qc6@+g&+u8x4Ve94YmN(v}+&gdFt55+Xnj^oX_W0?sBOg`WbKIsE~0}OsEHXsH7RR91007*qoM6N<$f*vfVI{*Lx literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick4.png b/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick4.png new file mode 100644 index 0000000000000000000000000000000000000000..fb90090c088b2adc987213b222756f332108b69b GIT binary patch literal 935 zcmV;Y16cftP)Px&VM#i z{{9XC*lxE_N@2I#y>Qz9!@U28pp*gte0+QWKu?geEWNgsc>OjHbX|uuO`(*6*4mse ziUI(zSS-A@7o7l2(*OXnEPG0O(Fu^}Inp!*fZhmr6w$;0>MV6$N{RJ)ZR`{e+P3xD zZWIDEO@s6KY>w@q2lRttRaIWwj=}}4{*YwSJg8L?HkG2q8uV_^uA{MHDVD zWUd3|I$*8?0L*p3TnEf`z&{>Y2e6){0pRWJ?JA|j;c)oYUY4a9zDg<7b&V{`kR%CC zrxT9HBl{jWcpm}ex5G4MGxke|z-tUB%hLEQ`LX@$6Iqra&vTzm-;GxRs7N6ZfLrNG zo$tC1z^$~6g{K5Tt#wqx-sUL+2q7SZK-YDq(u)PJEwswM0QR%^X0y3+uK)G( z0jt#tP18)KwJH1Yc;wy!3$_54%f-BZm)@ut8ncInEdZsr^Z7iP>Rk3vumxBym*z92 zIeTv3#$^uyTL6mgN-5JRdv2d_*+bzi4N_-lNo&|Smpv400g9q9xt;+4b2Hm*+b(+fZWet~|L-1WPx&xk*GpRCt`_TQQESFc5wFg=7&+$P`puftF@3vuE4Oq}i4$P;G&Q1PBRff3X^W zLrC}uV{9c)iW2N3W*(mLjA#4?&v<`-{{es~iqN(#vMhsA3ILF%DXOZ1l+v`-bqxS0 z%Mw~^e13ku?HT{iuDfSI-}i{32to+crnLqDG))5lGeU}@U>!eV{kI1(O_L#D97hNt zptVNVb>=&1ngRggIA$F?2m<=PN8k4VfVOP`0H@RGkg>fJkY$n0ZJ*O>c2q>kH=ehYF*@IyiSjYEH0D(xbr#|VuZ4|4jVjb7J3XqUZ)0ipW zb)6xEu3f2vcLJ_G(Ymh9n!n};aKSqPz+6BZv=rKY069lo2!a4xKtj_rP)eDp@5&Dd z#t7QNuU)%B5Co83$8l_4cDvorjUZG2xNZ#B`Y90NfOi7Qvb_5@T*3nZ5Wp$SBiI#7 z1Hi|}$IqVM?~Uj8f^`P0t>vMEjR2(-zP`S={_Zfa5J19{K^ul)X0?l=m@Q$;exG3X z11MajP?p|@VK6Vd-8T+#geaE3cI^|aMv$JaEuhvKN~sH>eJ_6mRsyQ3GE<_F|?ev$Y9ezUiC=Q50dCChppm4UUTz+|M~*&@#rH<;Zv2!JW^BeR7Fz2cKyJzpK1{} zNbp`KxK%%}?B|Ae0)XxM0sESp1n(-aRX?!of4XY%t@;7i^#$Gu*s346c5aXh-faL) zZQ41u>jz%u+#u;Y9ip_$YY0z!ZjgkfoWaYT8(bzy?3}?%oEuD%1X-4u1C(~o;3dut tPSb>O9A{5^xrg}F=LUi8vKg1Yz+cM1I$}Hjz3c!0002ovPDHLkV1j)R-&6nq literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick6.png b/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick6.png new file mode 100644 index 0000000000000000000000000000000000000000..fb90090c088b2adc987213b222756f332108b69b GIT binary patch literal 935 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick1.png b/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick1.png new file mode 100644 index 0000000000000000000000000000000000000000..30b7e9a1d4a90c8910ccdb43b55fa31db959d021 GIT binary patch literal 1112 zcmV-e1gHCnP)Px(5=lfsRCt{2n@dX@Q547jmV{Y^yf9>ZK*R?IB2j7`$ijt45kEjbK{x#drK>Kw zD*Z&Ih`8uNNUf+SC^cdhnuLUCf{P&myRc`RXM~(P-m%FKg4a1SncOqyo_p@OXGS2I z#rfHL&h>|9=Odi!L!666Fg2G2092~i(AzC2(HO?mamRUH^24)p*8Qa`AU>Kh+7$p} z>bT{YnWyCa@JiS>^+_nKAQV=NPQ^!42!$1k%uP-oF0An*g2nmSdnFok9M{_|quopX z;(dS;jUk)MJC2{892sN2mz<0AA&|}GEhbH$Y%XtfzL%VfbPEWD6{u;aQ>)hM7J0Q+ zx12|EF4BE~_U5%E4j{Al!Y(iF?Z0dvu&}gZw9BOn06;W4ip%ZDW~JIVdn((b_=H` zN9cBR$A=P^z2vfChoQ8!)o*H>o7U#S9sqeWNDrIub$3tPoRnFbo;=)#dc^uz1 z>c(ID_Eoo|_msxeSE)fPQ)LKH%N^4~WNNxGGZxt{cPQ^3SP=KCtk8YfMe2gl=Vt=GpfK>FHOh*Ux=xSA^#T$^2;-#|{NQ zB6fB~AY1{IAZfQ7uAR*0@(&h(U?@Sj0S`Gz$b_ z0c6HEA3#vPfXtmj;-DaW7KkL0P}3=+lM72Lft>;YAE!ZD>7}x6P>HO$hR`phm&n*L*9WWV6pry&AnC`ZY9JIqL6KXgn0!aM1kW4;hd?NR zGR1Dup%RT5rLk%{CA=Ub5I%t31G2vtKoKN$UQ~6cnLsFj-UG6~0wby(xEFy?fEn{< zDp`P^`GY|C06U}vf~rjXm<0l50raHZ;sC#VK%guj6jp|DfSq9+FvxKLF|cvKa}Wpx em~o2({NykCgmHl3(@y>X0000Px(uSrBfRCt`-ThD77M-={2B=%sWwXu*AA7q?{3S?A+YXSw+gCQXVa?BzBNa(4D zoJ#+Z9C8el(iTyIA&@E#ijhIViIESsBvvH5OAd$|?CFA?=zWu~`{`H%;S2)k7I1ih``i;`eHto(i0^fs`$>M6^T6q2So42gK zMGyc0_G)fsn>K)}g==%QofqF2dlLig&N+E$u;rwpVjVrLC|n7p(bX0y-aH zWwHo-Z{nH?x}O*yKwq{|uMN$-T$%bz^XPDbq|bo}0-{jOJPxID1}(cir!7?f`UCgw zKfuQi@6qWxXw+-i+}gpQAB56%dv_0megL=Upmp42Yk4l%7GP&bqD1GM3i+XFm&z5R z0>%{BKH%)MwNQKd`Z|w)8DJCe^2PJ;+;v?%ee!r}d-C!oc5)`bCg7*rcPFlq4>;Jb zPTVV%D?GRaH7g*J$1+k^qvfr5Qm?3VTZfTZU3tJ1%TZ zi1P!NErr<@K-xZ)wnA@D5gi>=e;~mzvI!XUgYYkzIYo8jkSHCX&TaatZSG4i5NrZk z$IXdr6x#k8ATA(s(O_Eu<@V$9_bOV)&9VDB>$zyK2~eHg%>4avGrTWF7qAJS<&Koz ztl*}};sz676F{3CLNwqJ6-cBPq<~ETrLv-+?XPO`5|>BzDnP0)dQcFQri8tk6QTT~ zFyaGriOWvcLEw8v>Uh2+j08l~yd5ot^tCA_AQfx^Hn(=d^G3af?cF^9!;qMBb|QN4 zfB^zj^KV4{_x;|O1z4G^xabg@fN0KsX?bO8q&RVTfu~O%$L8yGgG^jrVDHwQ@LbIj z0bfU6fUN`8itAHz_0hb5Bozpl2#9#zScW(X${UcmOOwJPYK7HOS;{A>(??e#vsPS( z>v{O)=ZCB@hzf|1WzhaY)fhTVv%GmBqDF|2N?Q|kf{mEAi`FH?_G#oTOw3y+2n=fw zXth!6g+3P|2$)qT7=>Dskcd**S#^R0Qkc_}=AsZmfLbT0nmlc(Pv4!4wKuuJ50raJ}clTn0E{X5~aTxT2a0{(7dlQOMln?@j4$(UgGC^Q05wh+mpA+p^#>xh f!<^^2HAepd?N6J+SYGP100000NkvXXu0mjf*8g0{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick3.png b/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick3.png new file mode 100644 index 0000000000000000000000000000000000000000..30b7e9a1d4a90c8910ccdb43b55fa31db959d021 GIT binary patch literal 1112 zcmV-e1gHCnP)Px(5=lfsRCt{2n@dX@Q547jmV{Y^yf9>ZK*R?IB2j7`$ijt45kEjbK{x#drK>Kw zD*Z&Ih`8uNNUf+SC^cdhnuLUCf{P&myRc`RXM~(P-m%FKg4a1SncOqyo_p@OXGS2I z#rfHL&h>|9=Odi!L!666Fg2G2092~i(AzC2(HO?mamRUH^24)p*8Qa`AU>Kh+7$p} z>bT{YnWyCa@JiS>^+_nKAQV=NPQ^!42!$1k%uP-oF0An*g2nmSdnFok9M{_|quopX z;(dS;jUk)MJC2{892sN2mz<0AA&|}GEhbH$Y%XtfzL%VfbPEWD6{u;aQ>)hM7J0Q+ zx12|EF4BE~_U5%E4j{Al!Y(iF?Z0dvu&}gZw9BOn06;W4ip%ZDW~JIVdn((b_=H` zN9cBR$A=P^z2vfChoQ8!)o*H>o7U#S9sqeWNDrIub$3tPoRnFbo;=)#dc^uz1 z>c(ID_Eoo|_msxeSE)fPQ)LKH%N^4~WNNxGGZxt{cPQ^3SP=KCtk8YfMe2gl=Vt=GpfK>FHOh*Ux=xSA^#T$^2;-#|{NQ zB6fB~AY1{IAZfQ7uAR*0@(&h(U?@Sj0S`Gz$b_ z0c6HEA3#vPfXtmj;-DaW7KkL0P}3=+lM72Lft>;YAE!ZD>7}x6P>HO$hR`phm&n*L*9WWV6pry&AnC`ZY9JIqL6KXgn0!aM1kW4;hd?NR zGR1Dup%RT5rLk%{CA=Ub5I%t31G2vtKoKN$UQ~6cnLsFj-UG6~0wby(xEFy?fEn{< zDp`P^`GY|C06U}vf~rjXm<0l50raHZ;sC#VK%guj6jp|DfSq9+FvxKLF|cvKa}Wpx em~o2({NykCgmHl3(@y>X0000Px(5lKWrRCt{2ThB`yK@|Qh33~{M35KjcKxq{Nh8SwIkb?)2BK}3CryhDL{fkNw z@z8@1twf2S)JSr$CM2j?JS+BM^+m`PsXf zxhzJ<(uhPA{QR*A08ruy^PXIx2sM*NESbXAx9`wO8YZV_aMkVN)5i}Zoc3Swx*rad zcmmmlJaUC%=xs$pZ{d-k!AGJB)Jz&x0FBxy06-0)Jt+t{Z~g`VjE<%6*$ll40BF=K zB7%ez1Q>c3=dg&dLy0F4kB?#c&1MsPdu%+<4Ie!>j`cL#qRx0#XoQhnEfr6Rf>70DS)P^=>qg zz*(b?@^%?3>ub2ayg;+nMzykoT%m~D8v{p&2Qc(5mX=p>dt>0L(?OK2K;*Uay^;b-4JKH+wO1vUZpRQ5Tn{GJ#3*+qaY zgd$PJ5!vm@O|p5}=@N}VVt|*#wFkY2?9V<1P$|m|TK4+cMT0#BsE+5pX!Fz0E*fkP zpdzLlr2om@Y_%QtJw?v{U%;M!+Pk+79YAjH2e-YvyZ5|ffW3xKJ3uOC0=?}oMSCxM zd3TT71s2!@xZS@|vx=F`RvS}OQ@(Z?z$U<6u~pG~%T&o#``Bdwd;YDiyl3qNHn%pO zcMQ-<8teJZtqpD$SYQ({IXx3ZKZJozz*Segn&Uv|`~!OD3pmene=i{Xkkn{GtQ;0j zz*(a%w0+?O1byu7u@Fwc%K93BUO}b2U4~ZD93tuZ@&d7B%Gb_aMuih_eR%=E+8w$N zMbrO&b}obyKm%*kPNC}^M?r-)QdDYl+k=2`0;p~PSZT6qrQ>;TKl>mMP5@y2E|5UU z6Z=_1zoZLyJ1qqPUZ+B-q~>R*@3|0uRMvhp)_qap^dUPJ!lf{k)&@g$*$0Ji0%%ZxRX{!WxwoHv5J(dP d1_d_;`~hOXb$$5kZqWb$002ovPDHLkV1g+d0UZDU literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick5.png b/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick5.png new file mode 100644 index 0000000000000000000000000000000000000000..a19dd1274ee0ed2a61339c0aae1ad600abd77a46 GIT binary patch literal 1160 zcmV;31b6$1P)Px(LP7Q!^zH(!u(hS7S-!r;;^4 zIi=Zh=-T4rCjfv{T0`|{U#NWL3eaVNPU|%QfFVG>as>dr&H{kz z*rD(2ZU+Pa>NTbauClp5aX>12JHGi20HkdpSDc2~vY?GmK-YELz4rh{A&-O4yIkcf zR{)*w6wkOktkQd{L%`0e_F4B0LIVcPx-`B=1V?%YL5d?(o?Bqytzhuu%fVL}O^8Ie0%&B1D#1H7WQ4rp z5FQishPT?yKX4tJy+(oLBOu@ipOZ6~Ez1|fPo*^!jY%}k2AXDrUAMc}*arxP`xKzg z5FrG1w*#Y)huN~A=kjQp4WB)59UGM&zj!xcAcQzVX3GLD<9i{2X>DYNKOjH>89mD! z9dfh}vt_Xkdxtz}TYY{lAK|M2^#%IP_miK;qQ%F;-4zZpzqG|Z9pV4zb`reABPY>pkG)Vh|mA4K$stp^d4DoRlqR0{+pi|xkPoI ze^|IEfRKP&8?{9inCBlBrMY<^qP}1N1>X4c0!eBMLL+Yolq+D^x&mG{N4WxqSrU0x zmMK@jvllM`MAr{^q4)4axdLb{!FB2fM0k(N6+k;4S3e+X@1R@(-Wr0a`hnoClEGmS zSFQly>RcdjH6myvNi-vIWX5%Dm@O;R`SRR?aM{X70F4gQj1fIFPx(5lKWrRCt{2ThB`yK@|Qh33~{M35KjcKxq{Nh8SwIkb?)2BK}3CryhDL{fkNw z@z8@1twf2S)JSr$CM2j?JS+BM^+m`PsXf zxhzJ<(uhPA{QR*A08ruy^PXIx2sM*NESbXAx9`wO8YZV_aMkVN)5i}Zoc3Swx*rad zcmmmlJaUC%=xs$pZ{d-k!AGJB)Jz&x0FBxy06-0)Jt+t{Z~g`VjE<%6*$ll40BF=K zB7%ez1Q>c3=dg&dLy0F4kB?#c&1MsPdu%+<4Ie!>j`cL#qRx0#XoQhnEfr6Rf>70DS)P^=>qg zz*(b?@^%?3>ub2ayg;+nMzykoT%m~D8v{p&2Qc(5mX=p>dt>0L(?OK2K;*Uay^;b-4JKH+wO1vUZpRQ5Tn{GJ#3*+qaY zgd$PJ5!vm@O|p5}=@N}VVt|*#wFkY2?9V<1P$|m|TK4+cMT0#BsE+5pX!Fz0E*fkP zpdzLlr2om@Y_%QtJw?v{U%;M!+Pk+79YAjH2e-YvyZ5|ffW3xKJ3uOC0=?}oMSCxM zd3TT71s2!@xZS@|vx=F`RvS}OQ@(Z?z$U<6u~pG~%T&o#``Bdwd;YDiyl3qNHn%pO zcMQ-<8teJZtqpD$SYQ({IXx3ZKZJozz*Segn&Uv|`~!OD3pmene=i{Xkkn{GtQ;0j zz*(a%w0+?O1byu7u@Fwc%K93BUO}b2U4~ZD93tuZ@&d7B%Gb_aMuih_eR%=E+8w$N zMbrO&b}obyKm%*kPNC}^M?r-)QdDYl+k=2`0;p~PSZT6qrQ>;TKl>mMP5@y2E|5UU z6Z=_1zoZLyJ1qqPUZ+B-q~>R*@3|0uRMvhp)_qap^dUPJ!lf{k)&@g$*$0Ji0%%ZxRX{!WxwoHv5J(dP d1_d_;`~hOXb$$5kZqWb$002ovPDHLkV1g+d0UZDU literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick7.png b/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick7.png new file mode 100644 index 0000000000000000000000000000000000000000..52451993f5df416fa073a4ab8b3e3cedf0f66050 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|c6z!vhE&XX zd&`jPZ~)JNfaUFaGp$Or_LdZL@bgP$nsYon`lp`f+25c4%s#LGT$%Gse)hxq1q@LR z!3??!G#kV&h&XU(a4ldpVZFdKiz$Qg?5k<>K7Ri*?RLHc1mX`WuX8-uV h_?Xco{D44$rjF6*2UngF|2SXlr7 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/full.png b/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/full.png new file mode 100644 index 0000000000000000000000000000000000000000..2f32cf44bb17113a067c30c8835c03aac5860a61 GIT binary patch literal 884 zcmV-)1B?8LP)Px&E=fc|R9J<@SI)Xvr z!$EwHJWJuY9+tzEf93(8-|a|zzuPGU0DxZ)szm@;4p*$URXn;K&a+VhU>boze9uMH z<{jf$zaC%^-*cPEIG1cy-Ud}%4FK{iML$b{ZU+G1xE}H>l?)x%0|0ccuRvo|&curx z04`nt-%_B40*x$`of=JM--7F8Yr z6>OC7fng&+JWLQaX%S6rRK&vsd6t&egHZt0gEQS$1j;3aoe;HKh?MbS4bcK- z7C_D@w3ip>2v#?+wz*Nd5)yNCdIkWvz3Cyj>y((HSX{!>wyQgp7bFd65@3TBMGd{0xbR1dR=sNLeu z0ceXfZbK4bf-T>wIKtlHi4*}9QUoYGv=#RbPpr-W!1p}(-bTyg1jmSM>pL zV)3&Iuj&J0$mvMEz3EAlR2?utaTw)Us`UX)P}wAOuq1aqWZ8%xwNblev=@(Ra&~!f zZoJ~nB!E_Wbb4mJbVThIZ`CSCC!t#TGYgoEbAE)H!cKj|#*4Qmx;3lNTCwALV51k+ zVry0(%BzhRA9@c^F?X=D^(@|sDQ5)R^;+aiyy;qBS%ef)TMMRDQ>PUFr~AH%SLdL5 z;C+BVVN#Dwm8V;?X<{2MLhA!Gh>FCPFH&uK!I*_NVeYM8&;J4$)nD#a$d%Us0000< KMNUMnLSTaDnUJ>t literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/meta.json b/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/meta.json new file mode 100644 index 00000000000..c5029fedeba --- /dev/null +++ b/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/meta.json @@ -0,0 +1,47 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Created by TheShuEd for Space Station 14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "full" + }, + { + "name": "cobblebrick0", + "directions": 4 + }, + { + "name": "cobblebrick1", + "directions": 4 + }, + { + "name": "cobblebrick2", + "directions": 4 + }, + { + "name": "cobblebrick3", + "directions": 4 + }, + { + "name": "cobblebrick4", + "directions": 4 + }, + { + "name": "cobblebrick5", + "directions": 4 + }, + { + "name": "cobblebrick6", + "directions": 4 + }, + { + "name": "cobblebrick7", + "directions": 4 + } + ] + } + \ No newline at end of file diff --git a/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick0.png b/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick0.png new file mode 100644 index 0000000000000000000000000000000000000000..1564e62a88450636acb96515960bc0f7a3c2048c GIT binary patch literal 1472 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick3.png b/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick3.png new file mode 100644 index 0000000000000000000000000000000000000000..0b5b8915c0dfd4db4fc8bb843639b2b5a8cc3089 GIT binary patch literal 1024 zcmV+b1poVqP)Px&x=BPqRCt{2o6Sz!Koo^fh@CjGjR^rNm58Wi(@p6Hl|De7b}+W*(+||C2oHd+XfRz1bxFl&Y@?-bU|Zef`k8&6sQ)15 zFT4@lRyUz58h^5;YvIg3f3Qx4Ye;?I* zU0VLa1F*NYOS=Aun7{A<41yb>`3ny~nhn}x5Z()jhTIE$c=w4kojNRu7wlVO4LP@niXbK zSJ5;Z$1l=FLk<9Yr=txUPmk?nT`=STZ0T)S&IPvg*|pPK&IJI#n|N7e`_DYttnknoK&x#)mKFH0bI}C?83%w( zc!Y<(RY`+hdBL~8iKg%YS^aV00}3Bd_<+I(FbW@l{Q3alyTsV{0_9Q_>&i=1B@KPE z1Ebai0K93w0swsJeM76!#@^a42Eh&Y7}Wg*!neo(ci#*Ifr}t;dEuXeTm%4^`2x0e zzHfF=msH+^WVwWvs~sY7PBG3=rb#YpK-d+omUX^8J_ua&B8Dn$a#aJujK((KA|JQ3 zmKM1P0CR<5lf()x%L-ps&w^Y8AWYOLE^?GPx&*-1n}RCt{2o6(NiMihoW0tN&2I=kL%r3M96x#?AU6E%H+yh)#{Z;}T{tKKwH zrQAdnE7GbYkg&F~!60(M+G`A6TF%antNOdb9AIXCkI($$V`^yT;>q`GfO@UPnfW!X zhQ-Jm;Iv%;zIDF=;OF75^iKOcd-#-be8v0V0|2jo`>7^rzai@V9nr3x0T9O#aU7+C zzYj_w06?p0VKp59M&5uVGsUk~Uiw}#aKkXM zO{?guVoD)EmaGT>wrTOW`$$=PrN{x{dctB6U_7YPYHZGSvI3|aJd{L$$_G&S0HE># zK;;8cDj!h!fDNjBfM_ob@WXdMu3@uYyT%D`KEGr5X~2u#^E83Qal~vHaAEfW@E23& z3!iX3VRZS6xDOJP&47K`dta8t3>bNXw2+a-X}gTP!R9ju;yMuvkhQw` z>W$NO)16>Zd?@XJ5U~KM)xGxmS?l{x;<^zFV4D_R3kGqesO)EXKUgU3;vk%2}BX(iECofYcn4IMz_Qi*num0Okuy@+uIzHq4*3akT z!%JxoWQYZL_VB6b`>&-P5F!>}9ADi?Xcyo`?>TU@Yn+B-oVL4D zSSgARFJFn;FU=~D>>6QHPA}S37R8T6`wVzH{$uMnnc|LN;zd4hb0zkCT#9x960#3b zWRH{k2t{!z+673i>3m{KkFP7ug>fO;1-P*L_~FO&G1`5%&~J-NZ>nlfg7f9gb-Zuz zhvHJS&wxqvCr!GrnBp_tiF=E`Z;eaQF2HI%hgvr+n&ykBhvHJS3jo_y;&8rOF+LQR Z@CAc#4<&bVhy4Hm002ovPDHLkV1myK{w)9i literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick5.png b/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick5.png new file mode 100644 index 0000000000000000000000000000000000000000..2c48c6e55d75982967d0c8365efa29ffedc47166 GIT binary patch literal 1146 zcmV-=1cm#FP)Px(G)Y83RCt`_o84~WMij??G#Ctqkc5y6Kt-$E^eTH(wSAvHSKp)$uq*9NSFN-c zyQ)}0DkbX#$0jy$5WQf>vI(wmnZvNjPl{y1$MN}l=FG=AQ^GK3-~Y4#I4D&)vAa~u z4X*qlty&v^AKI?~csqJW|9HT~(K&8>$9Q@Tz?(mQD{W)Hyw%-npjJ9buH!f&j-$l+ zU0_@QMYYnPQE35ib>#w8b1oeY#SFqIp3}I zpS%~x5u?xrpk8)F>>C&0el`K%<7|>~^8RrOkaPtvbUEQvyM5yVD5sUf>VK;L12pXh z-q)6(8{+~bj(!zj)$yLw0bq1H6tVxE$gdWlX)j|yz3gOKLE3rAQNXwWJ*Pv{Zsb1s z@${O}?U4TQK*YZBF7S5rF1fCk9lX%R3*AhUmvSEVK!8=}{wva79Gz>oZ(M+)PNmlY zIxsGP8{ZZByzYQ#TmZ=kzX`@i0n==?mInCc^{`NdN5kPHhsB2g{+-**rket@W29 z!91p6wfINk1_~fL4^ZSyd#h#h-9c;^RFfdZ{o|C6lRuN!ty-HaUnb*Q1ku%?%KWOt zXT9tsf51+Qq4E$N2Gb%aEX&Shf=wg39PT+CdQOKAQIPBd^qZ%dS>j((H?SchEueoq zV01f7CPL}_zaIt0(_v}ET7VKEy)l}X|2K(t0WOZtlbzvpg$=9u|IugNcTfy%0*t5E z;6U3tER^$qqw5C#Ct6#865(4ydl%TJ0JjM*K09nQHxK6P3toH+FkT~6w4UJE6-gDY zCvfzNU|fJAwFDPO=S#sfieOxT)hY41`T;egd_Vc5y;{_`06+JC1oG<#q>H8ZW)w*8 z9mH{z>?ZY`PO`9)z<3Mz;QpO?t-3(VvNL-M&-TECLY)~*vx~h0<1Ik-`PIM|#}Srg zFGUcvZ(M-0=71pl!dY{WoEy9hvfbiYpBtP#<~x_JFnPA;25+KEDmd`q5#Z6S_17Mu zlR7tOJP6Jg%US_dFrlhP>Sc#kt&L^bPqx-|VqAbU>#9c9RhsDJU%C#~4z0l%iU0rr M07*qoM6N<$g1}fGP5=M^ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick6.png b/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick6.png new file mode 100644 index 0000000000000000000000000000000000000000..31901ada5255fef5c22519c8dfd0bde09fff8e5e GIT binary patch literal 1055 zcmV+)1mOFLP)Px&*-1n}RCt{2o6(NiMihoW0tN&2I=kL%r3M96x#?AU6E%H+yh)#{Z;}T{tKKwH zrQAdnE7GbYkg&F~!60(M+G`A6TF%antNOdb9AIXCkI($$V`^yT;>q`GfO@UPnfW!X zhQ-Jm;Iv%;zIDF=;OF75^iKOcd-#-be8v0V0|2jo`>7^rzai@V9nr3x0T9O#aU7+C zzYj_w06?p0VKp59M&5uVGsUk~Uiw}#aKkXM zO{?guVoD)EmaGT>wrTOW`$$=PrN{x{dctB6U_7YPYHZGSvI3|aJd{L$$_G&S0HE># zK;;8cDj!h!fDNjBfM_ob@WXdMu3@uYyT%D`KEGr5X~2u#^E83Qal~vHaAEfW@E23& z3!iX3VRZS6xDOJP&47K`dta8t3>bNXw2+a-X}gTP!R9ju;yMuvkhQw` z>W$NO)16>Zd?@XJ5U~KM)xGxmS?l{x;<^zFV4D_R3kGqesO)EXKUgU3;vk%2}BX(iECofYcn4IMz_Qi*num0Okuy@+uIzHq4*3akT z!%JxoWQYZL_VB6b`>&-P5F!>}9ADi?Xcyo`?>TU@Yn+B-oVL4D zSSgARFJFn;FU=~D>>6QHPA}S37R8T6`wVzH{$uMnnc|LN;zd4hb0zkCT#9x960#3b zWRH{k2t{!z+673i>3m{KkFP7ug>fO;1-P*L_~FO&G1`5%&~J-NZ>nlfg7f9gb-Zuz zhvHJS&wxqvCr!GrnBp_tiF=E`Z;eaQF2HI%hgvr+n&ykBhvHJS3jo_y;&8rOF+LQR Z@CAc#4<&bVhy4Hm002ovPDHLkV1myK{w)9i literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick7.png b/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick7.png new file mode 100644 index 0000000000000000000000000000000000000000..242e9d8019402f73b8f770873faa10101650e473 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|_ISEDhE&XX zdut=_p#UC+!1mUR&HTk1`E`XSD#qA!-uXJsPu=|5|Kkbgp1sw*u6{1-oD!M<=+an= literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/full.png b/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/full.png new file mode 100644 index 0000000000000000000000000000000000000000..f3dec960d6597786c245219b0258f016cd14ff8b GIT binary patch literal 980 zcmV;_11tQAP)Px&j!8s8R9J<@m)~mRMij<>jwMI3Bzv*FX=#=&p)72n^sc)PP}-O28}<#B_9|C_ z5<(zb*j>wwBFU018}Eg3#xv5`Zrs8iFnH!Wn)7GQ`DUi`_UGSzx%uml-}wS^@#?2v zJ7?d%+4!9i0H?i>#WGV0#b$<%0Y~FDonkY?X@a^^w{xn-wndJ?n}Is|M`3Tspc?`3 z_xgs=9dhc_n9Kt_tW#K52l26guI2=PSf^ymgwtL~v6yk9d!{P^yBC*84&cpo_5Vf& z7R$^?)yMRfz7y~?kP z-ol&XteBE9WwBnUIb#dN30+**Bl1FH?7H5;adUpY$_f1muIsTRr`XK487MY0mdl*5 zH?$f*51unir_5J5FQN(O!E>eaKL12oX7rta`6}n_*Wa5Ms4PKUH&O2^7R!uc^H_v_ zXGD*nPEj#6QYXeFnzYP#pMNs&$O{#I72oW{n)|OZ0Cg)$2BZjeks3&fn52lg`{%Z` znBed3VpSjWRc`1Ex)B-MHguYxt&Q}k`cA+onzVEPX6ZJ2Nf9f3pyh~>0lftW-AJ`f zRh7KE`_ouRjQ{xTJ7b~C`)fwgMAgdB9}{^YX_=`S(7Q}{pw$H;^Hr`|Yv_-euX4k9 zTs;^+aY%Hec$?D9ut7w+hkYkd#S?joIgavSM0C{}dkB z70FX2DPk)RoIuS3>GA`M)%GZr=>Lmx$&!r+Yk?z0asc($+8WFddhS=o}!T-v_KbpjWMJ0exOtwW((_evk*g@n7(;PSs_y8I>+-{8;f#T#8n{ z*PX~n+79RngJ(Yg+j_`~DQD43g^L`6>j5hw5+2agbLf6AxPE@@!<%mo5%o5-J)r>7 zKudX>vz8N^ZYZZ=%M{ZiK!_70000Px($Vo&&RCt`_TRm^vNDzHK3vdFHwqsdJ2)eO>G)4|cBd8BluL_ORl=o zh5v;L;o1YCCO`}|0q8~q6H-zvkwz>)f>Kb!Z&K3D-f2(w00T02sr5e24rk_#_poKW zfAeO+xxamPx5v4^!ns)#nrG_DIsNGZmghrP6`UVLdu}t=mVy8P(2n-YCrsu5g3Yg- zy8)yipg&yzlR31beH_^_K2>0uCIAxvpsP+ep7sYENJjt=IJ`!!g4Wd~ZVeN^wtmLUdt8pz6LW9= z;;khe0knBCe_eGj^B(h$fB;BA0L1~oC^Hs#`rxS_YOCH1n?ni$f=w#uyR*!gt}5vC z9H19Dy!XuuVQWi40LAy((LTC4B($#TP_!xzwG#|Kf59{5nXt8`Ab>W1TsvL+)pqt) zj1@>hKpb=&8ae(TjqhK-vDahg0)PJT+v54l7Z`lJ$CLkr>g!i{v>)KxLv(r$T32<9 z-4VL(43_8Px_ODQJAyr#!x(t%Se^^E1w4QGqI8^IU!p=+(O?rW_;|n3e0uu*DXS19 z3~U0P{HO49+qegeaze<Z zOBM(TgeX*vgNhhr0p|y*G@d^WAq0%w{HTqN2c7%8WM|u86R>XR8hC#BAjATQgzU8l z-o3ACLq-6*U|3>QT0M!I!1)G4@RbXQ#ufH2O}@iHRZ*(%&l*QuGSPTV+X4j31x87MZiR7x@15 z8{U2RowWz43L=ywMSX(hVe_iqgmoa*fjq9ALSI&u!w|cd-!rsnUqTV2uz>z_0edpf zO_S5F%C-@-;?NHlQdq#MKEX8NJqcV$LBOg$K>|gXWs&Blkb;1CpP*%$;Xh0G_7Ilm zqoQ6Uk}8o2mJ|dOAxNxD+;l#LDR$U8D+p2(Ku`L*d6`>u@$KR6wadpbc1K|fT{O;x zbOh+C5{j$#WM0~TQ06e#g>(euy%O{K52EWlNJRjdbTS04C&s(6ND-)`eRs!NQz`;T zE-O0Q>-HaP0%-_{*9nVs!+)axKneoVD)B1SSY-df4_+vVI$JEo_y7O^07*qoM6N<$ Ef+oOPr~m)} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick1.png b/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick1.png new file mode 100644 index 0000000000000000000000000000000000000000..852bb8c0e420b7f00e71d57f15898849cc360298 GIT binary patch literal 1126 zcmV-s1eyDZP)Px(AW1|)RCt{2Tfa}+Kp1_LNCd?u5HJv>3zb+^5#GwRjq zkn{b<(a{{|`#H{+RiL(J0svaqL$qCiifQ2fLbOlg_y+U(+65>t&EFne-2k}loNV(W ziT^`r7ocdBMn_$=oB_&9^C(&+^qj7bi}I?#8b2yfuU3Z@(}=XUT_KMr@qhgsP%#bc zT5-2w$T2^O=R&&xyH+kXq<7H;U?lQfXcwSpm0*-t<4NaS^1|*!&vVY%*VjG=ynOOF z-~%Y^$05w`efs=&&jHVN*5z@|ETGXmMZLC#f!hawz|$a(-}}V7zIFlpVJ+;A>>P!C z<>B^NUInxZP$(}4K6}E0QC^kpNjw+Y1?Zf7i?n&dgEwmT5_m4O3y?SRTCcBNfVD?k zTCcBNfFEbywO*g?13tcg!&=Wjef>_W7hy-h;>L=K`_Klq02ha+D(*uY*aCRMQ*j^K zz!qS2dlLZAw=dxd4|yXWFe!ce5{2^eSY9{S0`%=m0JkynXc?iyJGrI6Q?XJgjbSqHkXYJOGXTwkz9)H6b4fK+W|sRny3@VlV@e(Rc*NKyvn5kTReGYhdinV&3p03d}3@PsE< zesP`LwQ{(>FgJ1kZ<;Pz3kZN+x7Xq8Z2nvbmm(gEc|fU-UQM2P<>&~vnB z;sZ!+4j@pzfQAEE;;bOG2%u~b`2bZVEvk`PJQl4I;GEBVKsfK0H6Nf{fUpk;r@{`L zfp1ZyA2T1I`Uht|Ai)PvmMAMo-IauWK-Qo=4(rwGu(oE(BIpmzuKVy3?glQpj0#N7uCA74kNE@*#kqH4>*F)G>H?eC3 z+E2`xg;Z)0G9f_Q6=+=#V|R)wrXj0C(TKF&*`QnM&<+ne4DAG;)Px($Vo&&RCt`_TRm^vNDzHK3vdFHwqsdJ2)eO>G)4|cBd8BluL_ORl=o zh5v;L;o1YCCO`}|0q8~q6H-zvkwz>)f>Kb!Z&K3D-f2(w00T02sr5e24rk_#_poKW zfAeO+xxamPx5v4^!ns)#nrG_DIsNGZmghrP6`UVLdu}t=mVy8P(2n-YCrsu5g3Yg- zy8)yipg&yzlR31beH_^_K2>0uCIAxvpsP+ep7sYENJjt=IJ`!!g4Wd~ZVeN^wtmLUdt8pz6LW9= z;;khe0knBCe_eGj^B(h$fB;BA0L1~oC^Hs#`rxS_YOCH1n?ni$f=w#uyR*!gt}5vC z9H19Dy!XuuVQWi40LAy((LTC4B($#TP_!xzwG#|Kf59{5nXt8`Ab>W1TsvL+)pqt) zj1@>hKpb=&8ae(TjqhK-vDahg0)PJT+v54l7Z`lJ$CLkr>g!i{v>)KxLv(r$T32<9 z-4VL(43_8Px_ODQJAyr#!x(t%Se^^E1w4QGqI8^IU!p=+(O?rW_;|n3e0uu*DXS19 z3~U0P{HO49+qegeaze<Z zOBM(TgeX*vgNhhr0p|y*G@d^WAq0%w{HTqN2c7%8WM|u86R>XR8hC#BAjATQgzU8l z-o3ACLq-6*U|3>QT0M!I!1)G4@RbXQ#ufH2O}@iHRZ*(%&l*QuGSPTV+X4j31x87MZiR7x@15 z8{U2RowWz43L=ywMSX(hVe_iqgmoa*fjq9ALSI&u!w|cd-!rsnUqTV2uz>z_0edpf zO_S5F%C-@-;?NHlQdq#MKEX8NJqcV$LBOg$K>|gXWs&Blkb;1CpP*%$;Xh0G_7Ilm zqoQ6Uk}8o2mJ|dOAxNxD+;l#LDR$U8D+p2(Ku`L*d6`>u@$KR6wadpbc1K|fT{O;x zbOh+C5{j$#WM0~TQ06e#g>(euy%O{K52EWlNJRjdbTS04C&s(6ND-)`eRs!NQz`;T zE-O0Q>-HaP0%-_{*9nVs!+)axKneoVD)B1SSY-df4_+vVI$JEo_y7O^07*qoM6N<$ Ef+oOPr~m)} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick3.png b/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick3.png new file mode 100644 index 0000000000000000000000000000000000000000..852bb8c0e420b7f00e71d57f15898849cc360298 GIT binary patch literal 1126 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 maSe!O1Zs`j?zzu#x_<#oh2UUf6CnWr0000ng= literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick1.png b/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick1.png new file mode 100644 index 0000000000000000000000000000000000000000..98e733c198492e38bb84636f126b1942adfb6951 GIT binary patch literal 1024 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 maSe!O1Zs`j?zzu#x_<#oh2UUf6CnWr0000ng= literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick3.png b/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick3.png new file mode 100644 index 0000000000000000000000000000000000000000..98e733c198492e38bb84636f126b1942adfb6951 GIT binary patch literal 1024 zcmV+b1poVqP)Px&x=BPqRCt{2n=wz@KorOSR7tQ&&LRkshLS>56@ellRia~;ev(d|D|M^XsdK+T zKMV^aNR^NxP^2mZ3N9WJd-~I32Wd@RY|MAO} z$oIc}{X8S`{fx+$qu}kE*8qS5Apii2Qf}MX-3zsgBHaP(!A9E_rKqk{LhYhRcR+5| zzlFk_!p~X1UG(Vy^^LVqyC_eDe<1=!AC8~D?(HzU2+||K@fqSFD8CA%zht)WMmW^ zpPmXy;k9b@aZ6#XxFGfV(jCz2^`%~4x&xw2X!k+-C?Ff*Bq%$HiSpk^fN&0oQkBU- z*a5j*Hj4X@hOh(7ZYPTSkcO}Wew>^Qwb`U)5@Gg-MmPii>Res{H?y{L{Q}FCGSqBl z?5u9o{&Zpf-xvkhtPKFD?M$52O|r{E_!a10c8A(5#7SO-(;vVIvCAehDa@9x0Kjrx z-sUSh6YR1Pc0jY$#(HfPx?v2RXKfvrYL|_$1Jqd+`v(n_7ncBxU&0Qv%S1Q{21`}r z9xlu-8{r6O93A6jZ3R7VfR1PVwOuyC5peob2jKT~u(w$|%r2WqMuD&@Z4_19xDa;0 zrw{J{_(CU_%fjq-@Z;nR_00{g{;2IhHw>t={*c)72Cyhigkxe`4`2@;B$xz~LTqb- ztmmm|!g2!@-8lsv&x)k78wIgM04rcn(*)79TSd(z5laM6)8sQg772hq_OsU@2_pay zV-6Ud4l|M>fEcmmfZ)TEyb4lV#r{D90Faemj^I4loitl*loyv^QHsXVF&9X(iFH|= zEqDZ{z6C4q&7@0Lj$>(l<%5{|i)CDyVO)p+E>6 z&*8g3i}OVQ{%*1t&!0gnE}+-zbB*!nH%S3E{~5477q;hOd#nCn*G_~30AC@pt?|uP z8LzWNGS$$04uAPx&%}GQ-RCt{2nn7#ZNEF9^U1GVIg1=0wqbajawg_qLCxXHe?U(C{k)gZN~D5u6`$tp3scmJiYmkp6+3o zUtj)y1+cc-ptZF@O$fZeW3#yqz|!Ip0PTZA9{=U2YC=$+9}nl~_>@Myj;LAy;cREY51HNh4%8MZU!3#% z5^p%ltj}CTKuw72I^1PwUB6n80M; zqtoqT&5vhv5R7o8WM_AezyJJAdki{c76Fs8_oOUun#^7VA`CmIIQq_suMCn#^)Q z^x;L-LNwQTv)=}wln?m<%uom&9iOst{{gO)v=2`>`?oWzu5Tq%A*6P3DhI$=_dnf! z5^jM_Q|N%KZd~YqLI)H&pwIz|LI;pv9iZ)iKmK}^V0o>3>zSbK03~SDvKCElJG*6EFC_0~b3IgnNp{m{J3tjLWTg^of34j#+73{9 zU)VO%ai}kfm=TqH5s{M|dfAU5qtfsiN5`jZHrMHNyRq}C-GN)}x)^tWHE;1|zs<`12f*Y{=xKHxj3>cpsch22rP*~c z9s%vc6Mk;4G6+WW0{5Hkx)_fDRVH_(jLo)cr`dHe9s!VECC;*n{2wH|HZ^6$D31UD N002ovPDHLkV1k4+^{@Z{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick5.png b/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick5.png new file mode 100644 index 0000000000000000000000000000000000000000..f2688e45ed3a184a2b7cabb9755b7b56e835d44b GIT binary patch literal 1196 zcmV;d1XKHoP)Px(W=TXrRCt`_o83<1RuIR3TM=Tfb1Z^NP*^^NifGa9-fS;>(}(E`^bz`cd&5f6 zqDTlREfxk56x-NNBJExz$FfU;62-$w;dg`WBtD+M&&QmZ;SGlQqHIXc{> zrWA1+bFjAqKz*eSK#Ov7eUc~uV0UZl%{=Wd&Gqyp@cVDSX2(&Q5Tyy9 zJ{&z;`^E*()RbbmI((e=*#*r;1LfEN+1r+2Aq1!?HT?V50w7M~?6V{ai2DPvwv7v* zjdw=I=Lw>it8Nzn<+>v68yDdE_9i>lL%>xvJm05gSt!>l`* z0G{vDY&5d#di(>}l_kO?5ozDJ0NT*NvI^%gG~9B^f9rXE5WV{p*p=ZsP_9cb8t?kL zHePZSFfM@QDD2A8#5bQr0mtoAJ|66gv~PR}w7#BX$I5kSpItoqj+F7R00Qi9zbl+S zHPgHG)zaHHF2Jlt<@W()U|fJ+uRqiG%bpO83m`eePlNGQz%+C1r2)<_FTc(6`+4{C z^YZF@KnYR?DGy(F)cRP1w-Bz5^hd|!=#dL2vD;u;{JdjiV3>iES}d5LI8T{fZN-9iKb^pL;&TwTzS{ov2tBJ-)Db& z3xG5o5Ix8QIcG&gfS}vWW_sNd@@V73-~~^Dj%dSJO`-x*gWho*;_3y}hTG4(O!=e%jkCq{U4l zCcvbuu1j7E>jV^f7%j2R@x&Ur{HH!?7D{PRc^qPm#1Q>SfVQxU8kU@%4dw>?<|3v9S zV38)cX?XS7VWYWuFkfHr>U)6k;M}ZU;fpJhn!TPty{t01S!xN~`szrq@5MxBy2#9|Du>2c(Oo7iJaERpT%Wq3MXS<)}v+t1>a(13LGe z!nqy-%CQSE1u2XRp!sk80E`MKMj}XIT!8l31qXXOc)nk_9z-$9u`>~*Fg^#^Rh!RW zTG&;awR)YkdOa(o(7fpX8+Px&%}GQ-RCt{2nn7#ZNEF9^U1GVIg1=0wqbajawg_qLCxXHe?U(C{k)gZN~D5u6`$tp3scmJiYmkp6+3o zUtj)y1+cc-ptZF@O$fZeW3#yqz|!Ip0PTZA9{=U2YC=$+9}nl~_>@Myj;LAy;cREY51HNh4%8MZU!3#% z5^p%ltj}CTKuw72I^1PwUB6n80M; zqtoqT&5vhv5R7o8WM_AezyJJAdki{c76Fs8_oOUun#^7VA`CmIIQq_suMCn#^)Q z^x;L-LNwQTv)=}wln?m<%uom&9iOst{{gO)v=2`>`?oWzu5Tq%A*6P3DhI$=_dnf! z5^jM_Q|N%KZd~YqLI)H&pwIz|LI;pv9iZ)iKmK}^V0o>3>zSbK03~SDvKCElJG*6EFC_0~b3IgnNp{m{J3tjLWTg^of34j#+73{9 zU)VO%ai}kfm=TqH5s{M|dfAU5qtfsiN5`jZHrMHNyRq}C-GN)}x)^tWHE;1|zs<`12f*Y{=xKHxj3>cpsch22rP*~c z9s%vc6Mk;4G6+WW0{5Hkx)_fDRVH_(jLo)cr`dHe9s!VECC;*n{2wH|HZ^6$D31UD N002ovPDHLkV1k4+^{@Z{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick7.png b/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick7.png new file mode 100644 index 0000000000000000000000000000000000000000..3caa75ca28da2f60c35ed174211504e6ebbbeefe GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|c6z!vhE&XX zd+Q+Q;Q*ck0n4jdHvJE2<+;T7@Nl!sF6ovJNB`9GJgdIH|LmXAdB@ZKZI-NKV!gmL ziz$QAmvKwOGKMIJU#y?!nS|u+5dd|o;qf(1*|4`6ylM-u>Ggx|NRfX hN(UerjHdn>|Cth=x~zZPKY^ZL@O1TaS?83{1OR;uTeScH literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/full.png b/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/full.png new file mode 100644 index 0000000000000000000000000000000000000000..8a721053bc46775a1f367b0fe6cd61ea319d8dfc GIT binary patch literal 1083 zcmV-B1jPG^P)Px&^+`lQR9J<@m)}ksM-;|?0spsWWm8z=l!}rFk_wfiYEYy~xuK8Km*|sm!zGc@ zBB2CV;6M|*-bA*wv&L(@MZK_RGPApegkI!GdolaX&iT%nbH16q_x#u2HlI9QZSocD z&p-az$~<|x+T44w3qVB(0x9)`{eweH47f9%KIgERiG${(@75Z6oVLha@OYpZ^P^lo zL#0#zpfCGuKmMLve#%k32M8`hCNjDef4=+UC#N$!xD2@(N80Ct#mtywWhJ(FB5QN- z__~%4GXsH?R;oth5sw}|pyPRZ9JgmX+caC}bMdtAi}|8OMiVgEn-dzY3xFsWX|~Sw zSlQObI&wH&yyJNZJU%`-J);X`4Yw8nMZz>uE>g^9s1yo%9LE9V9NZ*WUtS@QlH)gT z`TJc5nAO1k!6C1XUdOp;=Y_IBI1bYHDP}X&sx|!-v(p$99>?N@Dnjtn&JVgh7XbEN z?6SGBM)%_fx*tDSsVkI)71?MK5e}t=n~wT}{#-1+|6puEMF`zeY5UpkbPVZ(KG@u*5SotuR?HGxxG!teJ0Ea#$J zL~N|{^5_`&LLHbF$(LHQb$+`Jm`ACK{{J{vSyD9sNgc=ldN3S^496kQcDC>A)O0?Y zMAo~sE=$z`rTZ!i=6?JA-mKv4%;a)ez5jr&{@ZjQ^*Ejvi8qj%L@t-L9_3tVLA%q{ zT@)9!L3}zoxK&|At4tA8I#8?D=nwig>Oi6klyy9hN}(`SvU1T9q|=M{ zb0bnjYt>pR{@FUPwXtrspo&K6e7rr?Rw+Dg4cF!5^bD|dAfbecp&X79C!dNc4O1td z!WAiH>ON3kUg59SJN6F_0a*O`m%ZOx7i}&_AyubDE}tj*H$s%lTumYt78eP_P(Lgz zPK!%ah_0_KEV{ndxKqm8=fH4CHj@RwUH*n|SC?sBw9|Fq(ZdItxhWz#OJS(r>l=|V zF9<`+xw2bzV5wFixC|3VXTx<9@6@=%v|i%4y0EJ6O%lCvkR)JEh+of7PS2<>uV`FH zI>TQc9p8wX-l$HoO`~R(b$l9ld6AV=WZ}IDYf? zv+!Qu#u672Gm=0`{itJ8jpK9ff}8X1eeK`#{{VpD%n2Adc#Qx6002ovPDHLkV1mGg B1`GfI literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/meta.json b/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/meta.json new file mode 100644 index 00000000000..c5029fedeba --- /dev/null +++ b/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/meta.json @@ -0,0 +1,47 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Created by TheShuEd for Space Station 14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "full" + }, + { + "name": "cobblebrick0", + "directions": 4 + }, + { + "name": "cobblebrick1", + "directions": 4 + }, + { + "name": "cobblebrick2", + "directions": 4 + }, + { + "name": "cobblebrick3", + "directions": 4 + }, + { + "name": "cobblebrick4", + "directions": 4 + }, + { + "name": "cobblebrick5", + "directions": 4 + }, + { + "name": "cobblebrick6", + "directions": 4 + }, + { + "name": "cobblebrick7", + "directions": 4 + } + ] + } + \ No newline at end of file diff --git a/Resources/Textures/Structures/Walls/rock.rsi/meta.json b/Resources/Textures/Structures/Walls/rock.rsi/meta.json index 5c5277dad51..d9e72a5055e 100644 --- a/Resources/Textures/Structures/Walls/rock.rsi/meta.json +++ b/Resources/Textures/Structures/Walls/rock.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "https://github.com/Citadel-Station-13/Citadel-Station-13-RP/blob/817e7c1f225876b45891e3f06908e6d032f0a8bc/icons/turf/walls.dmi, rock_bananium made by brainfood1183 (github) for ss14, rock_snow, rock_asteroid, & rock_wall and co from https://github.com/tgstation/tgstation/tree/e929cf39cded5207d63df1fa8521f41f2816b383. ironrock taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/02b9f6894af4419c9f7e699a22c402b086d8067e", + "copyright": "https://github.com/Citadel-Station-13/Citadel-Station-13-RP/blob/817e7c1f225876b45891e3f06908e6d032f0a8bc/icons/turf/walls.dmi, rock_bananium made by brainfood1183 (github) for ss14, rock_snow, rock_asteroid, & rock_wall and co from https://github.com/tgstation/tgstation/tree/e929cf39cded5207d63df1fa8521f41f2816b383. ironrock taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/02b9f6894af4419c9f7e699a22c402b086d8067e, sand rock made by TheShuEd for ss14", "size": { "x": 32, "y": 32 @@ -147,6 +147,51 @@ }, { "name": "rock_bananium" + }, + { + "name": "rock_sand" + }, + { + "name": "rock_sand_south" + }, + { + "name": "rock_sand_east" + }, + { + "name": "rock_sand_north" + }, + { + "name": "rock_sand_west" + }, + { + "name": "rock_chromite" + }, + { + "name": "rock_chromite_south" + }, + { + "name": "rock_chromite_east" + }, + { + "name": "rock_chromite_north" + }, + { + "name": "rock_chromite_west" + }, + { + "name": "rock_andesite" + }, + { + "name": "rock_andesite_south" + }, + { + "name": "rock_andesite_east" + }, + { + "name": "rock_andesite_north" + }, + { + "name": "rock_andesite_west" } ] } diff --git a/Resources/Textures/Structures/Walls/rock.rsi/rock_andesite.png b/Resources/Textures/Structures/Walls/rock.rsi/rock_andesite.png new file mode 100644 index 0000000000000000000000000000000000000000..fbc964e4d88f29fd2b197667135166a8de9a65bc GIT binary patch literal 930 zcmV;T16}-yP)Px&TuDShR9J1;1gEVPU z%9oHqbt15!R8bdj3S-u@k4rnR5wxH8nVt9H?DwC)FPM=1(;kbPTg;0B0N}k(_CpA0 zk1eWIh4$Fu%cswA@6>e&A;5c&=feU0 zPDhk9>YOTA*L75)@5|@(-p74KhdLqxU%!1%>OjtW`vi79=PZROZO?GsRjVq=dsSSm zDtPa)+wB0n5soP3L{TC+X+xc&{uwKw!ZlU-m>nb_E1^YaUDu#a&9EFI@d>61MJ_TL zr&u(m$e9zTIXWdazg2REY?V~UtjvD={FRVU`7jlMuD_SUR`iL9sJq*25_07f@-i=K znbxWZASqC6UL>7GYgv}BrC3XE2q9h~gSG4eZzSt4=SiYckM};Fq0^cXPCaH5p{LrM z0O0v>h{oqdf&OwvuAOu3It*x!ZS0h}j_K?r07-SDQTBM&bBgVHwjTiF!A2#LFxNh{ ztXk2!@xLjj0aDyl-&UtcChhgMzFqw@Iqcp!LQ|819iNljJG3|b&`m%ZL5Q}+OaZDJ(<%> zYFwG$Y@1Pi;Jw^HnoCWN?-oTz?=^S(%Ngssj;W&xHI+0~?V3e{sEuYq_G%> literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/rock.rsi/rock_andesite_east.png b/Resources/Textures/Structures/Walls/rock.rsi/rock_andesite_east.png new file mode 100644 index 0000000000000000000000000000000000000000..3e8b9b7b274caab5bd7c19907c365745bc21fdfd GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}J3L(+Ln2z= zPBY|dau9HxU)*q)>x9}3&nGn@V$;N;G9GSx!c@V;6jH&c)1w%7VE@r`tp84***EiP z(O&(t4|gbN-M((>I&E>2f$IzY1DjtufzxslW9B?}Oh7sw)m`PXzjb!PC{xWt~$(69A&j BXYl|4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/rock.rsi/rock_andesite_north.png b/Resources/Textures/Structures/Walls/rock.rsi/rock_andesite_north.png new file mode 100644 index 0000000000000000000000000000000000000000..d9faf04c8affc4beded67cc23599c8017e127148 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Gd*1#Ln2z= zp4-URtRT|*@G$oYmX;&?QkL_{%DxF`x0~C0H_Pb?XS{=YN0896yyv$){+-^-AP5G5 z2fvox|Mzphhj?kOvRAkBWUq9u*z0CWdd6OhCkd_oZqIz#h?$}1((>|mH!eKcm7G20 z*p@Q_{m-*kFKO8-HhtHza+!y7y4z)@xAQT~DVDH1{PMz<%I~#v&X=zKeuFWj%d>RC TgiBsPM>2T2`njxgN@xNAioIG} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/rock.rsi/rock_andesite_south.png b/Resources/Textures/Structures/Walls/rock.rsi/rock_andesite_south.png new file mode 100644 index 0000000000000000000000000000000000000000..14260cc8b66b2b223ce4096f522f051d35cbae71 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}<(@8%ArY-_ z&n*;fFyLXia9ZGkV8T8vmsC~`0iSR;hBl414^Ax1AKsmQqPN!Pb5!B&^UMqav&3TW zzm|yBym6lS^bA$Lm2JyvpVp>pKfQUo@9t~AM-%4pXGHMda-U|{{VeDB_dkDDGc!E$ iw#(@k5Cnt2mslsxuxF_&&2a-dfx*+&&t;ucLK6V4{6!rA literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/rock.rsi/rock_andesite_west.png b/Resources/Textures/Structures/Walls/rock.rsi/rock_andesite_west.png new file mode 100644 index 0000000000000000000000000000000000000000..2f9542b2100bc7352a2bcf8a7d0535a470925f8a GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}t36#DLn2z= zPBY|dHV|OBE?BxE=X7nr4~9w!QP$M1ke?|NbQUPdD@~OqdBE_4_fPT+*$34>*1p~$ z+9L2}*0Mhg=a1h#^LmlQVwIJrcqe?hXXaVJ6Rdsc3jgCi>xSt;I&GhKd1yTlU!e7f oBT)1qgVf>d+j4s*RlfehSTEywzMd_(8t7~WPgg&ebxsLQ0CW3ZF#rGn literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/rock.rsi/rock_chromite.png b/Resources/Textures/Structures/Walls/rock.rsi/rock_chromite.png new file mode 100644 index 0000000000000000000000000000000000000000..ae8f83f4b9665ea61f8c532e36fcb78653b0d912 GIT binary patch literal 724 zcmV;_0xSKAP)Px%j!8s8R9J^AuHe`h26$Zs*onl)hX^jdbxc5ZN|8WB=d&Vo^_-#|d z*5!adLyl8@>>aYbjO5|=xjig*`1tz7%llhzou@PujaaHe{|x|qe0`$0RLIhNwo>hF zYAOu?yu80f2{olt_#`+QNlNdruQ?ph(NTTJD{^c`Kt7yt?Q;HsMS9?cGO2|w8 z4xlgArtDHMC=%NV<3v9EqN2**uJ*{#DcvkGM<1%IWVd~4wJ-sImLhJXZ`|G04S;?) z`7(G^llAp|D{8k^0MUtj@uywKvAvbeZx?zDOjNOkb~|DW4(#ODgj4wVqHbX=gW!0U2Y z16=vt)eVYEC0@1udbM@$8J`8d6H>8`xg}f)Ji3VddtlB+)AFqytP+h_13soMm{7~{wap>kgpyESz?^XV_v2t4 zOZULktvH3APg1F~jAT`)mjU6%W7|>MqP8jB)a0^lQ{o%uQc73hc1FVh0000 zi;?Mu#aAOnrWsK!+f=j+(;DvfE&O}$6T1e3f~ktPlCjG1l6en5%Q)Yh_@(q?Y~0Zz z{}-o&=RD>O;W{$w!n4*#7Jt6&c-HFDa_W&Z!%TS&xux?0{_6)E=Qh2QrfVQjupa0g N22WQ%mvv4FO#l!oX`TQ8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/rock.rsi/rock_chromite_north.png b/Resources/Textures/Structures/Walls/rock.rsi/rock_chromite_north.png new file mode 100644 index 0000000000000000000000000000000000000000..2d478f3b278e7fbaa7c00f25fdddeae41121fe4d GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}vproLLn2z= zp4a9-WFW%&;PR4fOb1y*8{1f}{$HQ|u|u_EE7QdX(?lHKT{7)yd{(n6^ZjEH1tkzz zRG*`Hx9N{=l)Kevoa5S-*FJ@P0as}IPqQ@_lhRo$d%C@E zSMxGH5M`P1t90VI(62RXXa0Rrwf{`pavOzyL8~RaFV;NRWB=%zM}G5)!_T(-_{Z|< XfOpddulz|sXEJ!Y`njxgN@xNAWwK!p literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/rock.rsi/rock_chromite_south.png b/Resources/Textures/Structures/Walls/rock.rsi/rock_chromite_south.png new file mode 100644 index 0000000000000000000000000000000000000000..1730dcc34533069fbe9943e5f0d6d07a24d16106 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R})t)YnArY-_ z&n@I@P!MT-csNZ};z-(t=-U5hk}vEz7JYXEhp>9ombv+hH~fz?*imp;Cin4$n|Alt z?s72KwBo$Cq%LQ9R=L@>;ENs~mhE&C+9SwNRl~wiGWpMgSbl|N>31`k@#rM~({k}i`!TIAtT6*@mer<-d9ENP0 z?cbkTdwXZ}US|;be5L#rOUONDj!LFWd?y&VT256n7``oMxbU})VdeW0AZ9oyI_2B( zRg&@x-rTz>)ev6wN=Rc;Y@^5n@uXX`yfv=IH`FkEPB8UkG+A*3=nV!>S3j3^P6Px%n@L1LR9J2rb3ffufPy>)OcAS#q3vXUJ{5~o{|77>^csy}0Am$d zev21cbm%}*gjG{#!nEbs$xx1g4Wy1 zkDnrPp9fY3iwGK{QHe-cLcz7eLTm5rK|Nb7K&)zv40?wO*l*UN{Uk%%#mGh|_Hq^( z3-`<`Z@6I^MMQ$N#_Mfs1Y0=PreapCOEl(wO7{U2$UO8AF^1i2SJ*X{PW6VN?d0#T zKljzDu;;P*!01^FK;UAji4pMTxMf0+O4@JneC{V#7ORz{4ZVE;4Y9^}>lrF!xFI6< zVT6kQXWla-=6*_3Y@j`B!%}gvcaMzi{rTjs>>@A==;DCi3^r8{U_L6gwITwufDx(} z-Y90B;2EegZIK2hK$T|EAozeQSSc!OUIb4-L`e9cu(W8Pea29u4*kC!+K%V%`6-4f z^K2O^BDZ$bh1MDt4F@^V$VCQS%S-zpdjIzFDt4)53r(q`C=Pha7|q(wuqN*xJ|850 Tm0-Oo00000NkvXXu0mjf@cT}> literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/rock.rsi/rock_sand_east.png b/Resources/Textures/Structures/Walls/rock.rsi/rock_sand_east.png new file mode 100644 index 0000000000000000000000000000000000000000..3165be15af5fd5cd4ea7b57e32cf12ca71d02b78 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}%RF5iLn2z= zPSfT)krmqhonc6lm3*}5!TPw}E&Duh=*u231-t&FO zKiB zyFQmu;HxA<#;$A324@+sh_tM|!z6lO9^+ot(0y5aIZOv~n&-6?*3{pS=a+LRw_EwY iVSn2T8c%;4$j=d#Wzp$PzG3{-&t literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/rock.rsi/rock_sand_north.png b/Resources/Textures/Structures/Walls/rock.rsi/rock_sand_north.png new file mode 100644 index 0000000000000000000000000000000000000000..756e15367289c5741e8773f1df4448f4bdee0104 GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}^E_P~Ln2z= zo>$~MWFW%!;QvXfLk%f?4abtISZee)afcMN-)%BJ^JoVn+xCnPJW6OIv-fRL=F?S{k?H%W0F6%H`94E){Rn{BE}V@f+v( Y2dwr#3Kf`N16|7C>FVdQ&MBb@03QZkUjP6A literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/rock.rsi/rock_sand_south.png b/Resources/Textures/Structures/Walls/rock.rsi/rock_sand_south.png new file mode 100644 index 0000000000000000000000000000000000000000..94c237ed23a461b3759eaff20f0aa62da152df59 GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}vproLLn2z= zUeM(`7f1kke!<9`gf<)oghetre;ozopr0B)pPp#T5? literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/rock.rsi/rock_sand_west.png b/Resources/Textures/Structures/Walls/rock.rsi/rock_sand_west.png new file mode 100644 index 0000000000000000000000000000000000000000..a546d97b3c96cfbf00f3dd358ce1f5c5d75c84a9 GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}D?D8sLn2z= zPTRwELvj{pDP zGiA4xn}ufyN{enRH(M?+(Q<;5%3k+g=6g5)RC|{zw4MlamC55TJHFSg;iZ({b#8@y zOb(A3&LlHD6q>c}BG(Ub#luRw9OPU+$xi5BkZ@PSl7V|ga;4Czf6Ryfp8WFb1Xk`zZgGBkGLi9fLn;wx^!XGS4p6o89ZJ6T-G@yGywoA*ItSM literal 0 HcmV?d00001 From 44bd12c8a5c49705cf6ed00079ddfc5f58140617 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sat, 21 Oct 2023 09:37:02 +1100 Subject: [PATCH 10/39] Fix replay infinite loop (#21129) --- .../Replay/Spectator/ReplaySpectatorSystem.Position.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Content.Client/Replay/Spectator/ReplaySpectatorSystem.Position.cs b/Content.Client/Replay/Spectator/ReplaySpectatorSystem.Position.cs index 427ed039e17..45a175e6884 100644 --- a/Content.Client/Replay/Spectator/ReplaySpectatorSystem.Position.cs +++ b/Content.Client/Replay/Spectator/ReplaySpectatorSystem.Position.cs @@ -135,7 +135,9 @@ private bool TryFindFallbackSpawn(out EntityCoordinates coords) Entity? maxUid = null; float? maxSize = null; - while (EntityQueryEnumerator().MoveNext(out var uid, out var grid)) + var gridQuery = EntityQueryEnumerator(); + + while (gridQuery.MoveNext(out var uid, out var grid)) { var size = grid.LocalAABB.Size.LengthSquared(); if (maxSize == null || size > maxSize) From 77d9876a2f511e67e7066ada6300472e7862d4a4 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 20 Oct 2023 18:38:06 -0400 Subject: [PATCH 11/39] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 2757000f83c..7d7ca577abe 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,15 +1,4 @@ Entries: -- author: PJB3005 - changes: - - {message: 'Nanotrasen finally decided to give engineering departments something - to do, and has finalized the schematics for the thermo-electric generator (TEG).', - type: Add} - - {message: The TEG creates power by exchanging energy between a hot and cold gas - on its two sides., type: Add} - - {message: You can turn on gas heaters/freezers with alt-click now., type: Tweak} - - {message: You can open air alarm and pump menus with activate (E) now., type: Tweak} - id: 4531 - time: '2023-08-12T20:41:55.0000000+00:00' - author: EmoGarbage404 changes: - {message: Added cyborgs. These creations are assembled part by part and can be @@ -2921,3 +2910,8 @@ Entries: cook., type: Tweak} id: 5030 time: '2023-10-20T20:21:49.0000000+00:00' +- author: metalgearsloth + changes: + - {message: Fix replays not starting., type: Fix} + id: 5031 + time: '2023-10-20T22:37:02.0000000+00:00' From 8f068561c3a45b12307f4143a8074b4f056e28d0 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sat, 21 Oct 2023 09:58:00 +1100 Subject: [PATCH 12/39] Fix rat king rummage audio (#21130) --- Content.Shared/RatKing/SharedRatKingSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Shared/RatKing/SharedRatKingSystem.cs b/Content.Shared/RatKing/SharedRatKingSystem.cs index 761619dc4ad..93293d09be2 100644 --- a/Content.Shared/RatKing/SharedRatKingSystem.cs +++ b/Content.Shared/RatKing/SharedRatKingSystem.cs @@ -130,7 +130,7 @@ private void OnDoAfterComplete(EntityUid uid, RatKingRummageableComponent compon component.Looted = true; Dirty(uid, component); - _audio.PlayPvs(component.Sound, uid); + _audio.PlayPredicted(component.Sound, uid, args.User); var spawn = PrototypeManager.Index(component.RummageLoot).Pick(Random); if (_net.IsServer) From 29ac3f35fa069f76caca9ad0b552bb5f64ca3e1e Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Sat, 21 Oct 2023 03:58:57 -0700 Subject: [PATCH 13/39] Update Robust to v169.0.1 (#21139) --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index 56d850f389c..ab47d4e0097 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit 56d850f389c49a09df87c3a48be1fbd24dac7fc4 +Subproject commit ab47d4e00979de4d3b184b8402124a40be4f87eb From db81050b4d5443fee2c6ab35fbeccdbe06907c30 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 21 Oct 2023 07:00:02 -0400 Subject: [PATCH 14/39] Automatic changelog update --- Resources/Changelog/Changelog.yml | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 7d7ca577abe..2b02b4fdd44 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,17 +1,4 @@ Entries: -- author: EmoGarbage404 - changes: - - {message: Added cyborgs. These creations are assembled part by part and can be - loaded up with various modules to give them unique abilities. Make sure you - charge them at their dedicated charging stations., type: Add} - - {message: Added silicon laws. These are laws that all robotic crew must abide - by. This Asimov guy had the right idea., type: Add} - - {message: Added new Mechanized Treatment and Robotic Cleanliness technologies., - type: Add} - - {message: The EMAG is now able to force cyborgs to follow your orders. How devious!, - type: Add} - id: 4532 - time: '2023-08-12T21:39:58.0000000+00:00' - author: TemporalOroboros changes: - {message: Clicking on the screen now accounts for the distortion effect of nearby @@ -2915,3 +2902,10 @@ Entries: - {message: Fix replays not starting., type: Fix} id: 5031 time: '2023-10-20T22:37:02.0000000+00:00' +- author: DrSmugleaf + changes: + - {message: Fixed not being able to run server commands without >., type: Fix} + - {message: Fixed not being able to use the help command to see another command's + help text., type: Fix} + id: 5032 + time: '2023-10-21T10:58:57.0000000+00:00' From e2227c6b0930a4525759d6fc0a1561aba75d0967 Mon Sep 17 00:00:00 2001 From: "Mr. 27" <45323883+27alaing@users.noreply.github.com> Date: Sat, 21 Oct 2023 15:43:11 -0400 Subject: [PATCH 15/39] Make common netspeak get replaced in the chat (#20180) * added more slang to the sanitization manager * idk why this file is here * Added new sanitization accent * No longer is an acccent, instead is a dictionary * Reverted back to a system similar to before, added the new netspeak from the dictionary * Added some new words to the chat san * Added (wdym --> what do you mean) to the chatsan * merge conflict * removed boolvalue * remove space * Upcoming * Added MF and ETC to chatsan :)) * upcoming * added FYI and WYD to speech-chatsan.ftl * Made the chatsan accent string a const string with [ValidatePrototypeId] * forgot the ';' :((( * fixed error throw [AccentPrototype] --> [ReplacementAccentPrototype] --- .../Chat/Managers/ChatSanitizationManager.cs | 4 +- Content.Server/Chat/Systems/ChatSystem.cs | 19 +++ .../Locale/en-US/speech/speech-chatsan.ftl | 116 ++++++++++++++++++ .../Prototypes/Accents/word_replacements.yml | 47 ++++++- 4 files changed, 184 insertions(+), 2 deletions(-) create mode 100644 Resources/Locale/en-US/speech/speech-chatsan.ftl diff --git a/Content.Server/Chat/Managers/ChatSanitizationManager.cs b/Content.Server/Chat/Managers/ChatSanitizationManager.cs index d4a284b6cd0..77119eefc07 100644 --- a/Content.Server/Chat/Managers/ChatSanitizationManager.cs +++ b/Content.Server/Chat/Managers/ChatSanitizationManager.cs @@ -54,6 +54,7 @@ public sealed class ChatSanitizationManager : IChatSanitizationManager { "._.", "chatsan-surprised" }, { ".-.", "chatsan-confused" }, { "-_-", "chatsan-unimpressed" }, + { "smh", "chatsan-unimpressed" }, { "o/", "chatsan-waves" }, { "^^/", "chatsan-waves" }, { ":/", "chatsan-uncertain" }, @@ -66,10 +67,11 @@ public sealed class ChatSanitizationManager : IChatSanitizationManager { "lel.", "chatsan-laughs" }, { "kek", "chatsan-laughs" }, { "kek.", "chatsan-laughs" }, + { "rofl", "chatsan-laughs" }, { "o7", "chatsan-salutes" }, { ";_;7", "chatsan-tearfully-salutes"}, { "idk", "chatsan-shrugs" }, - { "idk.", "chatsan-shrugs" } + { "idk.", "chatsan-shrugs" }, }; private bool _doSanitize; diff --git a/Content.Server/Chat/Systems/ChatSystem.cs b/Content.Server/Chat/Systems/ChatSystem.cs index 24e13bcde28..455d34c907f 100644 --- a/Content.Server/Chat/Systems/ChatSystem.cs +++ b/Content.Server/Chat/Systems/ChatSystem.cs @@ -1,6 +1,8 @@ using System.Globalization; using System.Linq; using System.Text; +using Content.Server.Speech.EntitySystems; +using Content.Server.Speech.Components; using Content.Server.Administration.Logs; using Content.Server.Administration.Managers; using Content.Server.Chat.Managers; @@ -53,6 +55,7 @@ public sealed partial class ChatSystem : SharedChatSystem [Dependency] private readonly MobStateSystem _mobStateSystem = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedInteractionSystem _interactionSystem = default!; + [Dependency] private readonly ReplacementAccentSystem _wordreplacement = default!; public const int VoiceRange = 10; // how far voice goes in world units public const int WhisperClearRange = 2; // how far whisper goes while still being understandable, in world units @@ -690,6 +693,8 @@ private bool CanSendInGame(string message, IConsoleShell? shell = null, IPlayerS private string SanitizeInGameICMessage(EntityUid source, string message, out string? emoteStr, bool capitalize = true, bool punctuate = false, bool capitalizeTheWordI = true) { var newMessage = message.Trim(); + newMessage = SanitizeMessageReplaceWords(newMessage); + if (capitalize) newMessage = SanitizeMessageCapital(newMessage); if (capitalizeTheWordI) @@ -737,6 +742,20 @@ private string SanitizeMessagePeriod(string message) return message; } + [ValidatePrototypeId] + public const string ChatSanitize_Accent = "chatsanitize"; + + public string SanitizeMessageReplaceWords(string message) + { + if (string.IsNullOrEmpty(message)) return message; + + var msg = message; + + msg = _wordreplacement.ApplyReplacements(msg, ChatSanitize_Accent); + + return msg; + } + /// /// Returns list of players and ranges for all players withing some range. Also returns observers with a range of -1. /// diff --git a/Resources/Locale/en-US/speech/speech-chatsan.ftl b/Resources/Locale/en-US/speech/speech-chatsan.ftl new file mode 100644 index 00000000000..756dfc3f99e --- /dev/null +++ b/Resources/Locale/en-US/speech/speech-chatsan.ftl @@ -0,0 +1,116 @@ +chatsan-word-1 = omg +chatsan-replacement-1 = oh my god + +chatsan-word-2 = omfg +chatsan-replacement-2 = oh my fucking god + +chatsan-word-3 = ong +chatsan-replacement-3 = on god + +chatsan-word-4 = wtf +chatsan-replacement-4 = what the fuck + +chatsan-word-5 = ffs +chatsan-replacement-5 = for fuck's sake + +chatsan-word-6 = tf +chatsan-replacement-6 = the fuck + +chatsan-word-7 = afaik +chatsan-replacement-7 = as far as i know + +chatsan-word-8 = ik +chatsan-replacement-8 = i know + +chatsan-word-9 = ikr +chatsan-replacement-9 = i know, right + +chatsan-word-10 = idc +chatsan-replacement-10 = i don't care + +chatsan-word-12 = tbh +chatsan-replacement-12 = to be honest + +chatsan-word-13 = u +chatsan-replacement-13 = you + +chatsan-word-14 = ur +chatsan-replacement-14 = your + +chatsan-word-15 = mk +chatsan-replacement-15 = mmm, okay + +chatsan-word-16 = iirc +chatsan-replacement-16 = if i remember correctly + +chatsan-word-17 = np +chatsan-replacement-17 = no problem + +chatsan-word-18 = omw +chatsan-replacement-18 = on my way + +chatsan-word-19 = nvm +chatsan-replacement-19 = nevermind + +chatsan-word-20 = imo +chatsan-replacement-20 = in my opinion + +chatsan-word-21 = pls +chatsan-word-22 = plz +chatsan-word-23 = plox +chatsan-replacement-please = please + +chatsan-word-24 = fr +chatsan-replacement-24 = for real + +chatsan-word-25 = brb +chatsan-replacement-25 = be right back + +chatsan-word-26 = btw +chatsan-replacement-26 = by the way + +chatsan-word-27 = jk +chatsan-replacement-27 = just kidding + +chatsan-word-28 = thx +chatsan-replacement-28 = thanks + +chatsan-word-29 = ty +chatsan-replacement-29 = thank you + +chatsan-word-30 = afk +chatsan-replacement-30 = ssd + +chatsan-word-31 = stfu +chatsan-replacement-31 = shut the fuck up + +chatsan-word-32 = gtg +chatsan-replacement-32 = got to go + +chatsan-word-33 = gl +chatsan-replacement-33 = good luck + +chatsan-word-34 = hbu +chatsan-replacement-34 = how about you + +chatsan-word-35 = hmu +chatsan-replacement-35 = hit me up + +chatsan-word-36 = gtfo +chatsan-replacement-36 = get the fuck out + +chatsan-word-37 = wdym +chatsan-replacement-37 = what do you mean + +chatsan-word-38 = mf +chatsan-replacement-38 = motherfucker + +chatsan-word-39 = etc +chatsan-word-40 = etc. +chatsan-replacement-etcetera = etcetera + +chatsan-word-41 = fyi +chatsan-replacement-41 = for your information + +chatsan-word-42 = wyd +chatsan-replacement-42 = what you doing diff --git a/Resources/Prototypes/Accents/word_replacements.yml b/Resources/Prototypes/Accents/word_replacements.yml index befcfa6e6c7..716196cbf47 100644 --- a/Resources/Prototypes/Accents/word_replacements.yml +++ b/Resources/Prototypes/Accents/word_replacements.yml @@ -490,4 +490,49 @@ accent-archaic-replaced-231: accent-archaic-replacement-231 accent-archaic-replaced-232: accent-archaic-replacement-232 - +# For the chat sanitization system +- type: accent + id: chatsanitize + wordReplacements: + chatsan-word-1: chatsan-replacement-1 + chatsan-word-2: chatsan-replacement-2 + chatsan-word-3: chatsan-replacement-3 + chatsan-word-4: chatsan-replacement-4 + chatsan-word-5: chatsan-replacement-5 + chatsan-word-6: chatsan-replacement-6 + chatsan-word-7: chatsan-replacement-7 + chatsan-word-8: chatsan-replacement-8 + chatsan-word-9: chatsan-replacement-9 + chatsan-word-10: chatsan-replacement-10 + chatsan-word-11: chatsan-replacement-11 + chatsan-word-12: chatsan-replacement-12 + chatsan-word-13: chatsan-replacement-13 + chatsan-word-14: chatsan-replacement-14 + chatsan-word-15: chatsan-replacement-15 + chatsan-word-16: chatsan-replacement-16 + chatsan-word-17: chatsan-replacement-17 + chatsan-word-18: chatsan-replacement-18 + chatsan-word-19: chatsan-replacement-19 + chatsan-word-20: chatsan-replacement-20 + chatsan-word-21: chatsan-replacement-please + chatsan-word-22: chatsan-replacement-please + chatsan-word-23: chatsan-replacement-please + chatsan-word-24: chatsan-replacement-24 + chatsan-word-25: chatsan-replacement-25 + chatsan-word-26: chatsan-replacement-26 + chatsan-word-27: chatsan-replacement-27 + chatsan-word-28: chatsan-replacement-28 + chatsan-word-29: chatsan-replacement-29 + chatsan-word-30: chatsan-replacement-30 + chatsan-word-31: chatsan-replacement-31 + chatsan-word-32: chatsan-replacement-32 + chatsan-word-33: chatsan-replacement-33 + chatsan-word-34: chatsan-replacement-34 + chatsan-word-35: chatsan-replacement-35 + chatsan-word-36: chatsan-replacement-36 + chatsan-word-37: chatsan-replacement-37 + chatsan-word-38: chatsan-replacement-38 + chatsan-word-39: chatsan-replacement-etcetera + chatsan-word-40: chatsan-replacement-etcetera + chatsan-word-41: chatsan-replacement-41 + chatsan-word-42: chatsan-replacement-42 From 93c345a1b9535e113d4f83d9019389626bda5e1c Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 21 Oct 2023 15:44:15 -0400 Subject: [PATCH 16/39] Automatic changelog update --- Resources/Changelog/Changelog.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 2b02b4fdd44..1268aa245cc 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,10 +1,4 @@ Entries: -- author: TemporalOroboros - changes: - - {message: Clicking on the screen now accounts for the distortion effect of nearby - singularities., type: Fix} - id: 4533 - time: '2023-08-12T23:43:08.0000000+00:00' - author: deltanedas changes: - {message: Non-humanoids such as mice and pAIs can no longer be kill targets., @@ -2909,3 +2903,9 @@ Entries: help text., type: Fix} id: 5032 time: '2023-10-21T10:58:57.0000000+00:00' +- author: 27alaing + changes: + - {message: 'Common internet slang now gets replaced in IC chat. (example: brb --> + be right back)', type: Add} + id: 5033 + time: '2023-10-21T19:43:11.0000000+00:00' From 9ea8e03c23fd06d51a563ca029487dc7742e5ea9 Mon Sep 17 00:00:00 2001 From: Vasilis Date: Sat, 21 Oct 2023 22:09:54 +0200 Subject: [PATCH 17/39] Social a-anxiety/st-st-stuttering t-trait. (#20500) * This was supposed to be a challenge * Component magik * Add documentation --- .../Components/StutteringAccentComponent.cs | 27 +++++++++++++++++++ .../Speech/EntitySystems/StutteringSystem.cs | 12 ++++----- Resources/Locale/en-US/traits/traits.ftl | 3 +++ .../Prototypes/Traits/inconveniences.yml | 11 ++++++++ 4 files changed, 47 insertions(+), 6 deletions(-) diff --git a/Content.Server/Speech/Components/StutteringAccentComponent.cs b/Content.Server/Speech/Components/StutteringAccentComponent.cs index b283a8354b9..e82cd9b12b0 100644 --- a/Content.Server/Speech/Components/StutteringAccentComponent.cs +++ b/Content.Server/Speech/Components/StutteringAccentComponent.cs @@ -3,5 +3,32 @@ namespace Content.Server.Speech.Components [RegisterComponent] public sealed partial class StutteringAccentComponent : Component { + /// + /// Percentage chance that a stutter will occur if it matches. + /// + [DataField("matchRandomProb")] + [ViewVariables(VVAccess.ReadWrite)] + public float MatchRandomProb = 0.8f; + + /// + /// Percentage chance that a stutter occurs f-f-f-f-four times. + /// + [DataField("fourRandomProb")] + [ViewVariables(VVAccess.ReadWrite)] + public float FourRandomProb = 0.1f; + + /// + /// Percentage chance that a stutter occurs t-t-t-three times. + /// + [DataField("threeRandomProb")] + [ViewVariables(VVAccess.ReadWrite)] + public float ThreeRandomProb = 0.2f; + + /// + /// Percentage chance that a stutter cut off. + /// + [DataField("cutRandomProb")] + [ViewVariables(VVAccess.ReadWrite)] + public float CutRandomProb = 0.05f; } } diff --git a/Content.Server/Speech/EntitySystems/StutteringSystem.cs b/Content.Server/Speech/EntitySystems/StutteringSystem.cs index 8717d57ad0e..d6e3c0b749a 100644 --- a/Content.Server/Speech/EntitySystems/StutteringSystem.cs +++ b/Content.Server/Speech/EntitySystems/StutteringSystem.cs @@ -31,10 +31,10 @@ public override void DoStutter(EntityUid uid, TimeSpan time, bool refresh, Statu private void OnAccent(EntityUid uid, StutteringAccentComponent component, AccentGetEvent args) { - args.Message = Accentuate(args.Message); + args.Message = Accentuate(args.Message, component); } - public string Accentuate(string message) + public string Accentuate(string message, StutteringAccentComponent component) { var length = message.Length; @@ -45,17 +45,17 @@ public string Accentuate(string message) for (var i = 0; i < length; i++) { newLetter = message[i].ToString(); - if (Stutter.IsMatch(newLetter) && _random.Prob(0.8f)) + if (Stutter.IsMatch(newLetter) && _random.Prob(component.MatchRandomProb)) { - if (_random.Prob(0.1f)) + if (_random.Prob(component.FourRandomProb)) { newLetter = $"{newLetter}-{newLetter}-{newLetter}-{newLetter}"; } - else if (_random.Prob(0.2f)) + else if (_random.Prob(component.ThreeRandomProb)) { newLetter = $"{newLetter}-{newLetter}-{newLetter}"; } - else if (_random.Prob(0.05f)) + else if (_random.Prob(component.CutRandomProb)) { newLetter = ""; } diff --git a/Resources/Locale/en-US/traits/traits.ftl b/Resources/Locale/en-US/traits/traits.ftl index 28c0ecf7944..524d249e928 100644 --- a/Resources/Locale/en-US/traits/traits.ftl +++ b/Resources/Locale/en-US/traits/traits.ftl @@ -34,3 +34,6 @@ trait-wheelchair-bound-desc = You cannot move without your wheelchair. Wheelchai trait-frontal-lisp-name = Frontal Lisp trait-frontal-lisp-desc = You thpeak with a lithp + +trait-socialanxiety-name = Social Anxiety +trait-socialanxiety-desc = You are anxious when you speak and stutter. diff --git a/Resources/Prototypes/Traits/inconveniences.yml b/Resources/Prototypes/Traits/inconveniences.yml index ad61b14971a..f8e932c9b92 100644 --- a/Resources/Prototypes/Traits/inconveniences.yml +++ b/Resources/Prototypes/Traits/inconveniences.yml @@ -5,3 +5,14 @@ components: - type: LightweightDrunk boozeStrengthMultiplier: 2 + +- type: trait + id: SocialAnxiety + name: trait-socialanxiety-name + description: trait-socialanxiety-desc + components: + - type: StutteringAccent + matchRandomProb: 0.2 + fourRandomProb: 0 + threeRandomProb: 0.3 + cutRandomProb: 0 From 498af4910a99942a36383bce64ea896503ca0056 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 21 Oct 2023 16:10:58 -0400 Subject: [PATCH 18/39] Automatic changelog update --- Resources/Changelog/Changelog.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 1268aa245cc..5e5b3763045 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,10 +1,4 @@ Entries: -- author: deltanedas - changes: - - {message: Non-humanoids such as mice and pAIs can no longer be kill targets., - type: Fix} - id: 4534 - time: '2023-08-13T01:01:21.0000000+00:00' - author: EmoGarbage404 changes: - {message: Lockers now once again inform you if you cannot access them., type: Fix} @@ -2909,3 +2903,9 @@ Entries: be right back)', type: Add} id: 5033 time: '2023-10-21T19:43:11.0000000+00:00' +- author: Vasilis + changes: + - {message: Added a s-social anxiety trait that m-makes you st-stutter your w-words + when you t-talk., type: Add} + id: 5034 + time: '2023-10-21T20:09:54.0000000+00:00' From 4fc45f34096f7bf0736ffc131e452e084410e913 Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Sat, 21 Oct 2023 14:32:25 -0700 Subject: [PATCH 19/39] Update RobustToolbox to v170.0.0 (#21149) --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index ab47d4e0097..58e3a4eb4ad 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit ab47d4e00979de4d3b184b8402124a40be4f87eb +Subproject commit 58e3a4eb4ada451395c7d961f4b6d724756a7c26 From b589a121d90795f7e915741a2485579018bc731d Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Sat, 21 Oct 2023 14:33:49 -0700 Subject: [PATCH 20/39] Fix thrusters starting disabled (#21147) --- Content.Server/Shuttles/Components/ThrusterComponent.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/Shuttles/Components/ThrusterComponent.cs b/Content.Server/Shuttles/Components/ThrusterComponent.cs index e7cfbf8f8e7..d8350991154 100644 --- a/Content.Server/Shuttles/Components/ThrusterComponent.cs +++ b/Content.Server/Shuttles/Components/ThrusterComponent.cs @@ -16,7 +16,7 @@ public sealed partial class ThrusterComponent : Component /// Whether the thruster has been force to be enabled / disabled (e.g. VV, interaction, etc.) /// [DataField, ViewVariables(VVAccess.ReadWrite)] - public bool Enabled { get; set; } + public bool Enabled { get; set; } = true; /// /// This determines whether the thruster is actually enabled for the purposes of thrust From 0109e7abc2a3fb4f1fee7a793048fbddb891bf02 Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Sat, 21 Oct 2023 14:34:00 -0700 Subject: [PATCH 21/39] Fix expeditions console not having any expeditions (#21148) --- .../SalvageSystem.ExpeditionConsole.cs | 6 +++--- .../Salvage/SalvageSystem.Expeditions.cs | 21 +++++++++---------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/Content.Server/Salvage/SalvageSystem.ExpeditionConsole.cs b/Content.Server/Salvage/SalvageSystem.ExpeditionConsole.cs index 237645dadf9..f7f3718208e 100644 --- a/Content.Server/Salvage/SalvageSystem.ExpeditionConsole.cs +++ b/Content.Server/Salvage/SalvageSystem.ExpeditionConsole.cs @@ -20,7 +20,7 @@ private void OnSalvageClaimMessage(EntityUid uid, SalvageExpeditionConsoleCompon data.ActiveMission = args.Index; var mission = GetMission(_prototypeManager.Index(missionparams.Difficulty), missionparams.Seed); data.NextOffer = _timing.CurTime + mission.Duration + TimeSpan.FromSeconds(1); - UpdateConsoles(data); + UpdateConsoles((station.Value, data)); } private void OnSalvageConsoleInit(Entity console, ref ComponentInit args) @@ -33,7 +33,7 @@ private void OnSalvageConsoleParent(Entity co UpdateConsole(console); } - private void UpdateConsoles(SalvageExpeditionDataComponent component) + private void UpdateConsoles(Entity component) { var state = GetState(component); @@ -42,7 +42,7 @@ private void UpdateConsoles(SalvageExpeditionDataComponent component) { var station = _station.GetOwningStation(uid, xform); - if (station != uid) + if (station != component.Owner) continue; _ui.TrySetUiState(uid, SalvageConsoleUiKey.Expedition, state, ui: uiComp); diff --git a/Content.Server/Salvage/SalvageSystem.Expeditions.cs b/Content.Server/Salvage/SalvageSystem.Expeditions.cs index 6021cb62360..f2be8cd5008 100644 --- a/Content.Server/Salvage/SalvageSystem.Expeditions.cs +++ b/Content.Server/Salvage/SalvageSystem.Expeditions.cs @@ -1,15 +1,12 @@ -using Content.Server.Cargo.Components; +using System.Linq; +using System.Threading; using Content.Server.Salvage.Expeditions; using Content.Server.Salvage.Expeditions.Structure; using Content.Shared.CCVar; using Content.Shared.Examine; -using Content.Shared.Salvage; +using Content.Shared.Salvage.Expeditions; using Robust.Shared.CPUJob.JobQueues; using Robust.Shared.CPUJob.JobQueues.Queues; -using System.Linq; -using System.Threading; -using Content.Shared.Procedural; -using Content.Shared.Salvage.Expeditions; using Robust.Shared.GameStates; namespace Content.Server.Salvage; @@ -93,7 +90,7 @@ private void OnExpeditionShutdown(EntityUid uid, SalvageExpeditionComponent comp // Finish mission if (TryComp(component.Station, out var data)) { - FinishExpedition(data, uid); + FinishExpedition((component.Station, data), uid); } } @@ -122,7 +119,8 @@ private void UpdateExpeditions() } } - foreach (var comp in EntityQuery()) + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var comp)) { // Update offers if (comp.NextOffer > currentTime || comp.Claimed) @@ -131,17 +129,18 @@ private void UpdateExpeditions() comp.Cooldown = false; comp.NextOffer += TimeSpan.FromSeconds(_cooldown); GenerateMissions(comp); - UpdateConsoles(comp); + UpdateConsoles((uid, comp)); } } - private void FinishExpedition(SalvageExpeditionDataComponent component, EntityUid uid) + private void FinishExpedition(Entity expedition, EntityUid uid) { + var component = expedition.Comp; component.NextOffer = _timing.CurTime + TimeSpan.FromSeconds(_cooldown); Announce(uid, Loc.GetString("salvage-expedition-mission-completed")); component.ActiveMission = 0; component.Cooldown = true; - UpdateConsoles(component); + UpdateConsoles(expedition); } private void GenerateMissions(SalvageExpeditionDataComponent component) From 0b5fd38829df8e141991db72140bc900ad4692e7 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 21 Oct 2023 17:35:04 -0400 Subject: [PATCH 22/39] Automatic changelog update --- Resources/Changelog/Changelog.yml | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 5e5b3763045..4b0c6ccb83b 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,16 +1,4 @@ Entries: -- author: EmoGarbage404 - changes: - - {message: Lockers now once again inform you if you cannot access them., type: Fix} - id: 4535 - time: '2023-08-13T01:21:07.0000000+00:00' -- author: RiceMar - changes: - - {message: 'To satiate the salvage department''s rabid hunger for firepower, Nanotrasen - has started manufacturing proto-kinetic accelerators with bulky cannon-like - frames around the same internal machinery.', type: Add} - id: 4536 - time: '2023-08-13T04:50:42.0000000+00:00' - author: TaralGit changes: - {message: Added open bolt animations for most gun sprites. Use e and z (default @@ -2909,3 +2897,13 @@ Entries: when you t-talk., type: Add} id: 5034 time: '2023-10-21T20:09:54.0000000+00:00' +- author: DrSmugleaf + changes: + - {message: Fixed shuttle thrusters and gyroscopes being disabled by default., type: Fix} + id: 5035 + time: '2023-10-21T21:33:49.0000000+00:00' +- author: DrSmugleaf + changes: + - {message: Fixed the expeditions console not showing any expeditions., type: Fix} + id: 5036 + time: '2023-10-21T21:34:00.0000000+00:00' From b44281a5d4b69a6f154e3a6d9ee3908f60a2576d Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Sat, 21 Oct 2023 14:57:51 -0700 Subject: [PATCH 23/39] Fix whitelist commands not giving feedback with 0 arguments, trim names, add [player] completion hint (#21152) --- Content.Server/Whitelist/WhitelistCommands.cs | 80 +++++++++++++------ Resources/Changelog/Admin.yml | 9 +++ .../Locale/en-US/connection-messages.ftl | 26 +++--- Resources/Locale/en-US/shell.ftl | 2 + 4 files changed, 79 insertions(+), 38 deletions(-) diff --git a/Content.Server/Whitelist/WhitelistCommands.cs b/Content.Server/Whitelist/WhitelistCommands.cs index 59b576e7ca4..165b8dcae22 100644 --- a/Content.Server/Whitelist/WhitelistCommands.cs +++ b/Content.Server/Whitelist/WhitelistCommands.cs @@ -10,20 +10,23 @@ namespace Content.Server.Whitelist; [AdminCommand(AdminFlags.Ban)] -public sealed class AddWhitelistCommand : IConsoleCommand +public sealed class AddWhitelistCommand : LocalizedCommands { - public string Command => "whitelistadd"; - public string Description => Loc.GetString("command-whitelistadd-description"); - public string Help => Loc.GetString("command-whitelistadd-help"); - public async void Execute(IConsoleShell shell, string argStr, string[] args) + public override string Command => "whitelistadd"; + + public override async void Execute(IConsoleShell shell, string argStr, string[] args) { - if (args.Length != 1) + if (args.Length == 0) + { + shell.WriteError(Loc.GetString("shell-need-minimum-one-argument")); + shell.WriteLine(Help); return; + } var db = IoCManager.Resolve(); var loc = IoCManager.Resolve(); - var name = args[0]; + var name = string.Join(' ', args).Trim(); var data = await loc.LookupIdByNameAsync(name); if (data != null) @@ -32,34 +35,47 @@ public async void Execute(IConsoleShell shell, string argStr, string[] args) var isWhitelisted = await db.GetWhitelistStatusAsync(guid); if (isWhitelisted) { - shell.WriteLine(Loc.GetString("command-whitelistadd-existing", ("username", data.Username))); + shell.WriteLine(Loc.GetString("cmd-whitelistadd-existing", ("username", data.Username))); return; } await db.AddToWhitelistAsync(guid); - shell.WriteLine(Loc.GetString("command-whitelistadd-added", ("username", data.Username))); + shell.WriteLine(Loc.GetString("cmd-whitelistadd-added", ("username", data.Username))); return; } - shell.WriteError(Loc.GetString("command-whitelistadd-not-found", ("username", args[0]))); + shell.WriteError(Loc.GetString("cmd-whitelistadd-not-found", ("username", args[0]))); + } + + public override CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + if (args.Length == 1) + { + return CompletionResult.FromHint(Loc.GetString("cmd-whitelistadd-arg-player")); + } + + return CompletionResult.Empty; } } [AdminCommand(AdminFlags.Ban)] -public sealed class RemoveWhitelistCommand : IConsoleCommand +public sealed class RemoveWhitelistCommand : LocalizedCommands { - public string Command => "whitelistremove"; - public string Description => Loc.GetString("command-whitelistremove-description"); - public string Help => Loc.GetString("command-whitelistremove-help"); - public async void Execute(IConsoleShell shell, string argStr, string[] args) + public override string Command => "whitelistremove"; + + public override async void Execute(IConsoleShell shell, string argStr, string[] args) { - if (args.Length != 1) + if (args.Length == 0) + { + shell.WriteError(Loc.GetString("shell-need-minimum-one-argument")); + shell.WriteLine(Help); return; + } var db = IoCManager.Resolve(); var loc = IoCManager.Resolve(); - var name = args[0]; + var name = string.Join(' ', args).Trim(); var data = await loc.LookupIdByNameAsync(name); if (data != null) @@ -68,29 +84,42 @@ public async void Execute(IConsoleShell shell, string argStr, string[] args) var isWhitelisted = await db.GetWhitelistStatusAsync(guid); if (!isWhitelisted) { - shell.WriteLine(Loc.GetString("command-whitelistremove-existing", ("username", data.Username))); + shell.WriteLine(Loc.GetString("cmd-whitelistremove-existing", ("username", data.Username))); return; } await db.RemoveFromWhitelistAsync(guid); - shell.WriteLine(Loc.GetString("command-whitelistremove-removed", ("username", data.Username))); + shell.WriteLine(Loc.GetString("cmd-whitelistremove-removed", ("username", data.Username))); return; } - shell.WriteError(Loc.GetString("command-whitelistremove-not-found", ("username", args[0]))); + shell.WriteError(Loc.GetString("cmd-whitelistremove-not-found", ("username", args[0]))); + } + + public override CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + if (args.Length == 1) + { + return CompletionResult.FromHint(Loc.GetString("cmd-whitelistremove-arg-player")); + } + + return CompletionResult.Empty; } } [AdminCommand(AdminFlags.Ban)] -public sealed class KickNonWhitelistedCommand : IConsoleCommand +public sealed class KickNonWhitelistedCommand : LocalizedCommands { - public string Command => "kicknonwhitelisted"; - public string Description => Loc.GetString("command-kicknonwhitelisted-description"); - public string Help => Loc.GetString("command-kicknonwhitelisted-help"); - public async void Execute(IConsoleShell shell, string argStr, string[] args) + public override string Command => "kicknonwhitelisted"; + + public override async void Execute(IConsoleShell shell, string argStr, string[] args) { if (args.Length != 0) + { + shell.WriteError(Loc.GetString("shell-wrong-arguments-number-need-specific", ("properAmount", 0), ("currentAmount", args.Length))); + shell.WriteLine(Help); return; + } var cfg = IoCManager.Resolve(); @@ -111,6 +140,5 @@ public async void Execute(IConsoleShell shell, string argStr, string[] args) net.DisconnectChannel(session.ConnectedClient, Loc.GetString("whitelist-not-whitelisted")); } } - } } diff --git a/Resources/Changelog/Admin.yml b/Resources/Changelog/Admin.yml index 74156b9d132..a5e13ab040b 100644 --- a/Resources/Changelog/Admin.yml +++ b/Resources/Changelog/Admin.yml @@ -46,3 +46,12 @@ Entries: - {message: 'Fixed playtime being sorted incorrectly in the F7 players tab.', type: Fix} id: 7 time: '2023-10-16T04:23:00.0000000+00:00' +- author: DrSmugleaf + changes: + - {message: 'Fixed whitelist commands not giving feedback with 0 arguments.', type: Fix} + - {message: 'Fixed not trimming starting and trailing whitespaces within names + in whitelist commands.', type: Fix} + - {message: 'Added a \[player\] completion type hint to whitelist add and remove + commands.', type: Tweak} + id: 8 + time: '2023-10-21T09:53:00.0000000+00:00' diff --git a/Resources/Locale/en-US/connection-messages.ftl b/Resources/Locale/en-US/connection-messages.ftl index 2755cf789a5..b9eccda3ec4 100644 --- a/Resources/Locale/en-US/connection-messages.ftl +++ b/Resources/Locale/en-US/connection-messages.ftl @@ -10,20 +10,22 @@ whitelist-playercount-invalid = {$min -> } whitelist-not-whitelisted-rp = You are not whitelisted. To become whitelisted, visit our Discord (which can be found at https://spacestation14.io) and check the #rp-whitelist channel. -command-whitelistadd-description = Adds the player with the given username to the server whitelist. -command-whitelistadd-help = whitelistadd -command-whitelistadd-existing = {$username} is already on the whitelist! -command-whitelistadd-added = {$username} added to the whitelist -command-whitelistadd-not-found = Unable to find '{$username}' +cmd-whitelistadd-desc = Adds the player with the given username to the server whitelist. +cmd-whitelistadd-help = Usage: whitelistadd +cmd-whitelistadd-existing = {$username} is already on the whitelist! +cmd-whitelistadd-added = {$username} added to the whitelist +cmd-whitelistadd-not-found = Unable to find '{$username}' +cmd-whitelistadd-arg-player = [player] -command-whitelistremove-description = Removes the player with the given username from the server whitelist. -command-whitelistremove-help = whitelistremove -command-whitelistremove-existing = {$username} is not on the whitelist! -command-whitelistremove-removed = {$username} removed from the whitelist -command-whitelistremove-not-found = Unable to find '{$username}' +cmd-whitelistremove-desc = Removes the player with the given username from the server whitelist. +cmd-whitelistremove-help = Usage: whitelistremove +cmd-whitelistremove-existing = {$username} is not on the whitelist! +cmd-whitelistremove-removed = {$username} removed from the whitelist +cmd-whitelistremove-not-found = Unable to find '{$username}' +cmd-whitelistremove-arg-player = [player] -command-kicknonwhitelisted-description = Kicks all non-whitelisted players from the server. -command-kicknonwhitelisted-help = kicknonwhitelisted +cmd-kicknonwhitelisted-desc = Kicks all non-whitelisted players from the server. +cmd-kicknonwhitelisted-help = Usage: kicknonwhitelisted ban-banned-permanent = This ban will only be removed via appeal. ban-banned-permanent-appeal = This ban will only be removed via appeal. You can appeal at {$link} diff --git a/Resources/Locale/en-US/shell.ftl b/Resources/Locale/en-US/shell.ftl index fe69bb0c4a3..7a66fbc794d 100644 --- a/Resources/Locale/en-US/shell.ftl +++ b/Resources/Locale/en-US/shell.ftl @@ -18,6 +18,8 @@ shell-argument-must-be-number = Argument must be a number. shell-argument-must-be-boolean = Argument must be a boolean. shell-wrong-arguments-number = Wrong number of arguments. shell-need-between-arguments = Need {$lower} to {$upper} arguments! +shell-need-minimum-arguments = Need at least {$minimum} arguments! +shell-need-minimum-one-argument = Need at least one argument! shell-argument-uid = EntityUid From d28208282a71ae4466b454577bafeccfddb79c4f Mon Sep 17 00:00:00 2001 From: nikthechampiongr <32041239+nikthechampiongr@users.noreply.github.com> Date: Sun, 22 Oct 2023 05:49:56 +0000 Subject: [PATCH 24/39] Telekinetic door prying fix (#21150) --- Content.Shared/Prying/Systems/PryingSystem.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Content.Shared/Prying/Systems/PryingSystem.cs b/Content.Shared/Prying/Systems/PryingSystem.cs index 40b77efe228..19e63de29e0 100644 --- a/Content.Shared/Prying/Systems/PryingSystem.cs +++ b/Content.Shared/Prying/Systems/PryingSystem.cs @@ -126,6 +126,7 @@ private bool StartPry(EntityUid target, EntityUid user, EntityUid? tool, float t { BreakOnDamage = true, BreakOnUserMove = true, + BreakOnWeightlessMove = true, }; if (tool != null) From 3f241b439c92a8e49c73777ad26ebb2bcaf3b425 Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Sun, 22 Oct 2023 06:51:01 +0100 Subject: [PATCH 25/39] emitter bolts can mine (#21135) Co-authored-by: deltanedas <@deltanedas:kde.org> --- .../Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index bf834983215..b94191ef027 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -300,6 +300,8 @@ damage: types: Heat: 14 + # mining laser real + - type: GatheringProjectile - type: Tag tags: - EmitterBolt From 082e3b9a46be1ee1da344f9e9df4f0a149aa1b0b Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 22 Oct 2023 01:51:02 -0400 Subject: [PATCH 26/39] Automatic changelog update --- Resources/Changelog/Changelog.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 4b0c6ccb83b..8d4682c0239 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,10 +1,4 @@ Entries: -- author: TaralGit - changes: - - {message: Added open bolt animations for most gun sprites. Use e and z (default - keybinds) to toggle bolt / cycling., type: Add} - id: 4537 - time: '2023-08-13T05:58:08.0000000+00:00' - author: metalgearsloth changes: - {message: Fix the lack of whitelist check for hand gathering., type: Fix} @@ -2907,3 +2901,9 @@ Entries: - {message: Fixed the expeditions console not showing any expeditions., type: Fix} id: 5036 time: '2023-10-21T21:34:00.0000000+00:00' +- author: nikthechampiongr + changes: + - {message: Players can no longer telekinetically pry open doors while they are + not under the effects of gravity., type: Fix} + id: 5037 + time: '2023-10-22T05:49:56.0000000+00:00' From 60bfdc49684f9ca57f00e2b165740a5bc9bb771c Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 22 Oct 2023 01:52:06 -0400 Subject: [PATCH 27/39] Automatic changelog update --- Resources/Changelog/Changelog.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 8d4682c0239..5e0e18b71bb 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,9 +1,4 @@ Entries: -- author: metalgearsloth - changes: - - {message: Fix the lack of whitelist check for hand gathering., type: Fix} - id: 4538 - time: '2023-08-13T07:07:34.0000000+00:00' - author: metalgearsloth changes: - {message: Nerf pickaxe raw damage slightly., type: Tweak} @@ -2907,3 +2902,9 @@ Entries: not under the effects of gravity., type: Fix} id: 5037 time: '2023-10-22T05:49:56.0000000+00:00' +- author: deltanedas + changes: + - {message: 'Emitters now destroy rocks in 1 hit like crushers and PKAs, you can + use them for laser mining.', type: Tweak} + id: 5038 + time: '2023-10-22T05:51:01.0000000+00:00' From e2352fc28eb865eb1d318c3bb363be9c602b9729 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sun, 22 Oct 2023 16:53:15 +1100 Subject: [PATCH 28/39] Update buckle jointrelay (#21079) --- Content.Shared/Buckle/SharedBuckleSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Shared/Buckle/SharedBuckleSystem.cs b/Content.Shared/Buckle/SharedBuckleSystem.cs index 81d479ca34c..7edf2448aed 100644 --- a/Content.Shared/Buckle/SharedBuckleSystem.cs +++ b/Content.Shared/Buckle/SharedBuckleSystem.cs @@ -75,7 +75,7 @@ private void ReAttach( return; _transform.SetLocalRotation(buckleUid, Angle.Zero, buckleTransform); - _joints.RefreshRelay(buckleUid, strapUid); + _joints.SetRelay(buckleUid, strapUid); switch (strapComp.Position) { From a5f1683f5451299f7b2d0c8972b551ebf258305b Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sun, 22 Oct 2023 16:53:39 +1100 Subject: [PATCH 29/39] RCD and tile placement fixes (#21132) --- Content.Shared/RCD/Systems/RCDSystem.cs | 18 +++++++++++++---- Content.Shared/Tiles/FloorTileSystem.cs | 27 ++++++++++++++++++------- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/Content.Shared/RCD/Systems/RCDSystem.cs b/Content.Shared/RCD/Systems/RCDSystem.cs index f94d155d972..ccc47a2fdeb 100644 --- a/Content.Shared/RCD/Systems/RCDSystem.cs +++ b/Content.Shared/RCD/Systems/RCDSystem.cs @@ -11,6 +11,7 @@ using Content.Shared.Popups; using Content.Shared.RCD.Components; using Content.Shared.Tag; +using Content.Shared.Tiles; using Robust.Shared.Audio; using Robust.Shared.Map; using Robust.Shared.Map.Components; @@ -22,17 +23,19 @@ namespace Content.Shared.RCD.Systems; public sealed class RCDSystem : EntitySystem { + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly IMapManager _mapMan = default!; + [Dependency] private readonly INetManager _net = default!; [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; + [Dependency] private readonly ITileDefinitionManager _tileDefMan = default!; + [Dependency] private readonly FloorTileSystem _floors = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedChargesSystem _charges = default!; [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; [Dependency] private readonly SharedInteractionSystem _interaction = default!; - [Dependency] private readonly IMapManager _mapMan = default!; - [Dependency] private readonly INetManager _net = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly TagSystem _tag = default!; - [Dependency] private readonly ITileDefinitionManager _tileDefMan = default!; - [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly TurfSystem _turf = default!; private readonly int RcdModeCount = Enum.GetValues(typeof(RcdMode)).Length; @@ -156,10 +159,17 @@ private void OnDoAfter(EntityUid uid, RCDComponent comp, RCDDoAfterEvent args) var tile = mapGrid.GetTileRef(location); var snapPos = mapGrid.TileIndicesFor(location); + // I love that this uses entirely separate code to construction and tile placement!!! + switch (comp.Mode) { //Floor mode just needs the tile to be a space tile (subFloor) case RcdMode.Floors: + if (!_floors.CanPlaceTile(gridId.Value, mapGrid, out var reason)) + { + _popup.PopupClient(reason, user, user); + return; + } mapGrid.SetTile(snapPos, new Tile(_tileDefMan[comp.Floor].TileId)); _adminLogger.Add(LogType.RCD, LogImpact.High, $"{ToPrettyString(args.User):user} used RCD to set grid: {tile.GridUid} {snapPos} to {comp.Floor}"); diff --git a/Content.Shared/Tiles/FloorTileSystem.cs b/Content.Shared/Tiles/FloorTileSystem.cs index bf757eb49ea..dcf914ccf86 100644 --- a/Content.Shared/Tiles/FloorTileSystem.cs +++ b/Content.Shared/Tiles/FloorTileSystem.cs @@ -1,3 +1,4 @@ +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Numerics; using Content.Shared.Administration.Logs; @@ -123,14 +124,10 @@ private void OnAfterInteract(EntityUid uid, FloorTileComponent component, AfterI if (mapGrid != null) { var gridUid = mapGrid.Owner; - var ev = new FloorTileAttemptEvent(); - RaiseLocalEvent(mapGrid); - if (HasComp(gridUid) || ev.Cancelled) + if (!CanPlaceTile(gridUid, mapGrid, out var reason)) { - if (_netManager.IsClient && _timing.IsFirstTimePredicted) - _popup.PopupEntity(Loc.GetString("invalid-floor-placement"), args.User); - + _popup.PopupClient(reason, args.User, args.User); return; } @@ -177,9 +174,25 @@ private void PlaceAt(EntityUid user, EntityUid gridUid, MapGridComponent mapGrid { _adminLogger.Add(LogType.Tile, LogImpact.Low, $"{ToPrettyString(user):actor} placed tile {_tileDefinitionManager[tileId].Name} at {ToPrettyString(gridUid)} {location}"); - var variant = ((ContentTileDefinition) _tileDefinitionManager[tileId]).PickVariant(); + // TODO: Proper predicted RNG. + var variant = (byte) (_timing.CurTick.Value % ((ContentTileDefinition) _tileDefinitionManager[tileId]).Variants); mapGrid.SetTile(location.Offset(new Vector2(offset, offset)), new Tile(tileId, 0, variant)); _audio.PlayPredicted(placeSound, location, user, AudioHelpers.WithVariation(0.125f, _random)); } + + public bool CanPlaceTile(EntityUid gridUid, MapGridComponent component, [NotNullWhen(false)] out string? reason) + { + var ev = new FloorTileAttemptEvent(); + RaiseLocalEvent(gridUid, ref ev); + + if (HasComp(gridUid) || ev.Cancelled) + { + reason = Loc.GetString("invalid-floor-placement"); + return false; + } + + reason = null; + return true; + } } From e3eaba1ebb6406f168ad2841aa8a5737fc034ee0 Mon Sep 17 00:00:00 2001 From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Sun, 22 Oct 2023 16:54:30 +1100 Subject: [PATCH 30/39] Fix inventory transform bug (#21144) --- .../Inventory/InventorySystem.Equip.cs | 20 +++++-------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/Content.Shared/Inventory/InventorySystem.Equip.cs b/Content.Shared/Inventory/InventorySystem.Equip.cs index f3181a87b16..90c9f0e1e0f 100644 --- a/Content.Shared/Inventory/InventorySystem.Equip.cs +++ b/Content.Shared/Inventory/InventorySystem.Equip.cs @@ -27,6 +27,7 @@ public abstract partial class InventorySystem [Dependency] private readonly SharedHandsSystem _handsSystem = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly INetManager _netMan = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; private void InitializeEquip() { @@ -372,20 +373,10 @@ public bool TryUnequip(EntityUid actor, EntityUid target, string slot, [NotNullW } } - if (force) - { - slotContainer.ForceRemove(removedItem.Value); - } - else - { - if (!slotContainer.Remove(removedItem.Value)) - { - //should never happen bc of the canremove lets just keep in just in case - return false; - } - } + if (!slotContainer.Remove(removedItem.Value, force: force)) + return false; - Transform(removedItem.Value).Coordinates = Transform(target).Coordinates; + _transform.DropNextTo(removedItem.Value, target); if (!silent && Resolve(removedItem.Value, ref clothing, false) && clothing.UnequipSound != null && _gameTiming.IsFirstTimePredicted) { @@ -405,8 +396,7 @@ public bool TryUnequip(EntityUid actor, EntityUid target, string slot, [NotNullW SoundSystem.Play(clothing.UnequipSound.GetSound(), filter, target, clothing.UnequipSound.Params.WithVolume(-2f)); } - inventory.Dirty(); - + Dirty(target, inventory); _movementSpeed.RefreshMovementSpeedModifiers(target); return true; From fbf4333a03a701df698671b131c73ec485d46c2c Mon Sep 17 00:00:00 2001 From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Sun, 22 Oct 2023 16:55:10 +1100 Subject: [PATCH 31/39] Maybe fix hand test failures (#21157) --- Content.Client/Hands/Systems/HandsSystem.cs | 3 ++- Content.Shared/Hands/Components/HandsComponent.cs | 3 ++- Content.Shared/Hands/EntitySystems/SharedHandsSystem.cs | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Content.Client/Hands/Systems/HandsSystem.cs b/Content.Client/Hands/Systems/HandsSystem.cs index f44bc1ec979..ed40589f7fd 100644 --- a/Content.Client/Hands/Systems/HandsSystem.cs +++ b/Content.Client/Hands/Systems/HandsSystem.cs @@ -95,7 +95,8 @@ private void HandleComponentState(EntityUid uid, HandsComponent component, ref C } } - component.SortedHands = new(state.HandNames); + component.SortedHands.Clear(); + component.SortedHands.AddRange(state.HandNames); var sorted = addedHands.OrderBy(hand => component.SortedHands.IndexOf(hand.Name)); foreach (var hand in sorted) diff --git a/Content.Shared/Hands/Components/HandsComponent.cs b/Content.Shared/Hands/Components/HandsComponent.cs index c1664289ce9..0bece1d141a 100644 --- a/Content.Shared/Hands/Components/HandsComponent.cs +++ b/Content.Shared/Hands/Components/HandsComponent.cs @@ -97,8 +97,9 @@ public sealed class HandsComponentState : ComponentState public HandsComponentState(HandsComponent handComp) { + // cloning lists because of test networking. Hands = new(handComp.Hands.Values); - HandNames = handComp.SortedHands; + HandNames = new(handComp.SortedHands); ActiveHand = handComp.ActiveHand?.Name; } } diff --git a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.cs b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.cs index e1de636969b..6b786fdfaa8 100644 --- a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.cs +++ b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.cs @@ -69,9 +69,9 @@ public virtual void RemoveHand(EntityUid uid, string handName, HandsComponent? h if (!handsComp.Hands.Remove(handName, out var hand)) return; + handsComp.SortedHands.Remove(hand.Name); TryDrop(uid, hand, null, false, true, handsComp); hand.Container?.Shutdown(); - handsComp.SortedHands.Remove(hand.Name); if (handsComp.ActiveHand == hand) TrySetActiveHand(uid, handsComp.SortedHands.FirstOrDefault(), handsComp); From 975a8e89e78757c4b6bb07dffce5fb177ff93cf1 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 22 Oct 2023 01:55:34 -0400 Subject: [PATCH 32/39] Automatic changelog update --- Resources/Changelog/Changelog.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 5e0e18b71bb..259ff56d488 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,15 +1,4 @@ Entries: -- author: metalgearsloth - changes: - - {message: Nerf pickaxe raw damage slightly., type: Tweak} - - {message: Nerf pickaxe and drill structural damage., type: Tweak} - id: 4539 - time: '2023-08-13T07:07:48.0000000+00:00' -- author: metalgearsloth - changes: - - {message: Fix bolt-less gun manual cycling (namely the wt550)., type: Fix} - id: 4540 - time: '2023-08-13T07:08:00.0000000+00:00' - author: LightVillet changes: - {message: Fixed spilling empty containers, type: Fix} @@ -2908,3 +2897,14 @@ Entries: use them for laser mining.', type: Tweak} id: 5038 time: '2023-10-22T05:51:01.0000000+00:00' +- author: metalgearsloth + changes: + - {message: Fix tile placement mispredicting and flickering., type: Fix} + id: 5039 + time: '2023-10-22T05:53:39.0000000+00:00' +- author: ElectroJr + changes: + - {message: Fixed a bug that caused items to get stuck to vehicles when unequipping + clothing., type: Fix} + id: 5040 + time: '2023-10-22T05:54:30.0000000+00:00' From 7c2a00d36092820809f4176f1868ada4037079ee Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sun, 22 Oct 2023 17:00:23 +1100 Subject: [PATCH 33/39] Update submodule to 171.0.0 (#21158) --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index 58e3a4eb4ad..554e0777b1b 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit 58e3a4eb4ada451395c7d961f4b6d724756a7c26 +Subproject commit 554e0777b1ba6ba096d8f4407d5c35ecc7b0f22f From c1bc177d1e3a02467bd0538eaa8e2b86445725c6 Mon Sep 17 00:00:00 2001 From: iacore <74560659+iacore@users.noreply.github.com> Date: Sun, 22 Oct 2023 06:04:24 +0000 Subject: [PATCH 34/39] Make secure crates weldable, for real this time (#21037) --- .../Entities/Structures/Storage/Crates/base_structurecrates.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Structures/Storage/Crates/base_structurecrates.yml b/Resources/Prototypes/Entities/Structures/Storage/Crates/base_structurecrates.yml index 44800a3e22c..bf8003255f2 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Crates/base_structurecrates.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Crates/base_structurecrates.yml @@ -80,7 +80,7 @@ - type: ResistLocker - type: entity - parent: CrateGeneric + parent: CrateBaseWeldable id: CrateBaseSecure components: - type: Lock From dc9f9b55eed9107bc83c65d7d383711c47ee24a1 Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Sun, 22 Oct 2023 07:05:48 +0100 Subject: [PATCH 35/39] ignition source refactor (#21044) Co-authored-by: deltanedas <@deltanedas:kde.org> --- .../IgnitionSource/IgniteOnTriggerSystem.cs | 16 +++++----- .../IgnitionSource/IgnitionSourceComponent.cs | 11 +++---- .../IgnitionSource/IgnitionSourceSystem.cs | 31 +++++++++---------- 3 files changed, 27 insertions(+), 31 deletions(-) diff --git a/Content.Server/IgnitionSource/IgniteOnTriggerSystem.cs b/Content.Server/IgnitionSource/IgniteOnTriggerSystem.cs index 1e425886996..256a8578642 100644 --- a/Content.Server/IgnitionSource/IgniteOnTriggerSystem.cs +++ b/Content.Server/IgnitionSource/IgniteOnTriggerSystem.cs @@ -35,21 +35,21 @@ public override void Update(float deltaTime) if (_timing.CurTime < comp.IgnitedUntil) continue; - _source.SetIgnited(uid, false, source); + _source.SetIgnited((uid, source), false); } } - private void OnTrigger(EntityUid uid, IgniteOnTriggerComponent comp, TriggerEvent args) + private void OnTrigger(Entity ent, ref TriggerEvent args) { // prevent spamming sound and ignition - TryComp(uid, out var delay); - if (_useDelay.ActiveDelay(uid, delay)) + TryComp(ent, out var delay); + if (_useDelay.ActiveDelay(ent, delay)) return; - _source.SetIgnited(uid); - _audio.PlayPvs(comp.IgniteSound, uid); + _source.SetIgnited(ent.Owner); + _audio.PlayPvs(ent.Comp.IgniteSound, ent); - _useDelay.BeginDelay(uid, delay); - comp.IgnitedUntil = _timing.CurTime + comp.IgnitedTime; + _useDelay.BeginDelay(ent, delay); + ent.Comp.IgnitedUntil = _timing.CurTime + ent.Comp.IgnitedTime; } } diff --git a/Content.Server/IgnitionSource/IgnitionSourceComponent.cs b/Content.Server/IgnitionSource/IgnitionSourceComponent.cs index d5a53c6ddb1..6b6a16000f9 100644 --- a/Content.Server/IgnitionSource/IgnitionSourceComponent.cs +++ b/Content.Server/IgnitionSource/IgnitionSourceComponent.cs @@ -1,15 +1,14 @@ namespace Content.Server.IgnitionSource; /// -/// This is used for... +/// This is used for creating atmosphere hotspots while ignited to start reactions such as fire. /// -[RegisterComponent] -[Access(typeof(IgnitionSourceSystem))] +[RegisterComponent, Access(typeof(IgnitionSourceSystem))] public sealed partial class IgnitionSourceComponent : Component { - [DataField("ignited")] - public bool Ignited = false; + [DataField, ViewVariables(VVAccess.ReadWrite)] + public bool Ignited; - [DataField("temperature", required: true)] + [DataField(required: true), ViewVariables(VVAccess.ReadWrite)] public int Temperature; } diff --git a/Content.Server/IgnitionSource/IgnitionSourceSystem.cs b/Content.Server/IgnitionSource/IgnitionSourceSystem.cs index b70cf7a9a7c..0a714063f41 100644 --- a/Content.Server/IgnitionSource/IgnitionSourceSystem.cs +++ b/Content.Server/IgnitionSource/IgnitionSourceSystem.cs @@ -7,34 +7,32 @@ namespace Content.Server.IgnitionSource; /// /// This handles ignition, Jez basically coded this. /// -/// public sealed class IgnitionSourceSystem : EntitySystem { - /// - /// - [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!; - [Dependency] private readonly TransformSystem _transformSystem = default!; + [Dependency] private readonly AtmosphereSystem _atmosphere = default!; + [Dependency] private readonly TransformSystem _transform = default!; public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnIsHot); + + SubscribeLocalEvent(OnIsHot); } - private void OnIsHot(EntityUid uid, IgnitionSourceComponent component, IsHotEvent args) + private void OnIsHot(Entity ent, ref IsHotEvent args) { - SetIgnited(uid, args.IsHot, component); + SetIgnited((ent.Owner, ent.Comp), args.IsHot); } /// /// Simply sets the ignited field to the ignited param. /// - public void SetIgnited(EntityUid uid, bool ignited = true, IgnitionSourceComponent? comp = null) + public void SetIgnited(Entity ent, bool ignited = true) { - if (!Resolve(uid, ref comp)) + if (!Resolve(ent, ref ent.Comp)) return; - comp.Ignited = ignited; + ent.Comp.Ignited = ignited; } public override void Update(float frameTime) @@ -42,17 +40,16 @@ public override void Update(float frameTime) base.Update(frameTime); var query = EntityQueryEnumerator(); - while (query.MoveNext(out var source, out var component, out var transform)) + while (query.MoveNext(out var uid, out var comp, out var xform)) { - if (!component.Ignited) + if (!comp.Ignited) continue; - if (transform.GridUid is { } gridUid) + if (xform.GridUid is { } gridUid) { - var position = _transformSystem.GetGridOrMapTilePosition(source, transform); - _atmosphereSystem.HotspotExpose(gridUid, position, component.Temperature, 50, source, true); + var position = _transform.GetGridOrMapTilePosition(uid, xform); + _atmosphere.HotspotExpose(gridUid, position, comp.Temperature, 50, uid, true); } } - } } From 002d3be16b3fa2e3da383e4c6608f4efcfc90c37 Mon Sep 17 00:00:00 2001 From: EnDecc <33369477+Endecc@users.noreply.github.com> Date: Sun, 22 Oct 2023 03:34:06 -0400 Subject: [PATCH 36/39] The Quartermaster's Requisition Digi-board (#21023) * Added sprites * Added item in game * Ditched glowing light indicator to simplify implementation * Added clipboard to locker fill * Added traitor objective * forgor meta.json * forgor clip textures on front-facing in-hand sprites * lowered concussiveness of bureaucracy * added remote cargo ordering, paper sucking, and removed paper on spawn * slightly reduce storage capacity so it can fit in backpacks --- Resources/Locale/en-US/cargo/qm-clipboard.ftl | 1 + .../Catalog/Fills/Lockers/heads.yml | 1 + .../Entities/Objects/Misc/paper.yml | 70 ++++++++++++++++++ .../Prototypes/Objectives/objectiveGroups.yml | 1 + Resources/Prototypes/Objectives/traitor.yml | 13 ++++ .../Misc/qm_clipboard.rsi/equipped-BELT.png | Bin 0 -> 5427 bytes .../Misc/qm_clipboard.rsi/inhand-left.png | Bin 0 -> 6146 bytes .../Misc/qm_clipboard.rsi/inhand-right.png | Bin 0 -> 6077 bytes .../Objects/Misc/qm_clipboard.rsi/meta.json | 35 +++++++++ .../Misc/qm_clipboard.rsi/qm_clipboard.png | Bin 0 -> 5356 bytes .../qm_clipboard.rsi/qm_clipboard_over.png | Bin 0 -> 4883 bytes .../qm_clipboard.rsi/qm_clipboard_paper.png | Bin 0 -> 5374 bytes .../qm_clipboard.rsi/qm_clipboard_pen.png | Bin 0 -> 4830 bytes 13 files changed, 121 insertions(+) create mode 100644 Resources/Locale/en-US/cargo/qm-clipboard.ftl create mode 100644 Resources/Textures/Objects/Misc/qm_clipboard.rsi/equipped-BELT.png create mode 100644 Resources/Textures/Objects/Misc/qm_clipboard.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Misc/qm_clipboard.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Misc/qm_clipboard.rsi/meta.json create mode 100644 Resources/Textures/Objects/Misc/qm_clipboard.rsi/qm_clipboard.png create mode 100644 Resources/Textures/Objects/Misc/qm_clipboard.rsi/qm_clipboard_over.png create mode 100644 Resources/Textures/Objects/Misc/qm_clipboard.rsi/qm_clipboard_paper.png create mode 100644 Resources/Textures/Objects/Misc/qm_clipboard.rsi/qm_clipboard_pen.png diff --git a/Resources/Locale/en-US/cargo/qm-clipboard.ftl b/Resources/Locale/en-US/cargo/qm-clipboard.ftl new file mode 100644 index 00000000000..1f77aa98f0d --- /dev/null +++ b/Resources/Locale/en-US/cargo/qm-clipboard.ftl @@ -0,0 +1 @@ +qm-clipboard-computer-verb-text = Toggle Requests diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index bf1ca09eadb..0d000cc5dc8 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -6,6 +6,7 @@ - type: StorageFill contents: - id: ClothingNeckCloakQm + - id: BoxFolderQmClipboard - id: ClothingHeadsetCargo - id: ClothingUniformJumpsuitQMTurtleneck - id: ClothingUniformJumpskirtQMTurtleneck diff --git a/Resources/Prototypes/Entities/Objects/Misc/paper.yml b/Resources/Prototypes/Entities/Objects/Misc/paper.yml index 5b4e5e24bac..132d6b7aff9 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/paper.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/paper.yml @@ -494,6 +494,76 @@ types: Blunt: 6 +- type: entity + id: BoxFolderQmClipboard + parent: BoxFolderBase + name: requisition digi-board + description: A bulky electric clipboard, filled with shipping orders and financing details. With so many compromising documents, you ought to keep this safe. + components: + - type: Sprite + sprite: Objects/Misc/qm_clipboard.rsi + layers: + - state: qm_clipboard + - state: qm_clipboard_paper + map: ["qm_clipboard_paper"] + visible: false + - state: qm_clipboard_pen + map: ["qm_clipboard_pen"] + visible: false + - state: qm_clipboard_over + - type: ContainerContainer + containers: + storagebase: !type:Container + ents: [] + pen_slot: !type:ContainerSlot {} + - type: ItemSlots + slots: + pen_slot: + name: Pen + whitelist: + tags: + - Write + insertOnInteract: true + - type: Item + sprite: Objects/Misc/qm_clipboard.rsi + size: 30 + - type: Clothing + slots: [belt] + quickEquip: false + sprite: Objects/Misc/qm_clipboard.rsi + - type: Storage + capacity: 90 + quickInsert: true + whitelist: + tags: + - Document + - type: StorageFill + contents: [] #to override base folder fill + - type: ItemMapper + mapLayers: + qm_clipboard_paper: + whitelist: + tags: + - Document + qm_clipboard_pen: + whitelist: + tags: + - Write + - type: CargoOrderConsole + - type: ActivatableUI + verbText: qm-clipboard-computer-verb-text + key: enum.CargoConsoleUiKey.Orders + - type: UserInterface + interfaces: + - key: enum.CargoConsoleUiKey.Orders + type: CargoOrderConsoleBoundUserInterface + - key: enum.StorageUiKey.Key + type: StorageBoundUserInterface + - type: MeleeWeapon + damage: + types: + Blunt: 10 + # Stamps - type: entity name: generic rubber stamp diff --git a/Resources/Prototypes/Objectives/objectiveGroups.yml b/Resources/Prototypes/Objectives/objectiveGroups.yml index 01f3dd41094..2ddf78e032b 100644 --- a/Resources/Prototypes/Objectives/objectiveGroups.yml +++ b/Resources/Prototypes/Objectives/objectiveGroups.yml @@ -16,6 +16,7 @@ NukeDiskStealObjective: 1 MagbootsStealObjective: 1 CorgiMeatStealObjective: 1 + ClipboardStealObjective: 1 CaptainGunStealObjective: 0.5 CaptainJetpackStealObjective: 0.5 HandTeleporterStealObjective: 0.5 diff --git a/Resources/Prototypes/Objectives/traitor.yml b/Resources/Prototypes/Objectives/traitor.yml index cc4324e729c..f0e8daad3d1 100644 --- a/Resources/Prototypes/Objectives/traitor.yml +++ b/Resources/Prototypes/Objectives/traitor.yml @@ -196,6 +196,19 @@ prototype: ClothingShoesBootsMagAdv owner: job-name-ce +## qm + +- type: entity + noSpawn: true + parent: BaseTraitorStealObjective + id: ClipboardStealObjective + components: + - type: NotJobRequirement + job: Quartermaster + - type: StealCondition + prototype: BoxFolderQmClipboard + owner: job-name-qm + ## hop - type: entity diff --git a/Resources/Textures/Objects/Misc/qm_clipboard.rsi/equipped-BELT.png b/Resources/Textures/Objects/Misc/qm_clipboard.rsi/equipped-BELT.png new file mode 100644 index 0000000000000000000000000000000000000000..463095e280554cc4a92f088d5683a06a6a612364 GIT binary patch literal 5427 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/qm_clipboard.rsi/inhand-right.png b/Resources/Textures/Objects/Misc/qm_clipboard.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..828ff7061f53169e7bd9d4f34c7c02fbb3fc0f5b GIT binary patch literal 6077 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 LV88vov8n$B&iWzl literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/qm_clipboard.rsi/qm_clipboard_over.png b/Resources/Textures/Objects/Misc/qm_clipboard.rsi/qm_clipboard_over.png new file mode 100644 index 0000000000000000000000000000000000000000..bf3c772ec38ce643c1f4413a85aa751d5ced590f GIT binary patch literal 4883 zcmeHLc~}$I7LOoX5QA zuKVj3)?{uM3^U8WUg6>=YH2n}quQR$e(7`g#Wx{swgZ-~U-3ltr20+SITszbX!Wm#=J$$(}EczrJbny;qqLXav&Xalv`@Nf zch=X*G%uHYVorHLrR&1RK}Tk#Uvw(zzd^Em-Yd6;pWMoJ+%V3vj5=7We{s*Z(>Z9_ zq}+mQg4Lbc#^tiSrD+Aof|rHZ{rcM@bA#)Pzk^;MxbXAN3n57v4F64?Dd*9k0}e-v z%1%|ToIHfRAqC|(+~K&G%+`iTY#PaNpn4=< zY-7K85j<|q;=|Jxx<%QA+CxV-U$-X*1`M?XO+xUwo8{+7nF~( z-%fGm-kMZgGNks4pv}wmqa-rv%7EqyeM`XW>lqOfM%UbmFIkxq6HztdOiDsw;+~UJ zbo|ZbSv4tHoWjYrwaDJELtAHlP|0PW0 zdE}cB@v38Ml$F?nt>--BH781fw;eqB%am1Dwoc}&x)Wx9%gNh$Y;91|XkOOpl#{k| zyZDk8@4+{t(+~1(qccq{uGI@ukJK1i7MGx|8NLT&Vq2h$0RxUnDm<^WbvL!Sh7~;Y^oqwm@`9jfEZg<&E@5h>ZVWR$*KO@V&{u*vg^_^ zb(7nQ6%&v9KTnRTxUCCNr%ju6V1ew)cJHQ9gKXLRYODEGPZ8fe&AT2otxbGBVE3YW zS>5M#ZT?5+HU7K1^6cir&B8k!im$uRD_trtmOuYIAKe+6T48Yun#GCSy~(Bi;obZ9 zNv2R&uG)S=gA1+`=k1tuYlx|(L)V&j=}`64rSn#CXYnjs5{J&dxrN&mU696~(OI~0 z!RtlS_sFj2cAXj8O?r3W<7zFe%{Q*jZ|sM^IuktR&V~*Wso#8+SR5x2i{GwNur@35 zmx`jB#tk`|mRcR3BK$2ZoG$ioaNbB+9DkHDHBd7@(JzMDJ$HnQq@=X!T8hqs?s{cbA=+Ug>?d?tbnK$6av`>pE3T^D82=;h?#|P>rFHS! z>Yj@_oeS-<1DdkS#nI_bl1ZK|(DkF&+uLny zcX(5H^@`8Y8p+6@!47$8qaULEEq~Z-E5h=Jr6xY?ZxPuh&1g=`vZ?!a6Hl1()X@>Q z^}6UMy<|(xDVQ@-dOjlc@!6-Ir9Zv)&X*0n*Jx*x6^pm$SBxbkKbX;J&*%4#oVdK9 z<8jB29sm7PbgttMhmAh^{rBnK6G1y2tO9Lwsx(H3;uL1J8wL2N3UN{1uNDif13mJEgH6-r@zcw{dG zcoR`FjYgf2M$5^`q2{otxITl%5C{Y`I+Mm^!axHyz z*Fpp)BFD3hA_@hJLvQ2L=%mtj@LEGJ3xE%r8PU-gR60$gq4l*e7$Zyoq&J|ywJ;=r zZy#DbX27%cC>CMDv_}8F5DN62y)Ij?wx**%X_y+*096C<%J{%#ltdc$&VryIL#5GK ztpM2{Xc|?@_hfw#8!=){r*9y@{2lHG+HZ5WDg!O4R2Yt<*+h7fa1n*@FI3>DN+Gm9 zVl1T+rSn;^k}XicY?Q}^L%P z3}zroKFsDR6tG;u;lmgQMdT=xC15kSeIO?3RiG*nb>FB6C;n zbGdSuFXz!=Hisu?Ddc>GK*_U0DNtb~uGb)7I#n7Z1EcA*8P)-UaA8=SL_}dy>F*_R zYQ(4n24D@Svi0cz@TrHvyK|zG2wZNf}o@t3z8GuGEQS-f3FT-Z` zy!9*swaPjKLDs?*B502j17gAyR!6|DX9&$iv>6y!;k_mGR<8P+>0&8S0iR8$!^90{ zGx!V`L6{iK!Z11mRDzPFb(U~lm zL5CTf1O`*c<_PHm3avL;8nLF|W*b8LA3j2?3VoUYul0lc#lS}?f2yuebbS;9AEo@My8dr;k>783FfI56lmj+1sJl%B z*a+FnCq{*n1`@})RlmOk5+_}BvVlZ$b|=n$r1FZvKK!)_lAIBr@n5^bb>9h7%HD%7 nc8wNdnC*|9b4~(uus_z?P#qyJa`2Ql#H%DCHhlZ|^tpclk%2dP literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/qm_clipboard.rsi/qm_clipboard_paper.png b/Resources/Textures/Objects/Misc/qm_clipboard.rsi/qm_clipboard_paper.png new file mode 100644 index 0000000000000000000000000000000000000000..073471721a39b03e50dc101d9f0c5cfe6d7c4fdd GIT binary patch literal 5374 zcmeHKX;>528V-UG0V}SEfW+VeO7=h|fw0ILG00YAvoOg_U;n_m6U@+4;9xlGHoFZNd^&QXfe_nz%uS9M+ZcKGP< zojEN%IrC<_kEH)yhIy5x$p`}y8r{x8_cy&TqyfEbhvsER&V~3dG=CZXX1Yb_rLm;+ z>zAx%yd1P^{c$W41VUdg-gCkE>7g;7;xpFDHv??K<9e@0!9*!iyQ7ZFbnEQwk=gIe z?X%Kb+3Z;VHC=D}9gUU|ahA%D;_V1_=(yF3)&Fxl!l>vV69QU&Q z!ph*ND1)ws+8#wy>a~Q2x8!->)NOcFS)Dv=6yIXuoVLx!{YT`f%ietWVMS0xNQJ?w z6{H}z|K!(eZ(=Ji+DdM~kE+(iZY*-^+4?N)d3<}H8^P3L%q_7fwd5c}@2L#G)5ySc zPf`tQ3bwB|-?gOBPugcv9_aJH`)1L80N7Xa@k z7cCdAL+;}{%Du0Zo!)p?(6uM+@Zb9L2dWf@#2LmjqZ6|abAWRAapm(>73Vuk4anr<)x>6$_?DK95H+_gHa!JkR#q={% zmhVdF4INI_Z38t(IfTZIMh#XS$oh7}qeW3!72C#EPAhu2I%W>*{IC0a7H;|>AsWdl z)_A!vg`zjIKZt*jyy}FHHs3D6rgMvwT+@+~r5hqF-%EolYeV$wAKZkZQiZ30n<1xm z-^^_@I!fdzA6x=PGOi*uI$=c>cGHd~VeLDuj@IrrG1Rvja4BocIkTPu@0{wx`KPteaO zJl-GJFmto;()He-++Qb->GHgqVsQ`Xc8hHEc5ui>c?+J{20gk`ZN6dLRvb@1;HdR8 z)}THWV~|}3dKHD`q+Je38;+0kzFo-7uIi{~U$i;BGq+^74zt{7PyO|4|2gkqcE3Zh zruU4YCrdciAG0@p$i6!M4)3DpfY0>-j@Rkt)616Bhh1qpu>94szA(4VMu`mb^KfD_jvjYY% zoZ6UmDmJM)2+p`l)37*Lc3}4UMR{R!UmwHbb{M2mmQtNP1@p?KreQCJho2G8m*2WP z&Ri*L3{P^$?c*1SXGsh$M;9zmCf>uY$fQ1DKB@6CT>NcsUGK25GW+5;`;4xZ_s8GE zp74IiE6WTDTD$!~ddbOR-!ly5@jv4;%YBcOKWC5WrA&=k(iBtR>=8bVQ;Kt3X*$;* z#Je3@m61#zxUlYZN|l2vF+FrHS!PwFJ+*j1=WWW}+Y6e@ILj>O>m-C(J>qK(4^26e z3MZO{1U%9jW^1k$UI>etQvOpZgB3i2#Y!{{ubXnaG>NfE$;-Iyt|3paj?Bw!cx9C6 zx3KT*)G1M3l7YlRdrZ(n;g~i6Xt{aj)DJ!#JTrLb4g0UbA)Vp{vbuh^=b?xFAhEc96=CgE{v6GapoAISB_ zIZI?Pj!vW#$pqIpWCIm%uZy#jK?0Vqi`ygw+GFD*6$&YfM2d}#CC1W-5?KU^!elZ@ zWGabDC7>1rdAwKw#u3DFa}~q{h6^m`%Mhsok%)0BOpqsuQLyoNRF8WXpGeB(zK0jf zCs{!GAjN@F5`{=6iA1E2J>&}44JgQDK>z3=_eT$Ok}oWm#K`!t>jqe?F#i|=;=lKo z#>k@8=|FrE91V+5Q#m>+<&z=ZIb84e9x4hV5Rp{vg_8Y=r2-LrAnTLZR2p?U9|wZE zzsLQ=`d#j7W7LYvWw}WBF{X#i935fn!(SAb$Ztb#(pi3o~AqcO-ZnE?{4>2!!dr&GuTrU0@g05ls4 z54HgSngI9+VvP(zs}hX5CfKLD*YaT?0s62>g zt%id5EH{Zv1ftW4h`W zWiY6a$owUeXf|FI6i(%-E^wUP#I$%Ia?~PTRr8Zo?+34+=uIqwXhf~T;nao80{Ihz z$iWRTq#g+Mn^5s1L2(3(uJFl{dM8KzVY+xW5RXg-(0QiwsRTN}XApRhHJJd>05X%o zqfi)>iS*v1%OwIuEGUDWBG63HY|s)?XM?ktB-8TKXksH_6;os?jeyny#oC`jWzo?u z4Nsa(mZVzK@3OTc{SO~@YJ-n90n~3ohHftCUPXGpSxxe#qVQjAlk@N|j(|dc8RWD0 z{X*9lx;~46&ocf}U0>+>ECxQy_)B&D-{{i)@VWzw(SJa(=*vvmakEF$D= zsrvkt_jnYQOp|&9$uStc*{VweQ&2b`73wHBTvr{X?hJ$FD|D;PVo=d-j*F9jU=u%l z{?wB2Ir`-A#Q`9)^T}pk{lR^*-4^9R9u&ImjU0;@KjprqU90E$rmPO#p>yo@A8W%r zs9BKCt-4pclhNkH4a)DicDq{tR^efNRcrIzq`&5;L|!-u79Y`U&)Ih3B)GH46Wg%q zazjJI@M!-s?I6Vd@K?nMw&<_kDcPpSUtCG7$ue^o|E)XvK#QuUt!fdru3fg68?*9< zT2JI3tnGgE;_k>A&Gzk^PnskV=oahsTfcI=qC9P$PkaV+Cb`Ag6}k*Q+Z4CXOZi54Ra;h*v_ntb+tIpu5ifD{n9bg+CY_s- zozTP|veH8=Yn!cKIlg?`2{-$Kr1J1cw%5~dUl*U~a1vd29Z*ypyQK+!=rL;C!i!9OHT89Aw?t$&T= zeag#arp2$81{a`Fqn9VgHK=o*gy&uorSGSQ6|P8M`yKBL5vi+B%Fc_5Sz?km53&R; zv=42SIK#hSez!Wyj1By^V^L3Lc7t!{@9%=C$1yE;?so3-57^~@{>J6CO$`e)k1E#@ zeNXi(I$P{7*M4r}z0$+( z!!#K;DAq8J(L*?pg$RUWfJKXbO)9r8zYsAbxxmkz)s60-0aULXnn77+2Tn{0M^7i|2-Xn^j zL$qqQQ>&mw8`ArZpTSjm=Z^AvEvM-{J+wJF^2}pXPhF^oPG>$o<*{{f(Yh#3voEw+ zFs)y5o;-1#u5xs?uTb%yoyoGxyLRjeOt)XRNA_o`Qv7u*ES!| zzj7i}Crmk0mscc9S<*m1<5n@zJw#jsTpfk#aP?^hgIjQT~Z=r;;UQt-K*G@wKc5iyBFfl^h*yGd5ntCgw=doE2~;Y zYrL{tdoIU)oZX$D2L%SUo$|%DpTxxn+4&AvJezs3$KU z?V|Cs;bA=EQMaeCWDFYeg%efp7tF7N!Ig;C-ov$kC;`F%e1{r#N|{dW(17k}eS@;YAG=mPjm zy$AWi?a%m#qPHgl8(Zcq=}Pw>@t(6?v~uCKWzMeEtL%0=FB*SW@*}o>W%=1hIXf@; zG!#G3E!Y^*d^skvz7hA`7HClkULBStyct(AwyhdVp%PUs15Y2OPIA?7LQ#G3PHtgj!s(`D`j3!8YD_r?{=RMqwKox))K@x+{PcoR{q z9Zb2LPb>DgZ@EL8n9peuwj7#1Y)tmu>buWJ+%Np^+)cwTR6WeRL#vE_q$tmii<|lH zvgKR%ZIK<}-`{&KGrvljIp&D#o~y>{*rBQV6c~)9A|`8OwC)weR_J% zyTw0G31u#y?S|@oOZz!&dFt4;_|^@Nx^l_53GR+r3BHeszR#c8?OsY+M$L+O-1oW2 zerC$)gjBn#AGh(b_;wnNvLANEOWJ79H03NBC%qIptMx+r(EMW^!!0vLJ~--NmpYw# zYAKlv#XU-S(@!Ai8y30t*XGvdBh5G8i!L@lbKK&guYQOQj|4N)T@7YotaKViP#Pw# zq!c96tkHp42|)o<%sQM%C5^CxOj2t_jAu1R8L(O@V$AfHqEelhOjbu^>B$*c)8#}~ zDj`%drc9;>m@xpLA&od})}(0-m|4WI;bP$4DrPZYn~5=1#E6wf!(vKL!dxboi6Wt9 z^*jz^G93=kD^-{*B&-JlJc$^|Mxzd6u}mft)8xmb^hqqXP$*=f92SRz01L#BsWswe zL~HQ2LUdz1q_AY9fy&SmWavCnYxM37p(H-~>oW9dwsMpNi%cUmz|;Vu zvOfzME|Erm^srKpq}J$cUV!Y+ERAZ_C$c`v&8o4L(>oF1{t@>x>kqZtjDeL@iiJ=_ zhBZA&h=^g0k0~iat;B4%0+Nez2sVlcP#%hKae)94@c2SR$ycyRo*&PjAQio!BwB+J z*Ak=^3V<`!0EbO-c{~n>izpRr9>Nu{6$sAeau5No@Z8 z0a#>Od%maZXOQXLPu-g!O>I-bu&r@1oahc>z~_-lTOi=qts;_fZ4wD~cuz}xkgNY@ zxs<3t<%jYGh#x^J5ia4cKm;7zAF%C*6R1+D#7W|FbOWU_ns7ZClmsdT)qobVRRfRj zA#=j#_NHXg$`s1+LqKD({pD;PhH^13m%-{OmSx@3AF2&t{e_PJn?bK30Q|aTV7P!; z#rim`dib(Z_z%8%*5MzF0HD7H`67P5()E?DFJj<}jK6l*SGvB4fiE)t+Fk!Qy6B&d zJERu;12TcbjO&7mPH+(Fr-%#>fd*OM7mJ>}29o}|h&TfTIk{S|K2ULqI}kb=CDKsG z`*i0aeSJ6FnCJsUlO!QQ^4Qv^=PL(7D9t`-!wSnUW7h~ZYcYCW`<27Tee8gd`}%{< sG3#DkzaeZZt}R^fO;*Z&&tv?d4+5MHB$VfZLmC80LZ^r92~N!YA3p0PEC2ui literal 0 HcmV?d00001 From ef0c0797246e7e20a72e21bf305b6464680b8412 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 22 Oct 2023 03:35:12 -0400 Subject: [PATCH 37/39] Automatic changelog update --- Resources/Changelog/Changelog.yml | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 259ff56d488..46822fde57c 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,9 +1,4 @@ Entries: -- author: LightVillet - changes: - - {message: Fixed spilling empty containers, type: Fix} - id: 4541 - time: '2023-08-13T07:08:54.0000000+00:00' - author: EmoGarbage404 changes: - {message: You can no longer keep a cyborg's UI open after closing the panel., @@ -2908,3 +2903,11 @@ Entries: clothing., type: Fix} id: 5040 time: '2023-10-22T05:54:30.0000000+00:00' +- author: Endecc + changes: + - {message: 'Added the Requisition Digi-board, a wireless cargo computer (and high-capacity + clipboard) for the Quartermaster''s Locker.', type: Add} + - {message: 'Added a new Steal objective for traitors, as this new fancy clipboard + has access to most of Nanotrasen''s accounting details!', type: Add} + id: 5041 + time: '2023-10-22T07:34:06.0000000+00:00' From 988bfa5c0961436256a5839ee0e0ca89742445e7 Mon Sep 17 00:00:00 2001 From: stopbreaking <126102320+stopbreaking@users.noreply.github.com> Date: Sun, 22 Oct 2023 09:53:13 -0400 Subject: [PATCH 38/39] Replaced Wieldable DoAfter with UseDelay (#18880) Co-authored-by: metalgearsloth --- .../Components/WieldableComponent.cs | 3 - Content.Shared/Wieldable/WieldableSystem.cs | 73 ++++++++----------- .../Objects/Weapons/Guns/Basic/base_pka.yml | 2 + .../Entities/Objects/Weapons/Guns/Bow/bow.yml | 3 +- .../Objects/Weapons/Guns/LMGs/lmgs.yml | 2 + .../Objects/Weapons/Melee/baseball_bat.yml | 2 + .../Objects/Weapons/Melee/chainsaw.yml | 3 +- .../Entities/Objects/Weapons/Melee/cult.yml | 2 + .../Objects/Weapons/Melee/e_sword.yml | 3 +- .../Objects/Weapons/Melee/fireaxe.yml | 2 + .../Objects/Weapons/Melee/pickaxe.yml | 2 + .../Entities/Objects/Weapons/Melee/spear.yml | 2 + .../Objects/Weapons/Melee/white_cane.yml | 3 + 13 files changed, 53 insertions(+), 49 deletions(-) diff --git a/Content.Shared/Wieldable/Components/WieldableComponent.cs b/Content.Shared/Wieldable/Components/WieldableComponent.cs index 050b6382150..4a50b930722 100644 --- a/Content.Shared/Wieldable/Components/WieldableComponent.cs +++ b/Content.Shared/Wieldable/Components/WieldableComponent.cs @@ -30,9 +30,6 @@ public sealed partial class WieldableComponent : Component public string? WieldedInhandPrefix = "wielded"; public string? OldInhandPrefix = null; - - [DataField("wieldTime")] - public float WieldTime = 1.5f; } [Serializable, NetSerializable] diff --git a/Content.Shared/Wieldable/WieldableSystem.cs b/Content.Shared/Wieldable/WieldableSystem.cs index bf5aa1b7230..ba87d54aa2a 100644 --- a/Content.Shared/Wieldable/WieldableSystem.cs +++ b/Content.Shared/Wieldable/WieldableSystem.cs @@ -13,6 +13,7 @@ using Content.Shared.Weapons.Ranged.Systems; using Content.Shared.Wieldable.Components; using Robust.Shared.Player; +using Content.Shared.Timing; namespace Content.Shared.Wieldable; @@ -25,13 +26,13 @@ public sealed class WieldableSystem : EntitySystem [Dependency] private readonly SharedPopupSystem _popupSystem = default!; [Dependency] private readonly SharedAudioSystem _audioSystem = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly UseDelaySystem _delay = default!; public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnUseInHand, before: new [] { typeof(SharedGunSystem) }); - SubscribeLocalEvent(OnDoAfter); + SubscribeLocalEvent(OnUseInHand); SubscribeLocalEvent(OnItemUnwielded); SubscribeLocalEvent(OnItemLeaveHand); SubscribeLocalEvent(OnVirtualItemDeleted); @@ -76,7 +77,7 @@ private void OnGunUnwielded(EntityUid uid, GunWieldBonusComponent component, Ite gun.MinAngle -= component.MinAngle; gun.MaxAngle -= component.MaxAngle; - Dirty(gun); + Dirty(uid, gun); } private void OnGunWielded(EntityUid uid, GunWieldBonusComponent component, ref ItemWieldedEvent args) @@ -86,7 +87,7 @@ private void OnGunWielded(EntityUid uid, GunWieldBonusComponent component, ref I gun.MinAngle += component.MinAngle; gun.MaxAngle += component.MaxAngle; - Dirty(gun); + Dirty(uid, gun); } private void AddToggleWieldVerb(EntityUid uid, WieldableComponent component, GetVerbsEvent args) @@ -157,7 +158,7 @@ public bool CanWield(EntityUid uid, WieldableComponent component, EntityUid user } /// - /// Attempts to wield an item, creating a DoAfter.. + /// Attempts to wield an item, starting a UseDelay after. /// /// True if the attempt wasn't blocked. public bool TryWield(EntityUid used, WieldableComponent component, EntityUid user) @@ -171,13 +172,31 @@ public bool TryWield(EntityUid used, WieldableComponent component, EntityUid use if (ev.Cancelled) return false; - var doargs = new DoAfterArgs(EntityManager, user, component.WieldTime, new WieldableDoAfterEvent(), used, used: used) + if (TryComp(used, out var item)) { - BreakOnUserMove = false, - BreakOnDamage = true - }; + component.OldInhandPrefix = item.HeldPrefix; + _itemSystem.SetHeldPrefix(used, component.WieldedInhandPrefix, item); + } + + component.Wielded = true; - _doAfter.TryStartDoAfter(doargs); + if (component.WieldSound != null) + _audioSystem.PlayPredicted(component.WieldSound, used, user); + + for (var i = 0; i < component.FreeHandsRequired; i++) + { + _virtualItemSystem.TrySpawnVirtualItemInHand(used, user); + } + + _delay.BeginDelay(used); + + _popupSystem.PopupClient(Loc.GetString("wieldable-component-successful-wield", ("item", used)), user, user); + _popupSystem.PopupEntity(Loc.GetString("wieldable-component-successful-wield-other", ("user", user),("item", used)), user, Filter.PvsExcept(user), true); + + var targEv = new ItemWieldedEvent(); + RaiseLocalEvent(used, ref targEv); + + Dirty(used, component); return true; } @@ -199,38 +218,6 @@ public bool TryUnwield(EntityUid used, WieldableComponent component, EntityUid u return true; } - private void OnDoAfter(EntityUid uid, WieldableComponent component, DoAfterEvent args) - { - if (args.Handled || args.Cancelled || !CanWield(uid, component, args.Args.User) || component.Wielded) - return; - - if (TryComp(uid, out var item)) - { - component.OldInhandPrefix = item.HeldPrefix; - _itemSystem.SetHeldPrefix(uid, component.WieldedInhandPrefix, item); - } - - component.Wielded = true; - - if (component.WieldSound != null) - _audioSystem.PlayPredicted(component.WieldSound, uid, args.User); - - for (var i = 0; i < component.FreeHandsRequired; i++) - { - _virtualItemSystem.TrySpawnVirtualItemInHand(uid, args.Args.User); - } - - _popupSystem.PopupClient(Loc.GetString("wieldable-component-successful-wield", ("item", uid)), args.Args.User, args.Args.User); - _popupSystem.PopupEntity(Loc.GetString("wieldable-component-successful-wield-other", ("user", args.Args.User),("item", uid)), args.Args.User, Filter.PvsExcept(args.Args.User), true); - - var ev = new ItemWieldedEvent(); - RaiseLocalEvent(uid, ref ev); - _appearance.SetData(uid, WieldableVisuals.Wielded, true); - - Dirty(component); - args.Handled = true; - } - private void OnItemUnwielded(EntityUid uid, WieldableComponent component, ItemUnwieldedEvent args) { if (args.User == null) @@ -258,7 +245,7 @@ private void OnItemUnwielded(EntityUid uid, WieldableComponent component, ItemUn _appearance.SetData(uid, WieldableVisuals.Wielded, false); - Dirty(component); + Dirty(uid, component); _virtualItemSystem.DeleteInHandsMatching(args.User.Value, uid); } diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_pka.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_pka.yml index 7a8b9180e67..041cf446c11 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_pka.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_pka.yml @@ -45,3 +45,5 @@ slots: - suitStorage - Belt + - type: UseDelay + delay: 1 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Bow/bow.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Bow/bow.yml index 95282ee63ab..88640f7812f 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Bow/bow.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Bow/bow.yml @@ -14,9 +14,10 @@ slots: - Back - type: Wieldable - wieldTime: 0.5 wieldSound: path: /Audio/Items/bow_pull.ogg + - type: UseDelay + delay: 1 - type: GunRequiresWield - type: Gun minAngle: 0 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml index 1d16d308e41..62142519bfa 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml @@ -58,6 +58,8 @@ gun_chamber: !type:ContainerSlot - type: StaticPrice price: 500 + - type: UseDelay + delay: 1 - type: entity name: L6 SAW diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml index e244647a130..c1fc668d592 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml @@ -30,6 +30,8 @@ - type: Construction graph: WoodenBat node: bat + - type: UseDelay + delay: 1 - type: Tag tags: - BaseballBat diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/chainsaw.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/chainsaw.yml index b0874bfaef1..13f5191c103 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/chainsaw.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/chainsaw.yml @@ -5,7 +5,6 @@ description: A very large chainsaw. Usually you use this for cutting down trees... usually. components: - type: Wieldable - wieldTime: 1 wieldSound: !type:SoundPathSpecifier path: /Audio/Weapons/chainsawwield.ogg params: @@ -44,3 +43,5 @@ - ReagentId: WeldingFuel Quantity: 300 maxVol: 300 + - type: UseDelay + delay: 1 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml index 833614105d9..661ee379b24 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml @@ -81,3 +81,5 @@ quickEquip: false slots: - back + - type: UseDelay + delay: 1 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml index 7cf02ad05cb..0dd5d7c47c2 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml @@ -171,7 +171,6 @@ description: Syndicate Command Interns thought that having one blade on the energy sword was not enough. This can be stored in pockets. components: - type: Wieldable - wieldTime: 0 - type: EnergySword litDamageBonus: types: @@ -205,3 +204,5 @@ enabled: true reflectProb: .75 spread: 75 + - type: UseDelay + delay: 1 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml index 62a983cd4da..6d27e3e7d64 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml @@ -41,6 +41,8 @@ - type: TilePrying advanced: true - type: Prying + - type: UseDelay + delay: 1 - type: entity id: FireAxeFlaming diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml index 8d04fd316b4..a0f497bd265 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml @@ -28,6 +28,8 @@ - type: Item size: 80 sprite: Objects/Weapons/Melee/pickaxe.rsi + - type: UseDelay + delay: 1 - type: entity name: mining drill diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml index f19b76b3e81..d34d29d5ebe 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml @@ -104,6 +104,8 @@ damage: types: Blunt: 5 + - type: UseDelay + delay: 1 - type: Appearance - type: SolutionContainerVisuals maxFillLevels: 1 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/white_cane.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/white_cane.yml index 36ea58c1116..c76ebf4d783 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/white_cane.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/white_cane.yml @@ -22,3 +22,6 @@ damage: types: Blunt: 3 + - type: UseDelay + delay: 1 + From c318cbac9f14577d68470bf940837efb8843f733 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 22 Oct 2023 09:54:22 -0400 Subject: [PATCH 39/39] Automatic changelog update --- Resources/Changelog/Changelog.yml | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 46822fde57c..5f4b71deaa6 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: EmoGarbage404 - changes: - - {message: You can no longer keep a cyborg's UI open after closing the panel., - type: Fix} - - {message: Cyborgs now retain their laws when off-station., type: Fix} - id: 4542 - time: '2023-08-13T07:09:30.0000000+00:00' - author: onoira changes: - {message: Spare pieces have been added to checkerboards allowing for more playable @@ -2911,3 +2904,8 @@ Entries: has access to most of Nanotrasen''s accounting details!', type: Add} id: 5041 time: '2023-10-22T07:34:06.0000000+00:00' +- author: stopbreaking + changes: + - {message: Replaced wielding do_after with an interaction cooldown., type: Tweak} + id: 5042 + time: '2023-10-22T13:53:14.0000000+00:00'