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.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.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) 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/Chat/Managers/ChatSanitizationManager.cs b/Content.Server/Chat/Managers/ChatSanitizationManager.cs index 01c02a270a6..31ed519e271 100644 --- a/Content.Server/Chat/Managers/ChatSanitizationManager.cs +++ b/Content.Server/Chat/Managers/ChatSanitizationManager.cs @@ -76,6 +76,7 @@ public sealed class ChatSanitizationManager : IChatSanitizationManager { "._.", "chatsan-surprised" }, { ".-.", "chatsan-confused" }, { "-_-", "chatsan-unimpressed" }, + { "smh", "chatsan-unimpressed" }, { "o/", "chatsan-waves" }, { "^^/", "chatsan-waves" }, { ":/", "chatsan-uncertain" }, @@ -88,10 +89,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 b89de7abdff..fa3cea61ce8 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; @@ -54,6 +56,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 @@ -701,6 +704,8 @@ private string SanitizeInGameICMessage(EntityUid source, string message, out str { var newMessage = message.Trim(); newMessage = ReplaceWords(newMessage); // Corvax-ChatSanitize + newMessage = SanitizeMessageReplaceWords(newMessage); + if (capitalize) newMessage = SanitizeMessageCapital(newMessage); if (capitalizeTheWordI) @@ -748,6 +753,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/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/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")); 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); - } - } } 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) 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); } } - } } 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) 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 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 ee45a2ac9ee..ef7ae505bf4 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/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/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/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) { 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); 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; 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) 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/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) 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; + } } 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/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/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 411594cd144..5f4b71deaa6 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,101 +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., - 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 - 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 - 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 - 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., - 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} - 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 - 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} - id: 4538 - time: '2023-08-13T07:07:34.0000000+00:00' -- 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} - 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., - 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 @@ -2924,3 +2827,85 @@ 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' +- 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' +- author: metalgearsloth + changes: + - {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' +- 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' +- 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' +- 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' +- 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' +- 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' +- 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' +- 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' +- 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' 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/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 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/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/Accents/word_replacements.yml b/Resources/Prototypes/Accents/word_replacements.yml index 95ea8c19971..dd4a3faeaa0 100644 --- a/Resources/Prototypes/Accents/word_replacements.yml +++ b/Resources/Prototypes/Accents/word_replacements.yml @@ -535,4 +535,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 diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index 3b7c4b2fb98..53eef3fe85d 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/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 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/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: 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/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 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 + diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index b2877c6925c..e2d9818a5d2 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/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 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/Objectives/objectiveGroups.yml b/Resources/Prototypes/Objectives/objectiveGroups.yml index 17727df16ed..71aacf951cb 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/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/Prototypes/Recipes/Lathes/medical.yml b/Resources/Prototypes/Recipes/Lathes/medical.yml index aa7c874b274..3efc843ad1f 100644 --- a/Resources/Prototypes/Recipes/Lathes/medical.yml +++ b/Resources/Prototypes/Recipes/Lathes/medical.yml @@ -195,3 +195,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 + 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 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 00000000000..463095e2805 Binary files /dev/null and b/Resources/Textures/Objects/Misc/qm_clipboard.rsi/equipped-BELT.png differ diff --git a/Resources/Textures/Objects/Misc/qm_clipboard.rsi/inhand-left.png b/Resources/Textures/Objects/Misc/qm_clipboard.rsi/inhand-left.png new file mode 100644 index 00000000000..5c16b61f094 Binary files /dev/null and b/Resources/Textures/Objects/Misc/qm_clipboard.rsi/inhand-left.png differ 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 00000000000..828ff7061f5 Binary files /dev/null and b/Resources/Textures/Objects/Misc/qm_clipboard.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Misc/qm_clipboard.rsi/meta.json b/Resources/Textures/Objects/Misc/qm_clipboard.rsi/meta.json new file mode 100644 index 00000000000..7f03f20980f --- /dev/null +++ b/Resources/Textures/Objects/Misc/qm_clipboard.rsi/meta.json @@ -0,0 +1,35 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Clipboard sprites are by Endecc (Github) for SS14 Wizard's Den, taken from https://github.com/space-wizards/space-station-14/pull/21023, qm_clipboard_paper is a modified version of paper from bureaucracy.rsi.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "qm_clipboard" + }, + { + "name": "qm_clipboard_over" + }, + { + "name": "qm_clipboard_paper" + }, + { + "name": "qm_clipboard_pen" + }, + { + "name": "equipped-BELT", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Misc/qm_clipboard.rsi/qm_clipboard.png b/Resources/Textures/Objects/Misc/qm_clipboard.rsi/qm_clipboard.png new file mode 100644 index 00000000000..3a2e26d8c92 Binary files /dev/null and b/Resources/Textures/Objects/Misc/qm_clipboard.rsi/qm_clipboard.png differ 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 00000000000..bf3c772ec38 Binary files /dev/null and b/Resources/Textures/Objects/Misc/qm_clipboard.rsi/qm_clipboard_over.png differ 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 00000000000..073471721a3 Binary files /dev/null and b/Resources/Textures/Objects/Misc/qm_clipboard.rsi/qm_clipboard_paper.png differ diff --git a/Resources/Textures/Objects/Misc/qm_clipboard.rsi/qm_clipboard_pen.png b/Resources/Textures/Objects/Misc/qm_clipboard.rsi/qm_clipboard_pen.png new file mode 100644 index 00000000000..9bc39904d45 Binary files /dev/null and b/Resources/Textures/Objects/Misc/qm_clipboard.rsi/qm_clipboard_pen.png differ 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 00000000000..d829c8fb0fd Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick0.png differ 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 00000000000..629682fae77 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick1.png differ 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 00000000000..d829c8fb0fd Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick2.png differ 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 00000000000..629682fae77 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick3.png differ 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 00000000000..5dc8dab560e Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick4.png differ 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 00000000000..52860683ac4 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick5.png differ diff --git a/Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick6.png b/Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick6.png new file mode 100644 index 00000000000..5dc8dab560e Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick6.png differ 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 00000000000..057ca4de001 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick.rsi/cobblebrick7.png differ 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 00000000000..ee90ee5784f Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick.rsi/full.png differ 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 00000000000..afbb7969663 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick0.png differ 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 00000000000..ac003cb33f2 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick1.png differ 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 00000000000..afbb7969663 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick2.png differ 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 00000000000..ac003cb33f2 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick3.png differ 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 00000000000..45b294e9f25 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick4.png differ 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 00000000000..72c3f5d7222 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick5.png differ 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 00000000000..45b294e9f25 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick6.png differ 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 00000000000..16827d09ac3 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/cobblebrick7.png differ 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 00000000000..2ad3175d89c Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/full.png differ diff --git a/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/meta.json b/Resources/Textures/Structures/Walls/cobblebrick_andesite.rsi/meta.json new file mode 100644 index 00000000000..c5029fedeba --- /dev/null +++ b/Resources/Textures/Structures/Walls/cobblebrick_andesite.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_asteroid.rsi/cobblebrick0.png b/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick0.png new file mode 100644 index 00000000000..be4cb50141b Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick0.png differ diff --git a/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick1.png b/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick1.png new file mode 100644 index 00000000000..a53cf2a468a Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick1.png differ 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 00000000000..be4cb50141b Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick2.png differ diff --git a/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick3.png b/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick3.png new file mode 100644 index 00000000000..a53cf2a468a Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick3.png differ 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 00000000000..fb90090c088 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick4.png differ diff --git a/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick5.png b/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick5.png new file mode 100644 index 00000000000..5c47ec91742 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick5.png differ 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 00000000000..fb90090c088 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick6.png differ diff --git a/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick7.png b/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick7.png new file mode 100644 index 00000000000..346a01875cd Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/cobblebrick7.png differ diff --git a/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/full.png b/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/full.png new file mode 100644 index 00000000000..eeb51205bc1 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/full.png differ diff --git a/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/meta.json b/Resources/Textures/Structures/Walls/cobblebrick_asteroid.rsi/meta.json new file mode 100644 index 00000000000..c5029fedeba --- /dev/null +++ b/Resources/Textures/Structures/Walls/cobblebrick_asteroid.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_basalt.rsi/cobblebrick0.png b/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick0.png new file mode 100644 index 00000000000..4b870dae09e Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick0.png differ 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 00000000000..30b7e9a1d4a Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick1.png differ diff --git a/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick2.png b/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick2.png new file mode 100644 index 00000000000..4b870dae09e Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick2.png differ 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 00000000000..30b7e9a1d4a Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick3.png differ diff --git a/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick4.png b/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick4.png new file mode 100644 index 00000000000..60825b047fa Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick4.png differ 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 00000000000..a19dd1274ee Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick5.png differ diff --git a/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick6.png b/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick6.png new file mode 100644 index 00000000000..60825b047fa Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick6.png differ 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 00000000000..52451993f5d Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/cobblebrick7.png differ 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 00000000000..2f32cf44bb1 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_basalt.rsi/full.png differ 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 00000000000..1564e62a884 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick0.png differ diff --git a/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick1.png b/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick1.png new file mode 100644 index 00000000000..0b5b8915c0d Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick1.png differ diff --git a/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick2.png b/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick2.png new file mode 100644 index 00000000000..ee6e54a2da8 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick2.png differ 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 00000000000..0b5b8915c0d Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick3.png differ diff --git a/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick4.png b/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick4.png new file mode 100644 index 00000000000..31901ada525 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick4.png differ 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 00000000000..2c48c6e55d7 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick5.png differ 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 00000000000..31901ada525 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick6.png differ 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 00000000000..242e9d80194 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/cobblebrick7.png differ 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 00000000000..f3dec960d65 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/full.png differ diff --git a/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/meta.json b/Resources/Textures/Structures/Walls/cobblebrick_chromite.rsi/meta.json new file mode 100644 index 00000000000..c5029fedeba --- /dev/null +++ b/Resources/Textures/Structures/Walls/cobblebrick_chromite.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_sand.rsi/cobblebrick0.png b/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick0.png new file mode 100644 index 00000000000..587b49cf260 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick0.png differ 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 00000000000..852bb8c0e42 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick1.png differ diff --git a/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick2.png b/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick2.png new file mode 100644 index 00000000000..587b49cf260 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick2.png differ 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 00000000000..852bb8c0e42 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick3.png differ diff --git a/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick4.png b/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick4.png new file mode 100644 index 00000000000..ff355cd112b Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick4.png differ diff --git a/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick5.png b/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick5.png new file mode 100644 index 00000000000..496007e9242 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick5.png differ diff --git a/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick6.png b/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick6.png new file mode 100644 index 00000000000..ff355cd112b Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick6.png differ diff --git a/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick7.png b/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick7.png new file mode 100644 index 00000000000..35ec4975665 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/cobblebrick7.png differ diff --git a/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/full.png b/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/full.png new file mode 100644 index 00000000000..3032a730b29 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/full.png differ diff --git a/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/meta.json b/Resources/Textures/Structures/Walls/cobblebrick_sand.rsi/meta.json new file mode 100644 index 00000000000..c5029fedeba --- /dev/null +++ b/Resources/Textures/Structures/Walls/cobblebrick_sand.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_snow.rsi/cobblebrick0.png b/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick0.png new file mode 100644 index 00000000000..e5044aba52b Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick0.png differ 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 00000000000..98e733c1984 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick1.png differ diff --git a/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick2.png b/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick2.png new file mode 100644 index 00000000000..e5044aba52b Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick2.png differ 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 00000000000..98e733c1984 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick3.png differ diff --git a/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick4.png b/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick4.png new file mode 100644 index 00000000000..b77649331c4 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick4.png differ 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 00000000000..f2688e45ed3 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick5.png differ diff --git a/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick6.png b/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick6.png new file mode 100644 index 00000000000..b77649331c4 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick6.png differ 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 00000000000..3caa75ca28d Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/cobblebrick7.png differ 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 00000000000..8a721053bc4 Binary files /dev/null and b/Resources/Textures/Structures/Walls/cobblebrick_snow.rsi/full.png differ 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 00000000000..fbc964e4d88 Binary files /dev/null and b/Resources/Textures/Structures/Walls/rock.rsi/rock_andesite.png differ 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 00000000000..3e8b9b7b274 Binary files /dev/null and b/Resources/Textures/Structures/Walls/rock.rsi/rock_andesite_east.png differ 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 00000000000..d9faf04c8af Binary files /dev/null and b/Resources/Textures/Structures/Walls/rock.rsi/rock_andesite_north.png differ 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 00000000000..14260cc8b66 Binary files /dev/null and b/Resources/Textures/Structures/Walls/rock.rsi/rock_andesite_south.png differ 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 00000000000..2f9542b2100 Binary files /dev/null and b/Resources/Textures/Structures/Walls/rock.rsi/rock_andesite_west.png differ 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 00000000000..ae8f83f4b96 Binary files /dev/null and b/Resources/Textures/Structures/Walls/rock.rsi/rock_chromite.png differ diff --git a/Resources/Textures/Structures/Walls/rock.rsi/rock_chromite_east.png b/Resources/Textures/Structures/Walls/rock.rsi/rock_chromite_east.png new file mode 100644 index 00000000000..3793b4c3c05 Binary files /dev/null and b/Resources/Textures/Structures/Walls/rock.rsi/rock_chromite_east.png differ 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 00000000000..2d478f3b278 Binary files /dev/null and b/Resources/Textures/Structures/Walls/rock.rsi/rock_chromite_north.png differ 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 00000000000..1730dcc3453 Binary files /dev/null and b/Resources/Textures/Structures/Walls/rock.rsi/rock_chromite_south.png differ diff --git a/Resources/Textures/Structures/Walls/rock.rsi/rock_chromite_west.png b/Resources/Textures/Structures/Walls/rock.rsi/rock_chromite_west.png new file mode 100644 index 00000000000..3d8889a734f Binary files /dev/null and b/Resources/Textures/Structures/Walls/rock.rsi/rock_chromite_west.png differ diff --git a/Resources/Textures/Structures/Walls/rock.rsi/rock_sand.png b/Resources/Textures/Structures/Walls/rock.rsi/rock_sand.png new file mode 100644 index 00000000000..e27c78fd77b Binary files /dev/null and b/Resources/Textures/Structures/Walls/rock.rsi/rock_sand.png differ 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 00000000000..3165be15af5 Binary files /dev/null and b/Resources/Textures/Structures/Walls/rock.rsi/rock_sand_east.png differ 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 00000000000..756e1536728 Binary files /dev/null and b/Resources/Textures/Structures/Walls/rock.rsi/rock_sand_north.png differ 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 00000000000..94c237ed23a Binary files /dev/null and b/Resources/Textures/Structures/Walls/rock.rsi/rock_sand_south.png differ 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 00000000000..a546d97b3c9 Binary files /dev/null and b/Resources/Textures/Structures/Walls/rock.rsi/rock_sand_west.png differ diff --git a/RobustToolbox b/RobustToolbox index 56d850f389c..554e0777b1b 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit 56d850f389c49a09df87c3a48be1fbd24dac7fc4 +Subproject commit 554e0777b1ba6ba096d8f4407d5c35ecc7b0f22f