diff --git a/.github/workflows/close-master-pr.yml b/.github/workflows/close-master-pr.yml index 66843d35dd6..51ce874dd07 100644 --- a/.github/workflows/close-master-pr.yml +++ b/.github/workflows/close-master-pr.yml @@ -1,4 +1,4 @@ -name: Close PR's on master +name: Close PRs on master on: pull_request_target: diff --git a/Content.Client/Actions/ActionsSystem.cs b/Content.Client/Actions/ActionsSystem.cs index 31d092b25d1..b992e772563 100644 --- a/Content.Client/Actions/ActionsSystem.cs +++ b/Content.Client/Actions/ActionsSystem.cs @@ -95,6 +95,7 @@ private void BaseHandleState(EntityUid uid, BaseActionComponent component, Ba component.Container = EnsureEntity(state.Container, uid); component.EntityIcon = EnsureEntity(state.EntityIcon, uid); component.CheckCanInteract = state.CheckCanInteract; + component.CheckConsciousness = state.CheckConsciousness; component.ClientExclusive = state.ClientExclusive; component.Priority = state.Priority; component.AttachedEntity = EnsureEntity(state.AttachedEntity, uid); diff --git a/Content.Client/Chat/UI/SpeechBubble.cs b/Content.Client/Chat/UI/SpeechBubble.cs index 82eccbcec84..68c937a7885 100644 --- a/Content.Client/Chat/UI/SpeechBubble.cs +++ b/Content.Client/Chat/UI/SpeechBubble.cs @@ -252,7 +252,8 @@ protected override Control BuildBubble(ChatMessage message, string speechStyleCl var bubbleContent = new RichTextLabel { MaxWidth = SpeechMaxWidth, - Margin = new Thickness(2, 6, 2, 2) + Margin = new Thickness(2, 6, 2, 2), + StyleClasses = { "bubbleContent" } }; //We'll be honest. *Yes* this is hacky. Doing this in a cleaner way would require a bottom-up refactor of how saycode handles sending chat messages. -Myr diff --git a/Content.Client/Disposal/Systems/DisposalUnitSystem.cs b/Content.Client/Disposal/Systems/DisposalUnitSystem.cs index 344bd2ec979..8c40c784219 100644 --- a/Content.Client/Disposal/Systems/DisposalUnitSystem.cs +++ b/Content.Client/Disposal/Systems/DisposalUnitSystem.cs @@ -22,6 +22,9 @@ public sealed class DisposalUnitSystem : SharedDisposalUnitSystem private const string AnimationKey = "disposal_unit_animation"; + private const string DefaultFlushState = "disposal-flush"; + private const string DefaultChargeState = "disposal-charging"; + public override void Initialize() { base.Initialize(); @@ -101,12 +104,18 @@ private void UpdateState(EntityUid uid, SharedDisposalUnitComponent unit, Sprite sprite.LayerSetVisible(DisposalUnitVisualLayers.Base, state == VisualState.Anchored); sprite.LayerSetVisible(DisposalUnitVisualLayers.BaseFlush, state is VisualState.Flushing or VisualState.Charging); + var chargingState = sprite.LayerMapTryGet(DisposalUnitVisualLayers.BaseCharging, out var chargingLayer) + ? sprite.LayerGetState(chargingLayer) + : new RSI.StateId(DefaultChargeState); + // This is a transient state so not too worried about replaying in range. if (state == VisualState.Flushing) { if (!_animationSystem.HasRunningAnimation(uid, AnimationKey)) { - var flushState = new RSI.StateId("disposal-flush"); + var flushState = sprite.LayerMapTryGet(DisposalUnitVisualLayers.BaseFlush, out var flushLayer) + ? sprite.LayerGetState(flushLayer) + : new RSI.StateId(DefaultFlushState); // Setup the flush animation to play var anim = new Animation @@ -124,7 +133,7 @@ private void UpdateState(EntityUid uid, SharedDisposalUnitComponent unit, Sprite // Return to base state (though, depending on how the unit is // configured we might get an appearance change event telling // us to go to charging state) - new AnimationTrackSpriteFlick.KeyFrame("disposal-charging", (float) unit.FlushDelay.TotalSeconds) + new AnimationTrackSpriteFlick.KeyFrame(chargingState, (float) unit.FlushDelay.TotalSeconds) } }, } @@ -147,7 +156,7 @@ private void UpdateState(EntityUid uid, SharedDisposalUnitComponent unit, Sprite } else if (state == VisualState.Charging) { - sprite.LayerSetState(DisposalUnitVisualLayers.BaseFlush, new RSI.StateId("disposal-charging")); + sprite.LayerSetState(DisposalUnitVisualLayers.BaseFlush, chargingState); } else { diff --git a/Content.Client/Overlays/ShowHealthIconsSystem.cs b/Content.Client/Overlays/ShowHealthIconsSystem.cs index 6ed9d6a41db..a546cf4d828 100644 --- a/Content.Client/Overlays/ShowHealthIconsSystem.cs +++ b/Content.Client/Overlays/ShowHealthIconsSystem.cs @@ -1,5 +1,7 @@ +using Content.Shared.Atmos.Rotting; using Content.Shared.Damage; using Content.Shared.Inventory.Events; +using Content.Shared.Mobs.Components; using Content.Shared.Overlays; using Content.Shared.StatusIcon; using Content.Shared.StatusIcon.Components; @@ -17,9 +19,6 @@ public sealed class ShowHealthIconsSystem : EquipmentHudSystem DamageContainers = new(); - [ValidatePrototypeId] - private const string HealthIconFine = "HealthIconFine"; - public override void Initialize() { base.Initialize(); @@ -45,18 +44,20 @@ protected override void DeactivateInternal() DamageContainers.Clear(); } - private void OnGetStatusIconsEvent(EntityUid uid, DamageableComponent damageableComponent, ref GetStatusIconsEvent args) + private void OnGetStatusIconsEvent(Entity entity, ref GetStatusIconsEvent args) { if (!IsActive || args.InContainer) return; - var healthIcons = DecideHealthIcons(damageableComponent); + var healthIcons = DecideHealthIcons(entity); args.StatusIcons.AddRange(healthIcons); } - private IReadOnlyList DecideHealthIcons(DamageableComponent damageableComponent) + private IReadOnlyList DecideHealthIcons(Entity entity) { + var damageableComponent = entity.Comp; + if (damageableComponent.DamageContainerID == null || !DamageContainers.Contains(damageableComponent.DamageContainerID)) { @@ -66,10 +67,16 @@ private IReadOnlyList DecideHealthIcons(DamageableComponent var result = new List(); // Here you could check health status, diseases, mind status, etc. and pick a good icon, or multiple depending on whatever. - if (damageableComponent?.DamageContainerID == "Biological" && - _prototypeMan.TryIndex(HealthIconFine, out var healthyIcon)) + if (damageableComponent?.DamageContainerID == "Biological") { - result.Add(healthyIcon); + if (TryComp(entity, out var state)) + { + // Since there is no MobState for a rotting mob, we have to deal with this case first. + if (HasComp(entity) && _prototypeMan.TryIndex(damageableComponent.RottingIcon, out var rottingIcon)) + result.Add(rottingIcon); + else if (damageableComponent.HealthIcons.TryGetValue(state.CurrentState, out var value) && _prototypeMan.TryIndex(value, out var icon)) + result.Add(icon); + } } return result; diff --git a/Content.Client/Paint/PaintVisualizerSystem.cs b/Content.Client/Paint/PaintVisualizerSystem.cs new file mode 100644 index 00000000000..6c99b2d35f0 --- /dev/null +++ b/Content.Client/Paint/PaintVisualizerSystem.cs @@ -0,0 +1,120 @@ +using System.Linq; +using Robust.Client.GameObjects; +using static Robust.Client.GameObjects.SpriteComponent; +using Content.Shared.Clothing; +using Content.Shared.Hands; +using Content.Shared.Paint; +using Robust.Client.Graphics; +using Robust.Shared.Prototypes; + +namespace Content.Client.Paint +{ + public sealed class PaintedVisualizerSystem : VisualizerSystem + { + /// + /// Visualizer for Paint which applies a shader and colors the entity. + /// + + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly IPrototypeManager _protoMan = default!; + + public ShaderInstance? Shader; // in Robust.Client.Graphics so cannot move to shared component. + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnHeldVisualsUpdated); + SubscribeLocalEvent(OnShutdown); + SubscribeLocalEvent(OnEquipmentVisualsUpdated); + } + + protected override void OnAppearanceChange(EntityUid uid, PaintedComponent component, ref AppearanceChangeEvent args) + { + // ShaderPrototype sadly in Robust.Client, cannot move to shared component. + Shader = _protoMan.Index(component.ShaderName).Instance(); + + if (args.Sprite == null) + return; + + if (!_appearance.TryGetData(uid, PaintVisuals.Painted, out bool isPainted)) + return; + + var sprite = args.Sprite; + + + foreach (var spriteLayer in sprite.AllLayers) + { + if (spriteLayer is not Layer layer) + continue; + + if (layer.Shader == null) // If shader isn't null we dont want to replace the original shader. + { + layer.Shader = Shader; + layer.Color = component.Color; + } + } + } + + private void OnHeldVisualsUpdated(EntityUid uid, PaintedComponent component, HeldVisualsUpdatedEvent args) + { + if (args.RevealedLayers.Count == 0) + return; + + if (!TryComp(args.User, out SpriteComponent? sprite)) + return; + + foreach (var revealed in args.RevealedLayers) + { + if (!sprite.LayerMapTryGet(revealed, out var layer) || sprite[layer] is not Layer notlayer) + continue; + + sprite.LayerSetShader(layer, component.ShaderName); + sprite.LayerSetColor(layer, component.Color); + } + } + + private void OnEquipmentVisualsUpdated(EntityUid uid, PaintedComponent component, EquipmentVisualsUpdatedEvent args) + { + if (args.RevealedLayers.Count == 0) + return; + + if (!TryComp(args.Equipee, out SpriteComponent? sprite)) + return; + + foreach (var revealed in args.RevealedLayers) + { + if (!sprite.LayerMapTryGet(revealed, out var layer) || sprite[layer] is not Layer notlayer) + continue; + + sprite.LayerSetShader(layer, component.ShaderName); + sprite.LayerSetColor(layer, component.Color); + } + } + + private void OnShutdown(EntityUid uid, PaintedComponent component, ref ComponentShutdown args) + { + if (!TryComp(uid, out SpriteComponent? sprite)) + return; + + component.BeforeColor = sprite.Color; + Shader = _protoMan.Index(component.ShaderName).Instance(); + + if (!Terminating(uid)) + { + foreach (var spriteLayer in sprite.AllLayers) + { + if (spriteLayer is not Layer layer) + continue; + + if (layer.Shader == Shader) // If shader isn't same as one in component we need to ignore it. + { + layer.Shader = null; + if (layer.Color == component.Color) // If color isn't the same as one in component we don't want to change it. + layer.Color = component.BeforeColor; + } + } + } + } + } +} diff --git a/Content.Client/Stylesheets/StyleNano.cs b/Content.Client/Stylesheets/StyleNano.cs index e1f32a9e5e5..13ba259dbcd 100644 --- a/Content.Client/Stylesheets/StyleNano.cs +++ b/Content.Client/Stylesheets/StyleNano.cs @@ -926,6 +926,14 @@ public StyleNano(IResourceCache resCache) : base(resCache) new StyleProperty(PanelContainer.StylePropertyPanel, whisperBox) }), + new StyleRule(new SelectorChild( + new SelectorElement(typeof(PanelContainer), new[] {"speechBox", "whisperBox"}, null, null), + new SelectorElement(typeof(RichTextLabel), new[] {"bubbleContent"}, null, null)), + new[] + { + new StyleProperty("font", notoSansItalic12), + }), + new StyleRule(new SelectorChild( new SelectorElement(typeof(PanelContainer), new[] {"speechBox", "emoteBox"}, null, null), new SelectorElement(typeof(RichTextLabel), null, null, null)), diff --git a/Content.Server/Access/Systems/PresetIdCardSystem.cs b/Content.Server/Access/Systems/PresetIdCardSystem.cs index 4073b4baa28..696b7a1dcfd 100644 --- a/Content.Server/Access/Systems/PresetIdCardSystem.cs +++ b/Content.Server/Access/Systems/PresetIdCardSystem.cs @@ -50,8 +50,10 @@ private void OnMapInit(EntityUid uid, PresetIdCardComponent id, MapInitEvent arg var station = _stationSystem.GetOwningStation(uid); var extended = false; - if (station != null) - extended = Comp(station.Value).ExtendedAccess; + + // Station not guaranteed to have jobs (e.g. nukie outpost). + if (TryComp(station, out StationJobsComponent? stationJobs)) + extended = stationJobs.ExtendedAccess; SetupIdAccess(uid, id, extended); SetupIdName(uid, id); diff --git a/Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs b/Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs index 023ac287634..fc77a1c8d94 100644 --- a/Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs +++ b/Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs @@ -149,7 +149,8 @@ public float GetFeltLowPressure(EntityUid uid, BarotraumaComponent barotrauma, f return Atmospherics.OneAtmosphere; } - return (environmentPressure + barotrauma.LowPressureModifier) * (barotrauma.LowPressureMultiplier); + var modified = (environmentPressure + barotrauma.LowPressureModifier) * (barotrauma.LowPressureMultiplier); + return Math.Min(modified, Atmospherics.OneAtmosphere); } /// @@ -162,7 +163,8 @@ public float GetFeltHighPressure(EntityUid uid, BarotraumaComponent barotrauma, return Atmospherics.OneAtmosphere; } - return (environmentPressure + barotrauma.HighPressureModifier) * (barotrauma.HighPressureMultiplier); + var modified = (environmentPressure + barotrauma.HighPressureModifier) * (barotrauma.HighPressureMultiplier); + return Math.Max(modified, Atmospherics.OneAtmosphere); } public bool TryGetPressureProtectionValues( diff --git a/Content.Server/Bed/Sleep/SleepingSystem.cs b/Content.Server/Bed/Sleep/SleepingSystem.cs index 5d1def7cec1..685b1087d70 100644 --- a/Content.Server/Bed/Sleep/SleepingSystem.cs +++ b/Content.Server/Bed/Sleep/SleepingSystem.cs @@ -7,6 +7,7 @@ using Content.Shared.Examine; using Content.Shared.IdentityManagement; using Content.Shared.Interaction; +using Content.Shared.Interaction.Events; using Content.Shared.Mobs; using Content.Shared.Mobs.Components; using Content.Shared.Slippery; @@ -45,6 +46,7 @@ public override void Initialize() SubscribeLocalEvent(OnInteractHand); SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnSlip); + SubscribeLocalEvent(OnConsciousAttempt); SubscribeLocalEvent(OnInit); } @@ -173,6 +175,12 @@ private void OnSlip(EntityUid uid, SleepingComponent component, SlipAttemptEvent args.Cancel(); } + private void OnConsciousAttempt(EntityUid uid, SleepingComponent component, ConsciousAttemptEvent args) + { + args.Cancel(); + } + + private void OnInit(EntityUid uid, ForcedSleepingComponent component, ComponentInit args) { TrySleeping(uid); diff --git a/Content.Server/Cargo/Systems/CargoSystem.CVars.cs b/Content.Server/Cargo/Systems/CargoSystem.CVars.cs new file mode 100644 index 00000000000..9072362fb46 --- /dev/null +++ b/Content.Server/Cargo/Systems/CargoSystem.CVars.cs @@ -0,0 +1,26 @@ +using Robust.Shared.Configuration; + +namespace Content.Server.Cargo.Systems +{ + public sealed partial class CargoSystem + { + [Dependency] private readonly IConfigurationManager _cfg = default!; + } + + [CVarDefs] + public sealed class CargoCVars + { + /// + /// Determines if a trade station spawns in its own FTL map. + /// + /// + /// Set this to true if and only if you are disabling the normal spawning method. + /// Otherwise you get two trade stations. + /// This does NOTHING to the trade station that spawns on the default map. + /// To change that, in Resources/Prototypes/Entities/Stations/base.yml; + /// comment out the "trade:" section. + /// + public static readonly CVarDef CreateCargoMap = + CVarDef.Create("cargo.tradestation_spawns_in_ftl_map", false, CVar.SERVERONLY); + } +} diff --git a/Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs b/Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs index 44e2b2c7d05..3e39440da56 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs @@ -19,6 +19,7 @@ using Robust.Shared.Audio; using Robust.Shared.Physics.Components; using Robust.Shared.Utility; +using Robust.Shared.Configuration; namespace Content.Server.Cargo.Systems; @@ -27,7 +28,7 @@ public sealed partial class CargoSystem /* * Handles cargo shuttle / trade mechanics. */ - + [Dependency] private readonly IConfigurationManager _confMan = default!; public MapId? CargoMap { get; private set; } private static readonly SoundPathSpecifier ApproveSound = new("/Audio/Effects/Cargo/ping.ogg"); @@ -369,7 +370,7 @@ private void OnStationInitialize(StationInitializedEvent args) if (!HasComp(args.Station)) // No cargo, L return; - if (_cfgManager.GetCVar(CCVars.GridFill)) + if (_cfgManager.GetCVar(CCVars.GridFill) && _confMan.GetCVar(CargoCVars.CreateCargoMap)) SetupTradePost(); } diff --git a/Content.Server/Chemistry/EntitySystems/VaporSystem.cs b/Content.Server/Chemistry/EntitySystems/VaporSystem.cs index 2c23b8f0390..d945c1f818b 100644 --- a/Content.Server/Chemistry/EntitySystems/VaporSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/VaporSystem.cs @@ -31,12 +31,10 @@ internal sealed class VaporSystem : EntitySystem private const float ReactTime = 0.125f; - private ISawmill _sawmill = default!; - public override void Initialize() { base.Initialize(); - _sawmill = Logger.GetSawmill("vapor"); + SubscribeLocalEvent(HandleCollide); } @@ -128,7 +126,7 @@ private void Update(float frameTime, Entity ent, Entity reagentQuantity.Quantity) { - _sawmill.Error($"Tried to tile react more than we have for reagent {reagentQuantity}. Found {reaction} and we only have {reagentQuantity.Quantity}"); + Log.Error($"Tried to tile react more than we have for reagent {reagentQuantity}. Found {reaction} and we only have {reagentQuantity.Quantity}"); reaction = reagentQuantity.Quantity; } diff --git a/Content.Server/Chemistry/TileReactions/SpillTileReaction.cs b/Content.Server/Chemistry/TileReactions/SpillTileReaction.cs index 49fdaa5c7ee..8f8b0626a28 100644 --- a/Content.Server/Chemistry/TileReactions/SpillTileReaction.cs +++ b/Content.Server/Chemistry/TileReactions/SpillTileReaction.cs @@ -45,9 +45,9 @@ public FixedPoint2 TileReact(TileRef tile, ReagentPrototype reagent, FixedPoint2 var step = entityManager.EnsureComponent(puddleUid); entityManager.EntitySysManager.GetEntitySystem().SetRequiredTriggerSpeed(puddleUid, _requiredSlipSpeed, step); - var slow = entityManager.EnsureComponent(puddleUid); + var slow = entityManager.EnsureComponent(puddleUid); var speedModifier = 1 - reagent.Viscosity; - entityManager.EntitySysManager.GetEntitySystem().ChangeModifiers(puddleUid, speedModifier, slow); + entityManager.EntitySysManager.GetEntitySystem().ChangeModifiers(puddleUid, speedModifier, slow); return reactVolume; } diff --git a/Content.Server/DeviceNetwork/Systems/DeviceListSystem.cs b/Content.Server/DeviceNetwork/Systems/DeviceListSystem.cs index 978dbc0ed93..a8d40882c4d 100644 --- a/Content.Server/DeviceNetwork/Systems/DeviceListSystem.cs +++ b/Content.Server/DeviceNetwork/Systems/DeviceListSystem.cs @@ -1,4 +1,4 @@ -using System.Linq; +using System.Linq; using Content.Server.DeviceNetwork.Components; using Content.Shared.DeviceNetwork; using Content.Shared.DeviceNetwork.Components; @@ -12,8 +12,6 @@ namespace Content.Server.DeviceNetwork.Systems; [UsedImplicitly] public sealed class DeviceListSystem : SharedDeviceListSystem { - private ISawmill _sawmill = default!; - [Dependency] private readonly NetworkConfiguratorSystem _configurator = default!; public override void Initialize() @@ -23,7 +21,6 @@ public override void Initialize() SubscribeLocalEvent(OnBeforeBroadcast); SubscribeLocalEvent(OnBeforePacketSent); SubscribeLocalEvent(OnMapSave); - _sawmill = Logger.GetSawmill("devicelist"); } private void OnShutdown(EntityUid uid, DeviceListComponent component, ComponentShutdown args) @@ -154,7 +151,7 @@ private void OnMapSave(BeforeSaveEvent ev) // TODO full game saves. // when full saves are supported, this should instead add data to the BeforeSaveEvent informing the // saving system that this map (or null-space entity) also needs to be included in the save. - _sawmill.Error( + Log.Error( $"Saving a device list ({ToPrettyString(uid)}) that has a reference to an entity on another map ({ToPrettyString(ent)}). Removing entity from list."); } diff --git a/Content.Server/Disposal/Tube/DisposalTubeSystem.cs b/Content.Server/Disposal/Tube/DisposalTubeSystem.cs index b7d8455d85e..20aa8b6d2c5 100644 --- a/Content.Server/Disposal/Tube/DisposalTubeSystem.cs +++ b/Content.Server/Disposal/Tube/DisposalTubeSystem.cs @@ -122,7 +122,7 @@ private void OnUiAction(EntityUid uid, DisposalRouterComponent router, SharedDis if (trimmed == "") continue; - router.Tags.Add(tag.Trim()); + router.Tags.Add(trimmed); } _audioSystem.PlayPvs(router.ClickSound, uid, AudioParams.Default.WithVolume(-2f)); diff --git a/Content.Server/Fluids/EntitySystems/PuddleSystem.cs b/Content.Server/Fluids/EntitySystems/PuddleSystem.cs index c03e6f593c6..e3481f98da3 100644 --- a/Content.Server/Fluids/EntitySystems/PuddleSystem.cs +++ b/Content.Server/Fluids/EntitySystems/PuddleSystem.cs @@ -54,7 +54,7 @@ public sealed partial class PuddleSystem : SharedPuddleSystem [Dependency] private readonly SharedPopupSystem _popups = default!; [Dependency] private readonly SolutionContainerSystem _solutionContainerSystem = default!; [Dependency] private readonly StepTriggerSystem _stepTrigger = default!; - [Dependency] private readonly SlowContactsSystem _slowContacts = default!; + [Dependency] private readonly SpeedModifierContactsSystem _speedModContacts = default!; [Dependency] private readonly TileFrictionController _tile = default!; [ValidatePrototypeId] @@ -435,13 +435,13 @@ private void UpdateSlow(EntityUid uid, Solution solution) if (maxViscosity > 0) { - var comp = EnsureComp(uid); + var comp = EnsureComp(uid); var speed = 1 - maxViscosity; - _slowContacts.ChangeModifiers(uid, speed, comp); + _speedModContacts.ChangeModifiers(uid, speed, comp); } else { - RemComp(uid); + RemComp(uid); } } diff --git a/Content.Server/Forensics/Systems/ForensicScannerSystem.cs b/Content.Server/Forensics/Systems/ForensicScannerSystem.cs index be44f9e203b..0d3168fd4e0 100644 --- a/Content.Server/Forensics/Systems/ForensicScannerSystem.cs +++ b/Content.Server/Forensics/Systems/ForensicScannerSystem.cs @@ -28,14 +28,10 @@ public sealed class ForensicScannerSystem : EntitySystem [Dependency] private readonly SharedAudioSystem _audioSystem = default!; [Dependency] private readonly MetaDataSystem _metaData = default!; - private ISawmill _sawmill = default!; - public override void Initialize() { base.Initialize(); - _sawmill = Logger.GetSawmill("forensics.scanner"); - SubscribeLocalEvent(OnAfterInteract); SubscribeLocalEvent(OnAfterInteractUsing); SubscribeLocalEvent(OnBeforeActivatableUIOpen); @@ -57,7 +53,7 @@ private void UpdateUserInterface(EntityUid uid, ForensicScannerComponent compone component.PrintReadyAt); if (!_uiSystem.TrySetUiState(uid, ForensicScannerUiKey.Key, state)) - _sawmill.Warning($"{ToPrettyString(uid)} was unable to set UI state."); + Log.Warning($"{ToPrettyString(uid)} was unable to set UI state."); } private void OnDoAfter(EntityUid uid, ForensicScannerComponent component, DoAfterEvent args) @@ -180,7 +176,7 @@ private void OnPrint(EntityUid uid, ForensicScannerComponent component, Forensic { if (!args.Session.AttachedEntity.HasValue) { - _sawmill.Warning($"{ToPrettyString(uid)} got OnPrint without Session.AttachedEntity"); + Log.Warning($"{ToPrettyString(uid)} got OnPrint without Session.AttachedEntity"); return; } @@ -200,7 +196,7 @@ private void OnPrint(EntityUid uid, ForensicScannerComponent component, Forensic if (!HasComp(printed)) { - _sawmill.Error("Printed paper did not have PaperComponent."); + Log.Error("Printed paper did not have PaperComponent."); return; } diff --git a/Content.Server/Kitchen/EntitySystems/SharpSystem.cs b/Content.Server/Kitchen/EntitySystems/SharpSystem.cs index dfd3bc613cb..2c5f88baec7 100644 --- a/Content.Server/Kitchen/EntitySystems/SharpSystem.cs +++ b/Content.Server/Kitchen/EntitySystems/SharpSystem.cs @@ -63,7 +63,7 @@ private bool TryStartButcherDoAfter(EntityUid knife, EntityUid target, EntityUid if (TryComp(target, out var mobState) && !_mobStateSystem.IsDead(target, mobState)) return false; - if (butcher.Type != ButcheringType.Knife) + if (butcher.Type != ButcheringType.Knife && target != user) { _popupSystem.PopupEntity(Loc.GetString("butcherable-different-tool", ("target", target)), knife, user); return true; diff --git a/Content.Server/Mapping/MappingSystem.cs b/Content.Server/Mapping/MappingSystem.cs index 0678dab7ce2..28bb3afbe10 100644 --- a/Content.Server/Mapping/MappingSystem.cs +++ b/Content.Server/Mapping/MappingSystem.cs @@ -1,4 +1,4 @@ -using System.IO; +using System.IO; using Content.Server.Administration; using Content.Shared.Administration; using Content.Shared.CCVar; @@ -32,7 +32,6 @@ public sealed class MappingSystem : EntitySystem /// private Dictionary _currentlyAutosaving = new(); - private ISawmill _sawmill = default!; private bool _autosaveEnabled; public override void Initialize() @@ -44,7 +43,6 @@ public override void Initialize() "autosave ", ToggleAutosaveCommand); - _sawmill = Logger.GetSawmill("autosave"); Subs.CVar(_cfg, CCVars.AutosaveEnabled, SetAutosaveEnabled, true); } @@ -69,7 +67,7 @@ public override void Update(float frameTime) if (!_mapManager.MapExists(map) || _mapManager.IsMapInitialized(map)) { - _sawmill.Warning($"Can't autosave map {map}; it doesn't exist, or is initialized. Removing from autosave."); + Log.Warning($"Can't autosave map {map}; it doesn't exist, or is initialized. Removing from autosave."); _currentlyAutosaving.Remove(map); return; } @@ -79,7 +77,7 @@ public override void Update(float frameTime) var path = Path.Combine(saveDir, $"{DateTime.Now.ToString("yyyy-M-dd_HH.mm.ss")}-AUTO.yml"); _currentlyAutosaving[map] = (CalculateNextTime(), name); - _sawmill.Info($"Autosaving map {name} ({map}) to {path}. Next save in {ReadableTimeLeft(map)} seconds."); + Log.Info($"Autosaving map {name} ({map}) to {path}. Next save in {ReadableTimeLeft(map)} seconds."); _map.SaveMap(map, path); } } @@ -105,17 +103,17 @@ public void ToggleAutosave(MapId map, string? path=null) { if (!_mapManager.MapExists(map) || _mapManager.IsMapInitialized(map)) { - _sawmill.Warning("Tried to enable autosaving on non-existant or already initialized map!"); + Log.Warning("Tried to enable autosaving on non-existant or already initialized map!"); _currentlyAutosaving.Remove(map); return; } - _sawmill.Info($"Started autosaving map {path} ({map}). Next save in {ReadableTimeLeft(map)} seconds."); + Log.Info($"Started autosaving map {path} ({map}). Next save in {ReadableTimeLeft(map)} seconds."); } else { _currentlyAutosaving.Remove(map); - _sawmill.Info($"Stopped autosaving on map {map}"); + Log.Info($"Stopped autosaving on map {map}"); } } diff --git a/Content.Server/Mech/Systems/MechSystem.cs b/Content.Server/Mech/Systems/MechSystem.cs index eef9bcb8ecd..1012b9727df 100644 --- a/Content.Server/Mech/Systems/MechSystem.cs +++ b/Content.Server/Mech/Systems/MechSystem.cs @@ -39,15 +39,11 @@ public sealed partial class MechSystem : SharedMechSystem [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly UserInterfaceSystem _ui = default!; - private ISawmill _sawmill = default!; - /// public override void Initialize() { base.Initialize(); - _sawmill = Logger.GetSawmill("mech"); - SubscribeLocalEvent(OnInteractUsing); SubscribeLocalEvent(OnInsertBattery); SubscribeLocalEvent(OnMapInit); @@ -343,7 +339,7 @@ public override bool TryChangeEnergy(EntityUid uid, FixedPoint2 delta, MechCompo _battery.SetCharge(battery!.Value, batteryComp.CurrentCharge + delta.Float(), batteryComp); if (batteryComp.CurrentCharge != component.Energy) //if there's a discrepency, we have to resync them { - _sawmill.Debug($"Battery charge was not equal to mech charge. Battery {batteryComp.CurrentCharge}. Mech {component.Energy}"); + Log.Debug($"Battery charge was not equal to mech charge. Battery {batteryComp.CurrentCharge}. Mech {component.Energy}"); component.Energy = batteryComp.CurrentCharge; Dirty(component); } diff --git a/Content.Server/Movement/Systems/LagCompensationSystem.cs b/Content.Server/Movement/Systems/LagCompensationSystem.cs index 0576fe8f255..8496a8a9b90 100644 --- a/Content.Server/Movement/Systems/LagCompensationSystem.cs +++ b/Content.Server/Movement/Systems/LagCompensationSystem.cs @@ -18,12 +18,10 @@ public sealed class LagCompensationSystem : EntitySystem // Max ping I've had is 350ms from aus to spain. public static readonly TimeSpan BufferTime = TimeSpan.FromMilliseconds(750); - private ISawmill _sawmill = Logger.GetSawmill("lagcomp"); - public override void Initialize() { base.Initialize(); - _sawmill.Level = LogLevel.Info; + Log.Level = LogLevel.Info; SubscribeLocalEvent(OnLagMove); } @@ -87,13 +85,13 @@ private void OnLagMove(EntityUid uid, LagCompensationComponent component, ref Mo if (coordinates == default) { - _sawmill.Debug($"No long comp coords found, using {xform.Coordinates}"); + Log.Debug($"No long comp coords found, using {xform.Coordinates}"); coordinates = xform.Coordinates; angle = xform.LocalRotation; } else { - _sawmill.Debug($"Actual coords is {xform.Coordinates} and got {coordinates}"); + Log.Debug($"Actual coords is {xform.Coordinates} and got {coordinates}"); } return (coordinates, angle); diff --git a/Content.Server/NPC/Systems/NpcFactionSystem.cs b/Content.Server/NPC/Systems/NpcFactionSystem.cs index 3458025f193..a96067c5cf3 100644 --- a/Content.Server/NPC/Systems/NpcFactionSystem.cs +++ b/Content.Server/NPC/Systems/NpcFactionSystem.cs @@ -15,8 +15,6 @@ public sealed partial class NpcFactionSystem : EntitySystem [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly IPrototypeManager _protoManager = default!; - private ISawmill _sawmill = default!; - /// /// To avoid prototype mutability we store an intermediary data class that gets used instead. /// @@ -25,7 +23,7 @@ public sealed partial class NpcFactionSystem : EntitySystem public override void Initialize() { base.Initialize(); - _sawmill = Logger.GetSawmill("faction"); + SubscribeLocalEvent(OnFactionStartup); SubscribeLocalEvent(OnProtoReload); @@ -70,7 +68,7 @@ public void AddFaction(EntityUid uid, string faction, bool dirty = true) { if (!_protoManager.HasIndex(faction)) { - _sawmill.Error($"Unable to find faction {faction}"); + Log.Error($"Unable to find faction {faction}"); return; } @@ -91,7 +89,7 @@ public void RemoveFaction(EntityUid uid, string faction, bool dirty = true) { if (!_protoManager.HasIndex(faction)) { - _sawmill.Error($"Unable to find faction {faction}"); + Log.Error($"Unable to find faction {faction}"); return; } @@ -214,13 +212,13 @@ public void MakeFriendly(string source, string target) { if (!_factions.TryGetValue(source, out var sourceFaction)) { - _sawmill.Error($"Unable to find faction {source}"); + Log.Error($"Unable to find faction {source}"); return; } if (!_factions.ContainsKey(target)) { - _sawmill.Error($"Unable to find faction {target}"); + Log.Error($"Unable to find faction {target}"); return; } @@ -256,13 +254,13 @@ public void MakeHostile(string source, string target) { if (!_factions.TryGetValue(source, out var sourceFaction)) { - _sawmill.Error($"Unable to find faction {source}"); + Log.Error($"Unable to find faction {source}"); return; } if (!_factions.ContainsKey(target)) { - _sawmill.Error($"Unable to find faction {target}"); + Log.Error($"Unable to find faction {target}"); return; } diff --git a/Content.Server/Objectives/ObjectivesSystem.cs b/Content.Server/Objectives/ObjectivesSystem.cs index b18668247a4..20205b8b72f 100644 --- a/Content.Server/Objectives/ObjectivesSystem.cs +++ b/Content.Server/Objectives/ObjectivesSystem.cs @@ -12,6 +12,7 @@ using Robust.Shared.Prototypes; using Robust.Shared.Random; using System.Linq; +using System.Text; namespace Content.Server.Objectives; @@ -82,29 +83,32 @@ private void OnRoundEndText(RoundEndTextAppendEvent ev) totalInCustody += minds.Where(m => IsInCustody(m)).Count(); } - var result = Loc.GetString("objectives-round-end-result", ("count", total), ("agent", agent)); + var result = new StringBuilder(); + result.AppendLine(Loc.GetString("objectives-round-end-result", ("count", total), ("agent", agent))); if (agent == Loc.GetString("traitor-round-end-agent-name")) { - result += "\n" + Loc.GetString("objectives-round-end-result-in-custody", ("count", total), ("custody", totalInCustody), ("agent", agent)); + result.AppendLine(Loc.GetString("objectives-round-end-result-in-custody", ("count", total), ("custody", totalInCustody), ("agent", agent))); } // next add all the players with its own prepended text foreach (var (prepend, minds) in summary) { if (prepend != string.Empty) - result += prepend; + result.Append(prepend); // add space between the start text and player list - result += "\n"; + result.AppendLine(); - AddSummary(ref result, agent, minds); + AddSummary(result, agent, minds); } - ev.AddLine(result + "\n"); + ev.AddLine(result.AppendLine().ToString()); } } - private void AddSummary(ref string result, string agent, List minds) + private void AddSummary(StringBuilder result, string agent, List minds) { + var agentSummaries = new List<(string summary, float successRate, int completedObjectives)>(); + foreach (var mindId in minds) { if (!TryComp(mindId, out MindComponent? mind)) @@ -114,25 +118,26 @@ private void AddSummary(ref string result, string agent, List minds) if (title == null) continue; - result += "\n"; - var custody = IsInCustody(mindId, mind) ? Loc.GetString("objectives-in-custody") : string.Empty; var objectives = mind.Objectives; if (objectives.Count == 0) { - result += Loc.GetString("objectives-no-objectives", ("custody", custody), ("title", title), ("agent", agent)); + agentSummaries.Add((Loc.GetString("objectives-no-objectives", ("custody", custody), ("title", title), ("agent", agent)), 0f, 0)); continue; } - result += Loc.GetString("objectives-with-objectives", ("custody", custody), ("title", title), ("agent", agent)); + var completedObjectives = 0; + var totalObjectives = 0; + var agentSummary = new StringBuilder(); + agentSummary.AppendLine(Loc.GetString("objectives-with-objectives", ("custody", custody), ("title", title), ("agent", agent))); foreach (var objectiveGroup in objectives.GroupBy(o => Comp(o).Issuer)) { //TO DO: //check for the right group here. Getting the target issuer is easy: objectiveGroup.Key //It should be compared to the type of the group's issuer. - result += "\n" + Loc.GetString($"objective-issuer-{objectiveGroup.Key}"); + agentSummary.AppendLine(Loc.GetString($"objective-issuer-{objectiveGroup.Key}")); foreach (var objective in objectiveGroup) { @@ -142,26 +147,39 @@ private void AddSummary(ref string result, string agent, List minds) var objectiveTitle = info.Value.Title; var progress = info.Value.Progress; + totalObjectives++; + + agentSummary.Append("- "); if (progress > 0.99f) { - result += "\n- " + Loc.GetString( + agentSummary.AppendLine(Loc.GetString( "objectives-objective-success", ("objective", objectiveTitle), ("markupColor", "green") - ); + )); + completedObjectives++; } else { - result += "\n- " + Loc.GetString( + agentSummary.AppendLine(Loc.GetString( "objectives-objective-fail", ("objective", objectiveTitle), ("progress", (int) (progress * 100)), ("markupColor", "red") - ); + )); } } } + + var successRate = totalObjectives > 0 ? (float) completedObjectives / totalObjectives : 0f; + agentSummaries.Add((agentSummary.ToString(), successRate, completedObjectives)); } + + var sortedAgents = agentSummaries.OrderByDescending(x => x.successRate) + .ThenByDescending(x => x.completedObjectives); + + foreach (var (summary, _, _) in sortedAgents) + result.AppendLine(summary); } public EntityUid? GetRandomObjective(EntityUid mindId, MindComponent mind, string objectiveGroupProto) diff --git a/Content.Server/Paint/PaintSystem.cs b/Content.Server/Paint/PaintSystem.cs new file mode 100644 index 00000000000..c6718aced68 --- /dev/null +++ b/Content.Server/Paint/PaintSystem.cs @@ -0,0 +1,180 @@ +using Content.Shared.Popups; +using Content.Shared.Paint; +using Content.Shared.Sprite; +using Content.Shared.DoAfter; +using Content.Shared.Interaction; +using Content.Server.Chemistry.Containers.EntitySystems; +using Robust.Shared.Audio.Systems; +using Content.Shared.Humanoid; +using Robust.Shared.Utility; +using Content.Shared.Verbs; +using Content.Shared.SubFloor; +using Content.Server.Nutrition.Components; +using Content.Shared.Inventory; +using Content.Server.Nutrition.EntitySystems; + +namespace Content.Server.Paint; + +/// +/// Colors target and consumes reagent on each color success. +/// +public sealed class PaintSystem : SharedPaintSystem +{ + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SolutionContainerSystem _solutionContainer = default!; + [Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!; + [Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!; + [Dependency] private readonly InventorySystem _inventory = default!; + [Dependency] private readonly OpenableSystem _openable = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInteract); + SubscribeLocalEvent(OnPaint); + SubscribeLocalEvent>(OnPaintVerb); + } + + private void OnInteract(EntityUid uid, PaintComponent component, AfterInteractEvent args) + { + if (!args.CanReach) + return; + + if (args.Target is not { Valid: true } target) + return; + + PrepPaint(uid, component, target, args.User); + } + + private void OnPaintVerb(EntityUid uid, PaintComponent component, GetVerbsEvent args) + { + if (!args.CanInteract || !args.CanAccess) + return; + + var paintText = Loc.GetString("paint-verb"); + + var verb = new UtilityVerb() + { + Act = () => + { + PrepPaint(uid, component, args.Target, args.User); + }, + + Text = paintText, + Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/paint.svg.192dpi.png")) + }; + args.Verbs.Add(verb); + } + private void PrepPaint(EntityUid uid, PaintComponent component, EntityUid target, EntityUid user) + { + + var doAfterEventArgs = new DoAfterArgs(EntityManager, user, component.Delay, new PaintDoAfterEvent(), uid, target: target, used: uid) + { + BreakOnTargetMove = true, + BreakOnUserMove = true, + BreakOnDamage = true, + NeedHand = true, + BreakOnHandChange = true + }; + + if (!_doAfterSystem.TryStartDoAfter(doAfterEventArgs)) + return; + } + + private void OnPaint(Entity entity, ref PaintDoAfterEvent args) + { + if (args.Target == null || args.Used == null) + return; + + if (args.Handled || args.Cancelled) + return; + + if (args.Target is not { Valid: true } target) + return; + + if (!_openable.IsOpen(entity)) + { + _popup.PopupEntity(Loc.GetString("paint-closed", ("used", args.Used)), args.User, args.User, PopupType.Medium); + return; + } + + if (HasComp(target) || HasComp(target)) + { + _popup.PopupEntity(Loc.GetString("paint-failure-painted", ("target", args.Target)), args.User, args.User, PopupType.Medium); + return; + } + + if (!entity.Comp.Blacklist?.IsValid(target, EntityManager) != true || HasComp(target) || HasComp(target)) + { + _popup.PopupEntity(Loc.GetString("paint-failure", ("target", args.Target)), args.User, args.User, PopupType.Medium); + return; + } + + + if (TryPaint(entity, target)) + { + EnsureComp(target, out PaintedComponent? paint); + EnsureComp(target); + + paint.Color = entity.Comp.Color; // set the target color to the color specified in the spray paint yml. + _audio.PlayPvs(entity.Comp.Spray, entity); + paint.Enabled = true; + + if (HasComp(target)) // Paint any clothing the target is wearing. + { + if (_inventory.TryGetSlots(target, out var slotDefinitions)) + { + foreach (var slot in slotDefinitions) + { + if (!_inventory.TryGetSlotEntity(target, slot.Name, out var slotEnt)) + continue; + + if (slotEnt == null) + return; + + if (HasComp(slotEnt.Value) || !entity.Comp.Blacklist?.IsValid(slotEnt.Value, EntityManager) != true + || HasComp(slotEnt.Value) || HasComp(slotEnt.Value)) + return; + + EnsureComp(slotEnt.Value, out PaintedComponent? slotpaint); + EnsureComp(slotEnt.Value); + slotpaint.Color = entity.Comp.Color; + _appearanceSystem.SetData(slotEnt.Value, PaintVisuals.Painted, true); + Dirty(slotEnt.Value, slotpaint); + } + } + } + + _popup.PopupEntity(Loc.GetString("paint-success", ("target", args.Target)), args.User, args.User, PopupType.Medium); + _appearanceSystem.SetData(target, PaintVisuals.Painted, true); + Dirty(target, paint); + args.Handled = true; + return; + } + + if (!TryPaint(entity, target)) + { + _popup.PopupEntity(Loc.GetString("paint-empty", ("used", args.Used)), args.User, args.User, PopupType.Medium); + return; + } + } + + private bool TryPaint(Entity reagent, EntityUid target) + { + if (HasComp(target) || HasComp(target)) + return false; + + if (_solutionContainer.TryGetSolution(reagent.Owner, reagent.Comp.Solution, out _, out var solution)) + { + var quantity = solution.RemoveReagent(reagent.Comp.Reagent, reagent.Comp.ConsumptionUnit); + if (quantity > 0)// checks quantity of solution is more than 0. + return true; + + if (quantity < 1) + return false; + } + return false; + } +} diff --git a/Content.Server/Power/EntitySystems/ChargerSystem.cs b/Content.Server/Power/EntitySystems/ChargerSystem.cs index b6b718455d8..db16dfa008e 100644 --- a/Content.Server/Power/EntitySystems/ChargerSystem.cs +++ b/Content.Server/Power/EntitySystems/ChargerSystem.cs @@ -6,7 +6,6 @@ using JetBrains.Annotations; using Robust.Shared.Containers; using System.Diagnostics.CodeAnalysis; -using System.Linq; using Content.Shared.Storage.Components; using Robust.Server.Containers; @@ -179,7 +178,7 @@ private CellChargerStatus GetStatus(EntityUid uid, ChargerComponent component) if (container.ContainedEntities.Count == 0) return CellChargerStatus.Empty; - if (!SearchForBattery(container.ContainedEntities.First(), out var heldBattery)) + if (!SearchForBattery(container.ContainedEntities[0], out _, out var heldBattery)) return CellChargerStatus.Off; if (Math.Abs(heldBattery.MaxCharge - heldBattery.CurrentCharge) < 0.01) @@ -199,27 +198,28 @@ private void TransferPower(EntityUid uid, EntityUid targetEntity, ChargerCompone if (component.Whitelist?.IsValid(targetEntity, EntityManager) == false) return; - if (!SearchForBattery(targetEntity, out var heldBattery)) + if (!SearchForBattery(targetEntity, out var batteryUid, out var heldBattery)) return; - _battery.SetCharge(targetEntity, heldBattery.CurrentCharge + component.ChargeRate * frameTime, heldBattery); + _battery.SetCharge(batteryUid.Value, heldBattery.CurrentCharge + component.ChargeRate * frameTime, heldBattery); // Just so the sprite won't be set to 99.99999% visibility if (heldBattery.MaxCharge - heldBattery.CurrentCharge < 0.01) { - _battery.SetCharge(targetEntity, heldBattery.MaxCharge, heldBattery); + _battery.SetCharge(batteryUid.Value, heldBattery.MaxCharge, heldBattery); } UpdateStatus(uid, component); } - private bool SearchForBattery(EntityUid uid, [NotNullWhen(true)] out BatteryComponent? component) + private bool SearchForBattery(EntityUid uid, [NotNullWhen(true)] out EntityUid? batteryUid, [NotNullWhen(true)] out BatteryComponent? component) { // try get a battery directly on the inserted entity if (!TryComp(uid, out component)) { // or by checking for a power cell slot on the inserted entity - return _powerCell.TryGetBatteryFromSlot(uid, out component); + return _powerCell.TryGetBatteryFromSlot(uid, out batteryUid, out component); } + batteryUid = uid; return true; } } diff --git a/Content.Server/Procedural/DungeonJob.CorridorClutterPost.cs b/Content.Server/Procedural/DungeonJob.CorridorClutterPost.cs new file mode 100644 index 00000000000..8099157cc50 --- /dev/null +++ b/Content.Server/Procedural/DungeonJob.CorridorClutterPost.cs @@ -0,0 +1,53 @@ +using System.Threading.Tasks; +using Content.Shared.Procedural; +using Content.Shared.Procedural.PostGeneration; +using Content.Shared.Storage; +using Robust.Shared.Map.Components; +using Robust.Shared.Physics.Components; +using Robust.Shared.Random; + +namespace Content.Server.Procedural; + +public sealed partial class DungeonJob +{ + private async Task PostGen(CorridorClutterPostGen gen, Dungeon dungeon, EntityUid gridUid, MapGridComponent grid, + Random random) + { + var physicsQuery = _entManager.GetEntityQuery(); + var count = (int) Math.Ceiling(dungeon.CorridorTiles.Count * gen.Chance); + + while (count > 0) + { + var tile = random.Pick(dungeon.CorridorTiles); + + var enumerator = _maps.GetAnchoredEntitiesEnumerator(_gridUid, _grid, tile); + var blocked = false; + + while (enumerator.MoveNext(out var ent)) + { + if (!physicsQuery.TryGetComponent(ent, out var physics) || + !physics.CanCollide || + !physics.Hard) + { + continue; + } + + blocked = true; + break; + } + + if (blocked) + continue; + + count--; + + var protos = EntitySpawnCollection.GetSpawns(gen.Contents, random); + var coords = _maps.ToCenterCoordinates(_gridUid, tile, _grid); + _entManager.SpawnEntities(coords, protos); + await SuspendIfOutOfTime(); + + if (!ValidateResume()) + return; + } + } +} diff --git a/Content.Server/Procedural/DungeonJob.PostGen.cs b/Content.Server/Procedural/DungeonJob.PostGen.cs index 9674cb5fae9..b326bcc378f 100644 --- a/Content.Server/Procedural/DungeonJob.PostGen.cs +++ b/Content.Server/Procedural/DungeonJob.PostGen.cs @@ -26,7 +26,7 @@ public sealed partial class DungeonJob private bool HasWall(MapGridComponent grid, Vector2i tile) { - var anchored = grid.GetAnchoredEntitiesEnumerator(tile); + var anchored = _maps.GetAnchoredEntitiesEnumerator(_gridUid, _grid, tile); while (anchored.MoveNext(out var uid)) { @@ -52,7 +52,7 @@ private async Task PostGen(AutoCablingPostGen gen, Dungeon dungeon, EntityUid gr // Gather existing nodes foreach (var tile in allTiles) { - var anchored = grid.GetAnchoredEntitiesEnumerator(tile); + var anchored = _maps.GetAnchoredEntitiesEnumerator(_gridUid, _grid, tile); while (anchored.MoveNext(out var anc)) { @@ -186,7 +186,9 @@ private async Task PostGen(BoundaryWallPostGen gen, Dungeon dungeon, EntityUid g // - Tiles first foreach (var neighbor in dungeon.RoomExteriorTiles) { - if (dungeon.RoomTiles.Contains(neighbor)) + DebugTools.Assert(!dungeon.RoomTiles.Contains(neighbor)); + + if (dungeon.Entrances.Contains(neighbor)) continue; if (!_anchorable.TileFree(grid, neighbor, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) @@ -265,7 +267,6 @@ private async Task PostGen(CornerClutterPostGen gen, Dungeon dungeon, EntityUid Random random) { var physicsQuery = _entManager.GetEntityQuery(); - var tagQuery = _entManager.GetEntityQuery(); foreach (var tile in dungeon.CorridorTiles) { @@ -771,7 +772,7 @@ private async Task PostGen(CorridorPostGen gen, Dungeon dungeon, EntityUid gridU { for (var y = -expansion; y <= expansion; y++) { - var neighbor = new Vector2i(tile.X + x, tile.Y + y); + var neighbor = new Vector2(tile.X + x, tile.Y + y).Floored(); if (dungeon.RoomTiles.Contains(neighbor) || dungeon.RoomExteriorTiles.Contains(neighbor) || @@ -817,6 +818,52 @@ private async Task PostGen(CorridorPostGen gen, Dungeon dungeon, EntityUid gridU return mod; }); + WidenCorridor(dungeon, gen.Width, corridorTiles); + + var setTiles = new List<(Vector2i, Tile)>(); + var tileDef = _prototype.Index(gen.Tile); + + foreach (var tile in corridorTiles) + { + setTiles.Add((tile, _tile.GetVariantTile(tileDef, random))); + } + + grid.SetTiles(setTiles); + dungeon.CorridorTiles.UnionWith(corridorTiles); + BuildCorridorExterior(dungeon); + } + + private void BuildCorridorExterior(Dungeon dungeon) + { + var exterior = dungeon.CorridorExteriorTiles; + + // Just ignore entrances or whatever for now. + foreach (var tile in dungeon.CorridorTiles) + { + for (var x = -1; x <= 1; x++) + { + for (var y = -1; y <= 1; y++) + { + var neighbor = new Vector2i(tile.X + x, tile.Y + y); + + if (dungeon.CorridorTiles.Contains(neighbor) || + dungeon.RoomExteriorTiles.Contains(neighbor) || + dungeon.RoomTiles.Contains(neighbor) || + dungeon.Entrances.Contains(neighbor)) + { + continue; + } + + exterior.Add(neighbor); + } + } + } + } + + private void WidenCorridor(Dungeon dungeon, float width, ICollection corridorTiles) + { + var expansion = width - 2; + // Widen the path if (expansion >= 1) { @@ -831,7 +878,7 @@ private async Task PostGen(CorridorPostGen gen, Dungeon dungeon, EntityUid gridU { for (var y = -expansion; y <= expansion; y++) { - var neighbor = new Vector2i(node.X + x, node.Y + y); + var neighbor = new Vector2(node.X + x, node.Y + y).Floored(); // Diagonals still matter here. if (dungeon.RoomTiles.Contains(neighbor) || @@ -852,36 +899,6 @@ private async Task PostGen(CorridorPostGen gen, Dungeon dungeon, EntityUid gridU corridorTiles.Add(node); } } - - var setTiles = new List<(Vector2i, Tile)>(); - var tileDef = _prototype.Index(gen.Tile); - - foreach (var tile in corridorTiles) - { - setTiles.Add((tile, _tile.GetVariantTile(tileDef, random))); - } - - grid.SetTiles(setTiles); - dungeon.CorridorTiles.UnionWith(corridorTiles); - - var exterior = dungeon.CorridorExteriorTiles; - - // Just ignore entrances or whatever for now. - foreach (var tile in dungeon.CorridorTiles) - { - for (var x = -1; x <= 1; x++) - { - for (var y = -1; y <= 1; y++) - { - var neighbor = new Vector2i(tile.X + x, tile.Y + y); - - if (dungeon.CorridorTiles.Contains(neighbor)) - continue; - - exterior.Add(neighbor); - } - } - } } private async Task PostGen(EntranceFlankPostGen gen, Dungeon dungeon, EntityUid gridUid, MapGridComponent grid, diff --git a/Content.Server/Procedural/DungeonJob.PrefabDunGen.cs b/Content.Server/Procedural/DungeonJob.PrefabDunGen.cs index 230c21c56e5..1783a567904 100644 --- a/Content.Server/Procedural/DungeonJob.PrefabDunGen.cs +++ b/Content.Server/Procedural/DungeonJob.PrefabDunGen.cs @@ -21,7 +21,6 @@ private async Task GeneratePrefabDungeon(PrefabDunGen prefab, EntityUid var dungeonRotation = _dungeon.GetDungeonRotation(seed); var dungeonTransform = Matrix3.CreateTransform(_position, dungeonRotation); var roomPackProtos = new Dictionary>(); - var fallbackTile = new Tile(_tileDefManager[prefab.Tile].TileId); foreach (var pack in _prototype.EnumeratePrototypes()) { @@ -325,6 +324,7 @@ private void SetDungeonEntrance(Dungeon dungeon, DungeonRoom room, Random random } room.Entrances.Add(entrancePos); + dungeon.Entrances.Add(entrancePos); break; } } diff --git a/Content.Server/Procedural/DungeonJob.WormPost.cs b/Content.Server/Procedural/DungeonJob.WormPost.cs new file mode 100644 index 00000000000..5d2271cae65 --- /dev/null +++ b/Content.Server/Procedural/DungeonJob.WormPost.cs @@ -0,0 +1,193 @@ +using System.Linq; +using System.Numerics; +using System.Threading.Tasks; +using Content.Shared.Procedural; +using Content.Shared.Procedural.PostGeneration; +using Robust.Shared.Collections; +using Robust.Shared.Map; +using Robust.Shared.Map.Components; +using Robust.Shared.Random; +using Robust.Shared.Utility; + +namespace Content.Server.Procedural; + +public sealed partial class DungeonJob +{ + /// + /// Tries to connect rooms via worm-like corridors. + /// + private async Task PostGen(WormCorridorPostGen gen, Dungeon dungeon, EntityUid gridUid, MapGridComponent grid, Random random) + { + var networks = new List<(Vector2i Start, HashSet Network)>(); + + // List of places to start from. + var worm = new ValueList(); + var startAngles = new Dictionary(); + + foreach (var room in dungeon.Rooms) + { + foreach (var entrance in room.Entrances) + { + var network = new HashSet { entrance }; + networks.Add((entrance, network)); + + // Point away from the room to start with. + startAngles.Add(entrance, (entrance + grid.TileSizeHalfVector - room.Center).ToAngle()); + } + } + + // There's a lot of ways to handle this, e.g. pathfinding towards each room + // For simplicity we'll go through each entrance randomly and generate worms from it + // then as a final step we will connect all of their networks. + random.Shuffle(networks); + + for (var i = 0; i < gen.Count; i++) + { + // Find a random network to worm from. + var startIndex = (i % networks.Count); + var startPos = networks[startIndex].Start; + var position = startPos + grid.TileSizeHalfVector; + + var remainingLength = gen.Length; + worm.Clear(); + var angle = startAngles[startPos]; + + for (var x = remainingLength; x >= 0; x--) + { + position += angle.ToVec(); + angle += random.NextAngle(-gen.MaxAngleChange, gen.MaxAngleChange); + var roundedPos = position.Floored(); + + // Check if the tile doesn't overlap something it shouldn't + if (dungeon.RoomTiles.Contains(roundedPos) || + dungeon.RoomExteriorTiles.Contains(roundedPos)) + { + continue; + } + + worm.Add(roundedPos); + } + + // Uhh yeah. + if (worm.Count == 0) + { + continue; + } + + // Find a random part on the existing worm to start. + var value = random.Pick(worm); + networks[startIndex].Network.UnionWith(worm); + startAngles[value] = random.NextAngle(); + } + + // Now to ensure they all connect we'll pathfind each network to one another + // Simple BFS pathfinder + var main = networks[0]; + + var frontier = new PriorityQueue(); + var cameFrom = new Dictionary(); + var costSoFar = new Dictionary(); + + // How many times we try to patch the networks together + var attempts = 3; + + for (var attempt = 0; attempt < attempts; attempt++) + { + // Skip index 0 + for (var i = networks.Count - 1; i > 0; i--) + { + cameFrom.Clear(); + frontier.Clear(); + costSoFar.Clear(); + + var targetNode = random.Pick(main.Network); + + var other = networks[i]; + var startNode = other.Network.First(); + frontier.Enqueue(startNode, 0f); + costSoFar[startNode] = 0f; + var count = 0; + + await SuspendIfOutOfTime(); + if (!ValidateResume()) + return; + + while (frontier.TryDequeue(out var node, out _) && count < gen.PathLimit) + { + count++; + + // Found + if (main.Network.Contains(node)) + { + // found, rebuild + frontier.Clear(); + main.Network.Add(node); + main.Network.UnionWith(other.Network); + var target = node; + + // Rebuild + while (cameFrom.TryGetValue(target, out var source)) + { + target = source; + main.Network.Add(target); + } + + networks.RemoveSwap(i); + continue; + } + + for (var x = -1; x <= 1; x++) + { + for (var y = -1; y <= 1; y++) + { + if (x == 0 && y == 0) + continue; + + var neighbor = node + new Vector2i(x, y); + + // Exclude room tiles. + if (dungeon.RoomTiles.Contains(neighbor) || + dungeon.RoomExteriorTiles.Contains(neighbor)) + { + continue; + } + + var tileCost = (neighbor - node).Length; + var gScore = costSoFar[node] + tileCost; + + if (costSoFar.TryGetValue(neighbor, out var nextValue) && gScore >= nextValue) + { + continue; + } + + cameFrom[neighbor] = node; + costSoFar[neighbor] = gScore; + var hScore = (targetNode - neighbor).Length + gScore; + + frontier.Enqueue(neighbor, hScore); + } + } + } + } + } + + WidenCorridor(dungeon, gen.Width, main.Network); + dungeon.CorridorTiles.UnionWith(main.Network); + BuildCorridorExterior(dungeon); + + var tiles = new List<(Vector2i Index, Tile Tile)>(); + var tileDef = _prototype.Index(gen.Tile); + + foreach (var tile in dungeon.CorridorTiles) + { + tiles.Add((tile, _tile.GetVariantTile(tileDef, random))); + } + + foreach (var tile in dungeon.CorridorExteriorTiles) + { + tiles.Add((tile, _tile.GetVariantTile(tileDef, random))); + } + + _maps.SetTiles(_gridUid, _grid, tiles); + } +} diff --git a/Content.Server/Procedural/DungeonJob.cs b/Content.Server/Procedural/DungeonJob.cs index c8a69808d31..8fecf1c9e8e 100644 --- a/Content.Server/Procedural/DungeonJob.cs +++ b/Content.Server/Procedural/DungeonJob.cs @@ -126,6 +126,9 @@ public DungeonJob( case CornerClutterPostGen clutter: await PostGen(clutter, dungeon, _gridUid, _grid, random); break; + case CorridorClutterPostGen corClutter: + await PostGen(corClutter, dungeon, _gridUid, _grid, random); + break; case CorridorPostGen cordor: await PostGen(cordor, dungeon, _gridUid, _grid, random); break; @@ -159,6 +162,9 @@ public DungeonJob( case WallMountPostGen wall: await PostGen(wall, dungeon, _gridUid, _grid, random); break; + case WormCorridorPostGen worm: + await PostGen(worm, dungeon, _gridUid, _grid, random); + break; default: throw new NotImplementedException(); } diff --git a/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs b/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs index 47aad6a6036..f8d995b8a4b 100644 --- a/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs +++ b/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs @@ -64,8 +64,6 @@ public sealed partial class EmergencyShuttleSystem : EntitySystem [Dependency] private readonly TransformSystem _transformSystem = default!; [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; - private ISawmill _sawmill = default!; - private const float ShuttleSpawnBuffer = 1f; private bool _emergencyShuttleEnabled; @@ -75,7 +73,6 @@ public sealed partial class EmergencyShuttleSystem : EntitySystem public override void Initialize() { - _sawmill = Logger.GetSawmill("shuttle.emergency"); _emergencyShuttleEnabled = _configManager.GetCVar(CCVars.EmergencyShuttleEnabled); // Don't immediately invoke as roundstart will just handle it. Subs.CVar(_configManager, CCVars.EmergencyShuttleEnabled, SetEmergencyShuttleEnabled); @@ -391,7 +388,7 @@ private void AddCentcomm(StationCentcommComponent component) { if (component.MapEntity != null || component.Entity != null) { - _sawmill.Warning("Attempted to re-add an existing centcomm map."); + Log.Warning("Attempted to re-add an existing centcomm map."); return; } @@ -416,7 +413,7 @@ private void AddCentcomm(StationCentcommComponent component) if (string.IsNullOrEmpty(component.Map.ToString())) { - _sawmill.Warning("No CentComm map found, skipping setup."); + Log.Warning("No CentComm map found, skipping setup."); return; } @@ -491,7 +488,7 @@ private void AddEmergencyShuttle(EntityUid uid, StationEmergencyShuttleComponent if (shuttle == null) { - _sawmill.Error($"Unable to spawn emergency shuttle {shuttlePath} for {ToPrettyString(uid)}"); + Log.Error($"Unable to spawn emergency shuttle {shuttlePath} for {ToPrettyString(uid)}"); return; } diff --git a/Content.Server/Speech/Components/ParrotAccentComponent.cs b/Content.Server/Speech/Components/ParrotAccentComponent.cs new file mode 100644 index 00000000000..5c4e01527c0 --- /dev/null +++ b/Content.Server/Speech/Components/ParrotAccentComponent.cs @@ -0,0 +1,47 @@ +namespace Content.Server.Speech.Components; + +/// +/// Makes this entity speak like a parrot in all chat messages it sends. +/// +[RegisterComponent] +public sealed partial class ParrotAccentComponent : Component +{ + /// + /// Chance that a message will have a squawk sound added before the first character. + /// If it fails, the message with have a squawk as a postfix instead. + /// If the longest word is repeated, no pre- or postfix will be added. + /// + [DataField] + public float SquawkPrefixChance = 0.5f; + + /// + /// Chance that the longest word in the message will be repeated as an + /// exclamation at the end of the final message. + /// + [DataField] + public float LongestWordRepeatChance = 0.5f; + + /// + /// The longest word must be at least this many characters long to be + /// repeated. This prevents repeating short words, which can sound weird. + /// ex: "How are you? AWWK! How!" - bad + /// ex: "Look out, it's the captain! RAWWK! Captain!" - good + /// + [DataField] + public float LongestWordMinLength = 5; + + /// + /// Strings to use as squawking noises. + /// + public readonly string[] Squawks = [ + "accent-parrot-squawk-1", + "accent-parrot-squawk-2", + "accent-parrot-squawk-3", + "accent-parrot-squawk-4", + "accent-parrot-squawk-5", + "accent-parrot-squawk-6", + "accent-parrot-squawk-7", + "accent-parrot-squawk-8" + ]; + +} diff --git a/Content.Server/Speech/EntitySystems/ParrotAccentSystem.cs b/Content.Server/Speech/EntitySystems/ParrotAccentSystem.cs new file mode 100644 index 00000000000..10437c235d6 --- /dev/null +++ b/Content.Server/Speech/EntitySystems/ParrotAccentSystem.cs @@ -0,0 +1,79 @@ +using System.Linq; +using System.Text.RegularExpressions; +using Content.Server.Speech.Components; +using Robust.Shared.Random; + +namespace Content.Server.Speech.EntitySystems; + +public sealed partial class ParrotAccentSystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnAccentGet); + } + + private void OnAccentGet(Entity entity, ref AccentGetEvent args) + { + args.Message = Accentuate(entity, args.Message); + } + + public string Accentuate(Entity entity, string message) + { + // Sometimes repeat the longest word at the end of the message, after a squawk! SQUAWK! Sometimes! + if (_random.Prob(entity.Comp.LongestWordRepeatChance)) + { + // Don't count non-alphanumeric characters as parts of words + var cleaned = Regex.Replace(message, "[^A-Za-z0-9 -]", string.Empty); + // Split on whitespace and favor words towards the end of the message + var words = cleaned.Split(null).Reverse(); + // Find longest word + var longest = words.MaxBy(word => word.Length); + if (longest?.Length >= entity.Comp.LongestWordMinLength) + { + message = EnsurePunctuation(message); + + // Capitalize the first letter of the repeated word + longest = string.Concat(longest[0].ToString().ToUpper(), longest.AsSpan(1)); + + message = string.Format("{0} {1} {2}!", message, GetRandomSquawk(entity), longest); + return message; // No more changes, or it's too much + } + } + + if (_random.Prob(entity.Comp.SquawkPrefixChance)) + { + // AWWK! Sometimes add a squawk at the begining of the message + message = string.Format("{0} {1}", GetRandomSquawk(entity), message); + } + else + { + // Otherwise add a squawk at the end of the message! RAWWK! + message = EnsurePunctuation(message); + message = string.Format("{0} {1}", message, GetRandomSquawk(entity)); + } + + return message; + } + + /// + /// Adds a "!" to the end of the string, if there isn't already a sentence-ending punctuation mark. + /// + private string EnsurePunctuation(string message) + { + if (!message.EndsWith('!') && !message.EndsWith('?') && !message.EndsWith('.')) + return message + '!'; + return message; + } + + /// + /// Returns a random, localized squawk sound. + /// + private string GetRandomSquawk(Entity entity) + { + return Loc.GetString(_random.Pick(entity.Comp.Squawks)); + } +} diff --git a/Content.Server/StationEvents/EventManagerSystem.cs b/Content.Server/StationEvents/EventManagerSystem.cs index 8942bdaf500..261e8ca46dd 100644 --- a/Content.Server/StationEvents/EventManagerSystem.cs +++ b/Content.Server/StationEvents/EventManagerSystem.cs @@ -1,4 +1,4 @@ -using System.Linq; +using System.Linq; using Content.Server.GameTicking; using Content.Server.StationEvents.Components; using Content.Shared.CCVar; @@ -19,8 +19,6 @@ public sealed class EventManagerSystem : EntitySystem [Dependency] public readonly GameTicker GameTicker = default!; [Dependency] private readonly GlimmerSystem _glimmerSystem = default!; //Nyano - Summary: pulls in the glimmer system. - private ISawmill _sawmill = default!; - public bool EventsEnabled { get; private set; } private void SetEnabled(bool value) => EventsEnabled = value; @@ -28,8 +26,6 @@ public override void Initialize() { base.Initialize(); - _sawmill = Logger.GetSawmill("events"); - Subs.CVar(_configurationManager, CCVars.EventsEnabled, SetEnabled, true); } @@ -43,13 +39,13 @@ public string RunRandomEvent() if (randomEvent == null) { var errStr = Loc.GetString("station-event-system-run-random-event-no-valid-events"); - _sawmill.Error(errStr); + Log.Error(errStr); return errStr; } var ent = GameTicker.AddGameRule(randomEvent); var str = Loc.GetString("station-event-system-run-event",("eventName", ToPrettyString(ent))); - _sawmill.Info(str); + Log.Info(str); return str; } @@ -59,7 +55,7 @@ public string RunRandomEvent() public string? PickRandomEvent() { var availableEvents = AvailableEvents(); - _sawmill.Info($"Picking from {availableEvents.Count} total available events"); + Log.Info($"Picking from {availableEvents.Count} total available events"); return FindEvent(availableEvents); } @@ -71,7 +67,7 @@ public string RunRandomEvent() { if (availableEvents.Count == 0) { - _sawmill.Warning("No events were available to run!"); + Log.Warning("No events were available to run!"); return null; } @@ -94,7 +90,7 @@ public string RunRandomEvent() } } - _sawmill.Error("Event was not found after weighted pick process!"); + Log.Error("Event was not found after weighted pick process!"); return null; } @@ -118,7 +114,7 @@ private Dictionary AvailableEvents(bool { if (CanRun(proto, stationEvent, playerCount, currentTime)) { - _sawmill.Debug($"Adding event {proto.ID} to possibilities"); + Log.Debug($"Adding event {proto.ID} to possibilities"); result.Add(proto, stationEvent); } } diff --git a/Content.Server/Storage/EntitySystems/SpawnItemsOnUseSystem.cs b/Content.Server/Storage/EntitySystems/SpawnItemsOnUseSystem.cs index c49bfdec931..0b4b13d6e4b 100644 --- a/Content.Server/Storage/EntitySystems/SpawnItemsOnUseSystem.cs +++ b/Content.Server/Storage/EntitySystems/SpawnItemsOnUseSystem.cs @@ -80,11 +80,6 @@ private void OnUseInHand(EntityUid uid, SpawnItemsOnUseComponent component, UseI _adminLogger.Add(LogType.EntitySpawn, LogImpact.Low, $"{ToPrettyString(args.User)} used {ToPrettyString(uid)} which spawned {ToPrettyString(entityToPlaceInHands.Value)}"); } - if (component.Sound != null) - { - _audio.PlayPvs(component.Sound, uid); - } - component.Uses--; // Delete entity only if component was successfully used @@ -97,6 +92,7 @@ private void OnUseInHand(EntityUid uid, SpawnItemsOnUseComponent component, UseI if (entityToPlaceInHands != null) { _hands.PickupOrDrop(args.User, entityToPlaceInHands.Value); + _audio.PlayPvs(component.Sound, entityToPlaceInHands.Value); } } } diff --git a/Content.Server/Store/Systems/StoreSystem.Ui.cs b/Content.Server/Store/Systems/StoreSystem.Ui.cs index 207f0c7373d..281d8f57267 100644 --- a/Content.Server/Store/Systems/StoreSystem.Ui.cs +++ b/Content.Server/Store/Systems/StoreSystem.Ui.cs @@ -321,7 +321,7 @@ private void OnRequestRefund(EntityUid uid, StoreComponent component, StoreReque if (!component.RefundAllowed || component.BoughtEntities.Count == 0) return; - for (var i = component.BoughtEntities.Count; i >= 0; i--) + for (var i = component.BoughtEntities.Count - 1; i >= 0; i--) { var purchase = component.BoughtEntities[i]; @@ -330,7 +330,7 @@ private void OnRequestRefund(EntityUid uid, StoreComponent component, StoreReque component.BoughtEntities.RemoveAt(i); - if (_actions.TryGetActionData(purchase, out var actionComponent)) + if (_actions.TryGetActionData(purchase, out var actionComponent, logError: false)) { _actionContainer.RemoveAction(purchase, actionComponent); } @@ -338,6 +338,8 @@ private void OnRequestRefund(EntityUid uid, StoreComponent component, StoreReque EntityManager.DeleteEntity(purchase); } + component.BoughtEntities.Clear(); + foreach (var (currency, value) in component.BalanceSpent) { component.Balance[currency] += value; diff --git a/Content.Server/VendingMachines/VendingMachineSystem.cs b/Content.Server/VendingMachines/VendingMachineSystem.cs index 9443b0b3948..b5fa611a396 100644 --- a/Content.Server/VendingMachines/VendingMachineSystem.cs +++ b/Content.Server/VendingMachines/VendingMachineSystem.cs @@ -41,13 +41,10 @@ public sealed class VendingMachineSystem : SharedVendingMachineSystem [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly AdvertiseSystem _advertise = default!; - private ISawmill _sawmill = default!; - public override void Initialize() { base.Initialize(); - _sawmill = Logger.GetSawmill("vending"); SubscribeLocalEvent(OnComponentMapInit); SubscribeLocalEvent(OnPowerChanged); SubscribeLocalEvent(OnBreak); @@ -86,7 +83,7 @@ private void OnVendingPrice(EntityUid uid, VendingMachineComponent component, re { if (!PrototypeManager.TryIndex(entry.ID, out var proto)) { - _sawmill.Error($"Unable to find entity prototype {entry.ID} on {ToPrettyString(uid)} vending."); + Log.Error($"Unable to find entity prototype {entry.ID} on {ToPrettyString(uid)} vending."); continue; } @@ -193,7 +190,7 @@ private void OnDoAfter(EntityUid uid, VendingMachineComponent component, DoAfter if (!TryComp(args.Args.Used, out var restockComponent)) { - _sawmill.Error($"{ToPrettyString(args.Args.User)} tried to restock {ToPrettyString(uid)} with {ToPrettyString(args.Args.Used.Value)} which did not have a VendingMachineRestockComponent."); + Log.Error($"{ToPrettyString(args.Args.User)} tried to restock {ToPrettyString(uid)} with {ToPrettyString(args.Args.Used.Value)} which did not have a VendingMachineRestockComponent."); return; } diff --git a/Content.Shared/ActionBlocker/ActionBlockerSystem.cs b/Content.Shared/ActionBlocker/ActionBlockerSystem.cs index 6dff8161eef..a914a8f267d 100644 --- a/Content.Shared/ActionBlocker/ActionBlockerSystem.cs +++ b/Content.Shared/ActionBlocker/ActionBlockerSystem.cs @@ -1,3 +1,4 @@ +using Content.Shared.Bed.Sleep; using Content.Shared.Body.Events; using Content.Shared.DragDrop; using Content.Shared.Emoting; @@ -5,6 +6,8 @@ using Content.Shared.Interaction; using Content.Shared.Interaction.Events; using Content.Shared.Item; +using Content.Shared.Mobs; +using Content.Shared.Mobs.Components; using Content.Shared.Movement.Components; using Content.Shared.Movement.Events; using Content.Shared.Speech; @@ -67,6 +70,9 @@ public bool UpdateCanMove(EntityUid uid, InputMoverComponent? component = null) /// public bool CanInteract(EntityUid user, EntityUid? target) { + if (!CanConsciouslyPerformAction(user)) + return false; + var ev = new InteractionAttemptEvent(user, target); RaiseLocalEvent(user, ev); @@ -98,6 +104,21 @@ public bool CanUseHeldEntity(EntityUid user) return !ev.Cancelled; } + + /// + /// Whether a user conscious to perform an action. + /// + /// + /// This should be used when you want a much more permissive check than + /// + public bool CanConsciouslyPerformAction(EntityUid user) + { + var ev = new ConsciousAttemptEvent(user); + RaiseLocalEvent(user, ev); + + return !ev.Cancelled; + } + public bool CanThrow(EntityUid user, EntityUid itemUid) { var ev = new ThrowAttemptEvent(user, itemUid); diff --git a/Content.Shared/Actions/BaseActionComponent.cs b/Content.Shared/Actions/BaseActionComponent.cs index cce7b912c76..6d9242acc1d 100644 --- a/Content.Shared/Actions/BaseActionComponent.cs +++ b/Content.Shared/Actions/BaseActionComponent.cs @@ -1,4 +1,5 @@ -using Robust.Shared.Audio; +using Content.Shared.Mobs; +using Robust.Shared.Audio; using Robust.Shared.Serialization; using Robust.Shared.Utility; @@ -118,6 +119,12 @@ public EntityUid? EntityIcon /// [DataField("checkCanInteract")] public bool CheckCanInteract = true; + /// + /// Whether to check if the user is conscious or not. Can be used instead of + /// for a more permissive check. + /// + [DataField] public bool CheckConsciousness = true; + /// /// If true, this will cause the action to only execute locally without ever notifying the server. /// @@ -177,6 +184,7 @@ public abstract class BaseActionComponentState : ComponentState public NetEntity? Container; public NetEntity? EntityIcon; public bool CheckCanInteract; + public bool CheckConsciousness; public bool ClientExclusive; public int Priority; public NetEntity? AttachedEntity; @@ -204,6 +212,7 @@ protected BaseActionComponentState(BaseActionComponent component, IEntityManager MaxCharges = component.MaxCharges; RenewCharges = component.RenewCharges; CheckCanInteract = component.CheckCanInteract; + CheckConsciousness = component.CheckConsciousness; ClientExclusive = component.ClientExclusive; Priority = component.Priority; AutoPopulate = component.AutoPopulate; diff --git a/Content.Shared/Actions/SharedActionsSystem.cs b/Content.Shared/Actions/SharedActionsSystem.cs index a3bfa071308..e909f0a8a30 100644 --- a/Content.Shared/Actions/SharedActionsSystem.cs +++ b/Content.Shared/Actions/SharedActionsSystem.cs @@ -8,6 +8,7 @@ using Content.Shared.Interaction; using Content.Shared.Inventory.Events; using Content.Shared.Mind; +using Content.Shared.Mobs.Components; using Robust.Shared.Audio.Systems; using Robust.Shared.Containers; using Robust.Shared.GameStates; @@ -370,6 +371,9 @@ private void OnActionRequest(RequestPerformActionEvent ev, EntitySessionEventArg BaseActionEvent? performEvent = null; + if (action.CheckConsciousness && !_actionBlockerSystem.CanConsciouslyPerformAction(user)) + return; + // Validate request by checking action blockers and the like: switch (action) { diff --git a/Content.Shared/Anomaly/SharedAnomalySystem.cs b/Content.Shared/Anomaly/SharedAnomalySystem.cs index 6cdcdf305bb..a3bb1e14679 100644 --- a/Content.Shared/Anomaly/SharedAnomalySystem.cs +++ b/Content.Shared/Anomaly/SharedAnomalySystem.cs @@ -35,8 +35,6 @@ public abstract class SharedAnomalySystem : EntitySystem [Dependency] protected readonly SharedPopupSystem Popup = default!; [Dependency] private readonly IRobustRandom _random = default!; - private ISawmill _sawmill = default!; - public override void Initialize() { base.Initialize(); @@ -45,8 +43,6 @@ public override void Initialize() SubscribeLocalEvent(OnAttacked); SubscribeLocalEvent(OnAnomalyThrowStart); SubscribeLocalEvent(OnAnomalyThrowEnd); - - _sawmill = Logger.GetSawmill("anomaly"); } private void OnInteractHand(EntityUid uid, AnomalyComponent component, InteractHandEvent args) @@ -98,7 +94,7 @@ public void DoAnomalyPulse(EntityUid uid, AnomalyComponent? component = null) component.NextPulseTime = Timing.CurTime + GetPulseLength(component) * variation; if (_net.IsServer) - _sawmill.Info($"Performing anomaly pulse. Entity: {ToPrettyString(uid)}"); + Log.Info($"Performing anomaly pulse. Entity: {ToPrettyString(uid)}"); // if we are above the growth threshold, then grow before the pulse if (component.Stability > component.GrowthThreshold) @@ -135,7 +131,7 @@ public void StartSupercriticalEvent(EntityUid uid) AdminLog.Add(LogType.Anomaly, LogImpact.High, $"Anomaly {ToPrettyString(uid)} began to go supercritical."); if (_net.IsServer) - _sawmill.Info($"Anomaly is going supercritical. Entity: {ToPrettyString(uid)}"); + Log.Info($"Anomaly is going supercritical. Entity: {ToPrettyString(uid)}"); var super = AddComp(uid); super.EndTime = Timing.CurTime + super.SupercriticalDuration; @@ -161,7 +157,7 @@ public void DoAnomalySupercriticalEvent(EntityUid uid, AnomalyComponent? compone Audio.PlayPvs(component.SupercriticalSound, uid); if (_net.IsServer) - _sawmill.Info($"Raising supercritical event. Entity: {ToPrettyString(uid)}"); + Log.Info($"Raising supercritical event. Entity: {ToPrettyString(uid)}"); var ev = new AnomalySupercriticalEvent(uid); RaiseLocalEvent(uid, ref ev, true); @@ -179,8 +175,9 @@ public void EndAnomaly(EntityUid uid, AnomalyComponent? component = null, bool s { // Logging before resolve, in case the anomaly has deleted itself. if (_net.IsServer) - _sawmill.Info($"Ending anomaly. Entity: {ToPrettyString(uid)}"); - AdminLog.Add(LogType.Anomaly, LogImpact.Extreme, $"Anomaly {ToPrettyString(uid)} went supercritical."); + Log.Info($"Ending anomaly. Entity: {ToPrettyString(uid)}"); + AdminLog.Add(LogType.Anomaly, supercritical ? LogImpact.High : LogImpact.Low, + $"Anomaly {ToPrettyString(uid)} {(supercritical ? "went supercritical" : "decayed")}."); if (!Resolve(uid, ref component)) return; diff --git a/Content.Shared/Damage/Components/DamageableComponent.cs b/Content.Shared/Damage/Components/DamageableComponent.cs index f8ba661a665..be66d51e3bc 100644 --- a/Content.Shared/Damage/Components/DamageableComponent.cs +++ b/Content.Shared/Damage/Components/DamageableComponent.cs @@ -1,6 +1,9 @@ using Content.Shared.Damage.Prototypes; using Content.Shared.FixedPoint; +using Content.Shared.Mobs; +using Content.Shared.StatusIcon; using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List; @@ -62,7 +65,18 @@ public sealed partial class DamageableComponent : Component public FixedPoint2 TotalDamage; [DataField("radiationDamageTypes", customTypeSerializer: typeof(PrototypeIdListSerializer))] - public List RadiationDamageTypeIDs = new() {"Radiation"}; + public List RadiationDamageTypeIDs = new() { "Radiation" }; + + [DataField] + public Dictionary> HealthIcons = new() + { + { MobState.Alive, "HealthIconFine" }, + { MobState.Critical, "HealthIconCritical" }, + { MobState.Dead, "HealthIconDead" }, + }; + + [DataField] + public ProtoId RottingIcon = "HealthIconRotting"; } [Serializable, NetSerializable] diff --git a/Content.Shared/DeviceLinking/SharedDeviceLinkSystem.cs b/Content.Shared/DeviceLinking/SharedDeviceLinkSystem.cs index 2ac525d154d..83aa7085897 100644 --- a/Content.Shared/DeviceLinking/SharedDeviceLinkSystem.cs +++ b/Content.Shared/DeviceLinking/SharedDeviceLinkSystem.cs @@ -13,7 +13,6 @@ public abstract class SharedDeviceLinkSystem : EntitySystem [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly SharedPopupSystem _popupSystem = default!; [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; - private ISawmill _sawmill = default!; public const string InvokedPort = "link_port"; @@ -25,7 +24,6 @@ public override void Initialize() SubscribeLocalEvent(OnSinkStartup); SubscribeLocalEvent(OnSourceRemoved); SubscribeLocalEvent(OnSinkRemoved); - _sawmill = Logger.GetSawmill("devicelink"); } #region Link Validation @@ -386,12 +384,12 @@ public void RemoveSinkFromSource( if (sourceComponent == null) { - _sawmill.Error($"Attempted to remove link between {ToPrettyString(sourceUid)} and {ToPrettyString(sinkUid)}, but the source component was missing."); + Log.Error($"Attempted to remove link between {ToPrettyString(sourceUid)} and {ToPrettyString(sinkUid)}, but the source component was missing."); sinkComponent!.LinkedSources.Remove(sourceUid); } else { - _sawmill.Error($"Attempted to remove link between {ToPrettyString(sourceUid)} and {ToPrettyString(sinkUid)}, but the sink component was missing."); + Log.Error($"Attempted to remove link between {ToPrettyString(sourceUid)} and {ToPrettyString(sinkUid)}, but the sink component was missing."); sourceComponent.LinkedPorts.Remove(sourceUid); } } diff --git a/Content.Shared/Interaction/Events/InteractionAttemptEvent.cs b/Content.Shared/Interaction/Events/InteractionAttemptEvent.cs index 46dfd20c34d..0024811c369 100644 --- a/Content.Shared/Interaction/Events/InteractionAttemptEvent.cs +++ b/Content.Shared/Interaction/Events/InteractionAttemptEvent.cs @@ -15,6 +15,14 @@ public InteractionAttemptEvent(EntityUid uid, EntityUid? target) public EntityUid? Target { get; } } + /// + /// Raised to determine whether an entity is conscious to perform an action. + /// + public sealed class ConsciousAttemptEvent(EntityUid Uid) : CancellableEntityEventArgs + { + public EntityUid Uid { get; } = Uid; + } + /// /// Event raised directed at the target entity of an interaction to see if the user is allowed to perform some /// generic interaction. diff --git a/Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs b/Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs index 51991332539..0c2fcc05794 100644 --- a/Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs +++ b/Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs @@ -28,7 +28,7 @@ private void SubscribeEvents() SubscribeLocalEvent(CheckAct); SubscribeLocalEvent(CheckAct); SubscribeLocalEvent(CheckAct); - SubscribeLocalEvent(CheckAct); + SubscribeLocalEvent(CheckAct); SubscribeLocalEvent(CheckAct); SubscribeLocalEvent(OnSpeakAttempt); SubscribeLocalEvent(OnEquipAttempt); diff --git a/Content.Shared/Movement/Components/SlowedByContactComponent.cs b/Content.Shared/Movement/Components/SpeedModifiedByContactComponent.cs similarity index 80% rename from Content.Shared/Movement/Components/SlowedByContactComponent.cs rename to Content.Shared/Movement/Components/SpeedModifiedByContactComponent.cs index eafefefee18..4f791e13cab 100644 --- a/Content.Shared/Movement/Components/SlowedByContactComponent.cs +++ b/Content.Shared/Movement/Components/SpeedModifiedByContactComponent.cs @@ -7,6 +7,6 @@ namespace Content.Shared.Movement.Components; /// Exists just to listen to a single event. What a life. /// [NetworkedComponent, RegisterComponent] // must be networked to properly predict adding & removal -public sealed partial class SlowedByContactComponent : Component +public sealed partial class SpeedModifiedByContactComponent : Component { } diff --git a/Content.Shared/Movement/Components/SlowContactsComponent.cs b/Content.Shared/Movement/Components/SpeedModifierContactsComponent.cs similarity index 83% rename from Content.Shared/Movement/Components/SlowContactsComponent.cs rename to Content.Shared/Movement/Components/SpeedModifierContactsComponent.cs index 00cbc55d198..73bb0690fdc 100644 --- a/Content.Shared/Movement/Components/SlowContactsComponent.cs +++ b/Content.Shared/Movement/Components/SpeedModifierContactsComponent.cs @@ -6,8 +6,8 @@ namespace Content.Shared.Movement.Components; [NetworkedComponent, RegisterComponent] [AutoGenerateComponentState] -[Access(typeof(SlowContactsSystem))] -public sealed partial class SlowContactsComponent : Component +[Access(typeof(SpeedModifierContactsSystem))] +public sealed partial class SpeedModifierContactsComponent : Component { [DataField("walkSpeedModifier"), ViewVariables(VVAccess.ReadWrite)] [AutoNetworkedField] diff --git a/Content.Shared/Movement/Systems/FrictionContactsSystem.cs b/Content.Shared/Movement/Systems/FrictionContactsSystem.cs index b104c549e69..b086bc0e05f 100644 --- a/Content.Shared/Movement/Systems/FrictionContactsSystem.cs +++ b/Content.Shared/Movement/Systems/FrictionContactsSystem.cs @@ -10,7 +10,7 @@ public sealed class FrictionContactsSystem : EntitySystem [Dependency] private readonly SharedPhysicsSystem _physics = default!; [Dependency] private readonly MovementSpeedModifierSystem _speedModifierSystem = default!; - // Comment copied from "original" SlowContactsSystem.cs + // Comment copied from "original" SlowContactsSystem.cs (now SpeedModifierContactsSystem.cs) // TODO full-game-save // Either these need to be processed before a map is saved, or slowed/slowing entities need to update on init. private HashSet _toUpdate = new(); diff --git a/Content.Shared/Movement/Systems/SlowContactsSystem.cs b/Content.Shared/Movement/Systems/SpeedModifierContactsSystem.cs similarity index 59% rename from Content.Shared/Movement/Systems/SlowContactsSystem.cs rename to Content.Shared/Movement/Systems/SpeedModifierContactsSystem.cs index 1ee145075f6..f9f6b82bb18 100644 --- a/Content.Shared/Movement/Systems/SlowContactsSystem.cs +++ b/Content.Shared/Movement/Systems/SpeedModifierContactsSystem.cs @@ -5,7 +5,7 @@ namespace Content.Shared.Movement.Systems; -public sealed class SlowContactsSystem : EntitySystem +public sealed class SpeedModifierContactsSystem : EntitySystem { [Dependency] private readonly SharedPhysicsSystem _physics = default!; [Dependency] private readonly MovementSpeedModifierSystem _speedModifierSystem = default!; @@ -18,10 +18,10 @@ public sealed class SlowContactsSystem : EntitySystem public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnEntityEnter); - SubscribeLocalEvent(OnEntityExit); - SubscribeLocalEvent(MovementSpeedCheck); - SubscribeLocalEvent(OnShutdown); + SubscribeLocalEvent(OnEntityEnter); + SubscribeLocalEvent(OnEntityExit); + SubscribeLocalEvent(MovementSpeedCheck); + SubscribeLocalEvent(OnShutdown); UpdatesAfter.Add(typeof(SharedPhysicsSystem)); } @@ -39,18 +39,18 @@ public override void Update(float frameTime) foreach (var ent in _toRemove) { - RemComp(ent); + RemComp(ent); } _toUpdate.Clear(); } - public void ChangeModifiers(EntityUid uid, float speed, SlowContactsComponent? component = null) + public void ChangeModifiers(EntityUid uid, float speed, SpeedModifierContactsComponent? component = null) { ChangeModifiers(uid, speed, speed, component); } - public void ChangeModifiers(EntityUid uid, float walkSpeed, float sprintSpeed, SlowContactsComponent? component = null) + public void ChangeModifiers(EntityUid uid, float walkSpeed, float sprintSpeed, SpeedModifierContactsComponent? component = null) { if (!Resolve(uid, ref component)) { @@ -62,7 +62,7 @@ public void ChangeModifiers(EntityUid uid, float walkSpeed, float sprintSpeed, S _toUpdate.UnionWith(_physics.GetContactingEntities(uid)); } - private void OnShutdown(EntityUid uid, SlowContactsComponent component, ComponentShutdown args) + private void OnShutdown(EntityUid uid, SpeedModifierContactsComponent component, ComponentShutdown args) { if (!TryComp(uid, out PhysicsComponent? phys)) return; @@ -71,48 +71,56 @@ private void OnShutdown(EntityUid uid, SlowContactsComponent component, Componen _toUpdate.UnionWith(_physics.GetContactingEntities(uid, phys)); } - private void MovementSpeedCheck(EntityUid uid, SlowedByContactComponent component, RefreshMovementSpeedModifiersEvent args) + private void MovementSpeedCheck(EntityUid uid, SpeedModifiedByContactComponent component, RefreshMovementSpeedModifiersEvent args) { if (!EntityManager.TryGetComponent(uid, out var physicsComponent)) return; - var walkSpeed = 1.0f; - var sprintSpeed = 1.0f; + var walkSpeed = 0.0f; + var sprintSpeed = 0.0f; bool remove = true; + var entries = 0; foreach (var ent in _physics.GetContactingEntities(uid, physicsComponent)) { - if (!TryComp(ent, out var slowContactsComponent)) + if (!TryComp(ent, out var slowContactsComponent)) continue; if (slowContactsComponent.IgnoreWhitelist != null && slowContactsComponent.IgnoreWhitelist.IsValid(uid)) continue; - walkSpeed = Math.Min(walkSpeed, slowContactsComponent.WalkSpeedModifier); - sprintSpeed = Math.Min(sprintSpeed, slowContactsComponent.SprintSpeedModifier); + walkSpeed += slowContactsComponent.WalkSpeedModifier; + sprintSpeed += slowContactsComponent.SprintSpeedModifier; remove = false; + entries++; } - args.ModifySpeed(walkSpeed, sprintSpeed); + if (entries > 0) + { + walkSpeed /= entries; + sprintSpeed /= entries; + + args.ModifySpeed(walkSpeed, sprintSpeed); + } // no longer colliding with anything if (remove) _toRemove.Add(uid); } - private void OnEntityExit(EntityUid uid, SlowContactsComponent component, ref EndCollideEvent args) + private void OnEntityExit(EntityUid uid, SpeedModifierContactsComponent component, ref EndCollideEvent args) { var otherUid = args.OtherEntity; _toUpdate.Add(otherUid); } - private void OnEntityEnter(EntityUid uid, SlowContactsComponent component, ref StartCollideEvent args) + private void OnEntityEnter(EntityUid uid, SpeedModifierContactsComponent component, ref StartCollideEvent args) { var otherUid = args.OtherEntity; if (!HasComp(otherUid)) return; - EnsureComp(otherUid); + EnsureComp(otherUid); _toUpdate.Add(otherUid); } } diff --git a/Content.Shared/Nutrition/EntitySystems/ThirstSystem.cs b/Content.Shared/Nutrition/EntitySystems/ThirstSystem.cs index b070cee2831..29218f57198 100644 --- a/Content.Shared/Nutrition/EntitySystems/ThirstSystem.cs +++ b/Content.Shared/Nutrition/EntitySystems/ThirstSystem.cs @@ -18,14 +18,10 @@ public sealed class ThirstSystem : EntitySystem [Dependency] private readonly MovementSpeedModifierSystem _movement = default!; [Dependency] private readonly SharedJetpackSystem _jetpack = default!; - private ISawmill _sawmill = default!; - public override void Initialize() { base.Initialize(); - _sawmill = Logger.GetSawmill("thirst"); - SubscribeLocalEvent(OnRefreshMovespeed); SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnRejuvenate); @@ -156,7 +152,7 @@ private void UpdateEffects(EntityUid uid, ThirstComponent component) return; default: - _sawmill.Error($"No thirst threshold found for {component.CurrentThirstThreshold}"); + Log.Error($"No thirst threshold found for {component.CurrentThirstThreshold}"); throw new ArgumentOutOfRangeException($"No thirst threshold found for {component.CurrentThirstThreshold}"); } } diff --git a/Content.Shared/Paint/PaintComponent.cs b/Content.Shared/Paint/PaintComponent.cs new file mode 100644 index 00000000000..ad09f4ca730 --- /dev/null +++ b/Content.Shared/Paint/PaintComponent.cs @@ -0,0 +1,60 @@ +using Content.Shared.Chemistry.Reagent; +using Content.Shared.FixedPoint; +using Robust.Shared.Audio; +using Content.Shared.Whitelist; +using Robust.Shared.Prototypes; +using Robust.Shared.GameStates; + +namespace Content.Shared.Paint; + +/// +/// Entity when used on another entity will paint target entity. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +[Access(typeof(SharedPaintSystem))] +public sealed partial class PaintComponent : Component +{ + /// + /// Noise made when paint applied. + /// + [DataField] + public SoundSpecifier Spray = new SoundPathSpecifier("/Audio/Effects/spray2.ogg"); + + /// + /// Solution on the entity that contains the paint. + /// + [DataField] + public string Solution = "drink"; + + /// + /// How long the doafter will take. + /// + [DataField] + public int Delay = 2; + + /// + /// Reagent that will be used as paint. + /// + [DataField, AutoNetworkedField] + public ProtoId Reagent = "SpaceGlue"; + + /// + /// Color that the painting entity will instruct the painted entity to be. + /// + [DataField, AutoNetworkedField] + public Color Color = Color.FromHex("#c62121"); + + [DataField, ViewVariables(VVAccess.ReadWrite)] + public EntityWhitelist? Blacklist; + /// + /// Reagent consumption per use. + /// + [DataField] + public FixedPoint2 ConsumptionUnit = FixedPoint2.New(5); + + /// + /// Duration per unit + /// + [DataField] + public TimeSpan DurationPerUnit = TimeSpan.FromSeconds(6); +} diff --git a/Content.Shared/Paint/PaintDoAfterEvent.cs b/Content.Shared/Paint/PaintDoAfterEvent.cs new file mode 100644 index 00000000000..0851f1541b4 --- /dev/null +++ b/Content.Shared/Paint/PaintDoAfterEvent.cs @@ -0,0 +1,9 @@ +using Content.Shared.DoAfter; +using Robust.Shared.Serialization; + +namespace Content.Shared.Paint; + +[Serializable, NetSerializable] +public sealed partial class PaintDoAfterEvent : SimpleDoAfterEvent +{ +} diff --git a/Content.Shared/Paint/PaintRemoverComponent.cs b/Content.Shared/Paint/PaintRemoverComponent.cs new file mode 100644 index 00000000000..54d0ed7a71b --- /dev/null +++ b/Content.Shared/Paint/PaintRemoverComponent.cs @@ -0,0 +1,24 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Audio; + +namespace Content.Shared.Paint; + +/// +/// Removes paint from an entity that was painted with spray paint. +/// +[RegisterComponent, NetworkedComponent] +[Access(typeof(PaintRemoverSystem))] +public sealed partial class PaintRemoverComponent : Component +{ + /// + /// Sound when target is cleaned. + /// + [DataField] + public SoundSpecifier Sound = new SoundPathSpecifier("/Audio/Effects/Fluids/watersplash.ogg"); + + /// + /// DoAfter wait time. + /// + [DataField] + public float CleanDelay = 2f; +} diff --git a/Content.Shared/Paint/PaintRemoverDoAfterEvent.cs b/Content.Shared/Paint/PaintRemoverDoAfterEvent.cs new file mode 100644 index 00000000000..940b1aa513c --- /dev/null +++ b/Content.Shared/Paint/PaintRemoverDoAfterEvent.cs @@ -0,0 +1,9 @@ +using Content.Shared.DoAfter; +using Robust.Shared.Serialization; + +namespace Content.Shared.Paint; + +[Serializable, NetSerializable] +public sealed partial class PaintRemoverDoAfterEvent : SimpleDoAfterEvent +{ +} diff --git a/Content.Shared/Paint/PaintRemoverSystem.cs b/Content.Shared/Paint/PaintRemoverSystem.cs new file mode 100644 index 00000000000..ac1cc624cfe --- /dev/null +++ b/Content.Shared/Paint/PaintRemoverSystem.cs @@ -0,0 +1,96 @@ +using Content.Shared.Popups; +using Content.Shared.Interaction; +using Content.Shared.DoAfter; +using Content.Shared.Verbs; +using Content.Shared.Sprite; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Timing; + +namespace Content.Shared.Paint; + +/// +/// Removes paint from an entity. +/// +public sealed class PaintRemoverSystem : SharedPaintSystem +{ + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInteract); + SubscribeLocalEvent(OnDoAfter); + SubscribeLocalEvent>(OnPaintRemoveVerb); + } + + // When entity is painted, remove paint from that entity. + private void OnInteract(EntityUid uid, PaintRemoverComponent component, AfterInteractEvent args) + { + if (args.Handled) + return; + + if (!args.CanReach || args.Target is not { Valid: true } target || !HasComp(target)) + return; + + _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, args.User, component.CleanDelay, new PaintRemoverDoAfterEvent(), uid, args.Target, uid) + { + BreakOnUserMove = true, + BreakOnDamage = true, + BreakOnTargetMove = true, + MovementThreshold = 1.0f, + }); + args.Handled = true; + } + + private void OnDoAfter(EntityUid uid, PaintRemoverComponent component, DoAfterEvent args) + { + if (args.Cancelled || args.Handled || args.Args.Target == null) + return; + + if (args.Target is not { Valid: true } target) + return; + + if (!TryComp(target, out PaintedComponent? paint)) + return; + + paint.Enabled = false; + _audio.PlayPredicted(component.Sound, target, args.User); + _popup.PopupClient(Loc.GetString("paint-removed", ("target", target)), args.User, args.User, PopupType.Medium); + _appearanceSystem.SetData(target, PaintVisuals.Painted, false); + RemComp(target); + Dirty(target, paint); + + args.Handled = true; + } + + private void OnPaintRemoveVerb(EntityUid uid, PaintRemoverComponent component, GetVerbsEvent args) + { + if (!args.CanInteract || !args.CanAccess) + return; + + var paintremovalText = Loc.GetString("paint-remove-verb"); + + var verb = new UtilityVerb() + { + Act = () => { + + _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, args.User, component.CleanDelay, new PaintRemoverDoAfterEvent(), uid, args.Target, uid) + { + BreakOnUserMove = true, + BreakOnDamage = true, + BreakOnTargetMove = true, + MovementThreshold = 1.0f, + }); + }, + + Text = paintremovalText + }; + + args.Verbs.Add(verb); + } +} diff --git a/Content.Shared/Paint/PaintedComponent.cs b/Content.Shared/Paint/PaintedComponent.cs new file mode 100644 index 00000000000..a6ee7377e11 --- /dev/null +++ b/Content.Shared/Paint/PaintedComponent.cs @@ -0,0 +1,41 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Serialization; + +namespace Content.Shared.Paint; + +/// +/// Component applied to target entity when painted. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class PaintedComponent : Component +{ + /// + /// Color of the paint. + /// + [DataField, AutoNetworkedField] + public Color Color = Color.FromHex("#2cdbd5"); + + /// + /// Used to remove the color when component removed. + /// + [DataField, AutoNetworkedField] + public Color BeforeColor; + + /// + /// If paint is enabled. + /// + [DataField, AutoNetworkedField] + public bool Enabled; + + /// + /// Name of the shader. + /// + [DataField, AutoNetworkedField] + public string ShaderName = "Greyscale"; +} + +[Serializable, NetSerializable] +public enum PaintVisuals : byte +{ + Painted, +} diff --git a/Content.Shared/Paint/SharedPaintSystem.cs b/Content.Shared/Paint/SharedPaintSystem.cs new file mode 100644 index 00000000000..10185817b86 --- /dev/null +++ b/Content.Shared/Paint/SharedPaintSystem.cs @@ -0,0 +1,11 @@ +namespace Content.Shared.Paint; + +/// +/// Colors target and consumes reagent on each color success. +/// +public abstract class SharedPaintSystem : EntitySystem +{ + public virtual void UpdateAppearance(EntityUid uid, PaintedComponent? component = null) + { + } +} diff --git a/Content.Shared/Procedural/Dungeon.cs b/Content.Shared/Procedural/Dungeon.cs index 5e976fe83d0..aecfef2c782 100644 --- a/Content.Shared/Procedural/Dungeon.cs +++ b/Content.Shared/Procedural/Dungeon.cs @@ -15,6 +15,8 @@ public sealed class Dungeon public readonly HashSet CorridorExteriorTiles = new(); + public readonly HashSet Entrances = new(); + public Dungeon() { Rooms = new List(); @@ -23,5 +25,10 @@ public Dungeon() public Dungeon(List rooms) { Rooms = rooms; + + foreach (var room in Rooms) + { + Entrances.UnionWith(room.Entrances); + } } } diff --git a/Content.Shared/Procedural/DungeonRoom.cs b/Content.Shared/Procedural/DungeonRoom.cs index a6f9367b125..4802949d2f3 100644 --- a/Content.Shared/Procedural/DungeonRoom.cs +++ b/Content.Shared/Procedural/DungeonRoom.cs @@ -4,7 +4,7 @@ namespace Content.Shared.Procedural; public sealed record DungeonRoom(HashSet Tiles, Vector2 Center, Box2i Bounds, HashSet Exterior) { - public List Entrances = new(); + public readonly List Entrances = new(); /// /// Nodes adjacent to tiles, including the corners. diff --git a/Content.Shared/Procedural/PostGeneration/BoundaryWallPostGen.cs b/Content.Shared/Procedural/PostGeneration/BoundaryWallPostGen.cs index 56d314089e3..390ff42feea 100644 --- a/Content.Shared/Procedural/PostGeneration/BoundaryWallPostGen.cs +++ b/Content.Shared/Procedural/PostGeneration/BoundaryWallPostGen.cs @@ -9,15 +9,25 @@ namespace Content.Shared.Procedural.PostGeneration; /// public sealed partial class BoundaryWallPostGen : IPostDunGen { - [DataField("tile", customTypeSerializer:typeof(PrototypeIdSerializer))] - public string Tile = "FloorSteel"; + [DataField] + public ProtoId Tile = "FloorSteel"; - [DataField("wall", customTypeSerializer:typeof(PrototypeIdSerializer))] - public string Wall = "WallSolid"; + [DataField] + public EntProtoId Wall = "WallSolid"; /// /// Walls to use in corners if applicable. /// - [DataField("cornerWall", customTypeSerializer:typeof(PrototypeIdSerializer))] + [DataField] public string? CornerWall; + + [DataField] + public BoundaryWallFlags Flags = BoundaryWallFlags.Corridors | BoundaryWallFlags.Rooms; +} + +[Flags] +public enum BoundaryWallFlags : byte +{ + Rooms = 1 << 0, + Corridors = 1 << 1, } diff --git a/Content.Shared/Procedural/PostGeneration/CornerClutterPostGen.cs b/Content.Shared/Procedural/PostGeneration/CornerClutterPostGen.cs index 22889d2b385..a16c7f9ab3f 100644 --- a/Content.Shared/Procedural/PostGeneration/CornerClutterPostGen.cs +++ b/Content.Shared/Procedural/PostGeneration/CornerClutterPostGen.cs @@ -7,12 +7,12 @@ namespace Content.Shared.Procedural.PostGeneration; /// public sealed partial class CornerClutterPostGen : IPostDunGen { - [DataField("chance")] + [DataField] public float Chance = 0.50f; /// /// The default starting bulbs /// - [DataField("contents", required: true)] + [DataField(required: true)] public List Contents = new(); } diff --git a/Content.Shared/Procedural/PostGeneration/CorridorClutterPostGen.cs b/Content.Shared/Procedural/PostGeneration/CorridorClutterPostGen.cs new file mode 100644 index 00000000000..a8a74ba6ccb --- /dev/null +++ b/Content.Shared/Procedural/PostGeneration/CorridorClutterPostGen.cs @@ -0,0 +1,18 @@ +using Content.Shared.Storage; + +namespace Content.Shared.Procedural.PostGeneration; + +/// +/// Adds entities randomly to the corridors. +/// +public sealed partial class CorridorClutterPostGen : IPostDunGen +{ + [DataField] + public float Chance = 0.05f; + + /// + /// The default starting bulbs + /// + [DataField(required: true)] + public List Contents = new(); +} diff --git a/Content.Shared/Procedural/PostGeneration/CorridorPostGen.cs b/Content.Shared/Procedural/PostGeneration/CorridorPostGen.cs index 32c49d1951a..705ae99dcef 100644 --- a/Content.Shared/Procedural/PostGeneration/CorridorPostGen.cs +++ b/Content.Shared/Procedural/PostGeneration/CorridorPostGen.cs @@ -14,24 +14,15 @@ public sealed partial class CorridorPostGen : IPostDunGen /// /// Given the heavy weightings this needs to be fairly large for larger dungeons. /// - [DataField("pathLimit")] + [DataField] public int PathLimit = 2048; - [DataField("method")] - public CorridorPostGenMethod Method = CorridorPostGenMethod.MinimumSpanningTree; - [DataField] public ProtoId Tile = "FloorSteel"; /// /// How wide to make the corridor. /// - [DataField("width")] - public int Width = 3; -} - -public enum CorridorPostGenMethod : byte -{ - Invalid, - MinimumSpanningTree, + [DataField] + public float Width = 3f; } diff --git a/Content.Shared/Procedural/PostGeneration/WormCorridorPostGen.cs b/Content.Shared/Procedural/PostGeneration/WormCorridorPostGen.cs new file mode 100644 index 00000000000..c57d92ef956 --- /dev/null +++ b/Content.Shared/Procedural/PostGeneration/WormCorridorPostGen.cs @@ -0,0 +1,42 @@ +using Content.Shared.Maps; +using Content.Shared.Procedural.DungeonGenerators; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Procedural.PostGeneration; + +// Ime a worm +/// +/// Generates worm corridors. +/// +public sealed partial class WormCorridorPostGen : IPostDunGen +{ + [DataField] + public int PathLimit = 2048; + + /// + /// How many times to run the worm + /// + [DataField] + public int Count = 20; + + /// + /// How long to make each worm + /// + [DataField] + public int Length = 20; + + /// + /// Maximum amount the angle can change in a single step. + /// + [DataField] + public Angle MaxAngleChange = Angle.FromDegrees(45); + + [DataField] + public ProtoId Tile = "FloorSteel"; + + /// + /// How wide to make the corridor. + /// + [DataField] + public float Width = 3f; +} diff --git a/Content.Shared/Slippery/SlipperySystem.cs b/Content.Shared/Slippery/SlipperySystem.cs index 1f602b9b52b..d20495cfa6c 100644 --- a/Content.Shared/Slippery/SlipperySystem.cs +++ b/Content.Shared/Slippery/SlipperySystem.cs @@ -1,9 +1,12 @@ using Content.Shared.Administration.Logs; using Content.Shared.Database; using Content.Shared.Inventory; +using Robust.Shared.Network; +using Content.Shared.Popups; using Content.Shared.StatusEffect; using Content.Shared.StepTrigger.Systems; using Content.Shared.Stunnable; +using Content.Shared.Throwing; using JetBrains.Annotations; using Robust.Shared.Audio.Systems; using Robust.Shared.Containers; @@ -30,6 +33,7 @@ public override void Initialize() SubscribeLocalEvent(HandleAttemptCollide); SubscribeLocalEvent(HandleStepTrigger); SubscribeLocalEvent(OnNoSlipAttempt); + SubscribeLocalEvent(OnThrownSlipAttempt); // as long as slip-resistant mice are never added, this should be fine (otherwise a mouse-hat will transfer it's power to the wearer). SubscribeLocalEvent>((e, c, ev) => OnNoSlipAttempt(e, c, ev.Args)); } @@ -52,6 +56,11 @@ private static void OnNoSlipAttempt(EntityUid uid, NoSlipComponent component, Sl args.Cancel(); } + private void OnThrownSlipAttempt(EntityUid uid, ThrownItemComponent comp, ref SlipCausingAttemptEvent args) + { + args.Cancelled = true; + } + private bool CanSlip(EntityUid uid, EntityUid toSlip) { return !_container.IsEntityInContainer(uid) @@ -68,6 +77,11 @@ private void TrySlip(EntityUid uid, SlipperyComponent component, EntityUid other if (attemptEv.Cancelled) return; + var attemptCausingEv = new SlipCausingAttemptEvent(); + RaiseLocalEvent(uid, ref attemptCausingEv); + if (attemptCausingEv.Cancelled) + return; + var ev = new SlipEvent(other); RaiseLocalEvent(uid, ref ev); @@ -107,7 +121,13 @@ public sealed class SlipAttemptEvent : CancellableEntityEventArgs, IInventoryRel } /// -/// This event is raised directed at an entity that CAUSED some other entity to slip (e.g., the banana peel). +/// Raised on an entity that is causing the slip event (e.g, the banana peel), to determine if the slip attempt should be cancelled. /// +/// If the slip should be cancelled +[ByRefEvent] +public record struct SlipCausingAttemptEvent (bool Cancelled); + +/// Raised on an entity that CAUSED some other entity to slip (e.g., the banana peel). +/// The entity being slipped [ByRefEvent] public readonly record struct SlipEvent(EntityUid Slipped); diff --git a/Content.Shared/SprayPainter/SharedSprayPainterSystem.cs b/Content.Shared/SprayPainter/SharedSprayPainterSystem.cs index 529e321f8da..fa04a50f8b0 100644 --- a/Content.Shared/SprayPainter/SharedSprayPainterSystem.cs +++ b/Content.Shared/SprayPainter/SharedSprayPainterSystem.cs @@ -4,6 +4,7 @@ using Content.Shared.Doors.Components; using Content.Shared.Interaction; using Content.Shared.Popups; +using Content.Shared.Paint; using Content.Shared.SprayPainter.Components; using Content.Shared.SprayPainter.Prototypes; using Robust.Shared.Audio.Systems; @@ -129,6 +130,8 @@ private void OnAirlockInteract(Entity ent, ref Intera return; } + RemComp(ent); + var doAfterEventArgs = new DoAfterArgs(EntityManager, args.User, painter.AirlockSprayTime, new SprayPainterDoorDoAfterEvent(sprite, style.Department), args.Used, target: ent, used: args.Used) { BreakOnTargetMove = true, diff --git a/Content.Shared/Weather/IgnoreWeatherComponent.cs b/Content.Shared/Weather/BlockWeatherComponent.cs similarity index 51% rename from Content.Shared/Weather/IgnoreWeatherComponent.cs rename to Content.Shared/Weather/BlockWeatherComponent.cs index 8b8d004ee2a..2ca8ba1aaac 100644 --- a/Content.Shared/Weather/IgnoreWeatherComponent.cs +++ b/Content.Shared/Weather/BlockWeatherComponent.cs @@ -3,10 +3,10 @@ namespace Content.Shared.Weather; /// -/// This entity will be ignored for considering weather on a tile +/// This entity will block the weather if it's anchored to the floor. /// [RegisterComponent, NetworkedComponent] -public sealed partial class IgnoreWeatherComponent : Component +public sealed partial class BlockWeatherComponent : Component { } diff --git a/Content.Shared/Weather/SharedWeatherSystem.cs b/Content.Shared/Weather/SharedWeatherSystem.cs index c907137d840..45a2afe7cd9 100644 --- a/Content.Shared/Weather/SharedWeatherSystem.cs +++ b/Content.Shared/Weather/SharedWeatherSystem.cs @@ -19,13 +19,13 @@ public abstract class SharedWeatherSystem : EntitySystem [Dependency] private readonly MetaDataSystem _metadata = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; - private EntityQuery _ignoreQuery; + private EntityQuery _blockQuery; private EntityQuery _physicsQuery; public override void Initialize() { base.Initialize(); - _ignoreQuery = GetEntityQuery(); + _blockQuery = GetEntityQuery(); _physicsQuery = GetEntityQuery(); SubscribeLocalEvent(OnWeatherUnpaused); } @@ -57,13 +57,8 @@ public bool CanWeatherAffect( while (anchoredEnts.MoveNext(out var ent)) { - if (!_ignoreQuery.HasComponent(ent.Value) && - _physicsQuery.TryGetComponent(ent, out var body) && - body.Hard && - body.CanCollide) - { + if (_blockQuery.HasComponent(ent.Value)) return false; - } } return true; diff --git a/Content.Shared/Zombies/ZombieComponent.cs b/Content.Shared/Zombies/ZombieComponent.cs index 85e1599e48a..be3fdbdd01a 100644 --- a/Content.Shared/Zombies/ZombieComponent.cs +++ b/Content.Shared/Zombies/ZombieComponent.cs @@ -110,7 +110,9 @@ public sealed partial class ZombieComponent : Component, IAntagStatusIconCompone { { "Blunt", -0.4 }, { "Slash", -0.2 }, - { "Piercing", -0.2 } + { "Piercing", -0.2 }, + { "Heat", -0.02 }, + { "Shock", -0.02 } } }; diff --git a/RUN_THIS.py b/RUN_THIS.py index b7a8fcaa35e..6ea9f8e707d 100755 --- a/RUN_THIS.py +++ b/RUN_THIS.py @@ -5,14 +5,9 @@ import sys import subprocess -IS_WINDOWS = sys.platform in ("win32", "cygwin") - version = sys.version_info if version.major < 3 or (version.major == 3 and version.minor < 5): print("ERROR: You need at least Python 3.5 to build SS14.") sys.exit(1) -if IS_WINDOWS: - subprocess.run(["py", "-3", "git_helper.py"], cwd="BuildChecker") -else: - subprocess.run(["python3", "git_helper.py"], cwd="BuildChecker") +subprocess.run([sys.executable, "git_helper.py"], cwd="BuildChecker") diff --git a/Resources/Audio/Effects/attributions.yml b/Resources/Audio/Effects/attributions.yml index a5f91ef10c6..90445a31d1c 100644 --- a/Resources/Audio/Effects/attributions.yml +++ b/Resources/Audio/Effects/attributions.yml @@ -93,6 +93,11 @@ license: Custom source: https://gdc.sonniss.com +- files: ["church_bell1.ogg", "church_bell2.ogg", "church_bell3.ogg", "church_bell4.ogg"] + copyright: '"the bell of my schools church.wav" by fonografico https://freesound.org/s/636113/". Pitch variations created via edits by Sphiral.' + license: "CC0-1.0" + source: https://freesound.org/people/fonografico/sounds/636113/? + - files: ["pop.ogg"] copyright: '"pop.ogg" by mirrorcult of GitHub.com' license: "CC0-1.0" diff --git a/Resources/Audio/Effects/church_bell1.ogg b/Resources/Audio/Effects/church_bell1.ogg new file mode 100644 index 00000000000..9713bd3d256 Binary files /dev/null and b/Resources/Audio/Effects/church_bell1.ogg differ diff --git a/Resources/Audio/Effects/church_bell2.ogg b/Resources/Audio/Effects/church_bell2.ogg new file mode 100644 index 00000000000..1d0f58b74d1 Binary files /dev/null and b/Resources/Audio/Effects/church_bell2.ogg differ diff --git a/Resources/Audio/Effects/church_bell3.ogg b/Resources/Audio/Effects/church_bell3.ogg new file mode 100644 index 00000000000..97567beaa05 Binary files /dev/null and b/Resources/Audio/Effects/church_bell3.ogg differ diff --git a/Resources/Audio/Effects/church_bell4.ogg b/Resources/Audio/Effects/church_bell4.ogg new file mode 100644 index 00000000000..c6f6aab9ddb Binary files /dev/null and b/Resources/Audio/Effects/church_bell4.ogg differ diff --git a/Resources/Audio/Items/attributions.yml b/Resources/Audio/Items/attributions.yml index 8942e41db23..e63b678ef81 100644 --- a/Resources/Audio/Items/attributions.yml +++ b/Resources/Audio/Items/attributions.yml @@ -102,3 +102,8 @@ license: "CC-BY-SA-3.0" copyright: "Taken from tgstation, modified by themias (github) for ss14" source: "https://github.com/tgstation/tgstation/tree/85a0925051bb00e7a950ee66cb7f87982cd22439/sound/effects/shovel_dig.ogg" + +- files: ["smoke_grenade_prime.ogg", "smoke_grenade_smoke.ogg"] + license: "CC0-1.0" + copyright: "Bhijn and Myr (github username deathride58)" + source: "https://github.com/space-wizards/space-station-14/pull/23476" diff --git a/Resources/Audio/Items/smoke_grenade_prime.ogg b/Resources/Audio/Items/smoke_grenade_prime.ogg new file mode 100644 index 00000000000..1c6cbcd25ab Binary files /dev/null and b/Resources/Audio/Items/smoke_grenade_prime.ogg differ diff --git a/Resources/Audio/Items/smoke_grenade_smoke.ogg b/Resources/Audio/Items/smoke_grenade_smoke.ogg new file mode 100644 index 00000000000..7603869d174 Binary files /dev/null and b/Resources/Audio/Items/smoke_grenade_smoke.ogg differ diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index dfdbfa45110..69a5a67bc06 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -4054,3 +4054,9 @@ Entries: victims when colliding with them. id: 6107 time: '2024-05-11T01:23:00.0000000+00:00' +- author: FoxxoTrystan + changes: + - type: Tweak + message: Better looking Vents Sprites! + id: 6108 + time: '2024-05-12T04:26:55.0000000+00:00' diff --git a/Resources/Credits/GitHub.txt b/Resources/Credits/GitHub.txt index f1bef715b7a..ce93c10d338 100644 --- a/Resources/Credits/GitHub.txt +++ b/Resources/Credits/GitHub.txt @@ -1 +1 @@ -0x6273, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 4dplanner, 612git, 778b, Ablankmann, Acruid, actioninja, adamsong, Admiral-Obvious-001, Adrian16199, Aerocrux, Aexxie, africalimedrop, Agoichi, Ahion, AJCM-git, AjexRose, Alekshhh, AlexMorgan3817, AlmondFlour, AlphaQwerty, Altoids1, amylizzle, ancientpower, ArchPigeon, Arendian, arimah, Arteben, AruMoon, as334, AsikKEsel, asperger-sind, avghdev, AzzyIsNotHere, BananaFlambe, BasedUser, BGare, BingoJohnson-zz, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, Boaz1111, BobdaBiscuit, brainfood1183, Brandon-Huu, Bribrooo, Bright0, brndd, BubblegumBlue, BYONDFuckery, c4llv07e, CakeQ, CaptainSqrBeard, Carbonhell, Carolyn3114, casperr04, CatTheSystem, Centronias, chairbender, Charlese2, Cheackraze, cheesePizza2, Chief-Engineer, chromiumboy, Chronophylos, clement-or, Clyybber, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, coolmankid12345, corentt, crazybrain23, creadth, CrigCrag, Crotalus, CrudeWax, CrzyPotato, Cyberboss, d34d10cc, Daemon, daerSeebaer, dahnte, dakamakat, dakimasu, DamianX, DangerRevolution, daniel-cr, Darkenson, DawBla, dch-GH, Deahaka, DEATHB4DEFEAT, DeathCamel58, deathride58, DebugOk, Decappi, deepdarkdepths, Delete69, deltanedas, DeltaV-Bot, DerbyX, DoctorBeard, DogZeroX, dontbetank, Doru991, DoubleRiceEddiedd, DrMelon, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, Dutch-VanDerLinde, Easypoller, eclips_e, EdenTheLiznerd, EEASAS, Efruit, ElectroSR, elthundercloud, Emisse, EmoGarbage404, Endecc, enumerate0, eoineoineoin, ERORR404V1, Errant-4, estacaoespacialpirata, exincore, exp111, Fahasor, FairlySadPanda, ficcialfaint, Fildrance, FillerVK, Fishfish458, Flareguy, FluffiestFloof, FluidRock, FoLoKe, fooberticus, Fortune117, freeman2651, Fromoriss, FungiFellow, GalacticChimp, gbasood, Geekyhobo, Genkail, Git-Nivrak, github-actions[bot], gituhabu, GNF54, Golinth, GoodWheatley, Gotimanga, graevy, GreyMario, Guess-My-Name, gusxyz, h3half, Hanzdegloker, Hardly3D, harikattar, Hebiman, Henry12116, HerCoyote23, Hmeister-real, HoofedEar, hord-brayden, hubismal, Hugal31, Hyenh, iacore, IamVelcroboy, icekot8, igorsaux, ike709, Illiux, Ilya246, IlyaElDunaev, Injazz, Insineer, IntegerTempest, Interrobang01, IProduceWidgets, ItsMeThom, j-giebel, Jackal298, Jackrost, jamessimo, janekvap, JerryImMouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JoeHammad1844, joelhed, JohnGinnane, johnku1, joshepvodka, jproads, Jrpl, juliangiebel, JustArt1m, JustCone14, JustinTether, JustinTrotter, KaiShibaa, kalane15, kalanosh, KEEYNy, Keikiru, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, KingFroozy, kira-er, Kit0vras, KittenColony, Kmc2000, Ko4ergaPunk, komunre, koteq, Krunklehorn, Kukutis96513, kxvvv, Lamrr, LankLTE, lapatison, Leander-0, leonardo-dabepis, LetterN, Level10Cybermancer, lever1209, LightVillet, liltenhead, LittleBuilderJane, Lomcastar, LordCarve, LordEclipse, LudwigVonChesterfield, Lukasz825700516, lunarcomets, luringens, lvvova1, lzimann, lzk228, M3739, MACMAN2003, Macoron, MagnusCrowe, ManelNavola, matthst, Matz05, MehimoNemo, MeltedPixel, MemeProof, Menshin, Mervill, metalgearsloth, mhamsterr, MilenVolf, Minty642, Mirino97, mirrorcult, MishaUnity, MisterMecky, Mith-randalf, MjrLandWhale, Moneyl, Moomoobeef, moony, Morb0, Mr0maks, musicmanvr, Myakot, Myctai, N3X15, Nairodian, Naive817, namespace-Memory, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, nmajask, nok-ko, Nopey, notafet, notquitehadouken, noudoit, noverd, nuke-haus, NULL882, Nylux, OCOtheOmega, OctoRocket, OldDanceJacket, onoira, Owai-Seek, pali6, Pangogie, patrikturi, PaulRitter, Peptide90, peptron1, Phantom-Lily, PHCodes, PixelTheKermit, PJB3005, Plykiya, pofitlo, pointer-to-null, PolterTzi, PoorMansDreams, potato1234x, ProfanedBane, PrPleGoo, ps3moira, Psychpsyo, psykzz, PuroSlavKing, quatre, QuietlyWhisper, qwerltaz, Radosvik, Radrark, Rainbeon, Rainfey, Rane, ravage123321, rbertoche, Redict, RedlineTriad, RednoWCirabrab, RemberBM, RemieRichards, RemTim, rene-descartes2021, RiceMar1244, RieBi, Rinkashikachi, Rockdtben, rolfero, rosieposieeee, Saakra, Samsterious, SaphireLattice, ScalyChimp, scrato, Scribbles0, Serkket, SethLafuente, ShadowCommander, Shadowtheprotogen546, SignalWalker, SimpleStation14, Simyon264, SirDragooon, Sirionaut, siyengar04, Skarletto, Skrauz, Skyedra, SlamBamActionman, Slava0135, Snowni, snowsignal, SonicHDC, SoulSloth, SpaceManiac, SpeltIncorrectyl, spoogemonster, ssdaniel24, Stealthbomber16, StrawberryMoses, Subversionary, SweptWasTaken, Szunti, TadJohnson00, takemysoult, TaralGit, Tayrtahn, tday93, TekuNut, TemporalOroboros, tentekal, tgrkzus, thatrandomcanadianguy, TheArturZh, theashtronaut, thedraccx, themias, Theomund, theOperand, TheShuEd, TimrodDX, Titian3, tkdrg, tmtmtl30, tom-leys, tomasalves8, Tomeno, tosatur, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, Tyler-IN, Tyzemol, UbaserB, UKNOWH, UnicornOnLSD, Uriende, UristMcDorf, Vaaankas, Varen, VasilisThePikachu, veliebm, Veritius, Verslebas, VigersRay, Visne, VMSolidus, volundr-, Voomra, Vordenburg, vulppine, waylon531, weaversam8, Willhelm53, wixoaGit, WlarusFromDaSpace, wrexbe, xRiriq, yathxyz, Ygg01, YotaXP, YuriyKiss, zach-hill, Zandario, Zap527, ZelteHonor, zerorulez, zionnBE, zlodo, ZNixian, ZoldorfTheWizard, Zumorica, Zymem +0x6273, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 4dplanner, 612git, 778b, Ablankmann, Acruid, actioninja, adamsong, Admiral-Obvious-001, Adrian16199, Aerocrux, Aexxie, africalimedrop, Agoichi, Ahion, AJCM-git, AjexRose, Alekshhh, AlexMorgan3817, AlmondFlour, AlphaQwerty, Altoids1, amylizzle, ancientpower, ArchPigeon, Arendian, arimah, Arteben, AruMoon, as334, AsikKEsel, asperger-sind, avghdev, AzzyIsNotHere, BananaFlambe, BasedUser, BGare, BingoJohnson-zz, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, Boaz1111, BobdaBiscuit, brainfood1183, Brandon-Huu, Bribrooo, Bright0, brndd, BubblegumBlue, BYONDFuckery, c4llv07e, CakeQ, CaptainSqrBeard, Carbonhell, Carolyn3114, casperr04, CatTheSystem, Centronias, chairbender, Charlese2, Cheackraze, cheesePizza2, Chief-Engineer, chromiumboy, Chronophylos, clement-or, Clyybber, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, coolmankid12345, corentt, crazybrain23, creadth, CrigCrag, Crotalus, CrudeWax, CrzyPotato, Cyberboss, d34d10cc, Daemon, daerSeebaer, dahnte, dakamakat, dakimasu, DamianX, DangerRevolution, daniel-cr, Darkenson, DawBla, dch-GH, Deahaka, DEATHB4DEFEAT, DeathCamel58, deathride58, DebugOk, Decappi, deepdarkdepths, Delete69, deltanedas, DeltaV-Bot, DerbyX, DoctorBeard, DogZeroX, dontbetank, Doru991, DoubleRiceEddiedd, DrMelon, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, Dutch-VanDerLinde, Easypoller, eclips_e, EdenTheLiznerd, EEASAS, Efruit, ElectroSR, elthundercloud, Emisse, EmoGarbage404, Endecc, enumerate0, eoineoineoin, ERORR404V1, Errant-4, estacaoespacialpirata, exincore, exp111, Fahasor, FairlySadPanda, ficcialfaint, Fildrance, FillerVK, Fishfish458, Flareguy, FluffiestFloof, FluidRock, FoLoKe, fooberticus, Fortune117, freeman2651, Fromoriss, FungiFellow, GalacticChimp, gbasood, Geekyhobo, Genkail, Git-Nivrak, github-actions[bot], gituhabu, GNF54, Golinth, GoodWheatley, Gotimanga, graevy, GreyMario, Guess-My-Name, gusxyz, h3half, Hanzdegloker, Hardly3D, harikattar, Hebiman, Henry12116, HerCoyote23, Hmeister-real, HoofedEar, hord-brayden, hubismal, Hugal31, Hyenh, iacore, IamVelcroboy, icekot8, igorsaux, ike709, Illiux, Ilya246, IlyaElDunaev, Injazz, Insineer, IntegerTempest, Interrobang01, IProduceWidgets, ItsMeThom, j-giebel, Jackal298, Jackrost, jamessimo, janekvap, JerryImMouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JoeHammad1844, joelhed, JohnGinnane, johnku1, joshepvodka, jproads, Jrpl, juliangiebel, JustArt1m, JustCone14, JustinTether, JustinTrotter, KaiShibaa, kalane15, kalanosh, KEEYNy, Keikiru, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, KingFroozy, kira-er, Kit0vras, KittenColony, Kmc2000, Ko4ergaPunk, komunre, koteq, Krunklehorn, Kukutis96513, kxvvv, Lamrr, LankLTE, lapatison, Leander-0, leonardo-dabepis, LetterN, Level10Cybermancer, lever1209, LightVillet, liltenhead, LittleBuilderJane, Lomcastar, LordCarve, LordEclipse, LudwigVonChesterfield, Lukasz825700516, lunarcomets, luringens, lvvova1, lzimann, lzk228, M3739, MACMAN2003, Macoron, MagnusCrowe, ManelNavola, matthst, Matz05, MehimoNemo, MeltedPixel, MemeProof, Menshin, Mervill, metalgearsloth, mhamsterr, MilenVolf, Minty642, Mirino97, mirrorcult, MishaUnity, MisterMecky, Mith-randalf, MjrLandWhale, Moneyl, Moomoobeef, moony, Morb0, Mr0maks, musicmanvr, Myakot, Myctai, N3X15, Nairodian, Naive817, namespace-Memory, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, nmajask, nok-ko, Nopey, notafet, notquitehadouken, noudoit, noverd, nuke-haus, NULL882, OCOtheOmega, OctoRocket, OldDanceJacket, onoira, Owai-Seek, pali6, Pangogie, patrikturi, PaulRitter, Peptide90, peptron1, Phantom-Lily, PHCodes, PixelTheKermit, PJB3005, Plykiya, pofitlo, pointer-to-null, PolterTzi, PoorMansDreams, potato1234x, ProfanedBane, PrPleGoo, ps3moira, Psychpsyo, psykzz, PuroSlavKing, quatre, QuietlyWhisper, qwerltaz, Radosvik, Radrark, Rainbeon, Rainfey, Rane, ravage123321, rbertoche, Redict, RedlineTriad, RednoWCirabrab, RemberBM, RemieRichards, RemTim, rene-descartes2021, RiceMar1244, RieBi, Rinkashikachi, Rockdtben, rolfero, rosieposieeee, Saakra, Samsterious, SaphireLattice, ScalyChimp, scrato, Scribbles0, Serkket, SethLafuente, ShadowCommander, Shadowtheprotogen546, SignalWalker, SimpleStation14, Simyon264, SirDragooon, Sirionaut, siyengar04, Skarletto, Skrauz, Skyedra, SlamBamActionman, Slava0135, Snowni, snowsignal, SonicHDC, SoulSloth, SpaceManiac, SpeltIncorrectyl, spoogemonster, ssdaniel24, Stealthbomber16, StrawberryMoses, Subversionary, SweptWasTaken, Szunti, TadJohnson00, takemysoult, TaralGit, Tayrtahn, tday93, TekuNut, TemporalOroboros, tentekal, tgrkzus, thatrandomcanadianguy, TheArturZh, theashtronaut, thedraccx, themias, Theomund, theOperand, TheShuEd, TimrodDX, Titian3, tkdrg, tmtmtl30, tom-leys, tomasalves8, Tomeno, tosatur, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, Tyler-IN, Tyzemol, UbaserB, UKNOWH, UnicornOnLSD, Uriende, UristMcDorf, Vaaankas, Varen, VasilisThePikachu, veliebm, Veritius, Verslebas, VigersRay, Visne, VMSolidus, volundr-, Voomra, Vordenburg, vulppine, waylon531, weaversam8, Willhelm53, wixoaGit, WlarusFromDaSpace, wrexbe, xRiriq, yathxyz, Ygg01, YotaXP, YuriyKiss, zach-hill, Zandario, Zap527, ZelteHonor, zerorulez, zionnBE, zlodo, ZNixian, ZoldorfTheWizard, Zumorica, Zymem diff --git a/Resources/Locale/en-US/accent/parrot.ftl b/Resources/Locale/en-US/accent/parrot.ftl new file mode 100644 index 00000000000..4d4e0dc7e3e --- /dev/null +++ b/Resources/Locale/en-US/accent/parrot.ftl @@ -0,0 +1,8 @@ +accent-parrot-squawk-1 = SQUAWK! +accent-parrot-squawk-2 = SQUAAAWK! +accent-parrot-squawk-3 = AWWK! +accent-parrot-squawk-4 = AAWK! +accent-parrot-squawk-5 = RAWWK! +accent-parrot-squawk-6 = RAAAWK! +accent-parrot-squawk-7 = BRAAWK! +accent-parrot-squawk-8 = BRAWWK! diff --git a/Resources/Locale/en-US/chat/managers/chat-manager.ftl b/Resources/Locale/en-US/chat/managers/chat-manager.ftl index a0cc5cf634c..fab815b4f90 100644 --- a/Resources/Locale/en-US/chat/managers/chat-manager.ftl +++ b/Resources/Locale/en-US/chat/managers/chat-manager.ftl @@ -109,6 +109,10 @@ chat-speech-verb-large-mob-2 = growls chat-speech-verb-monkey-1 = chimpers chat-speech-verb-monkey-2 = screeches +chat-speech-verb-parrot-1 = squawks +chat-speech-verb-parrot-2 = tweets +chat-speech-verb-parrot-3 = chirps + chat-speech-verb-cluwne-1 = giggles chat-speech-verb-cluwne-2 = guffaws chat-speech-verb-cluwne-3 = laughs diff --git a/Resources/Locale/en-US/deltav/flavors/flavor-profiles.ftl b/Resources/Locale/en-US/deltav/flavors/flavor-profiles.ftl index d4602b99398..98e04f2818d 100644 --- a/Resources/Locale/en-US/deltav/flavors/flavor-profiles.ftl +++ b/Resources/Locale/en-US/deltav/flavors/flavor-profiles.ftl @@ -25,5 +25,5 @@ flavor-complex-lemondrop = refreshingly tart flavor-complex-greengrass = like a holiday in the sun flavor-complex-daiquiri = fashionable flavor-complex-arsonistsbrew = like ash and flame -flavor-complex-dulleavene = ominous +flavor-complex-healthcodeviolation = ominous flavor-complex-pumpkin = like pumpkin diff --git a/Resources/Locale/en-US/paint/paint.ftl b/Resources/Locale/en-US/paint/paint.ftl new file mode 100644 index 00000000000..200b1f6e3f3 --- /dev/null +++ b/Resources/Locale/en-US/paint/paint.ftl @@ -0,0 +1,8 @@ +paint-success = {THE($target)} has been covered in paint! +paint-failure = Can't cover {THE($target)} in paint! +paint-failure-painted = {THE($target)} is already covered in paint! +paint-empty = {THE($used)} is empty! +paint-removed = You clean off the paint! +paint-closed = You must open {THE($used)} first! +paint-verb = Paint +paint-remove-verb = Remove Paint diff --git a/Resources/Locale/en-US/store/uplink-catalog.ftl b/Resources/Locale/en-US/store/uplink-catalog.ftl index e8340394297..70eb998bb40 100644 --- a/Resources/Locale/en-US/store/uplink-catalog.ftl +++ b/Resources/Locale/en-US/store/uplink-catalog.ftl @@ -64,7 +64,10 @@ uplink-exploding-pen-name = Exploding pen uplink-exploding-pen-desc = A class IV explosive device contained within a standard pen. Comes with a 4 second fuse. uplink-exploding-syndicate-bomb-name = Syndicate Bomb -uplink-exploding-syndicate-bomb-desc = A big, anchored bomb that can create a huge explosion if not defused in time. Useful as a distraction. Has an adjustable timer with a minimum setting of 120 seconds. +uplink-exploding-syndicate-bomb-desc = A big, anchored bomb that can create a huge explosion if not defused in time. Useful as a distraction. Has an adjustable timer with a minimum setting of 180 seconds. + +uplink-exploding-syndicate-bomb-fake-name = Decoy Syndicate Bomb +uplink-exploding-syndicate-bomb-fake-desc = A training bomb carefully made to look just like the real thing. In all ways similar to a syndicate bomb, but only creates a tiny explosion. uplink-cluster-grenade-name = Cluster Grenade uplink-cluster-grenade-desc = Three explosive grenades bundled together, the grenades get launched after the 3.5 second timer runs out. diff --git a/Resources/Locale/en-US/tiles/tiles.ftl b/Resources/Locale/en-US/tiles/tiles.ftl index 0a1b13a6e0d..e5b6810fcab 100644 --- a/Resources/Locale/en-US/tiles/tiles.ftl +++ b/Resources/Locale/en-US/tiles/tiles.ftl @@ -122,5 +122,8 @@ tiles-hull-reinforced = exterior reinforced hull plating tiles-web = web tile tiles-chromite = chromite tiles-astro-grass = astro-grass +tiles-mowed-astro-grass = mowed astro-grass +tiles-jungle-astro-grass = jungle astro-grass tiles-astro-ice = astro-ice +tiles-astro-snow = astro-snow tiles-wood-large = large wood \ No newline at end of file diff --git a/Resources/Maps/Dungeon/haunted.yml b/Resources/Maps/Dungeon/haunted.yml new file mode 100644 index 00000000000..d63ca74f200 --- /dev/null +++ b/Resources/Maps/Dungeon/haunted.yml @@ -0,0 +1,3251 @@ +meta: + format: 6 + postmapinit: false +tilemap: + 0: Space + 22: FloorCave + 23: FloorCaveDrought + 40: FloorDirt + 66: FloorMining + 68: FloorMiningLight + 71: FloorOldConcreteMono + 72: FloorOldConcreteSmooth + 82: FloorShuttleOrange + 118: FloorWood + 121: Plating + 124: PlatingDamaged +entities: +- proto: "" + entities: + - uid: 1653 + components: + - type: MetaData + - type: Transform + - type: Map + - type: PhysicsMap + - type: Broadphase + - type: OccluderTree + - chunks: + -1,-1: + ind: -1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAA + version: 6 + 0,0: + ind: 0,0 + tiles: FgAAAAAEFgAAAAAEFgAAAAAFFgAAAAAFFgAAAAAGFgAAAAAAFgAAAAAFFgAAAAAEFgAAAAADFgAAAAAAFgAAAAAFFgAAAAAAFgAAAAADFgAAAAAAFgAAAAACFgAAAAAFFgAAAAACFgAAAAAGFgAAAAADFgAAAAAAFgAAAAADFgAAAAAAFgAAAAAEFgAAAAABFgAAAAAEFgAAAAAGFgAAAAACFgAAAAACFgAAAAABFgAAAAAEFgAAAAAEFgAAAAAGFgAAAAAFFgAAAAAEFgAAAAACFgAAAAAFFgAAAAAAFgAAAAAFFgAAAAAAFgAAAAADFgAAAAACFgAAAAAGFgAAAAACFgAAAAAAFgAAAAAAFgAAAAAGFgAAAAAFFgAAAAADFgAAAAAEFgAAAAABFgAAAAACFgAAAAABFgAAAAAAFgAAAAAFFgAAAAAEFgAAAAAAFgAAAAAEFgAAAAADFgAAAAAGFgAAAAAEFgAAAAABFgAAAAAEFgAAAAACFgAAAAAGFgAAAAAFFgAAAAAAFgAAAAABFgAAAAAFFgAAAAADFgAAAAADFgAAAAAFFgAAAAAFFgAAAAABFgAAAAAFFgAAAAACFgAAAAAAFgAAAAAAFgAAAAAFFgAAAAADFgAAAAACUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFgAAAAADFgAAAAABFgAAAAABFgAAAAACFgAAAAABFgAAAAAGFgAAAAAAFgAAAAAGFwAAAAAAFwAAAAAAFgAAAAACUgAAAAAAFgAAAAAAFgAAAAAEFgAAAAAEFgAAAAACFwAAAAAAFwAAAAAAFgAAAAAAFgAAAAABFgAAAAADFwAAAAAAFwAAAAAAFwAAAAAAFwAAAAAAFwAAAAAAFgAAAAADUgAAAAAAFgAAAAACFgAAAAAFFgAAAAACFwAAAAAAFgAAAAAGFgAAAAADFwAAAAAAFwAAAAAAFgAAAAAEFgAAAAAAFgAAAAACFgAAAAADFwAAAAAAFgAAAAAAFgAAAAAFUgAAAAAAFwAAAAAAFwAAAAAAFwAAAAAAFwAAAAAAFgAAAAABFgAAAAABFwAAAAAAFwAAAAAAFwAAAAAAFgAAAAAFFgAAAAAAFgAAAAADFgAAAAAFFwAAAAAAFwAAAAAAUgAAAAAAFgAAAAADFgAAAAAGFgAAAAAGFwAAAAAAFgAAAAAAFgAAAAAGFgAAAAAFFgAAAAAEFgAAAAADFgAAAAAEFgAAAAAAFgAAAAAAFgAAAAABFgAAAAAEFgAAAAAEUgAAAAAAFgAAAAABFgAAAAADFgAAAAACFgAAAAAGUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFgAAAAAEFgAAAAAEFgAAAAABFgAAAAAEFwAAAAABFwAAAAABFwAAAAAEUgAAAAAAFgAAAAAFFgAAAAABFgAAAAAFFgAAAAADFgAAAAADFgAAAAAEFgAAAAADUgAAAAAAFgAAAAACFgAAAAAEFgAAAAAFFgAAAAABFgAAAAAGFgAAAAAFFwAAAAAEUgAAAAAAFgAAAAAGFgAAAAAGFwAAAAAGFwAAAAADFgAAAAAAFgAAAAADFgAAAAAEUgAAAAAAFgAAAAAGFwAAAAACFgAAAAACFgAAAAABFgAAAAABFgAAAAADFgAAAAAAUgAAAAAAFwAAAAACFgAAAAABFwAAAAAHFgAAAAACFgAAAAAEFwAAAAAEFgAAAAADUgAAAAAAFwAAAAACFgAAAAAGFgAAAAAGFgAAAAABFgAAAAAAFgAAAAAEFwAAAAAEUgAAAAAAFgAAAAABFwAAAAAFFwAAAAAFFgAAAAACFgAAAAABFwAAAAAHFwAAAAAEUgAAAAAA + version: 6 + 0,1: + ind: 0,1 + tiles: FwAAAAACFgAAAAAFFgAAAAACFgAAAAAEFgAAAAAEFgAAAAAGFgAAAAAAUgAAAAAAFgAAAAAAFgAAAAAAFgAAAAAAFgAAAAAGFgAAAAADFgAAAAAGFgAAAAADUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFgAAAAAEFgAAAAAFFgAAAAAFFgAAAAAFFgAAAAABUgAAAAAAFgAAAAAAFgAAAAAGFgAAAAAFFwAAAAAAFgAAAAAEUgAAAAAAFgAAAAADFgAAAAAGFgAAAAAAFgAAAAAFFgAAAAAEFwAAAAABFwAAAAAGFgAAAAAFFgAAAAAEUgAAAAAAFgAAAAACFwAAAAAFFwAAAAADFwAAAAADFgAAAAAFUgAAAAAAFwAAAAACFwAAAAADFwAAAAAEFwAAAAAFFgAAAAAEFwAAAAAGFwAAAAAHFwAAAAADFwAAAAAGUgAAAAAAFwAAAAAHFwAAAAACFgAAAAADFwAAAAADFgAAAAABUgAAAAAAFgAAAAABFgAAAAAGFgAAAAAEFgAAAAAGFgAAAAAFFgAAAAAAFwAAAAACFgAAAAAGFgAAAAABUgAAAAAAFgAAAAAGFwAAAAAGFwAAAAABFwAAAAAAFgAAAAACUgAAAAAAFwAAAAAAFgAAAAAGFwAAAAADFwAAAAAHFgAAAAADFgAAAAAGFgAAAAAFFgAAAAABFgAAAAAGUgAAAAAAFgAAAAAAFgAAAAABFgAAAAAFFgAAAAAGFwAAAAADUgAAAAAAFgAAAAACFgAAAAAAFgAAAAADFgAAAAAEUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFgAAAAAGFgAAAAABFgAAAAAFUgAAAAAAFwAAAAAEFgAAAAAAFgAAAAAFUgAAAAAAFwAAAAABFgAAAAAAFgAAAAADUgAAAAAAFgAAAAADFwAAAAAFFgAAAAAGUgAAAAAAFgAAAAAAFgAAAAAGFgAAAAAFUgAAAAAAFgAAAAADFgAAAAAGFgAAAAAGUgAAAAAAFgAAAAAGFgAAAAAAFgAAAAAAUgAAAAAAFwAAAAAAFwAAAAADFwAAAAAHUgAAAAAAFgAAAAABFgAAAAABFgAAAAACUgAAAAAAFgAAAAAFFgAAAAADFgAAAAAGUgAAAAAAFgAAAAAAFgAAAAAEFgAAAAAGUgAAAAAAFwAAAAABFwAAAAAFFgAAAAAGUgAAAAAAFgAAAAAGFgAAAAAAFwAAAAAEUgAAAAAAFgAAAAAAFgAAAAAFFgAAAAACUgAAAAAAFgAAAAADFgAAAAAFFgAAAAAEUgAAAAAAFwAAAAACFwAAAAAHFgAAAAADUgAAAAAAFgAAAAACFgAAAAADFgAAAAAGUgAAAAAAFgAAAAADFgAAAAADFgAAAAAAUgAAAAAAFgAAAAACFgAAAAAAFwAAAAABUgAAAAAAFwAAAAAAFgAAAAABFgAAAAABUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFgAAAAABFgAAAAABFgAAAAAAFgAAAAAAFgAAAAAAFgAAAAAEFgAAAAABFgAAAAADFgAAAAABFgAAAAAGFgAAAAAEFgAAAAADFgAAAAADUgAAAAAAFgAAAAADFgAAAAAFFgAAAAACFgAAAAACFgAAAAAEFgAAAAAGFgAAAAABFgAAAAAFFgAAAAACFgAAAAAGFgAAAAAAFgAAAAADFgAAAAAFFgAAAAAAFgAAAAAFUgAAAAAAFgAAAAADFgAAAAAA + version: 6 + 0,-1: + ind: 0,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAA + version: 6 + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAA + version: 6 + -1,1: + ind: -1,1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAA + version: 6 + 1,-1: + ind: 1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAA + version: 6 + 1,0: + ind: 1,0 + tiles: FgAAAAACUgAAAAAAFgAAAAACFgAAAAACFgAAAAABFgAAAAADFgAAAAACKAAAAAAAKAAAAAAAKAAAAAAAFgAAAAAGFgAAAAABFgAAAAAEFgAAAAAAFgAAAAAFFgAAAAABFgAAAAAGUgAAAAAAFgAAAAAGFgAAAAAAFgAAAAAFFgAAAAAGFgAAAAABFgAAAAADKAAAAAAAFgAAAAADFgAAAAAEFgAAAAAAFgAAAAAFFgAAAAABFgAAAAAAKAAAAAAAFgAAAAAEUgAAAAAAKAAAAAAAKAAAAAAAFgAAAAAAFgAAAAADKAAAAAAAFgAAAAADFgAAAAACFgAAAAAFKAAAAAAAKAAAAAAAKAAAAAAAFgAAAAAGKAAAAAAAKAAAAAAAFgAAAAACUgAAAAAAKAAAAAAAKAAAAAAAFgAAAAAGFgAAAAACFgAAAAAFFgAAAAACFgAAAAAEFgAAAAAGFgAAAAABFgAAAAADFgAAAAAGFgAAAAADFgAAAAABKAAAAAAAFgAAAAAGUgAAAAAAKAAAAAAAFgAAAAAEFgAAAAAFFgAAAAAFFgAAAAAAFgAAAAADFgAAAAAGFgAAAAABFgAAAAAGFgAAAAACFgAAAAACFgAAAAAAFgAAAAABKAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFwAAAAAAFwAAAAAAFwAAAAAAFgAAAAADFgAAAAAAFgAAAAAEFgAAAAADUgAAAAAAFgAAAAACFgAAAAAFFgAAAAAAFgAAAAAGFgAAAAAEFgAAAAADFgAAAAABFgAAAAAEFwAAAAAAFgAAAAADFwAAAAAAFwAAAAAAFgAAAAAGFgAAAAADFgAAAAAGUgAAAAAAFgAAAAAGFgAAAAAAFgAAAAAGFgAAAAAAFwAAAAAAFwAAAAAAFwAAAAAAFwAAAAAAFgAAAAAAFgAAAAACFgAAAAADFwAAAAAAFwAAAAAAFwAAAAAAFwAAAAAAUgAAAAAAFwAAAAAAFwAAAAAAFwAAAAAAFgAAAAADFgAAAAAFFgAAAAAAFwAAAAAAFwAAAAAAFwAAAAAAFgAAAAAGFwAAAAAAFwAAAAAAFgAAAAAGFgAAAAAGFgAAAAACUgAAAAAAFgAAAAAFFgAAAAAAFwAAAAAAFwAAAAAAFwAAAAAAFwAAAAAAFwAAAAAAFgAAAAAAFwAAAAAAFwAAAAAAFwAAAAAAFgAAAAAAFgAAAAABFgAAAAAFFgAAAAABUgAAAAAAFgAAAAAEFgAAAAABFgAAAAAFFgAAAAAEFgAAAAADFgAAAAAGFgAAAAAEFwAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFgAAAAADFgAAAAAGFgAAAAAGFgAAAAAGFgAAAAADFgAAAAAEFgAAAAACUgAAAAAAFgAAAAABFgAAAAAAFgAAAAABFgAAAAAFFgAAAAABFgAAAAABFgAAAAACUgAAAAAAFgAAAAACFwAAAAAAFwAAAAACFwAAAAAEFwAAAAACFgAAAAACFgAAAAAFUgAAAAAAFgAAAAACFgAAAAAEFgAAAAAGFgAAAAADFgAAAAAGFgAAAAABFgAAAAACUgAAAAAAFgAAAAAGFgAAAAAFFwAAAAAHFwAAAAADFwAAAAAAFwAAAAACFgAAAAAAUgAAAAAAFgAAAAABFgAAAAAFFgAAAAABFgAAAAADFgAAAAAFFgAAAAAFFgAAAAAGUgAAAAAAFgAAAAADFgAAAAABFwAAAAAHFwAAAAAAFwAAAAAEFgAAAAADFgAAAAAGUgAAAAAAFgAAAAAAFgAAAAABFgAAAAACFgAAAAAAFgAAAAAFFgAAAAADFgAAAAADUgAAAAAA + version: 6 + 1,1: + ind: 1,1 + tiles: FgAAAAAAFgAAAAAAFgAAAAAFFgAAAAADFgAAAAAEFgAAAAAEFgAAAAAGUgAAAAAAFgAAAAABFgAAAAABFgAAAAAAFgAAAAABFgAAAAACFgAAAAAFFgAAAAADUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFgAAAAAAUgAAAAAAFgAAAAADFgAAAAAAFgAAAAABFgAAAAAGFgAAAAADUgAAAAAAFgAAAAAAFgAAAAAAFgAAAAACFgAAAAAAFgAAAAAFUgAAAAAAFgAAAAABFgAAAAACFgAAAAAGUgAAAAAAFgAAAAAGFgAAAAAGFgAAAAAGFgAAAAADFgAAAAAGUgAAAAAAFgAAAAADFwAAAAADFwAAAAABFgAAAAACFgAAAAAFUgAAAAAAFgAAAAAEdgAAAAADFgAAAAAFUgAAAAAAFgAAAAABFgAAAAAFFgAAAAAGFgAAAAABFgAAAAABUgAAAAAAFgAAAAAGFwAAAAAEFwAAAAACFwAAAAAHFgAAAAACUgAAAAAAFgAAAAACdgAAAAABFwAAAAADUgAAAAAAFgAAAAAGFgAAAAAAFgAAAAACFgAAAAAFFgAAAAADUgAAAAAAFgAAAAACFgAAAAACFwAAAAAHFwAAAAAAFgAAAAABUgAAAAAAFgAAAAAAdgAAAAACFgAAAAAGUgAAAAAAFgAAAAAGFgAAAAADFgAAAAAAFgAAAAAFFgAAAAAAUgAAAAAAFgAAAAACFgAAAAAFFgAAAAABFgAAAAADFgAAAAAAUgAAAAAAFgAAAAAEFgAAAAAGUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFwAAAAAEFwAAAAAFFwAAAAAGUgAAAAAAFgAAAAAGFwAAAAAFFgAAAAACUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFwAAAAADFgAAAAACFgAAAAAEUgAAAAAAFgAAAAAGFgAAAAABFgAAAAAFUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFwAAAAACFwAAAAAGFwAAAAAAUgAAAAAAFgAAAAAGFgAAAAAFFgAAAAAEUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFgAAAAABFgAAAAAGFwAAAAADUgAAAAAAFwAAAAACFgAAAAAEFgAAAAACUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFwAAAAAAFwAAAAAEFwAAAAABUgAAAAAAFgAAAAAGFgAAAAAFFwAAAAAHUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFgAAAAAGFgAAAAACFgAAAAAFFgAAAAAFFgAAAAADFgAAAAACFgAAAAAGFgAAAAAFFwAAAAAGFwAAAAAFFwAAAAAAUgAAAAAAFgAAAAAAFwAAAAADFwAAAAADFwAAAAADFwAAAAAEFgAAAAAEFwAAAAAHFwAAAAAGFgAAAAADFgAAAAACFgAAAAADFwAAAAAEFwAAAAABFwAAAAABFwAAAAAHUgAAAAAAFgAAAAAAFgAAAAAFFgAAAAADFgAAAAAE + version: 6 + -1,2: + ind: -1,2 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAA + version: 6 + -1,3: + ind: -1,3 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 0,2: + ind: 0,2 + tiles: FgAAAAAAFgAAAAACFgAAAAAEFgAAAAADFgAAAAACFgAAAAAGFgAAAAAFFgAAAAACFgAAAAAFFgAAAAACFgAAAAAEFgAAAAAFFgAAAAABUgAAAAAAFgAAAAAFFgAAAAABUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFgAAAAADFgAAAAACFgAAAAAEFwAAAAAAFgAAAAACFgAAAAAAFgAAAAAEFgAAAAADFgAAAAAGFgAAAAAGFwAAAAAEUgAAAAAAFgAAAAAEFgAAAAADFgAAAAAAFgAAAAADFwAAAAAFFwAAAAACFgAAAAAFFgAAAAACFgAAAAAFFgAAAAAFFgAAAAAEFwAAAAAAFgAAAAAGFgAAAAAAFgAAAAACUgAAAAAAFgAAAAABFgAAAAAFFgAAAAAGFgAAAAAAFgAAAAAGFgAAAAAFFgAAAAACFgAAAAAEFwAAAAAHFgAAAAAGFgAAAAAFFgAAAAAFFgAAAAAGFgAAAAAAFgAAAAACUgAAAAAAFgAAAAAEFgAAAAAAFgAAAAABFgAAAAAFUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFgAAAAAGFgAAAAABFgAAAAAGFgAAAAADFgAAAAABFgAAAAAAFgAAAAAEUgAAAAAAFgAAAAADFgAAAAABFgAAAAAFFgAAAAAAFgAAAAAEFgAAAAADFgAAAAAFUgAAAAAAFgAAAAAEFgAAAAACFgAAAAABFgAAAAADFgAAAAAEFgAAAAACFgAAAAABUgAAAAAAFgAAAAAEFgAAAAAAFgAAAAAGFgAAAAABFgAAAAAAFgAAAAAEFgAAAAAGUgAAAAAAFgAAAAAEFgAAAAAGFgAAAAABFgAAAAABFgAAAAADFgAAAAACFgAAAAAEUgAAAAAAFgAAAAAAFgAAAAADFgAAAAADFgAAAAADFgAAAAAAFgAAAAADFgAAAAAEUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFgAAAAACFgAAAAABFgAAAAAFFgAAAAABFgAAAAABFgAAAAAAFgAAAAAEUgAAAAAAFgAAAAAEFgAAAAAFFgAAAAACFgAAAAAEFgAAAAADFgAAAAAAFgAAAAAGUgAAAAAAFgAAAAAAFgAAAAAAQgAAAAAAQgAAAAAAQgAAAAAAFgAAAAAFFgAAAAAGUgAAAAAAFgAAAAADFgAAAAABQgAAAAAAFgAAAAAEfAAAAAAAFgAAAAACFgAAAAAAUgAAAAAAFgAAAAAAQgAAAAAAQgAAAAAARAAAAAAAQgAAAAAAQgAAAAAAFgAAAAAEUgAAAAAAFgAAAAAAQgAAAAAAfAAAAAABRAAAAAAAeQAAAAAAFgAAAAAAFgAAAAABUgAAAAAAFgAAAAAFQgAAAAAAQgAAAAAARAAAAAAAQgAAAAAAQgAAAAAAFgAAAAAAUgAAAAAAFgAAAAAFQgAAAAAARAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAFgAAAAACUgAAAAAAFgAAAAABQgAAAAAAQgAAAAAAQgAAAAAAQgAAAAAAQgAAAAAAFgAAAAAGUgAAAAAAFgAAAAAFQgAAAAAAQgAAAAAAQgAAAAAAQgAAAAAAQgAAAAAAFgAAAAABUgAAAAAAFgAAAAABFgAAAAACQgAAAAAAQgAAAAAAQgAAAAAAFgAAAAAGFgAAAAAEUgAAAAAAFgAAAAAEFgAAAAACQgAAAAAAQgAAAAAAQgAAAAAAFgAAAAABFgAAAAABUgAAAAAA + version: 6 + 0,3: + ind: 0,3 + tiles: FgAAAAADFgAAAAAGFgAAAAAGFgAAAAAFFgAAAAAGFgAAAAAFFgAAAAAFUgAAAAAAFgAAAAADFgAAAAACFgAAAAAFFgAAAAAGFgAAAAAEFgAAAAAAFgAAAAAFUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 1,2: + ind: 1,2 + tiles: FgAAAAACFgAAAAAFFgAAAAADFgAAAAAEFgAAAAACFwAAAAACFwAAAAADFwAAAAAAFwAAAAAGFwAAAAAHFwAAAAAEUgAAAAAAFgAAAAAAFgAAAAAAFgAAAAAAFgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFgAAAAAFFgAAAAACFgAAAAAEFgAAAAAAFgAAAAAAFgAAAAADFgAAAAABUgAAAAAAFgAAAAAEFgAAAAAGFgAAAAAAFgAAAAAGFgAAAAAFFgAAAAABFgAAAAAFFgAAAAACFgAAAAAEFgAAAAACFgAAAAABFgAAAAAEFgAAAAAEFgAAAAAFFgAAAAAGUgAAAAAAFgAAAAABFgAAAAACFgAAAAAFFgAAAAAGFgAAAAAGFgAAAAAGFgAAAAADFgAAAAAAFgAAAAAGFgAAAAAEFgAAAAADFgAAAAAFFgAAAAAAFgAAAAAFFgAAAAAEUgAAAAAAFgAAAAAEFgAAAAABFgAAAAAEFgAAAAAEFgAAAAAAFgAAAAAGFgAAAAAGFgAAAAABUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFgAAAAACFgAAAAACFgAAAAAAFgAAAAADFgAAAAAEFgAAAAAEFgAAAAAFUgAAAAAAFgAAAAABFgAAAAAEFgAAAAABFgAAAAAAFgAAAAAFFgAAAAACFgAAAAAAUgAAAAAAFgAAAAAGFgAAAAAEFgAAAAAEFgAAAAAGFgAAAAAEFgAAAAACFgAAAAAEUgAAAAAAFgAAAAAAFgAAAAACFgAAAAAGFgAAAAAAFgAAAAAGFgAAAAACFgAAAAADUgAAAAAAFgAAAAAGFgAAAAAFFgAAAAABFgAAAAAAFgAAAAAAFgAAAAAAFgAAAAACUgAAAAAAFgAAAAAEFgAAAAAFFgAAAAABFgAAAAAAFgAAAAAFFgAAAAACFgAAAAAEUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFgAAAAAEFgAAAAAFFgAAAAABFgAAAAABFgAAAAAAFgAAAAAFFgAAAAAGUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAAFFgAAAAAAQgAAAAAAQgAAAAAAQgAAAAAAFgAAAAAFFgAAAAACUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAAEQgAAAAAAQgAAAAAARAAAAAAAQgAAAAAAQgAAAAAAFgAAAAAFUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAAEQgAAAAAAQgAAAAAARAAAAAAAQgAAAAAAQgAAAAAAFgAAAAAEUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAABQgAAAAAAQgAAAAAARAAAAAAAQgAAAAAAQgAAAAAAFgAAAAAEUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAABFgAAAAAEQgAAAAAAQgAAAAAAQgAAAAAAFgAAAAAFFgAAAAADUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 1,3: + ind: 1,3 + tiles: FgAAAAAEFgAAAAACFgAAAAAFFgAAAAAGFgAAAAACFgAAAAACFgAAAAAFUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 2,0: + ind: 2,0 + tiles: FgAAAAABFgAAAAABFgAAAAACUgAAAAAAFwAAAAAAFgAAAAAFFgAAAAAFFgAAAAADFgAAAAAEFgAAAAACFgAAAAAAFgAAAAAEFgAAAAAGFgAAAAADFgAAAAADFgAAAAAGFgAAAAAGFgAAAAAFKAAAAAAAUgAAAAAAFwAAAAAAFwAAAAAAFgAAAAAFFgAAAAACFgAAAAABFgAAAAACFgAAAAAGFgAAAAAGFgAAAAAGFgAAAAAAFgAAAAABFgAAAAACFgAAAAAGFgAAAAAEKAAAAAAAUgAAAAAAFwAAAAAAFwAAAAAAFgAAAAAAFgAAAAAFFgAAAAAAFgAAAAAAFgAAAAAEFgAAAAAGFgAAAAAAFgAAAAACFgAAAAAAFgAAAAAGKAAAAAAAKAAAAAAAKAAAAAAAUgAAAAAAFwAAAAAAFwAAAAAAFwAAAAAAFwAAAAAAFgAAAAACFgAAAAAFFgAAAAAAFgAAAAACFgAAAAABFgAAAAAAFgAAAAADFgAAAAAGKAAAAAAAKAAAAAAAFgAAAAAFUgAAAAAAFgAAAAADFgAAAAADFwAAAAAAFgAAAAABFgAAAAADFgAAAAACFgAAAAAEFgAAAAADFgAAAAADFgAAAAAFFgAAAAABFgAAAAAFUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFwAAAAAAFgAAAAAEFgAAAAAEUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFwAAAAAAFwAAAAAAFwAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFwAAAAAAFwAAAAAAFwAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFgAAAAAFFgAAAAABFgAAAAAGUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFgAAAAAAFgAAAAAAFgAAAAAGUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFgAAAAAFFgAAAAAFFgAAAAAEFgAAAAADFgAAAAAEFgAAAAAAFgAAAAAFUgAAAAAAFgAAAAAGFgAAAAACFgAAAAAAFgAAAAAFFgAAAAADFgAAAAAFFgAAAAAGUgAAAAAAFgAAAAABRwAAAAADRwAAAAABSAAAAAAARwAAAAADFgAAAAAFFgAAAAAFUgAAAAAAFgAAAAACFgAAAAAEFgAAAAADFgAAAAAGFgAAAAAFFgAAAAABFgAAAAAAUgAAAAAAFgAAAAABFgAAAAACSAAAAAACSAAAAAADRwAAAAADSAAAAAAAFgAAAAADUgAAAAAAFgAAAAADFgAAAAADFgAAAAADFgAAAAAFFgAAAAABFgAAAAAEFgAAAAAAUgAAAAAAFgAAAAAGRwAAAAABSAAAAAACSAAAAAAASAAAAAACRwAAAAADFgAAAAAGUgAAAAAAFgAAAAAGFgAAAAAEFgAAAAAFFgAAAAACFgAAAAAEFgAAAAACFgAAAAAGUgAAAAAA + version: 6 + 3,0: + ind: 3,0 + tiles: FgAAAAADFgAAAAACFgAAAAAEFgAAAAAEFgAAAAADFwAAAAAAFgAAAAAEUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAAGFgAAAAAEFgAAAAAGFgAAAAADFgAAAAAFFgAAAAADFwAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAABFgAAAAAAFgAAAAABFgAAAAAAFwAAAAAAFwAAAAAAFwAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAAAFgAAAAADFwAAAAAAFwAAAAAAFwAAAAAAFwAAAAAAFwAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAAGFgAAAAABFgAAAAAGFgAAAAAAFgAAAAAFFgAAAAADFgAAAAADUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 2,-1: + ind: 2,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAA + version: 6 + 3,-1: + ind: 3,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 3,1: + ind: 3,1 + tiles: UgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 3,2: + ind: 3,2 + tiles: UgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 2,2: + ind: 2,2 + tiles: FgAAAAAAFgAAAAAFFgAAAAAAFgAAAAADFgAAAAAFFgAAAAAGFwAAAAACFwAAAAABFgAAAAAFUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFgAAAAAEFgAAAAAGFgAAAAACUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFgAAAAAFFgAAAAAEFgAAAAAEUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFgAAAAAEFgAAAAABFgAAAAADUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFgAAAAAAFgAAAAABFgAAAAAGFgAAAAAFFgAAAAACFgAAAAACFgAAAAAEUgAAAAAAFgAAAAAAFgAAAAAGFgAAAAAAFgAAAAADFgAAAAACFgAAAAAEFgAAAAAGUgAAAAAAFgAAAAABFgAAAAACFgAAAAAEFgAAAAACFgAAAAABFgAAAAAAFgAAAAAFUgAAAAAAFgAAAAACFgAAAAADFgAAAAAGFgAAAAADFgAAAAACFgAAAAAFFgAAAAAEUgAAAAAAFgAAAAAEFgAAAAABFgAAAAAEFgAAAAACFgAAAAACFgAAAAABFgAAAAAGUgAAAAAAFgAAAAAEFgAAAAABFgAAAAACFgAAAAADFgAAAAABFgAAAAABFgAAAAAEUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 2,1: + ind: 2,1 + tiles: FgAAAAAAFgAAAAAGFgAAAAAEFgAAAAACFgAAAAAGFgAAAAAEFgAAAAADUgAAAAAAFgAAAAACFgAAAAAEFgAAAAAAFgAAAAAGFgAAAAADFgAAAAADFgAAAAAEUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFgAAAAADFgAAAAAFFgAAAAACUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAdgAAAAAAdgAAAAABFgAAAAACUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAdgAAAAADdgAAAAABFgAAAAACUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAdgAAAAAAdgAAAAAAFgAAAAAEUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFgAAAAADFgAAAAAAFgAAAAAGUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFwAAAAAFFwAAAAAHFwAAAAAGFwAAAAABFwAAAAAFFgAAAAAFFgAAAAAEFgAAAAAEFgAAAAADUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAFwAAAAADFwAAAAABFwAAAAAGFgAAAAAAFgAAAAACFgAAAAAEFgAAAAACFgAAAAABFwAAAAAHUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAA + version: 6 + type: MapGrid + - gravityShakeSound: !type:SoundPathSpecifier + path: /Audio/Effects/alert.ogg + type: Gravity + - chunkCollection: + version: 2 + nodes: + - node: + color: '#FFFFFFFF' + id: Basalt1 + decals: + 1342: 6.955441,21.068565 + 1405: 5.569477,24.342073 + 1409: 21.493462,30.781818 + 1423: 16.244232,47.723083 + - node: + color: '#FFFFFFFF' + id: Basalt2 + decals: + 1408: 21.571587,25.092073 + 1411: 38.670036,30.328693 + 1412: 32.59149,34.61899 + - node: + color: '#FFFFFFFF' + id: Basalt3 + decals: + 1404: 2.0071354,12.534689 + 1413: 28.294615,35.52524 + 1419: 1.8725519,39.603367 + 1428: 40.1997,39.904606 + 1429: 37.775063,38.35773 + 1430: 27.454536,18.497276 + - node: + color: '#FFFFFFFF' + id: Basalt4 + decals: + 1407: 14.05264,26.857698 + 1420: 8.417587,42.316833 + - node: + color: '#FFFFFFFF' + id: Basalt5 + decals: + 1347: 7.0134563,30.499578 + 1403: 8.765746,13.144064 + 1414: 24.413132,39.478367 + 1421: 13.773578,47.660583 + 1426: 12.267979,34.57054 + 1427: 44.902824,38.38898 + 1431: 24.313911,21.591026 + 1432: 21.396156,20.325401 + - node: + color: '#FFFFFFFF' + id: Basalt6 + decals: + 1341: 0.908566,19.95919 + 1415: 20.816694,39.134617 + - node: + color: '#FFFFFFFF' + id: Basalt7 + decals: + 1339: 10,18 + 1416: 12.790198,39.33774 + 1422: 21.884857,42.17621 + 1433: 18.589165,18.387901 + 1434: 34.005077,18.028526 + 1435: 4.6335278,15.488716 + - node: + color: '#FFFFFFFF' + id: Basalt8 + decals: + 1340: 7.1637583,18.068565 + 1417: 8.813416,38.415867 + 1424: 0.46817493,47.80121 + 1425: 8.544811,34.586166 + - node: + color: '#FFFFFFFF' + id: Basalt9 + decals: + 1343: 13.433517,19.162315 + 1406: 0.6944771,26.826448 + 1410: 30.17049,31.359943 + 1418: 5.810052,38.259617 + - node: + cleanable: True + color: '#FFFFFFFF' + id: DirtLight + decals: + 301: 9,45 + 306: 13,42 + 308: 10,42 + 311: 13,45 + 578: 10,32 + - node: + color: '#FFFFFFFF' + id: Rock06 + decals: + 1344: 2.1520143,30.343328 + - node: + color: '#FFFFFFFF' + id: Rock07 + decals: + 1345: 10.29961,31.483953 + - node: + color: '#DE3A3A96' + id: rune6 + decals: + 1402: 8.952158,26.184813 + - node: + color: '#79150031' + id: splatter + decals: + 1348: 10.903494,45.563152 + 1349: 10.950369,45.969402 + 1350: 11.184744,45.906902 + 1351: 11.590994,45.422527 + 1352: 11.590994,45.422527 + 1353: 10.965994,45.610027 + 1354: 10.997244,44.969402 + 1355: 11.231619,45.047527 + 1356: 11.356619,45.344402 + 1357: 10.825369,45.656902 + 1358: 11.184744,45.922527 + 1359: 11.231619,45.891277 + 1360: 10.512869,45.563152 + 1361: 11.684744,44.078777 + 1362: 11.747244,43.797527 + 1363: 12.044119,43.328777 + 1364: 11.778494,43.281902 + 1365: 11.887869,43.688152 + 1366: 12.200369,43.735027 + 1367: 12.137869,44.141277 + 1368: 11.669119,43.656902 + 1369: 10.637869,43.781902 + 1370: 10.544119,43.781902 + 1371: 10.669119,43.453777 + 1372: 10.590994,43.485027 + 1373: 11.419119,45.797527 + 1374: 11.825369,45.813152 + 1375: 11.950369,46.219402 + 1376: 11.200369,45.672527 + 1377: 11.247244,45.922527 + 1378: 10.590994,46.125652 + 1379: 11.481619,45.422527 + 1380: 11.684744,45.672527 + 1381: 11.512869,45.141277 + 1382: 11.825369,45.281902 + 1383: 11.684744,45.438152 + 1384: 10.950369,45.735027 + 1385: 10.262869,45.797527 + 1386: 10.028494,44.891277 + 1387: 9.903494,44.891277 + 1388: 9.887869,45.500652 + 1389: 10.153494,45.344402 + 1390: 10.809744,45.391277 + 1391: 10.934744,45.422527 + 1392: 11.262869,45.531902 + 1393: 11.184744,46.031902 + 1394: 10.872244,45.813152 + 1395: 11.090994,45.563152 + 1396: 10.731619,46.031902 + 1397: 10.075369,44.000652 + 1398: 9.856619,43.703777 + 1399: 10.059744,44.281902 + 1400: 10.419119,43.813152 + - node: + cleanable: True + color: '#79150031' + id: splatter + decals: + 1444: 35.155014,12.447503 + 1445: 34.811264,12.353753 + 1446: 34.85814,12.744378 + 1447: 35.342514,12.463128 + 1448: 35.155014,12.228753 + 1449: 34.42064,12.572503 + 1450: 34.123764,13.025628 + 1451: 34.17064,13.322503 + 1452: 34.342514,12.900628 + 1453: 33.85814,12.994378 + 1454: 33.79564,13.338128 + 1455: 33.63939,13.838128 + 1456: 33.70189,13.603753 + 1457: 33.311264,13.900628 + 1458: 33.717514,14.306878 + 1459: 34.10814,14.650628 + 1460: 33.936264,15.135003 + 1461: 34.405014,14.947503 + 1462: 33.79564,14.510003 + 1463: 33.70189,14.088128 + 1464: 34.29564,14.541253 + 1465: 34.623764,15.010003 + 1466: 35.26439,15.072503 + 1467: 35.405014,14.931878 + 1468: 34.623764,15.338128 + 1469: 35.592514,14.994378 + 1470: 35.79564,14.447503 + 1471: 36.13939,15.025628 + 1472: 36.436264,14.181878 + 1473: 36.592514,13.869378 + 1474: 35.780014,14.697503 + 1475: 36.467514,14.072503 + 1476: 35.748764,14.588128 + 1477: 36.07689,13.963128 + 1478: 36.092514,13.291253 + 1479: 35.57689,13.103753 + 1480: 35.70189,13.088128 + 1481: 35.38939,12.478753 + 1482: 35.92064,13.260003 + 1483: 36.061264,13.666253 + 1484: 36.217514,12.822503 + 1485: 35.48314,12.650628 + 1486: 35.98314,12.353753 + 1487: 34.842514,12.744378 + 1488: 34.23314,12.853753 + 1489: 34.04564,13.447503 + 1490: 33.51439,13.650628 + - node: + cleanable: True + color: '#DE3A3A28' + id: splatter + decals: + 1436: 34.151947,12.931878 + 1437: 33.542572,13.775628 + 1438: 34.089447,14.588128 + 1439: 34.886322,15.025628 + 1440: 35.714447,14.681878 + 1441: 36.214447,14.119378 + 1442: 35.933197,13.228753 + 1443: 35.026947,12.447503 + type: DecalGrid + - type: RadiationGridResistance + - type: LoadedMap + - type: SpreaderGrid + - type: GridTree + - type: MovedGrids + - type: GridPathfinding +- proto: AirCanister + entities: + - uid: 302 + components: + - pos: 20.5,38.5 + parent: 1653 + type: Transform +- proto: AirlockMining + entities: + - uid: 149 + components: + - pos: 11.5,43.5 + parent: 1653 + type: Transform +- proto: AirlockMiningGlassLocked + entities: + - uid: 492 + components: + - pos: 19.5,43.5 + parent: 1653 + type: Transform +- proto: AirlockMiningLocked + entities: + - uid: 454 + components: + - pos: 3.5,43.5 + parent: 1653 + type: Transform +- proto: AltarFangs + entities: + - uid: 12 + components: + - pos: 35.5,14.5 + parent: 1653 + type: Transform +- proto: BananiumOre1 + entities: + - uid: 147 + components: + - pos: 25.454952,10.460608 + parent: 1653 + type: Transform + - uid: 436 + components: + - flags: InContainer + type: MetaData + - parent: 435 + type: Transform + - canCollide: False + type: Physics + - type: InsideEntityStorage +- proto: Barricade + entities: + - uid: 61 + components: + - pos: 14.5,12.5 + parent: 1653 + type: Transform + - uid: 304 + components: + - pos: 6.5,18.5 + parent: 1653 + type: Transform + - uid: 369 + components: + - pos: 51.5,0.5 + parent: 1653 + type: Transform +- proto: BikeHorn + entities: + - uid: 201 + components: + - flags: InContainer + type: MetaData + - parent: 200 + type: Transform + - canCollide: False + type: Physics + - type: InsideEntityStorage +- proto: Bucket + entities: + - uid: 220 + components: + - pos: 28.080187,14.004396 + parent: 1653 + type: Transform +- proto: CandleRedSmallInfinite + entities: + - uid: 121 + components: + - pos: 10.514658,25.137938 + parent: 1653 + type: Transform + - uid: 123 + components: + - pos: 10.655283,25.247313 + parent: 1653 + type: Transform + - uid: 126 + components: + - rot: -6.283185307179586 rad + pos: 9.436043,27.291958 + parent: 1653 + type: Transform + - uid: 181 + components: + - pos: 9.83762,26.231688 + parent: 1653 + type: Transform + - uid: 182 + components: + - pos: 9.009495,26.278563 + parent: 1653 + type: Transform + - uid: 211 + components: + - pos: 10.467783,25.325438 + parent: 1653 + type: Transform + - uid: 212 + components: + - rot: -6.283185307179586 rad + pos: 9.976189,27.010708 + parent: 1653 + type: Transform + - uid: 213 + components: + - pos: 8.86887,27.028563 + parent: 1653 + type: Transform +- proto: Chainsaw + entities: + - uid: 396 + components: + - pos: 12.278494,46.219402 + parent: 1653 + type: Transform +- proto: Chair + entities: + - uid: 399 + components: + - rot: 3.141592653589793 rad + pos: 19.5,34.5 + parent: 1653 + type: Transform +- proto: ChairPilotSeat + entities: + - uid: 8 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,44.5 + parent: 1653 + type: Transform + - uid: 466 + components: + - rot: -1.5707963267948966 rad + pos: 4.5,44.5 + parent: 1653 + type: Transform +- proto: ChairRitual + entities: + - uid: 127 + components: + - pos: 9.5,28.5 + parent: 1653 + type: Transform +- proto: CigaretteCapsaicinOil + entities: + - uid: 322 + components: + - pos: 31.649122,18.823664 + parent: 1653 + type: Transform +- proto: CigaretteSyndicate + entities: + - uid: 439 + components: + - flags: InContainer + type: MetaData + - parent: 438 + type: Transform + - canCollide: False + type: Physics + - type: InsideEntityStorage +- proto: ClothingBackpackDuffelCargo + entities: + - uid: 288 + components: + - pos: 17.527935,7.630492 + parent: 1653 + type: Transform +- proto: ClothingHeadHatFlowerCrown + entities: + - uid: 233 + components: + - pos: 27.441708,39.437607 + parent: 1653 + type: Transform +- proto: ClothingHeadHatGladiator + entities: + - uid: 7 + components: + - flags: InContainer + type: MetaData + - parent: 6 + type: Transform + - canCollide: False + type: Physics + - type: InsideEntityStorage +- proto: ClothingNeckCloakTrans + entities: + - uid: 332 + components: + - flags: InContainer + type: MetaData + - parent: 331 + type: Transform + - canCollide: False + type: Physics + - type: InsideEntityStorage +- proto: ClothingOuterHardsuitSalvage + entities: + - uid: 432 + components: + - pos: 4.447749,45.58406 + parent: 1653 + type: Transform +- proto: ClothingShoesClown + entities: + - uid: 202 + components: + - flags: InContainer + type: MetaData + - parent: 200 + type: Transform + - canCollide: False + type: Physics + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitGladiator + entities: + - uid: 215 + components: + - flags: InContainer + type: MetaData + - parent: 214 + type: Transform + - canCollide: False + type: Physics + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitMonasticRobeDark + entities: + - uid: 40 + components: + - pos: 36.46349,13.791253 + parent: 1653 + type: Transform + - uid: 99 + components: + - pos: 36.27599,15.338128 + parent: 1653 + type: Transform + - uid: 216 + components: + - pos: 35.46349,15.619378 + parent: 1653 + type: Transform + - uid: 272 + components: + - pos: 34.05724,14.385003 + parent: 1653 + type: Transform + - uid: 273 + components: + - pos: 34.58849,15.213128 + parent: 1653 + type: Transform + - uid: 357 + components: + - pos: 35.58849,13.213128 + parent: 1653 + type: Transform + - uid: 358 + components: + - pos: 34.697865,13.588128 + parent: 1653 + type: Transform + - uid: 443 + components: + - pos: 36.80724,14.744378 + parent: 1653 + type: Transform +- proto: Cobweb1 + entities: + - uid: 190 + components: + - pos: 24.5,10.5 + parent: 1653 + type: Transform + - uid: 289 + components: + - pos: 0.5,10.5 + parent: 1653 + type: Transform + - uid: 290 + components: + - pos: 32.5,16.5 + parent: 1653 + type: Transform + - uid: 384 + components: + - pos: 0.5,36.5 + parent: 1653 + type: Transform + - uid: 385 + components: + - pos: 28.5,32.5 + parent: 1653 + type: Transform + - uid: 393 + components: + - pos: 12.5,22.5 + parent: 1653 + type: Transform + - uid: 418 + components: + - pos: 0.5,40.5 + parent: 1653 + type: Transform + - uid: 458 + components: + - pos: 2.5,46.5 + parent: 1653 + type: Transform +- proto: Cobweb2 + entities: + - uid: 137 + components: + - pos: 33.5,9.5 + parent: 1653 + type: Transform + - uid: 252 + components: + - pos: 26.5,32.5 + parent: 1653 + type: Transform + - uid: 291 + components: + - pos: 34.5,3.5 + parent: 1653 + type: Transform + - uid: 314 + components: + - pos: 22.5,10.5 + parent: 1653 + type: Transform + - uid: 341 + components: + - pos: 20.5,46.5 + parent: 1653 + type: Transform + - uid: 382 + components: + - pos: 14.5,40.5 + parent: 1653 + type: Transform + - uid: 383 + components: + - pos: 32.5,20.5 + parent: 1653 + type: Transform + - uid: 417 + components: + - pos: 24.5,2.5 + parent: 1653 + type: Transform +- proto: ComfyChair + entities: + - uid: 381 + components: + - pos: 13.5,27.5 + parent: 1653 + type: Transform +- proto: ConveyorBelt + entities: + - uid: 101 + components: + - rot: -1.5707963267948966 rad + pos: 27.5,10.5 + parent: 1653 + type: Transform + - uid: 102 + components: + - rot: -1.5707963267948966 rad + pos: 28.5,10.5 + parent: 1653 + type: Transform + - uid: 103 + components: + - rot: -1.5707963267948966 rad + pos: 25.5,10.5 + parent: 1653 + type: Transform + - uid: 104 + components: + - rot: -1.5707963267948966 rad + pos: 29.5,10.5 + parent: 1653 + type: Transform + - uid: 105 + components: + - rot: -1.5707963267948966 rad + pos: 30.5,10.5 + parent: 1653 + type: Transform + - uid: 106 + components: + - rot: -1.5707963267948966 rad + pos: 26.5,10.5 + parent: 1653 + type: Transform +- proto: CrateCoffin + entities: + - uid: 331 + components: + - pos: 16.5,32.5 + parent: 1653 + type: Transform + - containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 332 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + type: ContainerContainer + - uid: 435 + components: + - pos: 22.5,32.5 + parent: 1653 + type: Transform + - containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 436 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + type: ContainerContainer + - uid: 438 + components: + - pos: 23.5,32.5 + parent: 1653 + type: Transform + - containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 439 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + type: ContainerContainer + - uid: 441 + components: + - pos: 20.5,30.5 + parent: 1653 + type: Transform + - containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 442 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + type: ContainerContainer +- proto: CrateEmergencyRadiation + entities: + - uid: 364 + components: + - pos: 15.5,36.5 + parent: 1653 + type: Transform +- proto: CrateEmptySpawner + entities: + - uid: 128 + components: + - pos: 4.5,40.5 + parent: 1653 + type: Transform +- proto: CrateFilledSpawner + entities: + - uid: 111 + components: + - pos: 8.5,2.5 + parent: 1653 + type: Transform + - uid: 367 + components: + - pos: 18.5,46.5 + parent: 1653 + type: Transform + - uid: 411 + components: + - pos: 13.5,36.5 + parent: 1653 + type: Transform + - uid: 490 + components: + - pos: 28.5,8.5 + parent: 1653 + type: Transform +- proto: CrateNPCPenguin + entities: + - uid: 474 + components: + - pos: 13.5,25.5 + parent: 1653 + type: Transform +- proto: CrateWoodenGrave + entities: + - uid: 6 + components: + - pos: 27.5,39.5 + parent: 1653 + type: Transform + - containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 7 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + type: ContainerContainer + - uid: 200 + components: + - pos: 42.5,39.5 + parent: 1653 + type: Transform + - containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 202 + - 201 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + type: ContainerContainer + - uid: 214 + components: + - pos: 28.5,39.5 + parent: 1653 + type: Transform + - containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 215 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + type: ContainerContainer + - uid: 231 + components: + - pos: 26.5,39.5 + parent: 1653 + type: Transform + - containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 232 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + type: ContainerContainer +- proto: CrystalSpawner + entities: + - uid: 129 + components: + - pos: 27.5,35.5 + parent: 1653 + type: Transform + - uid: 131 + components: + - pos: 29.5,34.5 + parent: 1653 + type: Transform + - uid: 132 + components: + - pos: 30.5,35.5 + parent: 1653 + type: Transform + - uid: 172 + components: + - pos: 19.5,21.5 + parent: 1653 + type: Transform + - uid: 178 + components: + - pos: 20.5,20.5 + parent: 1653 + type: Transform + - uid: 298 + components: + - pos: 13.5,38.5 + parent: 1653 + type: Transform + - uid: 300 + components: + - pos: 9.5,40.5 + parent: 1653 + type: Transform + - uid: 301 + components: + - pos: 30.5,36.5 + parent: 1653 + type: Transform + - uid: 308 + components: + - pos: 31.5,36.5 + parent: 1653 + type: Transform +- proto: DoubleEmergencyNitrogenTankFilled + entities: + - uid: 309 + components: + - pos: 21.254128,38.485172 + parent: 1653 + type: Transform +- proto: DresserFilled + entities: + - uid: 413 + components: + - pos: 20.5,44.5 + parent: 1653 + type: Transform +- proto: FenceMetalCorner + entities: + - uid: 321 + components: + - rot: 1.5707963267948966 rad + pos: 20.5,35.5 + parent: 1653 + type: Transform + - uid: 477 + components: + - rot: -1.5707963267948966 rad + pos: 14.5,35.5 + parent: 1653 + type: Transform +- proto: FenceMetalGate + entities: + - uid: 268 + components: + - rot: 3.141592653589793 rad + pos: 17.5,35.5 + parent: 1653 + type: Transform +- proto: FenceMetalStraight + entities: + - uid: 267 + components: + - rot: 1.5707963267948966 rad + pos: 19.5,35.5 + parent: 1653 + type: Transform + - uid: 293 + components: + - pos: 14.5,36.5 + parent: 1653 + type: Transform + - uid: 476 + components: + - rot: 1.5707963267948966 rad + pos: 15.5,35.5 + parent: 1653 + type: Transform + - uid: 478 + components: + - rot: 1.5707963267948966 rad + pos: 16.5,35.5 + parent: 1653 + type: Transform + - uid: 479 + components: + - pos: 20.5,34.5 + parent: 1653 + type: Transform + - uid: 480 + components: + - rot: 1.5707963267948966 rad + pos: 18.5,35.5 + parent: 1653 + type: Transform +- proto: FlashlightLantern + entities: + - uid: 372 + components: + - pos: 16.286905,3.5055985 + parent: 1653 + type: Transform +- proto: FloorChasmEntity + entities: + - uid: 3 + components: + - pos: 5.5,0.5 + parent: 1653 + type: Transform + - uid: 4 + components: + - pos: 6.5,4.5 + parent: 1653 + type: Transform + - uid: 5 + components: + - pos: 6.5,3.5 + parent: 1653 + type: Transform + - uid: 17 + components: + - pos: 9.5,4.5 + parent: 1653 + type: Transform + - uid: 18 + components: + - pos: 4.5,4.5 + parent: 1653 + type: Transform + - uid: 19 + components: + - pos: 41.5,1.5 + parent: 1653 + type: Transform + - uid: 20 + components: + - pos: 44.5,1.5 + parent: 1653 + type: Transform + - uid: 21 + components: + - pos: 45.5,1.5 + parent: 1653 + type: Transform + - uid: 22 + components: + - pos: 44.5,0.5 + parent: 1653 + type: Transform + - uid: 23 + components: + - pos: 45.5,0.5 + parent: 1653 + type: Transform + - uid: 24 + components: + - pos: 47.5,0.5 + parent: 1653 + type: Transform + - uid: 25 + components: + - pos: 48.5,0.5 + parent: 1653 + type: Transform + - uid: 76 + components: + - pos: 15.5,4.5 + parent: 1653 + type: Transform + - uid: 77 + components: + - pos: 14.5,0.5 + parent: 1653 + type: Transform + - uid: 78 + components: + - pos: 14.5,1.5 + parent: 1653 + type: Transform + - uid: 82 + components: + - pos: 12.5,1.5 + parent: 1653 + type: Transform + - uid: 83 + components: + - pos: 13.5,4.5 + parent: 1653 + type: Transform + - uid: 84 + components: + - pos: 12.5,0.5 + parent: 1653 + type: Transform + - uid: 85 + components: + - pos: 13.5,0.5 + parent: 1653 + type: Transform + - uid: 86 + components: + - pos: 13.5,1.5 + parent: 1653 + type: Transform + - uid: 87 + components: + - pos: 46.5,1.5 + parent: 1653 + type: Transform + - uid: 88 + components: + - pos: 46.5,0.5 + parent: 1653 + type: Transform + - uid: 97 + components: + - pos: 14.5,4.5 + parent: 1653 + type: Transform + - uid: 112 + components: + - pos: 7.5,0.5 + parent: 1653 + type: Transform + - uid: 114 + components: + - pos: 10.5,0.5 + parent: 1653 + type: Transform + - uid: 115 + components: + - pos: 10.5,1.5 + parent: 1653 + type: Transform + - uid: 116 + components: + - pos: 11.5,4.5 + parent: 1653 + type: Transform + - uid: 118 + components: + - pos: 11.5,3.5 + parent: 1653 + type: Transform + - uid: 119 + components: + - pos: 11.5,0.5 + parent: 1653 + type: Transform + - uid: 120 + components: + - pos: 11.5,1.5 + parent: 1653 + type: Transform + - uid: 235 + components: + - pos: 49.5,0.5 + parent: 1653 + type: Transform + - uid: 241 + components: + - pos: 3.5,4.5 + parent: 1653 + type: Transform + - uid: 242 + components: + - pos: 2.5,0.5 + parent: 1653 + type: Transform + - uid: 245 + components: + - pos: 10.5,3.5 + parent: 1653 + type: Transform + - uid: 250 + components: + - pos: 4.5,3.5 + parent: 1653 + type: Transform + - uid: 258 + components: + - pos: 3.5,0.5 + parent: 1653 + type: Transform + - uid: 278 + components: + - pos: 40.5,2.5 + parent: 1653 + type: Transform + - uid: 315 + components: + - pos: 1.5,4.5 + parent: 1653 + type: Transform + - uid: 317 + components: + - pos: 5.5,3.5 + parent: 1653 + type: Transform + - uid: 337 + components: + - pos: 4.5,0.5 + parent: 1653 + type: Transform + - uid: 340 + components: + - pos: 42.5,2.5 + parent: 1653 + type: Transform + - uid: 350 + components: + - pos: 42.5,1.5 + parent: 1653 + type: Transform + - uid: 354 + components: + - pos: 12.5,3.5 + parent: 1653 + type: Transform + - uid: 359 + components: + - pos: 15.5,1.5 + parent: 1653 + type: Transform + - uid: 360 + components: + - pos: 15.5,0.5 + parent: 1653 + type: Transform + - uid: 363 + components: + - pos: 12.5,4.5 + parent: 1653 + type: Transform + - uid: 368 + components: + - pos: 43.5,2.5 + parent: 1653 + type: Transform + - uid: 377 + components: + - pos: 7.5,4.5 + parent: 1653 + type: Transform + - uid: 378 + components: + - pos: 6.5,1.5 + parent: 1653 + type: Transform + - uid: 387 + components: + - pos: 43.5,1.5 + parent: 1653 + type: Transform + - uid: 398 + components: + - pos: 41.5,2.5 + parent: 1653 + type: Transform + - uid: 401 + components: + - pos: 5.5,1.5 + parent: 1653 + type: Transform + - uid: 404 + components: + - pos: 5.5,4.5 + parent: 1653 + type: Transform + - uid: 452 + components: + - pos: 2.5,4.5 + parent: 1653 + type: Transform + - uid: 453 + components: + - pos: 1.5,0.5 + parent: 1653 + type: Transform + - uid: 459 + components: + - pos: 44.5,2.5 + parent: 1653 + type: Transform + - uid: 468 + components: + - pos: 3.5,3.5 + parent: 1653 + type: Transform + - uid: 471 + components: + - pos: 6.5,0.5 + parent: 1653 + type: Transform + - uid: 472 + components: + - pos: 10.5,4.5 + parent: 1653 + type: Transform + - uid: 473 + components: + - pos: 9.5,0.5 + parent: 1653 + type: Transform +- proto: FloorWaterEntity + entities: + - uid: 13 + components: + - pos: 27.5,14.5 + parent: 1653 + type: Transform + - uid: 14 + components: + - pos: 29.5,14.5 + parent: 1653 + type: Transform + - uid: 15 + components: + - pos: 28.5,15.5 + parent: 1653 + type: Transform + - uid: 43 + components: + - pos: 26.5,16.5 + parent: 1653 + type: Transform + - uid: 45 + components: + - pos: 30.5,13.5 + parent: 1653 + type: Transform + - uid: 46 + components: + - pos: 29.5,13.5 + parent: 1653 + type: Transform + - uid: 47 + components: + - pos: 28.5,12.5 + parent: 1653 + type: Transform + - uid: 49 + components: + - pos: 27.5,16.5 + parent: 1653 + type: Transform + - uid: 65 + components: + - pos: 29.5,12.5 + parent: 1653 + type: Transform + - uid: 72 + components: + - pos: 25.5,13.5 + parent: 1653 + type: Transform + - uid: 93 + components: + - pos: 24.5,15.5 + parent: 1653 + type: Transform + - uid: 100 + components: + - pos: 27.5,12.5 + parent: 1653 + type: Transform + - uid: 221 + components: + - pos: 26.5,13.5 + parent: 1653 + type: Transform + - uid: 222 + components: + - pos: 26.5,14.5 + parent: 1653 + type: Transform + - uid: 223 + components: + - pos: 26.5,15.5 + parent: 1653 + type: Transform + - uid: 224 + components: + - pos: 27.5,13.5 + parent: 1653 + type: Transform + - uid: 444 + components: + - pos: 28.5,14.5 + parent: 1653 + type: Transform + - uid: 445 + components: + - pos: 27.5,15.5 + parent: 1653 + type: Transform + - uid: 446 + components: + - pos: 28.5,13.5 + parent: 1653 + type: Transform + - uid: 447 + components: + - pos: 25.5,15.5 + parent: 1653 + type: Transform + - uid: 448 + components: + - pos: 25.5,14.5 + parent: 1653 + type: Transform +- proto: FloraRockSolid01 + entities: + - uid: 63 + components: + - pos: 1.4643247,15.527116 + parent: 1653 + type: Transform + - uid: 230 + components: + - pos: 25.553497,34.710487 + parent: 1653 + type: Transform + - uid: 281 + components: + - pos: 7.4866443,6.552367 + parent: 1653 + type: Transform + - uid: 295 + components: + - pos: 0.911531,32.452705 + parent: 1653 + type: Transform + - uid: 303 + components: + - pos: 21.638557,19.381065 + parent: 1653 + type: Transform + - uid: 374 + components: + - pos: 3.5664039,19.498943 + parent: 1653 + type: Transform +- proto: FloraRockSolid02 + entities: + - uid: 64 + components: + - pos: 11.966135,14.804356 + parent: 1653 + type: Transform + - uid: 171 + components: + - pos: 8.535091,20.608318 + parent: 1653 + type: Transform + - uid: 306 + components: + - pos: 12.087021,32.358955 + parent: 1653 + type: Transform +- proto: FloraRockSolid03 + entities: + - uid: 90 + components: + - pos: 23.53006,1.5159609 + parent: 1653 + type: Transform + - uid: 170 + components: + - pos: 1.9101539,21.811443 + parent: 1653 + type: Transform + - uid: 199 + components: + - pos: 44.689724,39.621048 + parent: 1653 + type: Transform + - uid: 243 + components: + - pos: 21.468937,26.614876 + parent: 1653 + type: Transform + - uid: 296 + components: + - pos: 9.355139,30.733953 + parent: 1653 + type: Transform + - uid: 330 + components: + - pos: 35.552525,31.574036 + parent: 1653 + type: Transform + - uid: 361 + components: + - pos: 5.433075,13.527116 + parent: 1653 + type: Transform + - uid: 375 + components: + - pos: 1.5647693,8.536742 + parent: 1653 + type: Transform +- proto: FoodBoxDonkpocketPizza + entities: + - uid: 209 + components: + - pos: 0.9877088,26.184813 + parent: 1653 + type: Transform +- proto: FoodCornTrash + entities: + - uid: 2 + components: + - pos: 26.81556,20.415936 + parent: 1653 + type: Transform + - uid: 109 + components: + - pos: 27.367641,20.311768 + parent: 1653 + type: Transform + - uid: 113 + components: + - pos: 27.388475,19.988852 + parent: 1653 + type: Transform + - uid: 249 + components: + - pos: 27.638475,20.843018 + parent: 1653 + type: Transform + - uid: 254 + components: + - pos: 28.055141,20.301352 + parent: 1653 + type: Transform + - uid: 319 + components: + - pos: 27.482225,20.530518 + parent: 1653 + type: Transform + - uid: 391 + components: + - pos: 26.930141,20.728436 + parent: 1653 + type: Transform + - uid: 475 + components: + - pos: 27.84681,20.634686 + parent: 1653 + type: Transform +- proto: FoodMeatHuman + entities: + - uid: 186 + components: + - pos: 34.42388,40.652298 + parent: 1653 + type: Transform + - uid: 187 + components: + - pos: 34.64263,40.511673 + parent: 1653 + type: Transform +- proto: FoodMeatLizardtailKebab + entities: + - uid: 42 + components: + - pos: 38.036457,12.588582 + parent: 1653 + type: Transform +- proto: FoodMeatRouny + entities: + - uid: 183 + components: + - pos: 36.45513,40.589798 + parent: 1653 + type: Transform +- proto: FoodSnackPopcorn + entities: + - uid: 74 + components: + - pos: 25.648891,21.040936 + parent: 1653 + type: Transform + - uid: 79 + components: + - pos: 25.763475,21.645102 + parent: 1653 + type: Transform + - uid: 81 + components: + - pos: 25.461391,21.207602 + parent: 1653 + type: Transform + - uid: 117 + components: + - pos: 25.857225,21.207602 + parent: 1653 + type: Transform + - uid: 240 + components: + - pos: 25.97181,21.030518 + parent: 1653 + type: Transform +- proto: FoodTinPeachesMaintOpen + entities: + - uid: 208 + components: + - pos: 2.343669,28.087896 + parent: 1653 + type: Transform +- proto: GeigerCounter + entities: + - uid: 228 + components: + - rot: -1.5707963267948966 rad + pos: 2.536777,44.354866 + parent: 1653 + type: Transform +- proto: Girder + entities: + - uid: 351 + components: + - rot: 1.5707963267948966 rad + pos: 13.5,45.5 + parent: 1653 + type: Transform +- proto: GlowstickRed + entities: + - uid: 256 + components: + - pos: 12.648991,38.39441 + parent: 1653 + type: Transform + - uid: 264 + components: + - pos: 22.50236,34.545544 + parent: 1653 + type: Transform + - uid: 271 + components: + - pos: 4.5084944,44.49994 + parent: 1653 + type: Transform + - uid: 294 + components: + - pos: 10.820133,30.586414 + parent: 1653 + type: Transform + - uid: 316 + components: + - pos: 26.3416,18.72954 + parent: 1653 + type: Transform + - uid: 414 + components: + - pos: 1.8548665,32.055164 + parent: 1653 + type: Transform + - uid: 420 + components: + - pos: 22.799234,34.62367 + parent: 1653 + type: Transform + - uid: 421 + components: + - pos: 22.299234,34.608044 + parent: 1653 + type: Transform +- proto: GoldOre1 + entities: + - uid: 134 + components: + - pos: 8.948225,24.854458 + parent: 1653 + type: Transform + - uid: 138 + components: + - pos: 26.486202,10.538733 + parent: 1653 + type: Transform + - uid: 139 + components: + - pos: 26.486202,10.538733 + parent: 1653 + type: Transform + - uid: 144 + components: + - pos: 26.486202,10.538733 + parent: 1653 + type: Transform + - uid: 145 + components: + - pos: 26.486202,10.538733 + parent: 1653 + type: Transform + - uid: 191 + components: + - pos: 26.486202,10.538733 + parent: 1653 + type: Transform + - uid: 266 + components: + - pos: 9.448225,25.291958 + parent: 1653 + type: Transform + - uid: 328 + components: + - pos: 8.541975,25.885708 + parent: 1653 + type: Transform + - uid: 379 + components: + - pos: 10.026349,24.557583 + parent: 1653 + type: Transform +- proto: hydroponicsSoil + entities: + - uid: 1 + components: + - pos: 25.5,20.5 + parent: 1653 + type: Transform + - uid: 390 + components: + - pos: 27.5,21.5 + parent: 1653 + type: Transform + - uid: 423 + components: + - pos: 25.5,19.5 + parent: 1653 + type: Transform +- proto: ImprovisedExplosiveFuel + entities: + - uid: 203 + components: + - pos: 36.443645,31.673359 + parent: 1653 + type: Transform +- proto: IngotGold1 + entities: + - uid: 312 + components: + - pos: 10.073225,25.588833 + parent: 1653 + type: Transform + - uid: 313 + components: + - pos: 10.4951,24.791958 + parent: 1653 + type: Transform + - uid: 426 + components: + - pos: 8.385725,25.104458 + parent: 1653 + type: Transform + - uid: 449 + components: + - pos: 10.698225,26.120083 + parent: 1653 + type: Transform + - uid: 460 + components: + - pos: 9.120099,24.323208 + parent: 1653 + type: Transform +- proto: IngotSilver + entities: + - uid: 262 + components: + - pos: 20.52197,46.638992 + parent: 1653 + type: Transform +- proto: KitchenElectricGrill + entities: + - uid: 205 + components: + - pos: 35.5,40.5 + parent: 1653 + type: Transform +- proto: KitchenMicrowave + entities: + - uid: 244 + components: + - pos: 26.5,21.5 + parent: 1653 + type: Transform +- proto: KukriKnife + entities: + - uid: 130 + components: + - pos: 2.508058,45.496773 + parent: 1653 + type: Transform +- proto: LampGold + entities: + - uid: 380 + components: + - pos: 13.291822,27.041958 + parent: 1653 + type: Transform +- proto: Lantern + entities: + - uid: 28 + components: + - pos: 24.446167,4.4534607 + parent: 1653 + type: Transform + - uid: 29 + components: + - pos: 33.45849,0.51596093 + parent: 1653 + type: Transform + - uid: 89 + components: + - pos: 18.58248,0.51596093 + parent: 1653 + type: Transform + - uid: 180 + components: + - pos: 20.497932,21.77169 + parent: 1653 + type: Transform +- proto: MaintenancePlantSpawner + entities: + - uid: 67 + components: + - pos: 21.5,16.5 + parent: 1653 + type: Transform + - uid: 70 + components: + - pos: 17.5,15.5 + parent: 1653 + type: Transform + - uid: 73 + components: + - pos: 21.5,14.5 + parent: 1653 + type: Transform + - uid: 217 + components: + - pos: 22.5,12.5 + parent: 1653 + type: Transform + - uid: 218 + components: + - pos: 16.5,13.5 + parent: 1653 + type: Transform +- proto: MaintenanceToolSpawner + entities: + - uid: 57 + components: + - pos: 39.5,0.5 + parent: 1653 + type: Transform + - uid: 96 + components: + - pos: 51.5,1.5 + parent: 1653 + type: Transform + - uid: 416 + components: + - pos: 7.5,32.5 + parent: 1653 + type: Transform +- proto: MaintenanceWeaponSpawner + entities: + - uid: 31 + components: + - pos: 22.5,0.5 + parent: 1653 + type: Transform + - uid: 32 + components: + - pos: 1.5,3.5 + parent: 1653 + type: Transform + - uid: 51 + components: + - pos: 52.5,0.5 + parent: 1653 + type: Transform + - uid: 292 + components: + - pos: 34.5,31.5 + parent: 1653 + type: Transform +- proto: MaterialWoodPlank + entities: + - uid: 442 + components: + - flags: InContainer + type: MetaData + - parent: 441 + type: Transform + - canCollide: False + type: Physics + - type: InsideEntityStorage +- proto: MedkitOxygenFilled + entities: + - uid: 225 + components: + - pos: 17.973127,40.40886 + parent: 1653 + type: Transform +- proto: MiningWindow + entities: + - uid: 155 + components: + - pos: 19.5,47.5 + parent: 1653 + type: Transform + - uid: 162 + components: + - pos: 3.5,47.5 + parent: 1653 + type: Transform + - uid: 248 + components: + - pos: 11.5,47.5 + parent: 1653 + type: Transform +- proto: OreBox + entities: + - uid: 184 + components: + - pos: 2.5,24.5 + parent: 1653 + type: Transform + - uid: 270 + components: + - pos: 37.5,4.5 + parent: 1653 + type: Transform + - uid: 283 + components: + - pos: 17.5,8.5 + parent: 1653 + type: Transform + - uid: 488 + components: + - pos: 29.5,8.5 + parent: 1653 + type: Transform +- proto: OreProcessor + entities: + - uid: 269 + components: + - pos: 24.5,10.5 + parent: 1653 + type: Transform + - uid: 320 + components: + - pos: 3.5,46.5 + parent: 1653 + type: Transform +- proto: OrganHumanAppendix + entities: + - uid: 148 + components: + - pos: 10.481619,44.360027 + parent: 1653 + type: Transform +- proto: OrganHumanHeart + entities: + - uid: 206 + components: + - pos: 9.478245,26.669188 + parent: 1653 + type: Transform +- proto: PaintingSadClown + entities: + - uid: 122 + components: + - pos: 43.5,39.5 + parent: 1653 + type: Transform +- proto: PaintingSkeletonCigarette + entities: + - uid: 362 + components: + - pos: 32.5,21.5 + parent: 1653 + type: Transform +- proto: Pickaxe + entities: + - uid: 158 + components: + - pos: 21.525682,34.54406 + parent: 1653 + type: Transform + - uid: 179 + components: + - pos: 21.743324,22.05294 + parent: 1653 + type: Transform +- proto: PlasmaOre1 + entities: + - uid: 469 + components: + - pos: 30.486202,10.491858 + parent: 1653 + type: Transform + - uid: 482 + components: + - pos: 30.486202,10.491858 + parent: 1653 + type: Transform + - uid: 483 + components: + - pos: 30.486202,10.491858 + parent: 1653 + type: Transform + - uid: 485 + components: + - pos: 30.486202,10.491858 + parent: 1653 + type: Transform + - uid: 489 + components: + - pos: 30.486202,10.491858 + parent: 1653 + type: Transform +- proto: PlushieLizard + entities: + - uid: 41 + components: + - pos: 35.503193,14.666253 + parent: 1653 + type: Transform +- proto: PlushiePenguin + entities: + - uid: 415 + components: + - pos: 13.526197,27.541958 + parent: 1653 + type: Transform +- proto: PortableGeneratorJrPacman + entities: + - uid: 392 + components: + - pos: 37.5,31.5 + parent: 1653 + type: Transform +- proto: PottedPlantRandom + entities: + - uid: 44 + components: + - pos: 44.5,14.5 + parent: 1653 + type: Transform + - uid: 50 + components: + - pos: 45.5,14.5 + parent: 1653 + type: Transform + - uid: 94 + components: + - pos: 42.5,14.5 + parent: 1653 + type: Transform + - uid: 347 + components: + - pos: 41.5,14.5 + parent: 1653 + type: Transform +- proto: PowerCellHyperPrinted + entities: + - uid: 52 + components: + - pos: 31.760115,2.7803574 + parent: 1653 + type: Transform +- proto: PoweredSmallLight + entities: + - uid: 156 + components: + - rot: 1.5707963267948966 rad + pos: 10.5,45.5 + parent: 1653 + type: Transform +- proto: PuddleVomit + entities: + - uid: 229 + components: + - pos: 3.5,45.5 + parent: 1653 + type: Transform +- proto: Rack + entities: + - uid: 276 + components: + - pos: 18.5,45.5 + parent: 1653 + type: Transform + - uid: 334 + components: + - pos: 20.5,45.5 + parent: 1653 + type: Transform + - uid: 335 + components: + - pos: 20.5,46.5 + parent: 1653 + type: Transform + - uid: 352 + components: + - pos: 21.5,34.5 + parent: 1653 + type: Transform + - uid: 365 + components: + - pos: 10.5,46.5 + parent: 1653 + type: Transform + - uid: 403 + components: + - pos: 4.5,45.5 + parent: 1653 + type: Transform + - uid: 410 + components: + - pos: 22.5,34.5 + parent: 1653 + type: Transform +- proto: Railing + entities: + - uid: 260 + components: + - rot: 3.141592653589793 rad + pos: 27.5,9.5 + parent: 1653 + type: Transform + - uid: 261 + components: + - rot: 3.141592653589793 rad + pos: 28.5,9.5 + parent: 1653 + type: Transform + - uid: 277 + components: + - rot: 3.141592653589793 rad + pos: 26.5,9.5 + parent: 1653 + type: Transform + - uid: 327 + components: + - rot: 3.141592653589793 rad + pos: 30.5,9.5 + parent: 1653 + type: Transform + - uid: 376 + components: + - rot: 3.141592653589793 rad + pos: 25.5,9.5 + parent: 1653 + type: Transform + - uid: 467 + components: + - rot: 3.141592653589793 rad + pos: 29.5,9.5 + parent: 1653 + type: Transform +- proto: RailingCornerSmall + entities: + - uid: 371 + components: + - pos: 31.5,9.5 + parent: 1653 + type: Transform +- proto: RandomArtifactSpawner + entities: + - uid: 48 + components: + - pos: 43.5,14.5 + parent: 1653 + type: Transform +- proto: RandomCargoCorpseSpawner + entities: + - uid: 274 + components: + - pos: 11.5,46.5 + parent: 1653 + type: Transform +- proto: RandomServiceCorpseSpawner + entities: + - uid: 400 + components: + - pos: 19.5,45.5 + parent: 1653 + type: Transform +- proto: SalvageMaterialCrateSpawner + entities: + - uid: 481 + components: + - pos: 27.5,8.5 + parent: 1653 + type: Transform + - uid: 491 + components: + - pos: 30.5,8.5 + parent: 1653 + type: Transform +- proto: ShadowTree03 + entities: + - uid: 68 + components: + - pos: 19.477606,14.337568 + parent: 1653 + type: Transform +- proto: SheetSteel1 + entities: + - uid: 457 + components: + - pos: 13.481619,44.391277 + parent: 1653 + type: Transform +- proto: ShellShotgunIncendiary + entities: + - uid: 405 + components: + - pos: 18.58831,45.763992 + parent: 1653 + type: Transform +- proto: ShellShotgunSlug + entities: + - uid: 339 + components: + - pos: 18.603935,45.404617 + parent: 1653 + type: Transform +- proto: Shovel + entities: + - uid: 30 + components: + - pos: 33.425346,4.383849 + parent: 1653 + type: Transform + - uid: 394 + components: + - pos: 31.844257,31.05841 + parent: 1653 + type: Transform +- proto: SignNTMine + entities: + - uid: 253 + components: + - pos: 4.5,43.5 + parent: 1653 + type: Transform + - uid: 326 + components: + - pos: 20.5,43.5 + parent: 1653 + type: Transform +- proto: SilverOre1 + entities: + - uid: 198 + components: + - pos: 29.423702,10.476233 + parent: 1653 + type: Transform + - uid: 318 + components: + - pos: 29.423702,10.476233 + parent: 1653 + type: Transform + - uid: 484 + components: + - pos: 29.423702,10.476233 + parent: 1653 + type: Transform + - uid: 486 + components: + - pos: 29.423702,10.476233 + parent: 1653 + type: Transform + - uid: 487 + components: + - pos: 29.423702,10.476233 + parent: 1653 + type: Transform +- proto: SmallLight + entities: + - uid: 336 + components: + - rot: 1.5707963267948966 rad + pos: 18.5,45.5 + parent: 1653 + type: Transform + - uid: 434 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,45.5 + parent: 1653 + type: Transform +- proto: SpawnMobFrog + entities: + - uid: 386 + components: + - pos: 18.5,44.5 + parent: 1653 + type: Transform +- proto: SpearBone + entities: + - uid: 232 + components: + - flags: InContainer + type: MetaData + - parent: 231 + type: Transform + - canCollide: False + type: Physics + - type: InsideEntityStorage +- proto: SteelBench + entities: + - uid: 71 + components: + - pos: 19.5,13.5 + parent: 1653 + type: Transform +- proto: SteelOre + entities: + - uid: 197 + components: + - pos: 28.470577,10.523108 + parent: 1653 + type: Transform +- proto: TableCarpet + entities: + - uid: 465 + components: + - pos: 13.5,26.5 + parent: 1653 + type: Transform +- proto: TableReinforced + entities: + - uid: 246 + components: + - pos: 4.5,46.5 + parent: 1653 + type: Transform +- proto: TableWood + entities: + - uid: 56 + components: + - pos: 39.5,0.5 + parent: 1653 + type: Transform + - uid: 59 + components: + - pos: 51.5,1.5 + parent: 1653 + type: Transform + - uid: 124 + components: + - pos: 34.5,40.5 + parent: 1653 + type: Transform + - uid: 133 + components: + - pos: 5.5,40.5 + parent: 1653 + type: Transform + - uid: 173 + components: + - pos: 20.5,21.5 + parent: 1653 + type: Transform + - uid: 226 + components: + - pos: 36.5,40.5 + parent: 1653 + type: Transform + - uid: 227 + components: + - pos: 35.5,40.5 + parent: 1653 + type: Transform + - uid: 333 + components: + - pos: 36.5,31.5 + parent: 1653 + type: Transform +- proto: ToiletDirtyWater + entities: + - uid: 406 + components: + - pos: 32.5,20.5 + parent: 1653 + type: Transform +- proto: Torch + entities: + - uid: 58 + components: + - pos: 52.617035,4.4522324 + parent: 1653 + type: Transform + - uid: 60 + components: + - pos: 38.654633,2.7959824 + parent: 1653 + type: Transform + - uid: 135 + components: + - pos: 5.4760814,40.63729 + parent: 1653 + type: Transform + - uid: 136 + components: + - pos: 5.6792064,40.621666 + parent: 1653 + type: Transform + - uid: 366 + components: + - pos: 10.669119,46.594402 + parent: 1653 + type: Transform +- proto: TorsoSkeleton + entities: + - uid: 325 + components: + - pos: 32.5085,20.620539 + parent: 1653 + type: Transform +- proto: TrashBakedBananaPeel + entities: + - uid: 210 + components: + - pos: 5.484687,26.403563 + parent: 1653 + type: Transform +- proto: UraniumOre + entities: + - uid: 433 + components: + - pos: 4.487873,46.58196 + parent: 1653 + type: Transform +- proto: UraniumOre1 + entities: + - uid: 192 + components: + - pos: 27.517452,10.507483 + parent: 1653 + type: Transform + - uid: 193 + components: + - pos: 27.517452,10.507483 + parent: 1653 + type: Transform + - uid: 194 + components: + - pos: 27.517452,10.507483 + parent: 1653 + type: Transform + - uid: 195 + components: + - pos: 27.517452,10.507483 + parent: 1653 + type: Transform + - uid: 196 + components: + - pos: 27.517452,10.507483 + parent: 1653 + type: Transform +- proto: WallMining + entities: + - uid: 11 + components: + - pos: 13.5,46.5 + parent: 1653 + type: Transform + - uid: 150 + components: + - pos: 18.5,43.5 + parent: 1653 + type: Transform + - uid: 151 + components: + - pos: 17.5,44.5 + parent: 1653 + type: Transform + - uid: 152 + components: + - pos: 17.5,46.5 + parent: 1653 + type: Transform + - uid: 153 + components: + - pos: 18.5,47.5 + parent: 1653 + type: Transform + - uid: 154 + components: + - pos: 20.5,47.5 + parent: 1653 + type: Transform + - uid: 157 + components: + - pos: 17.5,45.5 + parent: 1653 + type: Transform + - uid: 159 + components: + - pos: 4.5,47.5 + parent: 1653 + type: Transform + - uid: 160 + components: + - pos: 2.5,47.5 + parent: 1653 + type: Transform + - uid: 161 + components: + - pos: 1.5,44.5 + parent: 1653 + type: Transform + - uid: 163 + components: + - pos: 5.5,45.5 + parent: 1653 + type: Transform + - uid: 164 + components: + - pos: 1.5,46.5 + parent: 1653 + type: Transform + - uid: 165 + components: + - pos: 1.5,45.5 + parent: 1653 + type: Transform + - uid: 247 + components: + - pos: 10.5,47.5 + parent: 1653 + type: Transform + - uid: 265 + components: + - pos: 21.5,46.5 + parent: 1653 + type: Transform + - uid: 329 + components: + - pos: 20.5,43.5 + parent: 1653 + type: Transform + - uid: 353 + components: + - pos: 9.5,46.5 + parent: 1653 + type: Transform + - uid: 370 + components: + - pos: 5.5,44.5 + parent: 1653 + type: Transform + - uid: 373 + components: + - pos: 5.5,46.5 + parent: 1653 + type: Transform + - uid: 402 + components: + - rot: 1.5707963267948966 rad + pos: 10.5,43.5 + parent: 1653 + type: Transform + - uid: 425 + components: + - pos: 21.5,45.5 + parent: 1653 + type: Transform + - uid: 427 + components: + - pos: 21.5,44.5 + parent: 1653 + type: Transform + - uid: 429 + components: + - pos: 9.5,44.5 + parent: 1653 + type: Transform + - uid: 430 + components: + - pos: 9.5,45.5 + parent: 1653 + type: Transform + - uid: 431 + components: + - pos: 12.5,47.5 + parent: 1653 + type: Transform + - uid: 455 + components: + - pos: 2.5,43.5 + parent: 1653 + type: Transform + - uid: 456 + components: + - pos: 4.5,43.5 + parent: 1653 + type: Transform +- proto: WallMiningDiagonal + entities: + - uid: 166 + components: + - pos: 1.5,47.5 + parent: 1653 + type: Transform + - uid: 167 + components: + - rot: -1.5707963267948966 rad + pos: 5.5,47.5 + parent: 1653 + type: Transform + - uid: 168 + components: + - rot: 3.141592653589793 rad + pos: 5.5,43.5 + parent: 1653 + type: Transform + - uid: 169 + components: + - rot: 1.5707963267948966 rad + pos: 1.5,43.5 + parent: 1653 + type: Transform + - uid: 251 + components: + - pos: 9.5,47.5 + parent: 1653 + type: Transform + - uid: 275 + components: + - rot: -1.5707963267948966 rad + pos: 13.5,47.5 + parent: 1653 + type: Transform + - uid: 397 + components: + - rot: 1.5707963267948966 rad + pos: 9.5,43.5 + parent: 1653 + type: Transform + - uid: 428 + components: + - pos: 17.5,47.5 + parent: 1653 + type: Transform + - uid: 493 + components: + - rot: -1.5707963267948966 rad + pos: 21.5,47.5 + parent: 1653 + type: Transform + - uid: 494 + components: + - rot: 3.141592653589793 rad + pos: 21.5,43.5 + parent: 1653 + type: Transform + - uid: 495 + components: + - rot: 1.5707963267948966 rad + pos: 17.5,43.5 + parent: 1653 + type: Transform +- proto: WallWood + entities: + - uid: 16 + components: + - pos: 31.5,19.5 + parent: 1653 + type: Transform + - uid: 188 + components: + - pos: 43.5,39.5 + parent: 1653 + type: Transform + - uid: 255 + components: + - pos: 31.5,21.5 + parent: 1653 + type: Transform + - uid: 323 + components: + - pos: 33.5,20.5 + parent: 1653 + type: Transform + - uid: 324 + components: + - pos: 33.5,21.5 + parent: 1653 + type: Transform + - uid: 338 + components: + - pos: 33.5,19.5 + parent: 1653 + type: Transform + - uid: 408 + components: + - pos: 32.5,21.5 + parent: 1653 + type: Transform + - uid: 409 + components: + - pos: 31.5,20.5 + parent: 1653 + type: Transform +- proto: WaterTankHighCapacity + entities: + - uid: 219 + components: + - pos: 27.5,14.5 + parent: 1653 + type: Transform +- proto: WeaponShotgunImprovised + entities: + - uid: 412 + components: + - pos: 20.496641,45.467117 + parent: 1653 + type: Transform +- proto: WeldingFuelTankFull + entities: + - uid: 10 + components: + - pos: 2.5,46.5 + parent: 1653 + type: Transform +- proto: WoodDoor + entities: + - uid: 407 + components: + - pos: 32.5,19.5 + parent: 1653 + type: Transform +- proto: WoodenSign + entities: + - uid: 189 + components: + - pos: 1.5555744,26.347673 + parent: 1653 + type: Transform +- proto: WoodenSignRight + entities: + - uid: 62 + components: + - pos: 11.898959,14.345065 + parent: 1653 + type: Transform + - uid: 177 + components: + - pos: 9.503841,22.358318 + parent: 1653 + type: Transform + - uid: 440 + components: + - pos: 25.205534,32.33467 + parent: 1653 + type: Transform + - uid: 451 + components: + - pos: 5.5491443,7.271117 + parent: 1653 + type: Transform +- proto: WoodenSupport + entities: + - uid: 9 + components: + - pos: 10.5,10.5 + parent: 1653 + type: Transform + - uid: 66 + components: + - pos: 38.5,16.5 + parent: 1653 + type: Transform + - uid: 107 + components: + - pos: 8.5,32.5 + parent: 1653 + type: Transform + - uid: 108 + components: + - pos: 1.5,36.5 + parent: 1653 + type: Transform + - uid: 110 + components: + - pos: 0.5,22.5 + parent: 1653 + type: Transform + - uid: 140 + components: + - pos: 34.5,6.5 + parent: 1653 + type: Transform + - uid: 146 + components: + - pos: 24.5,6.5 + parent: 1653 + type: Transform + - uid: 174 + components: + - pos: 13.5,22.5 + parent: 1653 + type: Transform + - uid: 204 + components: + - pos: 2.5,28.5 + parent: 1653 + type: Transform + - uid: 207 + components: + - pos: 0.5,28.5 + parent: 1653 + type: Transform + - uid: 259 + components: + - pos: 20.5,24.5 + parent: 1653 + type: Transform + - uid: 279 + components: + - pos: 12.5,10.5 + parent: 1653 + type: Transform + - uid: 286 + components: + - pos: 22.5,10.5 + parent: 1653 + type: Transform + - uid: 422 + components: + - pos: 22.5,28.5 + parent: 1653 + type: Transform + - uid: 424 + components: + - pos: 22.5,40.5 + parent: 1653 + type: Transform + - uid: 450 + components: + - pos: 0.5,10.5 + parent: 1653 + type: Transform + - uid: 462 + components: + - pos: 53.5,4.5 + parent: 1653 + type: Transform + - uid: 464 + components: + - pos: 36.5,4.5 + parent: 1653 + type: Transform + - uid: 470 + components: + - pos: 8.5,36.5 + parent: 1653 + type: Transform +- proto: WoodenSupportBeam + entities: + - uid: 35 + components: + - pos: 29.5,1.5 + parent: 1653 + type: Transform + - uid: 143 + components: + - pos: 33.5,10.5 + parent: 1653 + type: Transform + - uid: 285 + components: + - pos: 12.5,6.5 + parent: 1653 + type: Transform + - uid: 307 + components: + - pos: 14.5,20.5 + parent: 1653 + type: Transform + - uid: 355 + components: + - pos: 25.5,1.5 + parent: 1653 + type: Transform + - uid: 395 + components: + - pos: 17.5,27.5 + parent: 1653 + type: Transform +- proto: WoodenSupportWall + entities: + - uid: 27 + components: + - pos: 34.5,4.5 + parent: 1653 + type: Transform + - uid: 33 + components: + - pos: 27.5,1.5 + parent: 1653 + type: Transform + - uid: 34 + components: + - pos: 28.5,1.5 + parent: 1653 + type: Transform + - uid: 36 + components: + - pos: 32.5,2.5 + parent: 1653 + type: Transform + - uid: 37 + components: + - pos: 32.5,3.5 + parent: 1653 + type: Transform + - uid: 38 + components: + - pos: 30.5,1.5 + parent: 1653 + type: Transform + - uid: 39 + components: + - pos: 32.5,0.5 + parent: 1653 + type: Transform + - uid: 53 + components: + - pos: 7.5,8.5 + parent: 1653 + type: Transform + - uid: 54 + components: + - pos: 6.5,8.5 + parent: 1653 + type: Transform + - uid: 55 + components: + - pos: 5.5,8.5 + parent: 1653 + type: Transform + - uid: 69 + components: + - pos: 0.5,12.5 + parent: 1653 + type: Transform + - uid: 75 + components: + - pos: 16.5,27.5 + parent: 1653 + type: Transform + - uid: 91 + components: + - pos: 32.5,1.5 + parent: 1653 + type: Transform + - uid: 92 + components: + - pos: 31.5,3.5 + parent: 1653 + type: Transform + - uid: 98 + components: + - pos: 18.5,25.5 + parent: 1653 + type: Transform + - uid: 125 + components: + - pos: 38.5,40.5 + parent: 1653 + type: Transform + - uid: 141 + components: + - pos: 34.5,10.5 + parent: 1653 + type: Transform + - uid: 142 + components: + - pos: 34.5,9.5 + parent: 1653 + type: Transform + - uid: 175 + components: + - pos: 12.5,20.5 + parent: 1653 + type: Transform + - uid: 176 + components: + - pos: 15.5,20.5 + parent: 1653 + type: Transform + - uid: 185 + components: + - pos: 32.5,40.5 + parent: 1653 + type: Transform + - uid: 234 + components: + - pos: 50.5,0.5 + parent: 1653 + type: Transform + - uid: 236 + components: + - pos: 30.5,3.5 + parent: 1653 + type: Transform + - uid: 237 + components: + - pos: 25.5,3.5 + parent: 1653 + type: Transform + - uid: 238 + components: + - pos: 25.5,4.5 + parent: 1653 + type: Transform + - uid: 239 + components: + - pos: 18.5,1.5 + parent: 1653 + type: Transform + - uid: 257 + components: + - pos: 29.5,3.5 + parent: 1653 + type: Transform + - uid: 263 + components: + - pos: 25.5,2.5 + parent: 1653 + type: Transform + - uid: 280 + components: + - pos: 13.5,6.5 + parent: 1653 + type: Transform + - uid: 282 + components: + - pos: 21.5,6.5 + parent: 1653 + type: Transform + - uid: 287 + components: + - pos: 22.5,6.5 + parent: 1653 + type: Transform + - uid: 297 + components: + - pos: 6.5,40.5 + parent: 1653 + type: Transform + - uid: 299 + components: + - pos: 0.5,38.5 + parent: 1653 + type: Transform + - uid: 305 + components: + - pos: 14.5,30.5 + parent: 1653 + type: Transform + - uid: 310 + components: + - pos: 14.5,32.5 + parent: 1653 + type: Transform + - uid: 311 + components: + - pos: 26.5,30.5 + parent: 1653 + type: Transform + - uid: 342 + components: + - pos: 22.5,3.5 + parent: 1653 + type: Transform + - uid: 343 + components: + - pos: 21.5,3.5 + parent: 1653 + type: Transform + - uid: 344 + components: + - pos: 23.5,3.5 + parent: 1653 + type: Transform + - uid: 345 + components: + - pos: 24.5,3.5 + parent: 1653 + type: Transform + - uid: 346 + components: + - pos: 20.5,1.5 + parent: 1653 + type: Transform + - uid: 349 + components: + - pos: 21.5,1.5 + parent: 1653 + type: Transform + - uid: 388 + components: + - pos: 28.5,3.5 + parent: 1653 + type: Transform + - uid: 389 + components: + - pos: 26.5,1.5 + parent: 1653 + type: Transform + - uid: 419 + components: + - pos: 19.5,1.5 + parent: 1653 + type: Transform + - uid: 437 + components: + - pos: 26.5,32.5 + parent: 1653 + type: Transform + - uid: 461 + components: + - pos: 54.5,4.5 + parent: 1653 + type: Transform +- proto: WoodenSupportWallBroken + entities: + - uid: 26 + components: + - pos: 27.5,3.5 + parent: 1653 + type: Transform + - uid: 80 + components: + - pos: 17.5,25.5 + parent: 1653 + type: Transform + - uid: 95 + components: + - pos: 4.5,8.5 + parent: 1653 + type: Transform + - uid: 284 + components: + - pos: 20.5,6.5 + parent: 1653 + type: Transform + - uid: 348 + components: + - pos: 20.5,3.5 + parent: 1653 + type: Transform + - uid: 356 + components: + - pos: 39.5,2.5 + parent: 1653 + type: Transform + - uid: 463 + components: + - pos: 50.5,1.5 + parent: 1653 + type: Transform +... diff --git a/Resources/Prototypes/Actions/crit.yml b/Resources/Prototypes/Actions/crit.yml index bdd09d697ec..705ee6ee6b3 100644 --- a/Resources/Prototypes/Actions/crit.yml +++ b/Resources/Prototypes/Actions/crit.yml @@ -1,4 +1,4 @@ -# Actions added to mobs in crit. +# Actions added to mobs in crit. - type: entity id: ActionCritSuccumb name: Succumb @@ -8,6 +8,7 @@ - type: InstantAction itemIconStyle: NoItem checkCanInteract: false + checkConsciousness: false icon: sprite: Mobs/Ghosts/ghost_human.rsi state: icon @@ -22,6 +23,7 @@ - type: InstantAction itemIconStyle: NoItem checkCanInteract: false + checkConsciousness: false icon: sprite: Interface/Actions/actions_crit.rsi state: fakedeath @@ -37,6 +39,7 @@ - type: InstantAction itemIconStyle: NoItem checkCanInteract: false + checkConsciousness: false icon: sprite: Interface/Actions/actions_crit.rsi state: lastwords diff --git a/Resources/Prototypes/Actions/diona.yml b/Resources/Prototypes/Actions/diona.yml index 1215276f283..11db30386a5 100644 --- a/Resources/Prototypes/Actions/diona.yml +++ b/Resources/Prototypes/Actions/diona.yml @@ -10,6 +10,7 @@ state: brain event: !type:GibActionEvent {} checkCanInteract: false + checkConsciousness: false - type: entity id: DionaReformAction diff --git a/Resources/Prototypes/Actions/types.yml b/Resources/Prototypes/Actions/types.yml index b2038b04b75..b91b26e3570 100644 --- a/Resources/Prototypes/Actions/types.yml +++ b/Resources/Prototypes/Actions/types.yml @@ -29,6 +29,7 @@ components: - type: InstantAction checkCanInteract: false + checkConsciousness: false icon: Interface/Actions/zombie-turn.png event: !type:ZombifySelfActionEvent @@ -66,6 +67,7 @@ components: - type: InstantAction checkCanInteract: false + checkConsciousness: false itemIconStyle: BigAction priority: -20 icon: @@ -82,6 +84,7 @@ components: - type: InstantAction checkCanInteract: false + checkConsciousness: false itemIconStyle: BigAction priority: -20 icon: @@ -143,6 +146,7 @@ noSpawn: true components: - type: InstantAction + checkCanInteract: false charges: 2 useDelay: 5 itemIconStyle: BigAction @@ -186,6 +190,7 @@ components: - type: InstantAction checkCanInteract: false + checkConsciousness: false icon: Interface/Actions/harmOff.png iconOn: Interface/Actions/harm.png event: !type:ToggleCombatActionEvent @@ -256,6 +261,7 @@ - type: InstantAction clientExclusive: true checkCanInteract: false + checkConsciousness: false temporary: true icon: { sprite: Objects/Tools/multitool.rsi, state: icon } event: !type:ClearAllOverlaysEvent @@ -279,6 +285,7 @@ components: - type: InstantAction checkCanInteract: false + checkConsciousness: false icon: { sprite: Clothing/Head/Hats/pyjamasyndicatered.rsi, state: icon } event: !type:SleepActionEvent @@ -291,6 +298,7 @@ - type: InstantAction icon: { sprite: Clothing/Head/Hats/pyjamasyndicatered.rsi, state: icon } checkCanInteract: false + checkConsciousness: false event: !type:WakeActionEvent - type: entity @@ -328,6 +336,7 @@ event: !type:ToggleEyesActionEvent useDelay: 1 # so u cant give yourself and observers eyestrain by rapidly spamming the action checkCanInteract: false + checkConsciousness: false - type: entity id: ActionToggleWagging diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml b/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml index 2d5acf5c90f..d84fedd543f 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml @@ -68,6 +68,16 @@ category: Fun group: market +- type: cargoProduct + id: FunSprayPaints + icon: + sprite: Objects/Fun/spraycans.rsi + state: death2_cap + product: CrateFunSprayPaints + cost: 2000 + category: Fun + group: market + - type: cargoProduct id: FunParty icon: diff --git a/Resources/Prototypes/Catalog/Fills/Crates/fun.yml b/Resources/Prototypes/Catalog/Fills/Crates/fun.yml index 1db0c3121ed..cc5e3b1d174 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/fun.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/fun.yml @@ -292,14 +292,21 @@ contents: - id: SnapPopBox - id: CrazyGlue - amount: 2 - id: PlasticBanana + - id: FunnyPaint + orGroup: Paint + prob: 0.5 + - id: FunnyPaintYellow + orGroup: Paint + prob: 0.5 - id: WhoopieCushion - id: ToyHammer - id: MrChips - orGroup: GiftPool + prob: 0.5 + orGroup: Dummy - id: MrDips - orGroup: Giftpool + prob: 0.5 + orGroup: Dummy - id: RevolverCapGun - id: BalloonNT - id: ClothingShoesClownLarge @@ -332,6 +339,41 @@ amount: 15 prob: 0.05 +- type: entity + id: CrateFunSprayPaints + name: spray paint crate + description: a crate filled with spray paint. + parent: CratePlastic + suffix: Spray Paint + components: + - type: StorageFill + contents: + - id: SprayPaintBlue + amount: 2 + prob: 0.33 + - id: SprayPaintRed + amount: 2 + prob: 0.33 + - id: SprayPaintOrange + amount: 2 + prob: 0.33 + - id: SprayPaintBlack + amount: 2 + prob: 0.33 + - id: SprayPaintGreen + amount: 2 + prob: 0.33 + - id: SprayPaintPurple + amount: 2 + prob: 0.33 + - id: SprayPaintWhite + amount: 2 + prob: 0.33 + - id: DeathPaint + amount: 2 + - id: DeathPaintTwo + amount: 2 + - type: entity name: dartboard box set description: A box with everything you need for a fun game of darts. diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml b/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml index 78a4ea3082e..f4083f42574 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml @@ -142,6 +142,10 @@ prob: 0.25 - id: StrangePill prob: 0.20 + - id: DeathPaint + prob: 0.05 + - id: DeathPaintTwo + prob: 0.05 - id: DrinkMopwataBottleRandom prob: 0.20 - id: ModularReceiver diff --git a/Resources/Prototypes/Catalog/uplink_catalog.yml b/Resources/Prototypes/Catalog/uplink_catalog.yml index 21627a46188..7f64ebbd23c 100644 --- a/Resources/Prototypes/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/Catalog/uplink_catalog.yml @@ -254,6 +254,16 @@ tags: - NukeOpsUplink +- type: listing + id: UplinkSyndicateBombFake + name: uplink-exploding-syndicate-bomb-fake-name + description: uplink-exploding-syndicate-bomb-fake-desc + productEntity: SyndicateBombFake + cost: + Telecrystal: 4 + categories: + - UplinkExplosives + - type: listing id: UplinkClusterGrenade name: uplink-cluster-grenade-name diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Consumable/Drinks/drinks.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Consumable/Drinks/drinks.yml index 8f05f0f55fe..4e3b3e938ed 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Consumable/Drinks/drinks.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Consumable/Drinks/drinks.yml @@ -1,7 +1,7 @@ - type: entity - parent: DrinkGlassBase + parent: DrinkGlass id: DrinkHealthViolationGlass - name: health code violation + suffix: health code violation description: Allegedly it's a cocktail. The warning cone motif seems apt. components: - type: SolutionContainerManager @@ -11,13 +11,14 @@ reagents: - ReagentId: HealthViolation Quantity: 30 - - type: Sprite - sprite: DeltaV/Objects/Consumable/Drinks/dulleavene.rsi + - type: Icon + sprite: DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi + state: icon - type: entity - parent: DrinkGlassBase + parent: DrinkGlass id: DrinkGunmetalGlass - name: gunmetal glass + suffix: gunmetal description: A cloudy mix of rum, cream, and... is that welding fuel? Probably tasty. components: - type: SolutionContainerManager @@ -27,13 +28,14 @@ reagents: - ReagentId: Gunmetal Quantity: 30 - - type: Sprite + - type: Icon sprite: DeltaV/Objects/Consumable/Drinks/gunmetal.rsi + state: icon - type: entity - parent: DrinkGlassBase + parent: DrinkGlass id: DrinkLemonDropGlass - name: lemon drop + suffix: lemon drop description: A martini glass filled with a translucent mix of refreshing lemony goodness. components: - type: SolutionContainerManager @@ -43,13 +45,14 @@ reagents: - ReagentId: LemonDrop Quantity: 30 - - type: Sprite + - type: Icon sprite: DeltaV/Objects/Consumable/Drinks/lemondrop.rsi + state: icon - type: entity - parent: DrinkGlassBase + parent: DrinkGlass id: DrinkGreenGrassGlass - name: green grass + suffix: green grass description: An odd green cocktail, topped with oranges, ice, and a plastic straw. Curious. components: - type: SolutionContainerManager @@ -59,13 +62,14 @@ reagents: - ReagentId: GreenGrass Quantity: 30 - - type: Sprite + - type: Icon sprite: DeltaV/Objects/Consumable/Drinks/greengrass.rsi + state: icon - type: entity - parent: DrinkGlassBase + parent: DrinkGlass id: DrinkDaiquiriGlass - name: classic daiquiri + suffix: classic daiquiri description: Rum, lime, and simple syrup. Such class, such refinement. components: - type: SolutionContainerManager @@ -75,13 +79,14 @@ reagents: - ReagentId: Daiquiri Quantity: 30 - - type: Sprite + - type: Icon sprite: DeltaV/Objects/Consumable/Drinks/daiquiri.rsi + state: icon - type: entity - parent: DrinkGlassBase + parent: DrinkGlass id: DrinkArsonistsBrewGlass - name: arsonist's brew + suffix: arsonist's brew description: It's probably not concerning that it's glowing faintly. Or bubbling. Or smoking. No, not at all. components: - type: SolutionContainerManager @@ -91,13 +96,14 @@ reagents: - ReagentId: ArsonistsBrew Quantity: 30 - - type: Sprite + - type: Icon sprite: DeltaV/Objects/Consumable/Drinks/arsonist.rsi + state: icon - type: entity - parent: DrinkGlassBase + parent: DrinkGlass id: DrinkKvassGlass - name: kvass glass + suffix: kvass description: A cool refreshing drink with a taste of socialism. components: - type: SolutionContainerManager @@ -107,13 +113,14 @@ reagents: - ReagentId: Kvass Quantity: 30 - - type: Sprite - sprite: Objects/Consumable/Drinks/kvass.rsi + - type: Icon + sprite: DeltaV/Objects/Consumable/Drinks/kvass.rsi + state: icon - type: entity - parent: DrinkGlassBase + parent: DrinkGlass id: DrinkMothamphetamineGlass - name: mothamphetamine + suffix: mothamphetamine description: A strangely... Fuzzy drink. It has a chaotic aura. components: - type: SolutionContainerManager @@ -123,5 +130,6 @@ reagents: - ReagentId: Mothamphetamine Quantity: 30 - - type: Sprite + - type: Icon sprite: DeltaV/Objects/Consumable/Drinks/mothamphetamine.rsi + state: icon diff --git a/Resources/Prototypes/DeltaV/Flavors/flavors.yml b/Resources/Prototypes/DeltaV/Flavors/flavors.yml index f3c7876a8af..382868db630 100644 --- a/Resources/Prototypes/DeltaV/Flavors/flavors.yml +++ b/Resources/Prototypes/DeltaV/Flavors/flavors.yml @@ -87,9 +87,9 @@ #Delta V - type: flavor - id: dulleavene + id: healthcodeviolation flavorType: Complex - description: flavor-complex-dulleavene + description: flavor-complex-healthcodeviolation - type: flavor id: gunmetal diff --git a/Resources/Prototypes/DeltaV/Reagents/Consumable/Drink/drinks.yml b/Resources/Prototypes/DeltaV/Reagents/Consumable/Drink/drinks.yml index 816aa574448..c568c1bc757 100644 --- a/Resources/Prototypes/DeltaV/Reagents/Consumable/Drink/drinks.yml +++ b/Resources/Prototypes/DeltaV/Reagents/Consumable/Drink/drinks.yml @@ -4,11 +4,14 @@ parent: BaseDrink desc: reagent-desc-healthviolation physicalDesc: reagent-physical-desc-strong-smelling - flavor: dulleavene + flavor: healthcodeviolation color: "#ff7f00" metamorphicSprite: - sprite: DeltaV/Objects/Consumable/Drinks/dulleavene.rsi - state: icon + sprite: DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi + state: icon_empty + metamorphicMaxFillLevels: 5 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false metabolisms: Drink: effects: @@ -41,7 +44,10 @@ color: "#994422" metamorphicSprite: sprite: DeltaV/Objects/Consumable/Drinks/gunmetal.rsi - state: icon + state: icon_empty + metamorphicMaxFillLevels: 5 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false metabolisms: Drink: effects: @@ -67,7 +73,9 @@ color: "#fff789" metamorphicSprite: sprite: DeltaV/Objects/Consumable/Drinks/lemondrop.rsi - state: icon + state: icon_empty + metamorphicMaxFillLevels: 3 + metamorphicFillBaseName: fill- metabolisms: Drink: effects: @@ -87,7 +95,9 @@ color: "#66aa55" metamorphicSprite: sprite: DeltaV/Objects/Consumable/Drinks/greengrass.rsi - state: icon + state: icon_empty + metamorphicMaxFillLevels: 5 + metamorphicFillBaseName: fill- metabolisms: Drink: effects: @@ -107,7 +117,10 @@ color: "#ddffdd" metamorphicSprite: sprite: DeltaV/Objects/Consumable/Drinks/daiquiri.rsi - state: icon + state: icon_empty + metamorphicMaxFillLevels: 3 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false metabolisms: Drink: effects: @@ -127,7 +140,10 @@ color: "#fff789" metamorphicSprite: sprite: DeltaV/Objects/Consumable/Drinks/arsonist.rsi - state: icon + state: icon_empty + metamorphicMaxFillLevels: 4 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false metabolisms: Drink: effects: @@ -158,8 +174,11 @@ flavor: bread color: "#381600" metamorphicSprite: - sprite: Objects/Consumable/Drinks/kvass.rsi - state: icon + sprite: DeltaV/Objects/Consumable/Drinks/kvass.rsi + state: icon_empty + metamorphicMaxFillLevels: 4 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false - type: reagent id: Mothamphetamine @@ -171,7 +190,10 @@ color: "#2fa1ef" metamorphicSprite: sprite: DeltaV/Objects/Consumable/Drinks/mothamphetamine.rsi - state: icon + state: icon_empty + metamorphicMaxFillLevels: 4 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false metabolisms: Drink: effects: diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/crates.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/crates.yml index ae7e5bcf762..883182aae8d 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/crates.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/crates.yml @@ -44,6 +44,7 @@ - CrateMaterialPlastic - CrateMaterialWood - CrateMaterialPlasteel + - CrateFunSprayPaints - CrateFunArtSupplies - CrateEngineeringCableLV - CrateEngineeringCableMV diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml index 879c1689291..10fb034d0d5 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml @@ -174,7 +174,12 @@ - MaterialCloth10 - MaterialWoodPlank10 - ResearchDisk + - DeathPaint - Plunger + - SprayPaintBlue + - SprayPaintRed + - SprayPaintGreen + - SprayPaintOrange - TechnologyDisk - PowerCellMedium - PowerCellSmall diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index d56bab16455..48f369f05ed 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -1031,6 +1031,8 @@ bloodMaxVolume: 300 # if you fuck with the gorilla he will harambe you - type: MeleeWeapon + soundHit: + collection: Punch damage: types: Blunt: 20 @@ -1221,6 +1223,15 @@ path: /Audio/Animals/ferret_happy.ogg interactFailureSound: path: /Audio/Items/wirecutter.ogg + - type: MeleeWeapon + soundHit: + path: /Audio/Effects/bite.ogg + angle: 30 + animation: WeaponArcBite + damage: + types: + Blunt: 3 + Piercing: 3 - type: Butcherable butcheringType: Spike spawned: @@ -1866,6 +1877,13 @@ spawned: - id: FoodMeat amount: 1 + - type: Speech + speechSounds: Parrot + speechVerb: Parrot + - type: Vocal + sounds: + Unsexed: Parrot + - type: ParrotAccent - type: InteractionPopup successChance: 0.6 interactSuccessString: petting-success-bird diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml b/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml index 73082674736..3e6c603626b 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml @@ -70,6 +70,7 @@ tags: - Carp - DoorBumpOpener + - NoPaint - type: ReplacementAccent accent: genericAggressive - type: Speech diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml b/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml index 28355bb459e..ec1ed3a58f6 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml @@ -97,3 +97,6 @@ - RevenantTheme - type: Speech speechVerb: Ghost + - type: Tag + tags: + - NoPaint diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/space.yml b/Resources/Prototypes/Entities/Mobs/NPCs/space.yml index 39460be3f3c..0a294805cfd 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/space.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/space.yml @@ -52,7 +52,7 @@ animation: WeaponArcClaw damage: types: - Brute: 5 + Blunt: 5 Slash: 10 - type: Tag tags: diff --git a/Resources/Prototypes/Entities/Mobs/Player/guardian.yml b/Resources/Prototypes/Entities/Mobs/Player/guardian.yml index d892b31fac3..9f0d54ee64a 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/guardian.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/guardian.yml @@ -104,6 +104,7 @@ - type: Tag tags: - CannotSuicide + - NoPaint # From the uplink injector - type: entity @@ -212,6 +213,7 @@ tags: - CannotSuicide - FootstepSound + - NoPaint - type: Inventory templateId: holoclown - type: Hands @@ -253,3 +255,4 @@ event: !type:GuardianToggleActionEvent useDelay: 2 checkCanInteract: false + checkConsciousness: false diff --git a/Resources/Prototypes/Entities/Mobs/Player/human.yml b/Resources/Prototypes/Entities/Mobs/Player/human.yml index b864984a7f3..6197c82c021 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/human.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/human.yml @@ -9,9 +9,9 @@ #Syndie - type: entity parent: MobHuman - id: MobHumanSyndicateAgent + id: MobHumanSyndicateAgentBase name: syndicate agent - suffix: Human + suffix: Human, Base components: - type: Loadout prototypes: [SyndicateOperativeGearExtremelyBasic] @@ -22,9 +22,20 @@ - Syndicate - type: entity - parent: MobHumanSyndicateAgent + parent: MobHumanSyndicateAgentBase + id: MobHumanSyndicateAgent + name: syndicate agent + suffix: Human, Traitor + components: + # make the player a traitor once its taken + - type: AutoTraitor + giveUplink: false + giveObjectives: false + +- type: entity + parent: MobHumanSyndicateAgentBase id: MobHumanSyndicateAgentNukeops # Reinforcement exclusive to nukeops uplink - suffix: NukeOps + suffix: Human, NukeOps components: - type: NukeOperative diff --git a/Resources/Prototypes/Entities/Mobs/base.yml b/Resources/Prototypes/Entities/Mobs/base.yml index d4e9a561c5e..ac9aabbeadb 100644 --- a/Resources/Prototypes/Entities/Mobs/base.yml +++ b/Resources/Prototypes/Entities/Mobs/base.yml @@ -102,6 +102,8 @@ - type: CombatMode - type: MeleeWeapon hidden: true + soundHit: + collection: MetalThud damage: groups: Brute: 5 diff --git a/Resources/Prototypes/Entities/Objects/Decoration/flora.yml b/Resources/Prototypes/Entities/Objects/Decoration/flora.yml index a2dda827be7..f35d222d39c 100644 --- a/Resources/Prototypes/Entities/Objects/Decoration/flora.yml +++ b/Resources/Prototypes/Entities/Objects/Decoration/flora.yml @@ -38,7 +38,6 @@ description: Yep, it's a tree. abstract: true components: - - type: IgnoreWeather - type: SpriteFade - type: Clickable - type: Sprite diff --git a/Resources/Prototypes/Entities/Objects/Fun/pai.yml b/Resources/Prototypes/Entities/Objects/Fun/pai.yml index 36e20c22a9c..537562f4618 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/pai.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/pai.yml @@ -138,6 +138,7 @@ components: - type: InstantAction checkCanInteract: false + checkConsciousness: false icon: Interface/Actions/pai-midi.png event: !type:OpenUiActionEvent key: enum.InstrumentUiKey.Key @@ -150,6 +151,7 @@ components: - type: InstantAction checkCanInteract: false + checkConsciousness: false icon: { sprite: Interface/Actions/pai-map.rsi, state: icon } event: !type:OpenUiActionEvent key: enum.StationMapUiKey.Key diff --git a/Resources/Prototypes/Entities/Objects/Fun/spray_paint.yml b/Resources/Prototypes/Entities/Objects/Fun/spray_paint.yml new file mode 100644 index 00000000000..1b417f6cde0 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Fun/spray_paint.yml @@ -0,0 +1,292 @@ +# Base Paints +- type: entity + parent: BaseItem + id: PaintBase + name: spray paint + description: A tin of spray paint. + noSpawn: true + components: + - type: Appearance + - type: Sprite + sprite: Objects/Fun/spraycans.rsi + state: clown_cap + layers: + - state: clown_cap + map: ["enum.OpenableVisuals.Layer"] + - type: Paint + consumptionUnit: 10 + blacklist: + tags: + - NoPaint + - type: Item + sprite: Objects/Fun/spraycans.rsi + heldPrefix: spray + - type: SolutionContainerManager + solutions: + drink: + maxVol: 50 + reagents: + - ReagentId: SpaceGlue + Quantity: 50 + - type: TrashOnSolutionEmpty + solution: drink + - type: Sealable + - type: Openable + sound: + path: /Audio/Effects/pop_high.ogg + closeable: true + closeSound: + path: /Audio/Effects/pop_high.ogg + +# Paints + +# funnypaint +- type: entity + parent: PaintBase + id: FunnyPaint + name: funny paint + description: A tin of funny paint, manufactured by Honk! Co. + components: + - type: Paint + color: "#fa74df" + - type: Item + sprite: Objects/Fun/spraycans.rsi + heldPrefix: clown + - type: GenericVisualizer + visuals: + enum.OpenableVisuals.Opened: + enum.OpenableVisuals.Layer: + True: {state: "clown"} + False: {state: "clown_cap"} + +- type: entity + parent: PaintBase + id: FunnyPaintYellow + name: funny paint + description: A tin of funny paint, manufactured by Honk! Co. + components: + - type: Paint + color: "#d5e028" + - type: Item + sprite: Objects/Fun/spraycans.rsi + heldPrefix: clown + - type: Sprite + sprite: Objects/Fun/spraycans.rsi + state: clown2_cap + layers: + - state: clown2_cap + map: ["enum.OpenableVisuals.Layer"] + - type: GenericVisualizer + visuals: + enum.OpenableVisuals.Opened: + enum.OpenableVisuals.Layer: + True: {state: "clown2"} + False: {state: "clown2_cap"} + +#death paint +- type: entity + parent: PaintBase + id: DeathPaint + components: + - type: Paint + color: "#ff20c8" + - type: Item + sprite: Objects/Fun/spraycans.rsi + heldPrefix: spray + - type: Sprite + sprite: Objects/Fun/spraycans.rsi + state: death_cap + layers: + - state: death_cap + map: ["enum.OpenableVisuals.Layer"] + - type: GenericVisualizer + visuals: + enum.OpenableVisuals.Opened: + enum.OpenableVisuals.Layer: + True: {state: "death"} + False: {state: "death_cap"} + +- type: entity + parent: PaintBase + id: DeathPaintTwo + components: + - type: Paint + color: "#ff2020" + - type: Item + sprite: Objects/Fun/spraycans.rsi + heldPrefix: spray + - type: Sprite + sprite: Objects/Fun/spraycans.rsi + state: death2_cap + layers: + - state: death2_cap + map: ["enum.OpenableVisuals.Layer"] + - type: GenericVisualizer + visuals: + enum.OpenableVisuals.Opened: + enum.OpenableVisuals.Layer: + True: {state: "death2"} + False: {state: "death2_cap"} + +#Sprays + +#Blue +- type: entity + parent: PaintBase + id: SprayPaintBlue + suffix: Blue + components: + - type: Sprite + sprite: Objects/Fun/spraycans.rsi + layers: + - state: spray + map: ["Base"] + - state: spray_cap_colors + map: ["enum.OpenableVisuals.Layer"] + color: "#5890f7" + - type: Paint + color: "#5890f7" + - type: GenericVisualizer + visuals: + enum.OpenableVisuals.Opened: + enum.OpenableVisuals.Layer: + True: {state: "spray_colors" , color: "#5890f7"} + False: {state: "spray_cap_colors" , color: "#5890f7"} + +#Red +- type: entity + parent: PaintBase + id: SprayPaintRed + suffix: Red + components: + - type: Sprite + sprite: Objects/Fun/spraycans.rsi + layers: + - state: spray + map: ["Base"] + - state: spray_cap_colors + map: ["enum.OpenableVisuals.Layer"] + color: "#ff3b3b" + - type: Paint + color: "#ff3b3b" + - type: GenericVisualizer + visuals: + enum.OpenableVisuals.Opened: + enum.OpenableVisuals.Layer: + True: {state: "spray_colors" , color: "#ff3b3b"} + False: {state: "spray_cap_colors" , color: "#ff3b3b"} + +#Green +- type: entity + parent: PaintBase + id: SprayPaintGreen + suffix: Green + components: + - type: Sprite + sprite: Objects/Fun/spraycans.rsi + layers: + - state: spray + map: ["Base"] + - state: spray_cap_colors + map: ["enum.OpenableVisuals.Layer"] + color: "#73f170" + - type: Paint + color: "#73f170" + - type: GenericVisualizer + visuals: + enum.OpenableVisuals.Opened: + enum.OpenableVisuals.Layer: + True: {state: "spray_colors" , color: "#73f170"} + False: {state: "spray_cap_colors" , color: "#73f170"} + +#Black +- type: entity + parent: PaintBase + id: SprayPaintBlack + suffix: Black + components: + - type: Sprite + sprite: Objects/Fun/spraycans.rsi + layers: + - state: spray + map: ["Base"] + - state: spray_cap_colors + map: ["enum.OpenableVisuals.Layer"] + color: "#3a3a3a" + - type: Paint + color: "#3a3a3a" + - type: GenericVisualizer + visuals: + enum.OpenableVisuals.Opened: + enum.OpenableVisuals.Layer: + True: {state: "spray_colors" , color: "#3a3a3a"} + False: {state: "spray_cap_colors" , color: "#3a3a3a"} + +#Orange +- type: entity + parent: PaintBase + id: SprayPaintOrange + suffix: Orange + components: + - type: Sprite + sprite: Objects/Fun/spraycans.rsi + layers: + - state: spray + map: ["Base"] + - state: spray_cap_colors + map: ["enum.OpenableVisuals.Layer"] + color: "#f6a44b" + - type: Paint + color: "#f6a44b" + - type: GenericVisualizer + visuals: + enum.OpenableVisuals.Opened: + enum.OpenableVisuals.Layer: + True: {state: "spray_colors" , color: "#f6a44b"} + False: {state: "spray_cap_colors" , color: "#f6a44b"} + +#Purple +- type: entity + parent: PaintBase + id: SprayPaintPurple + suffix: Purple + components: + - type: Sprite + sprite: Objects/Fun/spraycans.rsi + layers: + - state: spray + map: ["Base"] + - state: spray_cap_colors + map: ["enum.OpenableVisuals.Layer"] + color: "#c063f5" + - type: Paint + color: "#c063f5" + - type: GenericVisualizer + visuals: + enum.OpenableVisuals.Opened: + enum.OpenableVisuals.Layer: + True: {state: "spray_colors" , color: "#c063f5"} + False: {state: "spray_cap_colors" , color: "#c063f5"} + +#White +- type: entity + parent: PaintBase + id: SprayPaintWhite + suffix: White + components: + - type: Sprite + sprite: Objects/Fun/spraycans.rsi + layers: + - state: spray + map: ["Base"] + - state: spray_cap_colors + map: ["enum.OpenableVisuals.Layer"] + color: "#f2f2f2" + - type: Paint + color: "#f2f2f2" + - type: GenericVisualizer + visuals: + enum.OpenableVisuals.Opened: + enum.OpenableVisuals.Layer: + True: {state: "spray_colors" , color: "#f2f2f2"} + False: {state: "spray_cap_colors" , color: "#f2f2f2"} diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index 7d9de4ac3df..6697aa711e0 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml @@ -279,6 +279,15 @@ reagents: - ReagentId: JuiceThatMakesYouWeh Quantity: 30 + - type: SolutionContainerManager + solutions: + food: + maxVol: 20 + reagents: + - ReagentId: Fiber + Quantity: 10 + - ReagentId: JuiceThatMakesYouWeh + Quantity: 10 - type: entity parent: PlushieLizard @@ -322,6 +331,15 @@ reagents: - ReagentId: JuiceThatMakesYouWeh Quantity: 30 + - type: SolutionContainerManager + solutions: + food: + maxVol: 20 + reagents: + - ReagentId: Fiber + Quantity: 10 + - ReagentId: JuiceThatMakesYouWeh + Quantity: 10 - type: entity parent: BasePlushie @@ -1229,7 +1247,7 @@ - type: entity parent: BasePlushie id: ToyAmongPequeno - name: among pequeno + name: among pequeño description: sus! components: - type: Sprite @@ -1447,6 +1465,9 @@ Quantity: 100 - type: TrashOnSolutionEmpty solution: drink + - type: Tag + tags: + - DrinkSpaceGlue - type: entity parent: BaseItem diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml index 59d8ed19220..2e0eec7a658 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml @@ -15,6 +15,7 @@ - type: Tag tags: - Sheet + - NoPaint - type: Material - type: Damageable damageContainer: Inorganic diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml index 82b9f62837a..3a887848bf5 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml @@ -15,6 +15,7 @@ tags: - Sheet - Metal + - NoPaint - type: Damageable damageContainer: Inorganic damageModifierSet: Metallic diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml index dfb51336289..9dc87a9117d 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml @@ -12,6 +12,7 @@ - type: Tag tags: - Sheet + - NoPaint - type: Damageable damageContainer: Inorganic - type: Destructible @@ -110,6 +111,7 @@ - type: Tag tags: - Sheet + - NoPaint - type: entity parent: SheetPlasma @@ -132,6 +134,7 @@ tags: - Plastic - Sheet + - NoPaint - type: Material - type: PhysicalComposition materialComposition: diff --git a/Resources/Prototypes/Entities/Objects/Materials/materials.yml b/Resources/Prototypes/Entities/Objects/Materials/materials.yml index e71a163b5d0..96fddefa3ec 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/materials.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/materials.yml @@ -12,6 +12,7 @@ - type: Tag tags: - RawMaterial + - NoPaint - type: Damageable damageContainer: Inorganic - type: Destructible diff --git a/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml b/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml index 5de1f0b7f93..657201912e8 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml @@ -82,7 +82,7 @@ - type: AtmosExposed growthTickChance: 0.3 spreadChance: 0.4 - - type: SlowContacts + - type: SpeedModifierContacts walkSpeedModifier: 0.2 sprintSpeedModifier: 0.2 ignoreWhitelist: @@ -123,7 +123,7 @@ - type: Kudzu spriteVariants: 5 spreadChance: 0.01 - - type: SlowContacts + - type: SpeedModifierContacts walkSpeedModifier: 0.8 sprintSpeedModifier: 0.8 ignoreWhitelist: @@ -237,7 +237,7 @@ Heat: 3 growthTickChance: 0.3 - type: AtmosExposed - - type: SlowContacts + - type: SpeedModifierContacts walkSpeedModifier: 0.3 sprintSpeedModifier: 0.3 ignoreWhitelist: diff --git a/Resources/Prototypes/Entities/Objects/Misc/spider_web.yml b/Resources/Prototypes/Entities/Objects/Misc/spider_web.yml index af65ac95a8a..e1f4d086d45 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/spider_web.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/spider_web.yml @@ -72,7 +72,7 @@ Flammable: [Touch] Extinguish: [Touch] - type: SpiderWebObject - - type: SlowContacts + - type: SpeedModifierContacts walkSpeedModifier: 0.5 sprintSpeedModifier: 0.5 ignoreWhitelist: diff --git a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml index 45762474a98..99f9ccaa874 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml @@ -17,6 +17,9 @@ sound: /Audio/Weapons/star_hit.ogg - type: Stack count: 1 + - type: Tag + tags: + - NoPaint - type: Damageable damageContainer: Inorganic - type: Destructible @@ -1056,6 +1059,40 @@ - type: Stack stackType: FloorTileAstroGrass +- type: entity + id: FloorTileItemMowedAstroGrass + parent: FloorTileItemBase + name: mowed astro-grass + description: Fake grass that covers up wires and even comes with realistic NanoTrimmings! + components: + - type: Sprite + state: grass + - type: Item + heldPrefix: grass + - type: FloorTile + outputs: + - Plating + - FloorMowedAstroGrass + - type: Stack + stackType: FloorTileAstroGrass + +- type: entity + id: FloorTileItemJungleAstroGrass + parent: FloorTileItemBase + name: jungle astro-grass + description: Fake grass that covers up wires and even comes with realistic NanoTrimmings! + components: + - type: Sprite + state: grassjungle + - type: Item + heldPrefix: grass + - type: FloorTile + outputs: + - Plating + - FloorJungleAstroGrass + - type: Stack + stackType: FloorTileAstroGrass + - type: entity id: FloorTileItemAstroIce parent: FloorTileItemBase @@ -1073,6 +1110,23 @@ - type: Stack stackType: FloorTileAstroIce +- type: entity + id: FloorTileItemAstroSnow + parent: FloorTileItemBase + name: astro-snow + description: Fake snow that's as fluffy as the real thing, while being easily removable! + components: + - type: Sprite + state: snow + - type: Item + heldPrefix: snow + - type: FloorTile + outputs: + - Plating + - FloorAstroSnow + - type: Stack + stackType: FloorTileAstroSnow + - type: entity name: large wood floor parent: FloorTileItemBase diff --git a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml index 00224fd3182..727c75c8794 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml @@ -106,6 +106,8 @@ types: Blunt: 8 Piercing: 2 # I guess you can stab it into them? + soundHit: + collection: MetalThud - type: Item sprite: Objects/Tools/Hydroponics/spade.rsi - type: Shovel diff --git a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml index 5678de6bafc..56786057d57 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml @@ -62,6 +62,7 @@ solution: soap - type: DeleteOnSolutionEmpty solution: soap + - type: PaintRemover - type: FlavorProfile flavors: - clean diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml index 0e132541e1e..5a2587ff710 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml @@ -48,6 +48,8 @@ types: Blunt: 25 #thwack Structural: 20 + soundHit: + collection: MetalThud - type: Puller needsHands: false - type: InputMover diff --git a/Resources/Prototypes/Entities/Objects/Tools/cowtools.yml b/Resources/Prototypes/Entities/Objects/Tools/cowtools.yml index ddd3592d49f..977a8a931b5 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/cowtools.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/cowtools.yml @@ -14,7 +14,7 @@ wideAnimationRotation: -90 damage: types: - Pierce: 0 + Piercing: 0 attackRate: 2 - type: Tool qualities: diff --git a/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml b/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml index cbc42b7587f..d22e9190921 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml @@ -111,7 +111,8 @@ damage: types: Blunt: 10 - bluntStaminaDamageFactor: 2.0 # DeltaV - seclite is now a viable nonlethal takedown tool against unarmoured targets. + soundHit: + collection: MetalThud - type: Item sprite: Objects/Tools/seclite.rsi - type: PointLight diff --git a/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml b/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml index bb8545d91ff..8e2b7597970 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml @@ -47,6 +47,8 @@ damage: types: Blunt: 10 + soundHit: + collection: MetalThud - type: entity name: syndicate jaws of life diff --git a/Resources/Prototypes/Entities/Objects/Tools/tools.yml b/Resources/Prototypes/Entities/Objects/Tools/tools.yml index c0a6a6a980d..f1bf2ff98e7 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/tools.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/tools.yml @@ -114,6 +114,8 @@ damage: types: Blunt: 4.5 + soundHit: + collection: MetalThud - type: Tool qualities: - Anchoring @@ -151,6 +153,8 @@ damage: types: Blunt: 8 + soundHit: + collection: MetalThud - type: Tool qualities: - Prying @@ -504,6 +508,8 @@ damage: types: Blunt: 14 + soundHit: + collection: MetalThud - type: Item size: Normal sprite: Objects/Tools/shovel.rsi @@ -544,6 +550,8 @@ damage: types: Blunt: 7 + soundHit: + collection: MetalThud - type: Tool qualities: - Rolling diff --git a/Resources/Prototypes/Entities/Objects/Tools/welders.yml b/Resources/Prototypes/Entities/Objects/Tools/welders.yml index 42b16ba0538..9bf3f2e2cb9 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/welders.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/welders.yml @@ -47,6 +47,8 @@ params: variation: 0.250 volume: -12 + deactivatedSoundOnHitNoDamage: + collection: MetalThud activatedDamage: types: Heat: 8 @@ -70,6 +72,8 @@ damage: types: Blunt: 5 #i mean... i GUESS you could use it like that + soundHit: + collection: MetalThud - type: RefillableSolution solution: Welder - type: SolutionContainerManager diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml index 00d12606841..1487fbe1981 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -578,6 +578,7 @@ tags: - HighRiskItem - Sidearm + - WeaponAntiqueLaser - type: StaticPrice price: 750 - type: StealTarget diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml index b7fae7acede..8ba643a1155 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml @@ -13,6 +13,8 @@ types: Blunt: 10 Structural: 5 + soundHit: + collection: MetalThud - type: Wieldable - type: IncreaseDamageOnWield damage: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml index db24d3e2cd0..ecb6479de70 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml @@ -67,6 +67,8 @@ Blunt: 10 Slash: 10 Structural: 5 + soundHit: + collection: MetalThud - type: Wieldable - type: IncreaseDamageOnWield damage: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml index bc376df5eab..ccbbcc2de84 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml @@ -78,6 +78,9 @@ malus: 0 - type: Reflect enabled: false + - type: Tag + tags: + - NoPaint - type: IgnitionSource temperature: 700 @@ -156,6 +159,7 @@ - type: Tag tags: - Write + - NoPaint - type: DisarmMalus malus: 0 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml index b46ee096336..93765ec40c3 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml @@ -21,6 +21,8 @@ Blunt: 5 Slash: 10 Structural: 10 + soundHit: + collection: MetalThud - type: Wieldable - type: IncreaseDamageOnWield damage: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml index eee65a1ca78..ccf45bf59aa 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml @@ -49,6 +49,8 @@ types: Blunt: 10 Slash: 5 + soundHit: + collection: MetalThud - type: Wieldable - type: IncreaseDamageOnWield damage: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml index e566f90968e..0c75015d9aa 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml @@ -13,6 +13,8 @@ types: Blunt: 10 Structural: 10 + soundHit: + collection: MetalThud - type: Wieldable - type: IncreaseDamageOnWield damage: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml index b9d6de85944..426be1386a9 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml @@ -175,7 +175,7 @@ attackRate: 10 damage: types: - Structure: 150 + Structural: 150 Slash: 20 #Horror Blunt: 20 Heat: 20 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml index 274257da943..1cad73e30ea 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml @@ -358,11 +358,11 @@ duration: 30 spreadAmount: 50 - type: SoundOnTrigger - sound: /Audio/Effects/smoke.ogg + sound: /Audio/Items/smoke_grenade_smoke.ogg - type: DeleteOnTrigger - type: TimerTriggerVisuals primingSound: - path: /Audio/Effects/Smoke-grenade.ogg + path: /Audio/Items/smoke_grenade_prime.ogg - type: entity parent: SmokeGrenade diff --git a/Resources/Prototypes/Entities/Objects/Weapons/security.yml b/Resources/Prototypes/Entities/Objects/Weapons/security.yml index 15741609196..9ac737e9cbb 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/security.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/security.yml @@ -96,6 +96,8 @@ damage: types: Blunt: 20 + soundHit: + collection: MetalThud bluntStaminaDamageFactor: 1.5 - type: Item size: Normal diff --git a/Resources/Prototypes/Entities/Stations/base.yml b/Resources/Prototypes/Entities/Stations/base.yml index ae8d1313d0e..2502243e0ce 100644 --- a/Resources/Prototypes/Entities/Stations/base.yml +++ b/Resources/Prototypes/Entities/Stations/base.yml @@ -49,6 +49,7 @@ trade: addComponents: - type: ProtectedGrid + # If you comment out the tradestation, make sure to also set cargo.tradestation_spawns_in_ftl_map to TRUE - type: TradeStation paths: - /Maps/Shuttles/trading_outpost.yml diff --git a/Resources/Prototypes/Entities/Structures/Decoration/bonfire.yml b/Resources/Prototypes/Entities/Structures/Decoration/bonfire.yml index 7777153bbac..f82fe8b51bb 100644 --- a/Resources/Prototypes/Entities/Structures/Decoration/bonfire.yml +++ b/Resources/Prototypes/Entities/Structures/Decoration/bonfire.yml @@ -31,6 +31,9 @@ sound: path: /Audio/Ambience/Objects/fireplace.ogg - type: AlwaysHot + - type: Tag + tags: + - NoPaint - type: entity id: LegionnaireBonfire diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml index 034d5fdcfa2..4bc43b5559e 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml @@ -144,6 +144,7 @@ - Airlock # This tag is used to nagivate the Airlock construction graph. It's needed because the construction graph is shared between Airlock, AirlockGlass, and HighSecDoor - type: PryUnpowered + - type: BlockWeather placement: mode: SnapgridCenter diff --git a/Resources/Prototypes/Entities/Structures/Doors/MaterialDoors/material_doors.yml b/Resources/Prototypes/Entities/Structures/Doors/MaterialDoors/material_doors.yml index 5b691b6c298..644976eb9c4 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/MaterialDoors/material_doors.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/MaterialDoors/material_doors.yml @@ -53,6 +53,7 @@ - !type:DoActsBehavior acts: ["Destruction"] - type: Occluder + - type: BlockWeather - type: entity parent: BaseMaterialDoor diff --git a/Resources/Prototypes/Entities/Structures/Doors/SecretDoor/secret_door.yml b/Resources/Prototypes/Entities/Structures/Doors/SecretDoor/secret_door.yml index 154467213a7..2c54d3cd418 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/SecretDoor/secret_door.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/SecretDoor/secret_door.yml @@ -64,6 +64,7 @@ - type: ContainerContainer containers: battery-container: !type:Container + - type: BlockWeather - type: entity id: BaseSecretDoorAssembly diff --git a/Resources/Prototypes/Entities/Structures/Doors/Shutter/shutters.yml b/Resources/Prototypes/Entities/Structures/Doors/Shutter/shutters.yml index aa288076999..7d3af93a64d 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Shutter/shutters.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Shutter/shutters.yml @@ -94,6 +94,7 @@ messagePerceivedByOthers: comp-window-knock interactSuccessSound: path: /Audio/Effects/glass_knock.ogg + - type: BlockWeather - type: entity id: ShuttersNormal diff --git a/Resources/Prototypes/Entities/Structures/Furniture/bookshelf.yml b/Resources/Prototypes/Entities/Structures/Furniture/bookshelf.yml index 86f6719f77e..792f0766799 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/bookshelf.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/bookshelf.yml @@ -68,3 +68,4 @@ - type: Construction graph: Bookshelf node: bookshelf + - type: BlockWeather diff --git a/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml b/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml index a8534997f03..518ff2f066e 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml @@ -339,6 +339,8 @@ damage: types: Blunt: 8 + soundHit: + collection: MetalThud - type: Construction graph: Seat node: chairFolding diff --git a/Resources/Prototypes/Entities/Structures/Holographic/projections.yml b/Resources/Prototypes/Entities/Structures/Holographic/projections.yml index d2a5853fcb0..b8717cf6cc9 100644 --- a/Resources/Prototypes/Entities/Structures/Holographic/projections.yml +++ b/Resources/Prototypes/Entities/Structures/Holographic/projections.yml @@ -25,6 +25,9 @@ behaviors: - !type:DoActsBehavior acts: [ "Destruction" ] + - type: Tag + tags: + - NoPaint - type: entity id: HoloFan diff --git a/Resources/Prototypes/Entities/Structures/Machines/bombs.yml b/Resources/Prototypes/Entities/Structures/Machines/bombs.yml index 580253f1189..89cadab6b1f 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/bombs.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/bombs.yml @@ -127,6 +127,18 @@ intensitySlope: 3 maxIntensity: 400 +- type: entity + parent: SyndicateBomb + id: SyndicateBombFake + suffix: fake + components: + - type: Explosive + explosionType: Default + totalIntensity: 5.0 + intensitySlope: 5 + maxIntensity: 4 + canCreateVacuum: false + - type: entity parent: SyndicateBomb id: DebugHardBomb diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 5f3c7191625..011f2a3b649 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -335,7 +335,10 @@ - JawsOfLife - CoreSilver # Nyanotrasen - Silver Golem core - FauxTileAstroGrass + - FauxTileMowedAstroGrass + - FauxTileJungleAstroGrass - FauxTileAstroIce + - FauxTileAstroSnow - OreBagOfHolding - DeviceQuantumSpinInverter - type: EmagLatheRecipes diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml index c2f8fa339da..06f2fb2d181 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml @@ -60,6 +60,7 @@ - type: Sprite drawdepth: FloorObjects sprite: Structures/Piping/Atmospherics/vent.rsi + noRot: true layers: - sprite: Structures/Piping/Atmospherics/pipe.rsi state: pipeHalf @@ -101,6 +102,7 @@ - type: Sprite drawdepth: FloorObjects sprite: Structures/Piping/Atmospherics/vent.rsi + noRot: true layers: - sprite: Structures/Piping/Atmospherics/pipe.rsi state: pipeHalf @@ -151,6 +153,7 @@ - type: Sprite drawdepth: FloorObjects sprite: Structures/Piping/Atmospherics/scrubber.rsi + noRot: true layers: - sprite: Structures/Piping/Atmospherics/pipe.rsi state: pipeHalf diff --git a/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml b/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml index c5f04d80a14..1193182d09f 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml @@ -16,6 +16,8 @@ map: [ "enum.DisposalUnitVisualLayers.Unanchored" ] - state: disposal map: [ "enum.DisposalUnitVisualLayers.Base" ] + - state: disposal-charging + map: [ "enum.DisposalUnitVisualLayers.BaseCharging" ] - state: disposal-flush map: [ "enum.DisposalUnitVisualLayers.BaseFlush" ] - state: dispover-charge diff --git a/Resources/Prototypes/Entities/Structures/Specific/church-bell.yml b/Resources/Prototypes/Entities/Structures/Specific/church-bell.yml new file mode 100644 index 00000000000..837a7bc0b3d --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Specific/church-bell.yml @@ -0,0 +1,41 @@ +- type: entity + id: ChurchBell + name: church bell + description: You feel your soul grow ever closer to the realms beyond for every chime this bell tolls... + placement: + mode: SnapgridCenter + components: + - type: Transform + anchored: true + - type: Sprite + noRot: true + sprite: Structures/Specific/church-bell.rsi + layers: + - state: church-bell + - type: InteractionPopup + interactDelay: 1 + successChance: 1 + interactSuccessSound: + collection: ChurchBell + - type: Clickable + - type: Rotatable + - type: CollisionWake + enabled: false + - type: Physics + canCollide: false + bodyType: Static + - type: Fixtures + - type: InteractionOutline + - type: Damageable + damageContainer: Inorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 150 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - !type:PlaySoundBehavior + sound: + collection: MetalBreak diff --git a/Resources/Prototypes/Entities/Structures/Storage/Canisters/gas_canisters.yml b/Resources/Prototypes/Entities/Structures/Storage/Canisters/gas_canisters.yml index 897b7be6ffb..cd44f5f585a 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Canisters/gas_canisters.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Canisters/gas_canisters.yml @@ -74,7 +74,7 @@ bounds: "-0.25,-0.25,0.25,0.25" density: 190 mask: - - MachineMask + - SmallMobMask layer: - MachineLayer - type: AtmosDevice diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/fireaxe_cabinet.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/fireaxe_cabinet.yml index 070c6e526d4..acd865aa625 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/fireaxe_cabinet.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/fireaxe_cabinet.yml @@ -3,9 +3,27 @@ name: fire axe cabinet description: There is a small label that reads "For Emergency use only" along with details for safe use of the axe. As if. components: - - type: Damageable # adding destructible causes the entity inside to be deleted when the cabinet is destroyed :( + - type: Damageable damageContainer: Inorganic damageModifierSet: Glass + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 300 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 200 #20ish crowbar hits + behaviors: + - !type:EmptyAllContainersBehaviour + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:PlaySoundBehavior + sound: + collection: MetalGlassBreak - type: MeleeSound soundGroups: Brute: diff --git a/Resources/Prototypes/Entities/Structures/Walls/asteroid.yml b/Resources/Prototypes/Entities/Structures/Walls/asteroid.yml index d1a6587d199..a8cb0b1cb8a 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/asteroid.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/asteroid.yml @@ -214,7 +214,7 @@ - type: entity id: AsteroidRockTinCrab parent: AsteroidRockTin - suffix: Iron + suffix: Iron Crab components: - type: OreVein oreChance: 1.0 @@ -299,7 +299,7 @@ id: AsteroidRockMining parent: AsteroidRock name: asteroid rock - suffix: higher ore yield + suffix: higher ore yield .33 description: An asteroid. components: - type: OreVein diff --git a/Resources/Prototypes/Entities/Structures/Walls/walls.yml b/Resources/Prototypes/Entities/Structures/Walls/walls.yml index a6b6b02361e..53d9a5224ef 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/walls.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/walls.yml @@ -49,6 +49,7 @@ price: 75 - type: RadiationBlocker resistance: 2 + - type: BlockWeather - type: entity parent: BaseWall diff --git a/Resources/Prototypes/Entities/Structures/Windows/window.yml b/Resources/Prototypes/Entities/Structures/Windows/window.yml index 2a36a0cb8bf..ee2ad6bc28f 100644 --- a/Resources/Prototypes/Entities/Structures/Windows/window.yml +++ b/Resources/Prototypes/Entities/Structures/Windows/window.yml @@ -88,6 +88,7 @@ sprite: Structures/Windows/cracks.rsi - type: StaticPrice price: 100 + - type: BlockWeather - type: entity id: WindowDirectional diff --git a/Resources/Prototypes/Entities/Structures/hydro_tray.yml b/Resources/Prototypes/Entities/Structures/hydro_tray.yml index 1ab1fd5b2fd..43b8bd197a5 100644 --- a/Resources/Prototypes/Entities/Structures/hydro_tray.yml +++ b/Resources/Prototypes/Entities/Structures/hydro_tray.yml @@ -92,6 +92,9 @@ - type: GuideHelp guides: - Botany + - type: Tag + tags: + - NoPaint - type: entity parent: hydroponicsTray diff --git a/Resources/Prototypes/Entities/Tiles/water.yml b/Resources/Prototypes/Entities/Tiles/water.yml index e2c0421aef3..2fd1c8547de 100644 --- a/Resources/Prototypes/Entities/Tiles/water.yml +++ b/Resources/Prototypes/Entities/Tiles/water.yml @@ -32,7 +32,7 @@ Quantity: 100 - type: DrainableSolution solution: pool - - type: SlowContacts + - type: SpeedModifierContacts walkSpeedModifier: 0.5 sprintSpeedModifier: 0.5 - type: Physics diff --git a/Resources/Prototypes/GameRules/events.yml b/Resources/Prototypes/GameRules/events.yml index db99266cbaa..6812ca14f70 100644 --- a/Resources/Prototypes/GameRules/events.yml +++ b/Resources/Prototypes/GameRules/events.yml @@ -463,7 +463,6 @@ components: - type: StationEvent weight: 10 - earliestStart: 20 reoccurrenceDelay: 20 duration: 1 - type: IonStormRule diff --git a/Resources/Prototypes/NPCs/Combat/melee.yml b/Resources/Prototypes/NPCs/Combat/melee.yml index 282e794ee77..2facfaa5427 100644 --- a/Resources/Prototypes/NPCs/Combat/melee.yml +++ b/Resources/Prototypes/NPCs/Combat/melee.yml @@ -11,7 +11,7 @@ - type: MeleeWeapon damage: types: - Brute: 0 + Blunt: 0 invert: true tasks: - !type:HTNCompoundTask @@ -34,7 +34,7 @@ - type: MeleeWeapon damage: types: - Brute: 0 + Blunt: 0 invert: true tasks: - !type:HTNCompoundTask diff --git a/Resources/Prototypes/NPCs/utility_queries.yml b/Resources/Prototypes/NPCs/utility_queries.yml index d62e1a7e8cf..3d5385ecbcd 100644 --- a/Resources/Prototypes/NPCs/utility_queries.yml +++ b/Resources/Prototypes/NPCs/utility_queries.yml @@ -129,7 +129,7 @@ - type: MeleeWeapon damage: types: - Brute: 0 + Blunt: 0 - type: Item considerations: - !type:TargetMeleeCon diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Consumable/Drinks/drinks.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Consumable/Drinks/drinks.yml index 45706fe447f..567c5ff52c0 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Consumable/Drinks/drinks.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Consumable/Drinks/drinks.yml @@ -1,24 +1,25 @@ - type: entity - parent: DrinkGlassBase + parent: DrinkGlass id: DrinkSakeGlass - name: sake glass + suffix: sake description: Wine made from rice, it's sake! components: - type: SolutionContainerManager solutions: drink: - maxVol: 50 + maxVol: 30 reagents: - ReagentId: Sake - Quantity: 50 + Quantity: 30 - type: Drink - - type: Sprite + - type: Icon sprite: Nyanotrasen/Objects/Consumable/Drinks/sakeglass.rsi + state: icon - type: entity - parent: DrinkGlassBase + parent: DrinkGlass id: DrinkOrangeCreamiceGlass - name: orange creamcicle glass + suffix: orange creamcicle description: Orangy, creamy goodness. components: - type: SolutionContainerManager @@ -28,13 +29,14 @@ reagents: - ReagentId: OrangeCreamice Quantity: 30 - - type: Sprite + - type: Icon sprite: Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi + state: icon - type: entity - parent: DrinkGlassBase + parent: DrinkGlass id: DrinkSilverjackGlass - name: silverjack glass + suffix: silverjack description: Reminds you of family. components: - type: SolutionContainerManager @@ -44,13 +46,14 @@ reagents: - ReagentId: Silverjack Quantity: 30 - - type: Sprite + - type: Icon sprite: Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi + state: icon - type: entity - parent: DrinkGlassBase + parent: DrinkGlass id: DrinkBrainbombGlass - name: brainbomb glass + suffix: brainbomb description: Toxic to about anything alive, especially your liver. components: - type: SolutionContainerManager @@ -60,13 +63,14 @@ reagents: - ReagentId: Brainbomb Quantity: 30 - - type: Sprite + - type: Icon sprite: Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi + state: icon - type: entity - parent: DrinkGlassBase + parent: DrinkGlass id: DrinkClownBloodGlass - name: clown blood glass + suffix: clown blood description: Security Officers favorite drink after a long day. components: - type: SolutionContainerManager @@ -76,13 +80,14 @@ reagents: - ReagentId: ClownBlood Quantity: 30 - - type: Sprite + - type: Icon sprite: Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi + state: icon - type: entity - parent: DrinkGlassBase + parent: DrinkGlass id: DrinkCircusJuiceGlass - name: circus juice glass + suffix: circus juice description: Honkmother would be proud. components: - type: SolutionContainerManager @@ -92,13 +97,14 @@ reagents: - ReagentId: CircusJuice Quantity: 30 - - type: Sprite + - type: Icon sprite: Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi + state: icon - type: entity - parent: DrinkGlassBase + parent: DrinkGlass id: DrinkSapoPicanteGlass - name: sapo picante glass + suffix: sapo picante description: Tastes nothing like a toad. components: - type: SolutionContainerManager @@ -108,13 +114,14 @@ reagents: - ReagentId: SapoPicante Quantity: 30 - - type: Sprite + - type: Icon sprite: Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi + state: icon - type: entity - parent: DrinkGlassBase + parent: DrinkGlass id: DrinkGraveyardGlass - name: graveyard glass + suffix: graveyard description: For those shifts that never seem to end. components: - type: SolutionContainerManager @@ -124,13 +131,14 @@ reagents: - ReagentId: Graveyard Quantity: 30 - - type: Sprite + - type: Icon sprite: Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi + state: icon - type: entity - parent: DrinkGlassBase + parent: DrinkGlass id: DrinkAtomicPunchGlass - name: atomic punch glass + suffix: atomic punch description: Will NOT make you immune to bullets; Isotopes included! components: - type: SolutionContainerManager @@ -140,13 +148,14 @@ reagents: - ReagentId: AtomicPunch Quantity: 30 - - type: Sprite + - type: Icon sprite: Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi - + state: icon + - type: entity - parent: DrinkGlassBase + parent: DrinkGlass id: DrinkPinkDrinkGlass - name: pink drink glass + suffix: pink drink description: Entire civilizations have crumbled trying to decide if this drink really tastes like pink... components: - type: SolutionContainerManager @@ -156,13 +165,14 @@ reagents: - ReagentId: PinkDrink Quantity: 30 - - type: Sprite + - type: Icon sprite: Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi + state: icon - type: entity - parent: DrinkGlassBase + parent: DrinkGlass id: DrinkBubbleTeaGlass - name: bubble tea glass + suffix: bubble tea description: Big straw not included. components: - type: SolutionContainerManager @@ -172,5 +182,6 @@ reagents: - ReagentId: BubbleTea Quantity: 30 - - type: Sprite - sprite: Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi \ No newline at end of file + - type: Icon + sprite: Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi + state: icon diff --git a/Resources/Prototypes/Nyanotrasen/Reagents/Consumable/Drink/alcohol.yml b/Resources/Prototypes/Nyanotrasen/Reagents/Consumable/Drink/alcohol.yml index 3d79c0bc079..972fc08239e 100644 --- a/Resources/Prototypes/Nyanotrasen/Reagents/Consumable/Drink/alcohol.yml +++ b/Resources/Prototypes/Nyanotrasen/Reagents/Consumable/Drink/alcohol.yml @@ -8,7 +8,10 @@ color: "#DDDDDD" metamorphicSprite: sprite: Nyanotrasen/Objects/Consumable/Drinks/sakeglass.rsi - state: icon + state: icon_empty + metamorphicMaxFillLevels: 3 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false metabolisms: Drink: effects: @@ -28,7 +31,10 @@ color: "#DDDDDD" metamorphicSprite: sprite: Nyanotrasen/Objects/Consumable/Drinks/sojuglass.rsi - state: icon + state: icon_empty + metamorphicMaxFillLevels: 4 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false metabolisms: Drink: effects: @@ -48,7 +54,10 @@ color: "#efaa16" metamorphicSprite: sprite: Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi - state: icon + state: icon_empty + metamorphicMaxFillLevels: 4 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false metabolisms: Drink: effects: @@ -68,7 +77,10 @@ color: "#978647" metamorphicSprite: sprite: Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi - state: icon + state: icon_empty + metamorphicMaxFillLevels: 4 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false metabolisms: Drink: effects: @@ -88,7 +100,10 @@ color: "#6f7a2c" metamorphicSprite: sprite: Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi - state: icon + state: icon_empty + metamorphicMaxFillLevels: 4 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false metabolisms: Drink: effects: @@ -121,7 +136,10 @@ color: "#94001c" metamorphicSprite: sprite: Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi - state: icon + state: icon_empty + metamorphicMaxFillLevels: 5 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false metabolisms: Drink: effects: @@ -141,7 +159,10 @@ color: "#c47872" metamorphicSprite: sprite: Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi - state: icon + state: icon_empty + metamorphicMaxFillLevels: 5 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false metabolisms: Drink: effects: @@ -164,7 +185,10 @@ color: "#c0501a" metamorphicSprite: sprite: Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi - state: icon + state: icon_empty + metamorphicMaxFillLevels: 5 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false metabolisms: Drink: effects: @@ -186,7 +210,10 @@ color: "#4f1b1b" metamorphicSprite: sprite: Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi - state: icon + state: icon_empty + metamorphicMaxFillLevels: 5 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false metabolisms: Drink: effects: diff --git a/Resources/Prototypes/Nyanotrasen/Reagents/Consumable/Drink/drinks.yml b/Resources/Prototypes/Nyanotrasen/Reagents/Consumable/Drink/drinks.yml index eb306d8c3c3..24d83be9431 100644 --- a/Resources/Prototypes/Nyanotrasen/Reagents/Consumable/Drink/drinks.yml +++ b/Resources/Prototypes/Nyanotrasen/Reagents/Consumable/Drink/drinks.yml @@ -8,7 +8,10 @@ color: "#d04949" metamorphicSprite: sprite: Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi - state: icon + state: icon_empty + metamorphicMaxFillLevels: 4 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false metabolisms: Drink: effects: @@ -28,7 +31,11 @@ color: "#d04949" metamorphicSprite: sprite: Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi - state: icon + state: icon_empty + metamorphicMaxFillLevels: 4 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false + metabolisms: Drink: effects: @@ -45,7 +52,10 @@ color: "#d2b18c" metamorphicSprite: sprite: Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi - state: icon + state: icon_empty + metamorphicMaxFillLevels: 5 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false metabolisms: Drink: effects: diff --git a/Resources/Prototypes/Procedural/Themes/haunted.yml b/Resources/Prototypes/Procedural/Themes/haunted.yml new file mode 100644 index 00000000000..9a69b4daa35 --- /dev/null +++ b/Resources/Prototypes/Procedural/Themes/haunted.yml @@ -0,0 +1,308 @@ +# Rooms +# Large +# - 17x5 +- type: dungeonRoom + id: Haunted17x5a + size: 17,5 + atlas: /Maps/Dungeon/haunted.yml + offset: 0,0 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted17x5b + size: 17,5 + atlas: /Maps/Dungeon/haunted.yml + offset: 18,0 + tags: + - Haunted + +# - 7x7 +- type: dungeonRoom + id: Haunted7x7a + size: 7,7 + atlas: /Maps/Dungeon/haunted.yml + offset: 0,42 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted7x7b + size: 7,7 + atlas: /Maps/Dungeon/haunted.yml + offset: 8,42 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted7x7c + size: 7,7 + atlas: /Maps/Dungeon/haunted.yml + offset: 16,42 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted7x7d + size: 7,7 + atlas: /Maps/Dungeon/haunted.yml + offset: 24,42 + tags: + - Haunted + +# Medium +# - 11x5 +- type: dungeonRoom + id: Haunted11x5a + size: 11,5 + atlas: /Maps/Dungeon/haunted.yml + offset: 0,6 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted11x5b + size: 11,5 + atlas: /Maps/Dungeon/haunted.yml + offset: 12,6 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted11x5c + size: 11,5 + atlas: /Maps/Dungeon/haunted.yml + offset: 24,6 + tags: + - Haunted + +# - 7x5 +- type: dungeonRoom + id: Haunted7x5a + size: 7,5 + atlas: /Maps/Dungeon/haunted.yml + offset: 0,12 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted7x5b + size: 7,5 + atlas: /Maps/Dungeon/haunted.yml + offset: 8,12 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted7x5c + size: 7,5 + atlas: /Maps/Dungeon/haunted.yml + offset: 16,12 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted7x5d + size: 7,5 + atlas: /Maps/Dungeon/haunted.yml + offset: 24,12 + tags: + - Haunted + +# - 13x3 +- type: dungeonRoom + id: Haunted13x3a + size: 13,3 + atlas: /Maps/Dungeon/haunted.yml + offset: 0,30 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted13x3b + size: 13,3 + atlas: /Maps/Dungeon/haunted.yml + offset: 14,30 + tags: + - Haunted + +# - 11x3 +- type: dungeonRoom + id: Haunted11x3a + size: 11,3 + atlas: /Maps/Dungeon/haunted.yml + offset: 0,34 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted11x3b + size: 11,3 + atlas: /Maps/Dungeon/haunted.yml + offset: 12,34 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted11x3c + size: 11,3 + atlas: /Maps/Dungeon/haunted.yml + offset: 24,34 + tags: + - Haunted + +# - 7x3 +- type: dungeonRoom + id: Haunted7x3a + size: 7,3 + atlas: /Maps/Dungeon/haunted.yml + offset: 0,38 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted7x3b + size: 7,3 + atlas: /Maps/Dungeon/haunted.yml + offset: 8,38 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted7x3c + size: 7,3 + atlas: /Maps/Dungeon/haunted.yml + offset: 16,38 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted7x3d + size: 7,3 + atlas: /Maps/Dungeon/haunted.yml + offset: 24,38 + tags: + - Haunted + +# Small +# - 5x5 +- type: dungeonRoom + id: Haunted5x5a + size: 5,5 + atlas: /Maps/Dungeon/haunted.yml + offset: 0,18 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted5x5b + size: 5,5 + atlas: /Maps/Dungeon/haunted.yml + offset: 6,18 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted5x5c + size: 5,5 + atlas: /Maps/Dungeon/haunted.yml + offset: 12,18 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted5x5d + size: 5,5 + atlas: /Maps/Dungeon/haunted.yml + offset: 18,18 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted5x5e + size: 5,5 + atlas: /Maps/Dungeon/haunted.yml + offset: 24,18 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted5x5f + size: 5,5 + atlas: /Maps/Dungeon/haunted.yml + offset: 30,18 + tags: + - Haunted + +# - 3x5 +- type: dungeonRoom + id: Haunted3x5a + size: 3,5 + atlas: /Maps/Dungeon/haunted.yml + offset: 0,24 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted3x5b + size: 3,5 + atlas: /Maps/Dungeon/haunted.yml + offset: 4,24 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted3x5c + size: 3,5 + atlas: /Maps/Dungeon/haunted.yml + offset: 8,24 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted3x5d + size: 3,5 + atlas: /Maps/Dungeon/haunted.yml + offset: 12,24 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted3x5e + size: 3,5 + atlas: /Maps/Dungeon/haunted.yml + offset: 16,24 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted3x5f + size: 3,5 + atlas: /Maps/Dungeon/haunted.yml + offset: 20,24 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted3x5g + size: 3,5 + atlas: /Maps/Dungeon/haunted.yml + offset: 24,24 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted3x5h + size: 3,5 + atlas: /Maps/Dungeon/haunted.yml + offset: 28,24 + tags: + - Haunted + +- type: dungeonRoom + id: Haunted3x5i + size: 3,5 + atlas: /Maps/Dungeon/haunted.yml + offset: 32,24 + tags: + - Haunted diff --git a/Resources/Prototypes/Procedural/dungeon_configs.yml b/Resources/Prototypes/Procedural/dungeon_configs.yml index 49837507ae5..9e8d3a44095 100644 --- a/Resources/Prototypes/Procedural/dungeon_configs.yml +++ b/Resources/Prototypes/Procedural/dungeon_configs.yml @@ -175,15 +175,15 @@ - SpaceShip - Tall postGeneration: - + - !type:CorridorPostGen tile: FloorCaveDrought width: 3 - + - !type:DungeonEntrancePostGen count: 5 tile: FloorCaveDrought - entities: + entities: - RandomWoodenWall - !type:RoomEntrancePostGen @@ -195,12 +195,12 @@ tile: FloorCaveDrought entities: - RandomWoodenWall - + - !type:ExternalWindowPostGen tile: FloorCaveDrought entities: - RandomWoodenWall - + - !type:WallMountPostGen tile: FloorCaveDrought spawns: @@ -217,7 +217,7 @@ - id: WallMining prob: 0.8 orGroup: content - + - !type:BoundaryWallPostGen tile: FloorCaveDrought wall: WallRock @@ -225,13 +225,13 @@ - !type:AutoCablingPostGen entity: Catwalk - + - !type:JunctionPostGen tile: FloorCaveDrought width: 3 entities: - RandomWoodenSupport - + - !type:CornerClutterPostGen contents: - id: RandomStalagmiteOrCrystal @@ -321,4 +321,41 @@ SouthWest: BrickTileWhiteInnerSw SouthEast: BrickTileWhiteInnerSe NorthWest: BrickTileWhiteInnerNw - NorthEast: BrickTileWhiteInnerNe \ No newline at end of file + NorthEast: BrickTileWhiteInnerNe + +# todo: Add a biome dungeon generator +# Add corridor first gens that place rooms on top +# Add a worm corridor gen (place subsequent corridors somewhere randomly along the path) +# Place room entrances on ends of corridors touching a tile +# Remove all room tiles from corridors +# Fix paths up and try to reconnect all corridor tiles +# Add a postgen step to spread rooms out, though it shouldn't spread into corridor exteriors + +- type: dungeonConfig + id: Haunted + generator: !type:PrefabDunGen + tile: FloorCaveDrought + roomWhitelist: + - Mineshaft + presets: + - Bucket + - Wow + - SpaceShip + - Tall + postGeneration: + - !type:WormCorridorPostGen + width: 3 + tile: FloorCaveDrought + + - !type:CorridorClutterPostGen + contents: + - id: FloraStalagmite1 + - id: FloraStalagmite2 + - id: FloraStalagmite3 + - id: FloraStalagmite4 + - id: FloraStalagmite5 + - id: FloraStalagmite6 + + - !type:BoundaryWallPostGen + tile: FloorCaveDrought + wall: WallRock diff --git a/Resources/Prototypes/Procedural/salvage_mods.yml b/Resources/Prototypes/Procedural/salvage_mods.yml index 4da7a3bf0f5..6c2bf678621 100644 --- a/Resources/Prototypes/Procedural/salvage_mods.yml +++ b/Resources/Prototypes/Procedural/salvage_mods.yml @@ -241,4 +241,10 @@ id: SnowyLabs proto: SnowyLabs biomes: - - Snow \ No newline at end of file + - Snow + +- type: salvageDungeonMod + id: Haunted + proto: Haunted + biomes: + - Caves diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml b/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml index bcbd877ea87..63ae5b25d5b 100644 --- a/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml +++ b/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml @@ -162,6 +162,10 @@ Poison: effects: - !type:HealthChange + conditions: + - !type:OrganType + type: Slime + shouldHave: false damage: types: Poison: 1 diff --git a/Resources/Prototypes/Reagents/botany.yml b/Resources/Prototypes/Reagents/botany.yml index f6c55cf3946..a03c3826a4d 100644 --- a/Resources/Prototypes/Reagents/botany.yml +++ b/Resources/Prototypes/Reagents/botany.yml @@ -143,7 +143,7 @@ damage: types: Asphyxiation: 1 - Burn: 2 + Heat: 2 Poison: 1 Medicine: effects: diff --git a/Resources/Prototypes/Reagents/fun.yml b/Resources/Prototypes/Reagents/fun.yml index 9597627e876..befa8d82968 100644 --- a/Resources/Prototypes/Reagents/fun.yml +++ b/Resources/Prototypes/Reagents/fun.yml @@ -249,7 +249,7 @@ damage: types: Cold: 0.01 # slightly nips directly, other cold damage comes from the temp change - Burn: -3 # ghetto burn chem. i don't think anyone would use this intentionally but it's funny + Heat: -3 # ghetto burn chem. i don't think anyone would use this intentionally but it's funny - !type:PopupMessage conditions: - !type:ReagentThreshold diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/food/egg.yml b/Resources/Prototypes/Recipes/Construction/Graphs/food/egg.yml index f5eea53bcc2..3c3bca2585a 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/food/egg.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/food/egg.yml @@ -15,7 +15,8 @@ completed: - !type:DamageEntity damage: - Blunt: 10 + types: + Blunt: 10 steps: # egg explodes some time after the water in it boils and increases pressure, guessing ~110C - minTemperature: 383 diff --git a/Resources/Prototypes/Recipes/Lathes/misc.yml b/Resources/Prototypes/Recipes/Lathes/misc.yml index 13347883760..ab13dc4573f 100644 --- a/Resources/Prototypes/Recipes/Lathes/misc.yml +++ b/Resources/Prototypes/Recipes/Lathes/misc.yml @@ -150,6 +150,20 @@ materials: Plastic: 100 +- type: latheRecipe + id: FauxTileMowedAstroGrass + result: FloorTileItemMowedAstroGrass + completetime: 1 + materials: + Plastic: 100 + +- type: latheRecipe + id: FauxTileJungleAstroGrass + result: FloorTileItemJungleAstroGrass + completetime: 1 + materials: + Plastic: 100 + - type: latheRecipe id: FauxTileAstroIce result: FloorTileItemAstroIce @@ -157,6 +171,13 @@ materials: Plastic: 100 +- type: latheRecipe + id: FauxTileAstroSnow + result: FloorTileItemAstroSnow + completetime: 1 + materials: + Plastic: 100 + - type: latheRecipe id: FloorGreenCircuit result: FloorTileItemGCircuit4 diff --git a/Resources/Prototypes/Research/civilianservices.yml b/Resources/Prototypes/Research/civilianservices.yml index c3f83e0fc59..61f95894ee6 100644 --- a/Resources/Prototypes/Research/civilianservices.yml +++ b/Resources/Prototypes/Research/civilianservices.yml @@ -110,7 +110,10 @@ cost: 5000 recipeUnlocks: - FauxTileAstroGrass + - FauxTileMowedAstroGrass + - FauxTileJungleAstroGrass - FauxTileAstroIce + - FauxTileAstroSnow - type: technology id: BiochemicalStasis diff --git a/Resources/Prototypes/SoundCollections/church_bell.yml b/Resources/Prototypes/SoundCollections/church_bell.yml new file mode 100644 index 00000000000..909bb9f4c4b --- /dev/null +++ b/Resources/Prototypes/SoundCollections/church_bell.yml @@ -0,0 +1,7 @@ +- type: soundCollection + id: ChurchBell + files: + - /Audio/Effects/church_bell1.ogg + - /Audio/Effects/church_bell2.ogg + - /Audio/Effects/church_bell3.ogg + - /Audio/Effects/church_bell4.ogg diff --git a/Resources/Prototypes/Stacks/floor_tile_stacks.yml b/Resources/Prototypes/Stacks/floor_tile_stacks.yml index b469f55c59c..c5e37013b87 100644 --- a/Resources/Prototypes/Stacks/floor_tile_stacks.yml +++ b/Resources/Prototypes/Stacks/floor_tile_stacks.yml @@ -475,6 +475,20 @@ maxCount: 30 itemSize: 5 +- type: stack + id: FloorTileMowedAstroGrass + name: mowed astro-grass floor + spawn: FloorTileItemMowedAstroGrass + maxCount: 30 + itemSize: 5 + +- type: stack + id: FloorTileJungleAstroGrass + name: jungle astro-grass floor + spawn: FloorTileItemJungleAstroGrass + maxCount: 30 + itemSize: 5 + - type: stack id: FloorTileAstroIce name: astro-ice floor @@ -482,6 +496,13 @@ maxCount: 30 itemSize: 5 +- type: stack + id: FloorTileAstroSnow + name: astro-snow floor + spawn: FloorTileItemAstroSnow + maxCount: 30 + itemSize: 5 + - type: stack id: FloorTileWoodLarge name: large wood floor diff --git a/Resources/Prototypes/StatusEffects/health.yml b/Resources/Prototypes/StatusEffects/health.yml index 0a1df020c05..12c16e57f05 100644 --- a/Resources/Prototypes/StatusEffects/health.yml +++ b/Resources/Prototypes/StatusEffects/health.yml @@ -4,4 +4,29 @@ icon: sprite: /Textures/Interface/Misc/health_icons.rsi state: Fine - locationPreference: Right \ No newline at end of file + locationPreference: Right + +- type: statusIcon + id: HealthIconCritical + priority: 1 + icon: + sprite: /Textures/Interface/Misc/health_icons.rsi + state: Critical + locationPreference: Right + +- type: statusIcon + id: HealthIconDead + priority: 1 + icon: + sprite: /Textures/Interface/Misc/health_icons.rsi + state: Dead + locationPreference: Right + +- type: statusIcon + id: HealthIconRotting + priority: 1 + icon: + sprite: /Textures/Interface/Misc/health_icons.rsi + state: Rotting + locationPreference: Right + diff --git a/Resources/Prototypes/Tiles/floors.yml b/Resources/Prototypes/Tiles/floors.yml index 15c80a8e5f0..59fa88be2b2 100644 --- a/Resources/Prototypes/Tiles/floors.yml +++ b/Resources/Prototypes/Tiles/floors.yml @@ -1874,12 +1874,30 @@ West: /Textures/Tiles/Planet/Grass/double_edge.png baseTurf: Plating isSubfloor: false - deconstructTools: [ Prying ] + deconstructTools: [ Cutting ] footstepSounds: collection: FootstepGrass itemDrop: FloorTileItemAstroGrass heatCapacity: 10000 +- type: tile + id: FloorMowedAstroGrass + name: tiles-mowed-astro-grass + parent: FloorGrass + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Cutting ] + itemDrop: FloorTileItemMowedAstroGrass + +- type: tile + id: FloorJungleAstroGrass + name: tiles-jungle-astro-grass + parent: FloorGrassJungle + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Cutting ] + itemDrop: FloorTileItemJungleAstroGrass + # Ice - type: tile id: FloorAstroIce @@ -1895,6 +1913,15 @@ mobAcceleration: 2 itemDrop: FloorTileItemAstroIce +- type: tile + id: FloorAstroSnow + name: tiles-astro-snow + parent: FloorSnow + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + itemDrop: FloorTileItemAstroSnow + - type: tile id: FloorWoodLarge name: tiles-wood-large diff --git a/Resources/Prototypes/Voice/speech_emote_sounds.yml b/Resources/Prototypes/Voice/speech_emote_sounds.yml index ee76fa33d2c..01fabbadf30 100644 --- a/Resources/Prototypes/Voice/speech_emote_sounds.yml +++ b/Resources/Prototypes/Voice/speech_emote_sounds.yml @@ -380,3 +380,10 @@ sounds: Chirp: path: /Audio/Animals/nymph_chirp.ogg + +- type: emoteSounds + id: Parrot + sound: + path: /Audio/Animals/parrot_raught.ogg + params: + variation: 0.125 diff --git a/Resources/Prototypes/Voice/speech_sounds.yml b/Resources/Prototypes/Voice/speech_sounds.yml index eb47b5363b6..2e7e7bf989a 100644 --- a/Resources/Prototypes/Voice/speech_sounds.yml +++ b/Resources/Prototypes/Voice/speech_sounds.yml @@ -70,6 +70,15 @@ exclaimSound: path: /Audio/Animals/monkey_scream.ogg +- type: speechSounds + id: Parrot + saySound: + path: /Audio/Animals/parrot_raught.ogg + askSound: + path: /Audio/Animals/parrot_raught.ogg + exclaimSound: + path: /Audio/Animals/parrot_raught.ogg + - type: speechSounds id: Lizard saySound: diff --git a/Resources/Prototypes/Voice/speech_verbs.yml b/Resources/Prototypes/Voice/speech_verbs.yml index 1cdda32ece1..26e9370c017 100644 --- a/Resources/Prototypes/Voice/speech_verbs.yml +++ b/Resources/Prototypes/Voice/speech_verbs.yml @@ -113,6 +113,13 @@ - chat-speech-verb-monkey-1 - chat-speech-verb-monkey-2 +- type: speechVerb + id: Parrot + speechVerbStrings: + - chat-speech-verb-parrot-1 + - chat-speech-verb-parrot-2 + - chat-speech-verb-parrot-3 + - type: speechVerb id: Cluwne speechVerbStrings: diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 6d0120aed0e..2694cbeaf39 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -650,6 +650,9 @@ - type: Tag id: Hardsuit # Prevent melee injectors that can't penetrate hardsuits from injecting the wearer (nettles) +- type: Tag + id: Haunted + - type: Tag id: Head @@ -874,6 +877,9 @@ - type: Tag id: NoBlockAnchoring +- type: Tag + id: NoPaint + - type: Tag id: NozzleBackTank diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/arsonist.rsi/fill-1.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/arsonist.rsi/fill-1.png new file mode 100644 index 00000000000..992465a8ca7 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/arsonist.rsi/fill-1.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/arsonist.rsi/fill-2.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/arsonist.rsi/fill-2.png new file mode 100644 index 00000000000..d856b528225 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/arsonist.rsi/fill-2.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/arsonist.rsi/fill-3.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/arsonist.rsi/fill-3.png new file mode 100644 index 00000000000..e080e2638ad Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/arsonist.rsi/fill-3.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/arsonist.rsi/fill-4.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/arsonist.rsi/fill-4.png new file mode 100644 index 00000000000..8ea2bba5b6b Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/arsonist.rsi/fill-4.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/arsonist.rsi/icon_empty.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/arsonist.rsi/icon_empty.png new file mode 100644 index 00000000000..fb9a171a76e Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/arsonist.rsi/icon_empty.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/arsonist.rsi/meta.json b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/arsonist.rsi/meta.json index 313980abcc3..1d7812ab2db 100644 --- a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/arsonist.rsi/meta.json +++ b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/arsonist.rsi/meta.json @@ -1,15 +1,30 @@ { - "version": 1, - "license": "CC0-1.0", - "copyright": "Original work by TJohnson.", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon", - "delays": [[0.25, 0.25, 0.25, 0.25]] - } - ] -} + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC0-1.0", + "copyright": "Original work by TJohnson.", + "states": [ + { + "name": "icon", + "delays": [[0.25, 0.25, 0.25, 0.25]] + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/daiquiri.rsi/fill-1.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/daiquiri.rsi/fill-1.png new file mode 100644 index 00000000000..00e60a6d6dc Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/daiquiri.rsi/fill-1.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/daiquiri.rsi/fill-2.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/daiquiri.rsi/fill-2.png new file mode 100644 index 00000000000..e70ad2618f1 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/daiquiri.rsi/fill-2.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/daiquiri.rsi/fill-3.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/daiquiri.rsi/fill-3.png new file mode 100644 index 00000000000..f7f56ad32ad Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/daiquiri.rsi/fill-3.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/daiquiri.rsi/icon_empty.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/daiquiri.rsi/icon_empty.png new file mode 100644 index 00000000000..4d3c3f60d3d Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/daiquiri.rsi/icon_empty.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/daiquiri.rsi/meta.json b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/daiquiri.rsi/meta.json index 4c0b620dfd6..f1449ce61ae 100644 --- a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/daiquiri.rsi/meta.json +++ b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/daiquiri.rsi/meta.json @@ -1,14 +1,26 @@ { - "version": 1, - "license": "CC0-1.0", - "copyright": "Original work by TJohnson.", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - } - ] -} + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC0-1.0", + "copyright": "Original work by TJohnson.", + "states": [ + { + "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/dulleavene.rsi/icon.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/dulleavene.rsi/icon.png deleted file mode 100644 index 49aa80be1db..00000000000 Binary files a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/dulleavene.rsi/icon.png and /dev/null differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/dulleavene.rsi/meta.json b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/dulleavene.rsi/meta.json deleted file mode 100644 index 86851510b03..00000000000 --- a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/dulleavene.rsi/meta.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "version": 1, - "license": "CC0-1.0", - "copyright": "Artwork by Leonardo_DaBepis. https://leonardo-dabepis.tumblr.com/", - "size": { - "x": 13, - "y": 17 - }, - "states": [ - { - "name": "icon" - } - ] -} diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/fill-1.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/fill-1.png new file mode 100644 index 00000000000..087c698fcd5 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/fill-1.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/fill-2.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/fill-2.png new file mode 100644 index 00000000000..f596e55cfa0 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/fill-2.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/fill-3.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/fill-3.png new file mode 100644 index 00000000000..26c6cc7fede Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/fill-3.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/fill-4.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/fill-4.png new file mode 100644 index 00000000000..9d99f2d8373 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/fill-4.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/fill-5.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/fill-5.png new file mode 100644 index 00000000000..a697bbbf6d6 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/fill-5.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/icon.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/icon.png index 0852b6bdf9b..e558e125e0f 100644 Binary files a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/icon.png and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/icon.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/icon_empty.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/icon_empty.png new file mode 100644 index 00000000000..04c5b788193 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/icon_empty.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/meta.json b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/meta.json index 4c0b620dfd6..33757931876 100644 --- a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/meta.json +++ b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/meta.json @@ -1,14 +1,32 @@ { - "version": 1, - "license": "CC0-1.0", - "copyright": "Original work by TJohnson.", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - } - ] -} + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC0-1.0", + "copyright": "Original work by TJohnson.", + "states": [ + { + "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" + }, + { + "name": "fill-5" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/fill-1.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/fill-1.png new file mode 100644 index 00000000000..138c8355970 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/fill-1.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/fill-2.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/fill-2.png new file mode 100644 index 00000000000..c11695450c7 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/fill-2.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/fill-3.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/fill-3.png new file mode 100644 index 00000000000..dba48d00760 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/fill-3.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/fill-4.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/fill-4.png new file mode 100644 index 00000000000..d3133dc9e3a Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/fill-4.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/fill-5.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/fill-5.png new file mode 100644 index 00000000000..690e598921e Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/fill-5.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/icon_empty.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/icon_empty.png new file mode 100644 index 00000000000..0651b3e9523 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/icon_empty.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/meta.json b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/meta.json index 4c0b620dfd6..33757931876 100644 --- a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/meta.json +++ b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/meta.json @@ -1,14 +1,32 @@ { - "version": 1, - "license": "CC0-1.0", - "copyright": "Original work by TJohnson.", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - } - ] -} + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC0-1.0", + "copyright": "Original work by TJohnson.", + "states": [ + { + "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" + }, + { + "name": "fill-5" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/fill-1.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/fill-1.png new file mode 100644 index 00000000000..c1b3364bfe3 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/fill-1.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/fill-2.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/fill-2.png new file mode 100644 index 00000000000..cb905619b63 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/fill-2.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/fill-3.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/fill-3.png new file mode 100644 index 00000000000..9d8344cfdc4 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/fill-3.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/fill-4.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/fill-4.png new file mode 100644 index 00000000000..7a4178c0cdc Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/fill-4.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/fill-5.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/fill-5.png new file mode 100644 index 00000000000..ce38e781ebe Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/fill-5.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/icon.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/icon.png new file mode 100644 index 00000000000..67afd251437 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/icon.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/icon_empty.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/icon_empty.png new file mode 100644 index 00000000000..9862fe49d99 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/icon_empty.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/meta.json b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/meta.json new file mode 100644 index 00000000000..1fbe3932696 --- /dev/null +++ b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/meta.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC0-1.0", + "copyright": "Artwork by Leonardo_DaBepis. https://leonardo-dabepis.tumblr.com/", + "states": [ + { + "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" + }, + { + "name": "fill-5" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/fill-1.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/fill-1.png new file mode 100644 index 00000000000..db910a5a1f5 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/fill-1.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/fill-2.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/fill-2.png new file mode 100644 index 00000000000..a52531c67b3 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/fill-2.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/fill-3.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/fill-3.png new file mode 100644 index 00000000000..befe1fee89f Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/fill-3.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/fill-4.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/fill-4.png new file mode 100644 index 00000000000..6ff9030f023 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/fill-4.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/icon.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/icon.png new file mode 100644 index 00000000000..58a6f215762 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/icon.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/icon_empty.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/icon_empty.png new file mode 100644 index 00000000000..c748e250334 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/icon_empty.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/meta.json b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/meta.json new file mode 100644 index 00000000000..46e82013433 --- /dev/null +++ b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/TauCetiStation/TauCetiClassic/commit/c449d65dff642f44f3e0d8a312f70aec43ab2eae modified by Floofers", + "states": [ + { + "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/lemondrop.rsi/fill-1.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/lemondrop.rsi/fill-1.png new file mode 100644 index 00000000000..971a973332e Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/lemondrop.rsi/fill-1.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/lemondrop.rsi/fill-2.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/lemondrop.rsi/fill-2.png new file mode 100644 index 00000000000..47265766105 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/lemondrop.rsi/fill-2.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/lemondrop.rsi/fill-3.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/lemondrop.rsi/fill-3.png new file mode 100644 index 00000000000..e734aa69dce Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/lemondrop.rsi/fill-3.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/lemondrop.rsi/icon.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/lemondrop.rsi/icon.png index 494f567b52e..cf7b5d589c7 100644 Binary files a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/lemondrop.rsi/icon.png and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/lemondrop.rsi/icon.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/lemondrop.rsi/icon_empty.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/lemondrop.rsi/icon_empty.png new file mode 100644 index 00000000000..5db51797e79 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/lemondrop.rsi/icon_empty.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/lemondrop.rsi/meta.json b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/lemondrop.rsi/meta.json index 4c0b620dfd6..f1449ce61ae 100644 --- a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/lemondrop.rsi/meta.json +++ b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/lemondrop.rsi/meta.json @@ -1,14 +1,26 @@ { - "version": 1, - "license": "CC0-1.0", - "copyright": "Original work by TJohnson.", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - } - ] -} + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC0-1.0", + "copyright": "Original work by TJohnson.", + "states": [ + { + "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/mothamphetamine.rsi/fill-1.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/mothamphetamine.rsi/fill-1.png new file mode 100644 index 00000000000..25b2262ff85 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/mothamphetamine.rsi/fill-1.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/mothamphetamine.rsi/fill-2.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/mothamphetamine.rsi/fill-2.png new file mode 100644 index 00000000000..aca6a874199 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/mothamphetamine.rsi/fill-2.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/mothamphetamine.rsi/fill-3.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/mothamphetamine.rsi/fill-3.png new file mode 100644 index 00000000000..9dd5c81f4c1 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/mothamphetamine.rsi/fill-3.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/mothamphetamine.rsi/fill-4.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/mothamphetamine.rsi/fill-4.png new file mode 100644 index 00000000000..1b6b28dd198 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/mothamphetamine.rsi/fill-4.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/mothamphetamine.rsi/icon_empty.png b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/mothamphetamine.rsi/icon_empty.png new file mode 100644 index 00000000000..f86d44d7573 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/mothamphetamine.rsi/icon_empty.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/mothamphetamine.rsi/meta.json b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/mothamphetamine.rsi/meta.json index 507c921294a..531f1903f07 100644 --- a/Resources/Textures/DeltaV/Objects/Consumable/Drinks/mothamphetamine.rsi/meta.json +++ b/Resources/Textures/DeltaV/Objects/Consumable/Drinks/mothamphetamine.rsi/meta.json @@ -1,14 +1,29 @@ { - "version": 1, - "license": "CC0-1.0", - "copyright": "Artwork by @Leonardo_DaBepis. https://leonardo-dabepis.tumblr.com/", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - } - ] -} + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC0-1.0", + "copyright": "Artwork by @Leonardo_DaBepis. https://leonardo-dabepis.tumblr.com/", + "states": [ + { + "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Interface/Misc/health_icons.rsi/Critical.png b/Resources/Textures/Interface/Misc/health_icons.rsi/Critical.png new file mode 100644 index 00000000000..779874eaaeb Binary files /dev/null and b/Resources/Textures/Interface/Misc/health_icons.rsi/Critical.png differ diff --git a/Resources/Textures/Interface/Misc/health_icons.rsi/Dead.png b/Resources/Textures/Interface/Misc/health_icons.rsi/Dead.png new file mode 100644 index 00000000000..beceebd05cf Binary files /dev/null and b/Resources/Textures/Interface/Misc/health_icons.rsi/Dead.png differ diff --git a/Resources/Textures/Interface/Misc/health_icons.rsi/Fine.png b/Resources/Textures/Interface/Misc/health_icons.rsi/Fine.png index 8d07f93496e..45725aa73c8 100644 Binary files a/Resources/Textures/Interface/Misc/health_icons.rsi/Fine.png and b/Resources/Textures/Interface/Misc/health_icons.rsi/Fine.png differ diff --git a/Resources/Textures/Interface/Misc/health_icons.rsi/Rotting.png b/Resources/Textures/Interface/Misc/health_icons.rsi/Rotting.png new file mode 100644 index 00000000000..8965b1308d9 Binary files /dev/null and b/Resources/Textures/Interface/Misc/health_icons.rsi/Rotting.png differ diff --git a/Resources/Textures/Interface/Misc/health_icons.rsi/meta.json b/Resources/Textures/Interface/Misc/health_icons.rsi/meta.json index 9bc63271451..fb584d6b7f3 100644 --- a/Resources/Textures/Interface/Misc/health_icons.rsi/meta.json +++ b/Resources/Textures/Interface/Misc/health_icons.rsi/meta.json @@ -5,10 +5,29 @@ "y": 8 }, "license": "CC-BY-SA-3.0", - "copyright": "https://github.com/tgstation/tgstation/blob/master/icons/mob/huds/hud.dmi", + "copyright": "Taken from /tg/station at commit https://github.com/tgstation/tgstation/commit/20ae083f140ac5b4da7e8bc40f95349001b6c086", "states": [ { "name": "Fine" + }, + { + "name": "Critical" + }, + { + "name": "Dead", + "delays": [ + [ + 0.125, + 0.125, + 0.125, + 0.125, + 0.125, + 0.125 + ] + ] + }, + { + "name": "Rotting" } ] -} \ No newline at end of file +} diff --git a/Resources/Textures/Interface/VerbIcons/paint.svg b/Resources/Textures/Interface/VerbIcons/paint.svg new file mode 100644 index 00000000000..78a56e3570a --- /dev/null +++ b/Resources/Textures/Interface/VerbIcons/paint.svg @@ -0,0 +1,39 @@ + + + + + + diff --git a/Resources/Textures/Interface/VerbIcons/paint.svg.192dpi.png b/Resources/Textures/Interface/VerbIcons/paint.svg.192dpi.png new file mode 100644 index 00000000000..b7bd88245f2 Binary files /dev/null and b/Resources/Textures/Interface/VerbIcons/paint.svg.192dpi.png differ diff --git a/Resources/Textures/Interface/VerbIcons/paint.svg.192dpi.png.yml b/Resources/Textures/Interface/VerbIcons/paint.svg.192dpi.png.yml new file mode 100644 index 00000000000..5c43e233050 --- /dev/null +++ b/Resources/Textures/Interface/VerbIcons/paint.svg.192dpi.png.yml @@ -0,0 +1,2 @@ +sample: + filter: true diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/fill-1.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/fill-1.png new file mode 100644 index 00000000000..626b7715912 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/fill-1.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/fill-2.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/fill-2.png new file mode 100644 index 00000000000..94362120a81 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/fill-2.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/fill-3.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/fill-3.png new file mode 100644 index 00000000000..2fed2373f7c Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/fill-3.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/fill-4.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/fill-4.png new file mode 100644 index 00000000000..3e1e4731560 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/fill-4.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/icon.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/icon.png index 95e24bc9cff..c3cd7597e6b 100644 Binary files a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/icon.png and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/icon.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/icon_empty.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/icon_empty.png new file mode 100644 index 00000000000..dd2bbc94ace Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/icon_empty.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/meta.json b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/meta.json index 3e33d3ec6a6..17d033b1678 100644 --- a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/meta.json +++ b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/meta.json @@ -9,6 +9,21 @@ "states": [ { "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" } ] } \ No newline at end of file diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/fill-1.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/fill-1.png new file mode 100644 index 00000000000..cc56fe58e78 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/fill-1.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/fill-2.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/fill-2.png new file mode 100644 index 00000000000..728c1477ce3 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/fill-2.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/fill-3.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/fill-3.png new file mode 100644 index 00000000000..ee6e21f7447 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/fill-3.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/fill-4.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/fill-4.png new file mode 100644 index 00000000000..df040cd99e6 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/fill-4.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/icon.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/icon.png index a969efc1039..1f9dac256f8 100644 Binary files a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/icon.png and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/icon.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/icon_empty.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/icon_empty.png new file mode 100644 index 00000000000..2b6776848ba Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/icon_empty.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/meta.json b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/meta.json index 3e33d3ec6a6..17d033b1678 100644 --- a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/meta.json +++ b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/meta.json @@ -9,6 +9,21 @@ "states": [ { "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" } ] } \ No newline at end of file diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/fill-1.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/fill-1.png new file mode 100644 index 00000000000..bc4977dfd38 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/fill-1.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/fill-2.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/fill-2.png new file mode 100644 index 00000000000..16ca3cbdc5b Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/fill-2.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/fill-3.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/fill-3.png new file mode 100644 index 00000000000..11a86987cc9 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/fill-3.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/fill-4.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/fill-4.png new file mode 100644 index 00000000000..9673504e305 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/fill-4.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/fill-5.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/fill-5.png new file mode 100644 index 00000000000..d47c0694e22 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/fill-5.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/icon.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/icon.png index 1494632f2d9..293ae99a1c5 100644 Binary files a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/icon.png and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/icon.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/icon_empty.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/icon_empty.png new file mode 100644 index 00000000000..cba7f74b94b Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/icon_empty.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/meta.json b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/meta.json index 3e33d3ec6a6..acb41d36dd7 100644 --- a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/meta.json +++ b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/meta.json @@ -9,6 +9,24 @@ "states": [ { "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" + }, + { + "name": "fill-5" } ] } \ No newline at end of file diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/fill-1.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/fill-1.png new file mode 100644 index 00000000000..db884c3d257 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/fill-1.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/fill-2.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/fill-2.png new file mode 100644 index 00000000000..ccf14afe99a Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/fill-2.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/fill-3.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/fill-3.png new file mode 100644 index 00000000000..c56db9fe56c Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/fill-3.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/fill-4.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/fill-4.png new file mode 100644 index 00000000000..9cbe1c22f95 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/fill-4.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/fill-5.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/fill-5.png new file mode 100644 index 00000000000..f06706b6b2f Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/fill-5.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/icon.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/icon.png index 41bd94c3ef4..67fb208946a 100644 Binary files a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/icon.png and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/icon.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/icon_empty.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/icon_empty.png new file mode 100644 index 00000000000..81fda8fb590 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/icon_empty.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/meta.json b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/meta.json index 3e33d3ec6a6..acb41d36dd7 100644 --- a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/meta.json +++ b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/meta.json @@ -9,6 +9,24 @@ "states": [ { "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" + }, + { + "name": "fill-5" } ] } \ No newline at end of file diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/fill-1.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/fill-1.png new file mode 100644 index 00000000000..73669923d63 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/fill-1.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/fill-2.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/fill-2.png new file mode 100644 index 00000000000..247b3cfabaa Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/fill-2.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/fill-3.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/fill-3.png new file mode 100644 index 00000000000..6ffeba8e6d1 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/fill-3.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/fill-4.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/fill-4.png new file mode 100644 index 00000000000..210fa67f279 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/fill-4.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/fill-5.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/fill-5.png new file mode 100644 index 00000000000..00d78b7074d Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/fill-5.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/icon.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/icon.png index 05147c65ad3..7d08454a162 100644 Binary files a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/icon.png and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/icon.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/icon_empty.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/icon_empty.png new file mode 100644 index 00000000000..b8eafb17452 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/icon_empty.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/meta.json b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/meta.json index 3e33d3ec6a6..acb41d36dd7 100644 --- a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/meta.json +++ b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/meta.json @@ -9,6 +9,24 @@ "states": [ { "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" + }, + { + "name": "fill-5" } ] } \ No newline at end of file diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/fill-1.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/fill-1.png new file mode 100644 index 00000000000..d93b5da40ca Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/fill-1.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/fill-2.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/fill-2.png new file mode 100644 index 00000000000..24cc1043490 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/fill-2.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/fill-3.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/fill-3.png new file mode 100644 index 00000000000..e89d6ac3c9b Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/fill-3.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/fill-4.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/fill-4.png new file mode 100644 index 00000000000..70a3c62f80e Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/fill-4.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/fill-5.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/fill-5.png new file mode 100644 index 00000000000..9707e28b252 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/fill-5.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/icon.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/icon.png index dd62bd08da4..cf58cd4e069 100644 Binary files a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/icon.png and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/icon.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/icon_empty.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/icon_empty.png new file mode 100644 index 00000000000..23af54dc7eb Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/icon_empty.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/meta.json b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/meta.json index 3e33d3ec6a6..acb41d36dd7 100644 --- a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/meta.json +++ b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/meta.json @@ -9,6 +9,24 @@ "states": [ { "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" + }, + { + "name": "fill-5" } ] } \ No newline at end of file diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/fill-1.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/fill-1.png new file mode 100644 index 00000000000..7cf061e463f Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/fill-1.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/fill-2.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/fill-2.png new file mode 100644 index 00000000000..2cb749de2f6 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/fill-2.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/fill-3.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/fill-3.png new file mode 100644 index 00000000000..c014db520a8 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/fill-3.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/fill-4.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/fill-4.png new file mode 100644 index 00000000000..cc7b5ab8fe6 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/fill-4.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/icon.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/icon.png index 086a74b53ea..ef736ae11bd 100644 Binary files a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/icon.png and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/icon.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/icon_empty.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/icon_empty.png new file mode 100644 index 00000000000..0bd85f3127b Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/icon_empty.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/meta.json b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/meta.json index 3e33d3ec6a6..17d033b1678 100644 --- a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/meta.json +++ b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/meta.json @@ -9,6 +9,21 @@ "states": [ { "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" } ] } \ No newline at end of file diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/fill-1.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/fill-1.png new file mode 100644 index 00000000000..535dc20bdf9 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/fill-1.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/fill-2.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/fill-2.png new file mode 100644 index 00000000000..12912241689 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/fill-2.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/fill-3.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/fill-3.png new file mode 100644 index 00000000000..bb9631211d1 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/fill-3.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/fill-4.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/fill-4.png new file mode 100644 index 00000000000..1f7df6b2f3e Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/fill-4.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/icon.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/icon.png index d06532d6d8f..a0afde5f2d2 100644 Binary files a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/icon.png and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/icon.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/icon_empty.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/icon_empty.png new file mode 100644 index 00000000000..fd4b33ad356 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/icon_empty.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/meta.json b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/meta.json index 3e33d3ec6a6..17d033b1678 100644 --- a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/meta.json +++ b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/meta.json @@ -9,6 +9,21 @@ "states": [ { "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" } ] } \ No newline at end of file diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sakeglass.rsi/fill-1.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sakeglass.rsi/fill-1.png new file mode 100644 index 00000000000..39a89a7c425 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sakeglass.rsi/fill-1.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sakeglass.rsi/fill-2.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sakeglass.rsi/fill-2.png new file mode 100644 index 00000000000..dfa4dd5e066 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sakeglass.rsi/fill-2.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sakeglass.rsi/fill-3.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sakeglass.rsi/fill-3.png new file mode 100644 index 00000000000..30fbfc3478e Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sakeglass.rsi/fill-3.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sakeglass.rsi/icon_empty.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sakeglass.rsi/icon_empty.png new file mode 100644 index 00000000000..f81d140f545 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sakeglass.rsi/icon_empty.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sakeglass.rsi/meta.json b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sakeglass.rsi/meta.json index 94c898e78ca..69ca3b34121 100644 --- a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sakeglass.rsi/meta.json +++ b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sakeglass.rsi/meta.json @@ -1,14 +1,26 @@ { "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Hyenh#6078", "size": { "x": 32, "y": 32 }, + "license": "CC-BY-SA-3.0", + "copyright": "Made by Hyenh#6078", "states": [ { "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" } ] -} +} \ No newline at end of file diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/fill-1.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/fill-1.png new file mode 100644 index 00000000000..a1f7784a534 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/fill-1.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/fill-2.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/fill-2.png new file mode 100644 index 00000000000..f1ed4e31627 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/fill-2.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/fill-3.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/fill-3.png new file mode 100644 index 00000000000..c7a110b19a2 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/fill-3.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/fill-4.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/fill-4.png new file mode 100644 index 00000000000..8956c55b2e0 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/fill-4.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/fill-5.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/fill-5.png new file mode 100644 index 00000000000..abda666bd66 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/fill-5.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/icon_empty.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/icon_empty.png new file mode 100644 index 00000000000..14d2fbf21de Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/icon_empty.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/meta.json b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/meta.json index 3e33d3ec6a6..acb41d36dd7 100644 --- a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/meta.json +++ b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/meta.json @@ -9,6 +9,24 @@ "states": [ { "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" + }, + { + "name": "fill-5" } ] } \ No newline at end of file diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/fill-1.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/fill-1.png new file mode 100644 index 00000000000..2c639c4c838 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/fill-1.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/fill-2.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/fill-2.png new file mode 100644 index 00000000000..bc8b044002c Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/fill-2.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/fill-3.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/fill-3.png new file mode 100644 index 00000000000..d0eae400024 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/fill-3.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/fill-4.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/fill-4.png new file mode 100644 index 00000000000..6de8ef9f60f Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/fill-4.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/icon.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/icon.png index 25dd13a6af6..87a1bffde3c 100644 Binary files a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/icon.png and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/icon.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/icon_empty.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/icon_empty.png new file mode 100644 index 00000000000..c2a93285176 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/icon_empty.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/meta.json b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/meta.json index 3e33d3ec6a6..17d033b1678 100644 --- a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/meta.json +++ b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/meta.json @@ -9,6 +9,21 @@ "states": [ { "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" } ] } \ No newline at end of file diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sojuglass.rsi/fill-1.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sojuglass.rsi/fill-1.png new file mode 100644 index 00000000000..44cbfbf3b73 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sojuglass.rsi/fill-1.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sojuglass.rsi/fill-2.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sojuglass.rsi/fill-2.png new file mode 100644 index 00000000000..364ddd04a26 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sojuglass.rsi/fill-2.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sojuglass.rsi/fill-3.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sojuglass.rsi/fill-3.png new file mode 100644 index 00000000000..8d027fe94f2 Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sojuglass.rsi/fill-3.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sojuglass.rsi/fill-4.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sojuglass.rsi/fill-4.png new file mode 100644 index 00000000000..8c2cc7155cc Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sojuglass.rsi/fill-4.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sojuglass.rsi/icon_empty.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sojuglass.rsi/icon_empty.png new file mode 100644 index 00000000000..fe6fd09e9eb Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sojuglass.rsi/icon_empty.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sojuglass.rsi/meta.json b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sojuglass.rsi/meta.json index 94c898e78ca..7d54c4e15ef 100644 --- a/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sojuglass.rsi/meta.json +++ b/Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sojuglass.rsi/meta.json @@ -1,14 +1,29 @@ { "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Hyenh#6078", "size": { "x": 32, "y": 32 }, + "license": "CC-BY-SA-3.0", + "copyright": "Made by Hyenh#6078", "states": [ { "name": "icon" + }, + { + "name": "icon_empty" + }, + { + "name": "fill-1" + }, + { + "name": "fill-2" + }, + { + "name": "fill-3" + }, + { + "name": "fill-4" } ] -} +} \ No newline at end of file diff --git a/Resources/Textures/Objects/Fun/spraycans.rsi/clown-inhand-left.png b/Resources/Textures/Objects/Fun/spraycans.rsi/clown-inhand-left.png new file mode 100644 index 00000000000..d90d5b21b73 Binary files /dev/null and b/Resources/Textures/Objects/Fun/spraycans.rsi/clown-inhand-left.png differ diff --git a/Resources/Textures/Objects/Fun/spraycans.rsi/clown-inhand-right.png b/Resources/Textures/Objects/Fun/spraycans.rsi/clown-inhand-right.png new file mode 100644 index 00000000000..27b68e2cfe5 Binary files /dev/null and b/Resources/Textures/Objects/Fun/spraycans.rsi/clown-inhand-right.png differ diff --git a/Resources/Textures/Objects/Fun/spraycans.rsi/meta.json b/Resources/Textures/Objects/Fun/spraycans.rsi/meta.json index 0f883ee2801..f34820cec45 100644 --- a/Resources/Textures/Objects/Fun/spraycans.rsi/meta.json +++ b/Resources/Textures/Objects/Fun/spraycans.rsi/meta.json @@ -58,9 +58,6 @@ { "name": "spray" }, - { - "name": "spray_cap" - }, { "name": "spray_cap_colors" }, @@ -70,6 +67,22 @@ { "name": "equipped-BELT", "directions": 4 + }, + { + "name": "clown-inhand-right", + "directions": 4 + }, + { + "name": "clown-inhand-left", + "directions": 4 + }, + { + "name": "spray-inhand-right", + "directions": 4 + }, + { + "name": "spray-inhand-left", + "directions": 4 } ] } diff --git a/Resources/Textures/Objects/Fun/spraycans.rsi/spray-inhand-left.png b/Resources/Textures/Objects/Fun/spraycans.rsi/spray-inhand-left.png new file mode 100644 index 00000000000..ad3ad959de4 Binary files /dev/null and b/Resources/Textures/Objects/Fun/spraycans.rsi/spray-inhand-left.png differ diff --git a/Resources/Textures/Objects/Fun/spraycans.rsi/spray-inhand-right.png b/Resources/Textures/Objects/Fun/spraycans.rsi/spray-inhand-right.png new file mode 100644 index 00000000000..353e47c56fa Binary files /dev/null and b/Resources/Textures/Objects/Fun/spraycans.rsi/spray-inhand-right.png differ diff --git a/Resources/Textures/Objects/Fun/spraycans.rsi/spray_cap.png b/Resources/Textures/Objects/Fun/spraycans.rsi/spray_cap.png deleted file mode 100644 index 01d2d49bc0f..00000000000 Binary files a/Resources/Textures/Objects/Fun/spraycans.rsi/spray_cap.png and /dev/null differ diff --git a/Resources/Textures/Objects/Misc/bureaucracy.rsi/paper_stamp-detective.png b/Resources/Textures/Objects/Misc/bureaucracy.rsi/paper_stamp-detective.png index 097234f2830..284d01c6ddd 100644 Binary files a/Resources/Textures/Objects/Misc/bureaucracy.rsi/paper_stamp-detective.png and b/Resources/Textures/Objects/Misc/bureaucracy.rsi/paper_stamp-detective.png differ diff --git a/Resources/Textures/Structures/Piping/Atmospherics/scrubber.rsi/meta.json b/Resources/Textures/Structures/Piping/Atmospherics/scrubber.rsi/meta.json index 191aa398a96..6528705be2d 100644 --- a/Resources/Textures/Structures/Piping/Atmospherics/scrubber.rsi/meta.json +++ b/Resources/Textures/Structures/Piping/Atmospherics/scrubber.rsi/meta.json @@ -5,30 +5,25 @@ "y":32 }, "license":"CC-BY-SA-3.0", - "copyright":"Taken from https://github.com/tgstation/tgstation at commit 57cd1d59ca019dd0e7811ac451f295f818e573da", + "copyright":"Taken from https://github.com/ParadiseSS13/Paradise/", "states":[ { - "name":"scrub_off", - "directions": 4 + "name":"scrub_off" }, { - "name":"scrub_welded", - "directions": 4 + "name":"scrub_welded" }, { "name":"scrub_on", - "directions": 4, - "delays": [[0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08], [0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08], [0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08], [0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08]] + "delays": [[0.1, 0.1, 0.1, 0.1, 0.1]] }, { "name": "scrub_purge", - "directions": 4, - "delays": [[0.2, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04], [0.2, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04], [0.2, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04], [0.2, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04]] + "delays": [[0.1, 0.1, 0.1, 0.1, 0.1]] }, { "name": "scrub_wide", - "directions": 4, - "delays": [[0.2, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04], [0.2, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04], [0.2, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04], [0.2, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04]] + "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1]] } ] } diff --git a/Resources/Textures/Structures/Piping/Atmospherics/scrubber.rsi/scrub_off.png b/Resources/Textures/Structures/Piping/Atmospherics/scrubber.rsi/scrub_off.png index efc173d8936..9752342e2d8 100644 Binary files a/Resources/Textures/Structures/Piping/Atmospherics/scrubber.rsi/scrub_off.png and b/Resources/Textures/Structures/Piping/Atmospherics/scrubber.rsi/scrub_off.png differ diff --git a/Resources/Textures/Structures/Piping/Atmospherics/scrubber.rsi/scrub_on.png b/Resources/Textures/Structures/Piping/Atmospherics/scrubber.rsi/scrub_on.png index 9bc5d8c0bf3..5fcf53f3148 100644 Binary files a/Resources/Textures/Structures/Piping/Atmospherics/scrubber.rsi/scrub_on.png and b/Resources/Textures/Structures/Piping/Atmospherics/scrubber.rsi/scrub_on.png differ diff --git a/Resources/Textures/Structures/Piping/Atmospherics/scrubber.rsi/scrub_purge.png b/Resources/Textures/Structures/Piping/Atmospherics/scrubber.rsi/scrub_purge.png index 75ba6d6de04..e0e3e44556b 100644 Binary files a/Resources/Textures/Structures/Piping/Atmospherics/scrubber.rsi/scrub_purge.png and b/Resources/Textures/Structures/Piping/Atmospherics/scrubber.rsi/scrub_purge.png differ diff --git a/Resources/Textures/Structures/Piping/Atmospherics/scrubber.rsi/scrub_welded.png b/Resources/Textures/Structures/Piping/Atmospherics/scrubber.rsi/scrub_welded.png index 96ab7b08250..b3a5445f748 100644 Binary files a/Resources/Textures/Structures/Piping/Atmospherics/scrubber.rsi/scrub_welded.png and b/Resources/Textures/Structures/Piping/Atmospherics/scrubber.rsi/scrub_welded.png differ diff --git a/Resources/Textures/Structures/Piping/Atmospherics/scrubber.rsi/scrub_wide.png b/Resources/Textures/Structures/Piping/Atmospherics/scrubber.rsi/scrub_wide.png index 087777a888b..a93f3259b83 100644 Binary files a/Resources/Textures/Structures/Piping/Atmospherics/scrubber.rsi/scrub_wide.png and b/Resources/Textures/Structures/Piping/Atmospherics/scrubber.rsi/scrub_wide.png differ diff --git a/Resources/Textures/Structures/Piping/Atmospherics/vent.rsi/meta.json b/Resources/Textures/Structures/Piping/Atmospherics/vent.rsi/meta.json index 0d11425210b..16ab91ee5c0 100644 --- a/Resources/Textures/Structures/Piping/Atmospherics/vent.rsi/meta.json +++ b/Resources/Textures/Structures/Piping/Atmospherics/vent.rsi/meta.json @@ -5,25 +5,21 @@ "y":32 }, "license":"CC-BY-SA-3.0", - "copyright":"Taken from https://github.com/BeeStation/BeeStation-Hornet at commit 4ccd79de285e79e504308bcd6fa5908d6b7685f7", + "copyright":"Taken from https://github.com/ParadiseSS13/Paradise/", "states":[ { - "name":"vent_off", - "directions" : 4 + "name":"vent_off" }, { - "name":"vent_welded", - "directions" : 4 + "name":"vent_welded" }, { "name":"vent_out", - "directions" : 4, - "delays":[ [ 0.08, 0.08, 0.08, 0.08 ], [ 0.08, 0.08, 0.08, 0.08 ], [ 0.08, 0.08, 0.08, 0.08 ], [ 0.08, 0.08, 0.08, 0.08 ] ] + "delays":[ [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 ] ] }, { "name":"vent_in", - "directions" : 4, - "delays":[ [ 0.08, 0.08, 0.08, 0.08 ], [ 0.08, 0.08, 0.08, 0.08 ], [ 0.08, 0.08, 0.08, 0.08 ], [ 0.08, 0.08, 0.08, 0.08 ] ] + "delays":[ [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 ] ] } ] } diff --git a/Resources/Textures/Structures/Piping/Atmospherics/vent.rsi/vent_in.png b/Resources/Textures/Structures/Piping/Atmospherics/vent.rsi/vent_in.png index cf1b050c024..2a7787aa4b7 100644 Binary files a/Resources/Textures/Structures/Piping/Atmospherics/vent.rsi/vent_in.png and b/Resources/Textures/Structures/Piping/Atmospherics/vent.rsi/vent_in.png differ diff --git a/Resources/Textures/Structures/Piping/Atmospherics/vent.rsi/vent_off.png b/Resources/Textures/Structures/Piping/Atmospherics/vent.rsi/vent_off.png index 6208c59db79..e7634ef5a29 100644 Binary files a/Resources/Textures/Structures/Piping/Atmospherics/vent.rsi/vent_off.png and b/Resources/Textures/Structures/Piping/Atmospherics/vent.rsi/vent_off.png differ diff --git a/Resources/Textures/Structures/Piping/Atmospherics/vent.rsi/vent_out.png b/Resources/Textures/Structures/Piping/Atmospherics/vent.rsi/vent_out.png index e038706b0e4..396d8fb0f9a 100644 Binary files a/Resources/Textures/Structures/Piping/Atmospherics/vent.rsi/vent_out.png and b/Resources/Textures/Structures/Piping/Atmospherics/vent.rsi/vent_out.png differ diff --git a/Resources/Textures/Structures/Piping/Atmospherics/vent.rsi/vent_welded.png b/Resources/Textures/Structures/Piping/Atmospherics/vent.rsi/vent_welded.png index b45ae1cb5fc..b00be657b63 100644 Binary files a/Resources/Textures/Structures/Piping/Atmospherics/vent.rsi/vent_welded.png and b/Resources/Textures/Structures/Piping/Atmospherics/vent.rsi/vent_welded.png differ diff --git a/Resources/Textures/Structures/Specific/church-bell.rsi/church-bell.png b/Resources/Textures/Structures/Specific/church-bell.rsi/church-bell.png new file mode 100644 index 00000000000..dc95f2cdac1 Binary files /dev/null and b/Resources/Textures/Structures/Specific/church-bell.rsi/church-bell.png differ diff --git a/Resources/Textures/Structures/Specific/church-bell.rsi/meta.json b/Resources/Textures/Structures/Specific/church-bell.rsi/meta.json new file mode 100644 index 00000000000..e6161e60e49 --- /dev/null +++ b/Resources/Textures/Structures/Specific/church-bell.rsi/meta.json @@ -0,0 +1,15 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Made by Kezu for ss14", + "states": [ + { + "name": "church-bell", + "directions": 4 + } + ] +} diff --git a/Resources/mapping_actions.yml b/Resources/mapping_actions.yml index 0dda6b38a52..9498c3062a3 100644 --- a/Resources/mapping_actions.yml +++ b/Resources/mapping_actions.yml @@ -3,6 +3,7 @@ entity: ReinforcedWindow keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -17,6 +18,7 @@ entity: WallSolid keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -31,6 +33,7 @@ entity: WallReinforced keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -45,6 +48,7 @@ entity: Window keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -59,6 +63,7 @@ entity: Firelock keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -73,6 +78,7 @@ entity: Grille keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -86,6 +92,7 @@ icon: Interface/VerbIcons/delete.svg.192dpi.png keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -104,6 +111,7 @@ entity: GasPipeStraight keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -118,6 +126,7 @@ entity: GasPipeBend keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -132,6 +141,7 @@ entity: GasPipeTJunction keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -146,6 +156,7 @@ entity: GasPipeFourway keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -160,6 +171,7 @@ entity: GasVentScrubber keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -174,6 +186,7 @@ entity: GasVentPump keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -188,6 +201,7 @@ entity: AirAlarm keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -202,6 +216,7 @@ entity: FireAlarm keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -216,6 +231,7 @@ entity: APCBasic keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -230,6 +246,7 @@ entity: CableApcExtension keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -244,6 +261,7 @@ entity: CableMV keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -258,6 +276,7 @@ entity: CableHV keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -272,6 +291,7 @@ entity: SubstationBasic keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -286,6 +306,7 @@ entity: Poweredlight keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -300,6 +321,7 @@ entity: EmergencyLight keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -314,6 +336,7 @@ entity: SMESBasic keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -328,6 +351,7 @@ entity: TableWood keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -342,6 +366,7 @@ entity: Table keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -356,6 +381,7 @@ entity: ChairWood keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -370,6 +396,7 @@ entity: Chair keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -384,6 +411,7 @@ entity: ChairOfficeLight keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -398,6 +426,7 @@ entity: StoolBar keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -412,6 +441,7 @@ entity: Stool keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -426,6 +456,7 @@ entity: Rack keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -440,6 +471,7 @@ entity: ChairOfficeDark keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -454,6 +486,7 @@ entity: LampGold keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -468,6 +501,7 @@ entity: DisposalPipe keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -482,6 +516,7 @@ entity: DisposalBend keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -496,6 +531,7 @@ entity: DisposalJunction keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -510,6 +546,7 @@ entity: DisposalJunctionFlipped keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -524,6 +561,7 @@ entity: DisposalRouter keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -538,6 +576,7 @@ entity: DisposalRouterFlipped keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -552,6 +591,7 @@ entity: DisposalUnit keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -566,6 +606,7 @@ entity: DisposalTrunk keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -580,6 +621,7 @@ entity: SignDisposalSpace keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -594,6 +636,7 @@ entity: Windoor keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -608,6 +651,7 @@ entity: WindowDirectional keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -622,6 +666,7 @@ entity: WindowReinforcedDirectional keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -636,6 +681,7 @@ entity: PlasmaWindowDirectional keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -650,6 +696,7 @@ entity: Railing keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -664,6 +711,7 @@ entity: RailingCorner keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -678,6 +726,7 @@ entity: RailingCornerSmall keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -693,6 +742,7 @@ name: RailingRound keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -706,6 +756,7 @@ entity: AirlockMaintLocked keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -720,6 +771,7 @@ entity: AirlockGlass keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -734,6 +786,7 @@ entity: AirlockServiceLocked keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -748,6 +801,7 @@ entity: AirlockSecurityLocked keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -762,6 +816,7 @@ entity: AirlockCommand keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -776,6 +831,7 @@ entity: AirlockScience keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -790,6 +846,7 @@ entity: AirlockMedical keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -804,6 +861,7 @@ entity: AirlockEngineering keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -818,6 +876,7 @@ entity: AirlockCargo keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -837,6 +896,7 @@ state: bot_left iconColor: '#EFB34196' checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -857,6 +917,7 @@ state: delivery iconColor: '#EFB34196' checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -877,6 +938,7 @@ state: warn_full iconColor: '#EFB34196' checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -897,6 +959,7 @@ state: halftile_overlay iconColor: '#EFB34196' checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -917,6 +980,7 @@ state: halftile_overlay iconColor: '#334E6DC8' checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -937,6 +1001,7 @@ state: halftile_overlay iconColor: '#52B4E996' checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -957,6 +1022,7 @@ state: halftile_overlay iconColor: '#9FED5896' checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -977,6 +1043,7 @@ state: halftile_overlay iconColor: '#DE3A3A96' checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -997,6 +1064,7 @@ state: halftile_overlay iconColor: '#D381C996' checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -1017,6 +1085,7 @@ state: halftile_overlay iconColor: '#A4610696' checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -1031,6 +1100,7 @@ icon: /Textures/Tiles/steel.png keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -1044,6 +1114,7 @@ icon: /Textures/Tiles/plating.png keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True @@ -1059,6 +1130,7 @@ icon: /Textures/Tiles/cropped_parallax.png keywords: [] checkCanInteract: False + checkConsciousness: False clientExclusive: True autoPopulate: False temporary: True diff --git a/shell.nix b/shell.nix index da363feda9c..9a1b0ca4290 100644 --- a/shell.nix +++ b/shell.nix @@ -12,7 +12,6 @@ let SDL2 libGL openal - glibc freetype fluidsynth soundfont-fluid