From b00b9e8522535a666fea609992fd99507f7b4f8a Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 20:09:51 -0700 Subject: [PATCH 01/46] Mirror: add more astro-grasses (#380) ## Mirror of PR #26381: [add more astro-grasses](https://github.com/space-wizards/space-station-14/pull/26381) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `89235b9e1b91b32b3e55b364d46c79daabe199e9` PR opened by IProduceWidgets at 2024-03-24 06:01:14 UTC --- PR changed 7 files with 130 additions and 1 deletions. The PR had the following labels: - No C# - Status: Needs Review ---

Original Body

> > > > ## About the PR > > Ever fearful that their staff will manage to touch real grass, NanoTrasen has put billions of spesos of work into developing the worlds most life like astro-grasses. Yet still, with all the innovations made, the glorious corporate overlords have deemed us worth of yet more varieties of real fake grass. It almost feels like you're actually outside! > ![image](https://github.com/space-wizards/space-station-14/assets/107586145/368d6f07-deab-4e55-a02e-e0845e178fbe) > > ## Why / Balance > > To celebrate the server's remarkable uptime metrics. > > ## Technical details > > > ## Media > > > - [X] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > ## Breaking changes > > > **Changelog** > > > > :cl: > - add: More varieties of astro-grass are now available. > - tweak: Astro-grass must now be cut instead of pried.
Co-authored-by: SimpleStation14 --- Resources/Locale/en-US/tiles/tiles.ftl | 3 ++ .../Entities/Objects/Misc/tiles.yml | 51 +++++++++++++++++++ .../Entities/Structures/Machines/lathe.yml | 3 ++ Resources/Prototypes/Recipes/Lathes/misc.yml | 21 ++++++++ .../Prototypes/Research/civilianservices.yml | 3 ++ .../Prototypes/Stacks/floor_tile_stacks.yml | 21 ++++++++ Resources/Prototypes/Tiles/floors.yml | 29 ++++++++++- 7 files changed, 130 insertions(+), 1 deletion(-) 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/Prototypes/Entities/Objects/Misc/tiles.yml b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml index 45762474a98..78bbd32f174 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml @@ -1056,6 +1056,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 +1107,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/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/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/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/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 From d19e5bb92ddd9b6fce5320c14711ccd7c34aa6eb Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 20:10:02 -0700 Subject: [PATCH 02/46] Mirror: fix: the captain can put his laser gun back in the box. (#379) ## Mirror of PR #26398: [fix: the captain can put his laser gun back in the box.](https://github.com/space-wizards/space-station-14/pull/26398) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `27a9b078239fb32be00e78fd980951f16f644dac` PR opened by IProduceWidgets at 2024-03-24 18:29:22 UTC --- PR changed 1 files with 1 additions and 0 deletions. The PR had the following labels: - No C# ---

Original Body

> > > > ## About the PR > > fixed #25519 the tagging for the captain's laser glass box. > > ## Why / Balance > > > ## Technical details > > > ## Media > > > - [X] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > ## Breaking changes > > > **Changelog** > > > > :cl: > - fix: The captain can now return his laser to the glass display box.
Co-authored-by: SimpleStation14 --- .../Entities/Objects/Weapons/Guns/Battery/battery_guns.yml | 1 + 1 file changed, 1 insertion(+) 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 From 3b635f1729de206da411c92c6f35c51fecb4a8ef Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 20:14:58 -0700 Subject: [PATCH 03/46] Mirror: haunted dungeon template (#321) ## Mirror of PR #23768: [haunted dungeon template](https://github.com/space-wizards/space-station-14/pull/23768) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `952b7f4c4e8e957c0c3765f7b20f2745c9297e27` PR opened by Emisse at 2024-01-09 07:36:29 UTC --- PR changed 17 files with 4009 additions and 67 deletions. The PR had the following labels: ---

Original Body

> also for sloth when he gets to it > > Requires https://github.com/space-wizards/RobustToolbox/pull/4980
Co-authored-by: SimpleStation14 --- .../DungeonJob.CorridorClutterPost.cs | 53 + .../Procedural/DungeonJob.PostGen.cs | 89 +- .../Procedural/DungeonJob.PrefabDunGen.cs | 2 +- .../Procedural/DungeonJob.WormPost.cs | 193 + Content.Server/Procedural/DungeonJob.cs | 6 + Content.Shared/Procedural/Dungeon.cs | 7 + Content.Shared/Procedural/DungeonRoom.cs | 2 +- .../PostGeneration/BoundaryWallPostGen.cs | 20 +- .../PostGeneration/CornerClutterPostGen.cs | 4 +- .../PostGeneration/CorridorClutterPostGen.cs | 18 + .../PostGeneration/CorridorPostGen.cs | 15 +- .../PostGeneration/WormCorridorPostGen.cs | 42 + Resources/Maps/Dungeon/haunted.yml | 3251 +++++++++++++++++ .../Prototypes/Procedural/Themes/haunted.yml | 308 ++ .../Prototypes/Procedural/dungeon_configs.yml | 55 +- .../Prototypes/Procedural/salvage_mods.yml | 8 +- Resources/Prototypes/tags.yml | 3 + 17 files changed, 4009 insertions(+), 67 deletions(-) create mode 100644 Content.Server/Procedural/DungeonJob.CorridorClutterPost.cs create mode 100644 Content.Server/Procedural/DungeonJob.WormPost.cs create mode 100644 Content.Shared/Procedural/PostGeneration/CorridorClutterPostGen.cs create mode 100644 Content.Shared/Procedural/PostGeneration/WormCorridorPostGen.cs create mode 100644 Resources/Maps/Dungeon/haunted.yml create mode 100644 Resources/Prototypes/Procedural/Themes/haunted.yml 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.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/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/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/tags.yml b/Resources/Prototypes/tags.yml index 6d0120aed0e..789b7c92968 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 From e5402230b693799b6b65711220483afac2ed85a5 Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 20:19:40 -0700 Subject: [PATCH 04/46] Mirror: Change collision mask of canisters to allow passing through cargo flaps (#231) ## Mirror of PR #26193: [Change collision mask of canisters to allow passing through cargo flaps](https://github.com/space-wizards/space-station-14/pull/26193) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `03b5c21b6e4d0efc70e0172690d9d2ec02d7a711` PR opened by IamVelcroboy at 2024-03-16 20:59:22 UTC --- PR changed 1 files with 1 additions and 1 deletions. The PR had the following labels: - No C# ---

Original Body

> ## About the PR > Title > > ## Why / Balance > Frequently requested feature/QoL > > ## Technical details > n/a > > ## Media > n/a > > - [x] I have added screenshots/videos to this PR showcasing its changes in-game, **or** this PR does not require an in-game showcase > > ## Breaking changes > n/a > > **Changelog** > :cl: Velcroboy > - tweak: Tweaked gas canisters to pass through cargo flaps.
Co-authored-by: SimpleStation14 --- .../Entities/Structures/Storage/Canisters/gas_canisters.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From 7f1bd0f0925f49dda6cd38f871227f7c88eb44b0 Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 20:22:27 -0700 Subject: [PATCH 05/46] Mirror: Sort agents by success rate in end game summary (#200) ## Mirror of PR #26058: [Sort agents by success rate in end game summary](https://github.com/space-wizards/space-station-14/pull/26058) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `d674be697e83b590db5aaec9f4411dd57c131861` PR opened by Crotalus at 2024-03-12 22:44:16 UTC --- PR changed 1 files with 34 additions and 16 deletions. The PR had the following labels: - Status: Needs Review ---

Original Body

> ## About the PR > Sort the agents by success rate in the end game summary > ## Why / Balance > Fame and glory to the robust > > **Changelog** > :cl: > - tweak: Sort agents by success rate in end game summary > >
Co-authored-by: SimpleStation14 --- Content.Server/Objectives/ObjectivesSystem.cs | 50 +++++++++++++------ 1 file changed, 34 insertions(+), 16 deletions(-) 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) From 999ef0c43b7c3735d334f481e7063050f8217be5 Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 20:32:35 -0700 Subject: [PATCH 06/46] Mirror: Improves Medical Hud interface and functionality (#253) ## Mirror of PR #26027: [Improves Medical Hud interface and functionality](https://github.com/space-wizards/space-station-14/pull/26027) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `8d40bc36a93d3d5c6d3ece6c662ac9747f7837ae` PR opened by DoutorWhite at 2024-03-12 07:00:06 UTC --- PR changed 8 files with 78 additions and 13 deletions. The PR had the following labels: - Changes: Sprites - Status: Awaiting Changes ---

Original Body

> ## About the PR > > There are some changes to the Medical Hud interface: The icon has been changed and now there is one for each mob state, making it easier to recognize whether the mob is rotting, dead or crit. > > ## Why / Balance > > It's more visually pleasing and helps with discerning mob states. > > ## Technical details > > There is a decision structure for determining which icon is appropriate for the mob's state. It's the only relevant code change. > > ## Media > > ![Captura de tela 2024-03-13 230527](https://github.com/space-wizards/space-station-14/assets/68350815/9df6e598-94b7-4efa-81c6-020bf3a724e1) > > - [X] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > > **Changelog** > > :cl: > - add: Introduce new health status icons. > - tweak: Enhance the Medical HUD to display the health status of players and mobs using the newly added icons.
Co-authored-by: SimpleStation14 --- .../Overlays/ShowHealthIconsSystem.cs | 25 ++++++++++------ .../Damage/Components/DamageableComponent.cs | 16 ++++++++++- Resources/Prototypes/StatusEffects/health.yml | 27 +++++++++++++++++- .../Misc/health_icons.rsi/Critical.png | Bin 0 -> 125 bytes .../Interface/Misc/health_icons.rsi/Dead.png | Bin 0 -> 214 bytes .../Interface/Misc/health_icons.rsi/Fine.png | Bin 1120 -> 139 bytes .../Misc/health_icons.rsi/Rotting.png | Bin 0 -> 135 bytes .../Interface/Misc/health_icons.rsi/meta.json | 23 +++++++++++++-- 8 files changed, 78 insertions(+), 13 deletions(-) create mode 100644 Resources/Textures/Interface/Misc/health_icons.rsi/Critical.png create mode 100644 Resources/Textures/Interface/Misc/health_icons.rsi/Dead.png create mode 100644 Resources/Textures/Interface/Misc/health_icons.rsi/Rotting.png 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.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/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/Textures/Interface/Misc/health_icons.rsi/Critical.png b/Resources/Textures/Interface/Misc/health_icons.rsi/Critical.png new file mode 100644 index 0000000000000000000000000000000000000000..779874eaaeb3c64047fc7f01bc618725d36d2e7b GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqE}kxqArezt`*({nC~z?IhaZ}G z=j7Z1HJzG&89UT`g_;<4tQ4ML#j;?>N@Iq%dv-aiswuB@JlEN=PImjkukq#1-&{|z Y1hPvq8@V+r1I=UbboFyt=akR{06Re@u>b%7 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..beceebd05cf3cb07497ad0a16f286074c94c1a12 GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^20+Zg!3HGvYuC5~skxpmjv*Gk$tej52?hoqew=S$ zjoGoGxp2d2V=0M>KlKHVnanELSb3S*fS~Q5&iNLd4~d7E*KiefK4vB>{Ma|bSQ(T LtDnm{r-UW|I{QlO literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Misc/health_icons.rsi/Fine.png b/Resources/Textures/Interface/Misc/health_icons.rsi/Fine.png index 8d07f93496e64642ba31441fa4f9881f5ca27c42..45725aa73c819040ef7f9209ce2df68bff32c47b 100644 GIT binary patch delta 111 zcmV-#0FeLS2#W!bBWM6pNklx zuRG~JIs=e2m=F=xB@K56;J6+D?sHGiXtQLc*JP4<1C|XfH_PrvFB=U0Z@#wF7|rZT Ry&?br002ovPDHLkV1fYBDqa8p delta 1100 zcmV-S1he~#0pJLbBYy*qdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O3yslIti8 zh5u_6vjj^*JeGqERLu@%`E$U;d318SZ`+|_up+}jpOCw${`YUAfAEn-BRLDvC+`=0 zTyjY=265Rxd(Vp-*GF5wf3nl@gTSQdb-(p>`e)ef{y=ckzJEU3DQt6|I48QTJSWt? zvS2X%;+#ljxAVNGG@r}vLHhizW!h}-UhiE%Fp6P56_To~3$C%RqW!Cy(Fa^v1x~C9 zW2b)D<$dhv7`_DW7`?=9$4(yeCBDS2wGvya z`|h&yh?J+fsejv6#t4opLaF01j~4JXjKgRNEnQj zX~#sZ_0(lv;t?z8lAbk?(aH5Iya0sTjH!+Ijz$l8vwu8*RS>ih=7T0M*rDQ7I2F?Gh%86G*Wvg+zqTm2f=xTZC4NT1DZ zw)rh=aZ6h+QncXs7heLESW?NAD^jVtYSq_JV@)+Ty81k~6%oWh+L z2)fE*jSqHra)0DT=KhMCd?H63-4*1hqnqTua(hFq6DCzp3cZQWYxs1U3c|4uJm zAZF&#c`-u^T_EP3M<>M$Ep&mHr#$+dn1?*3vvuf}$8@$1-9*s^#c?nG7Zk@Kims{H zy{D4^000SaNLh0L01m_e01m_fl`9S#00007bV*G` z2j>S25iSD9jze_-002`-L_t&-(}j=04S*mJ1m}n?SQ15G2|TtK5-fotu(5@FKU;{YL>opGFfn^~8v>a(U&hhEXg8khrrPvMef+**P SP(L960000|*$lNmf+{an^LB{Ts5NEt6f literal 0 HcmV?d00001 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 +} From 6d736aec7bd592d8c2d6a38194787f0d9bdefc93 Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 20:41:03 -0700 Subject: [PATCH 07/46] Mirror: make traitor syndicate reinforcements get the traitor role (#279) ## Mirror of PR #25400: [make traitor syndicate reinforcements get the traitor role](https://github.com/space-wizards/space-station-14/pull/25400) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `a7d95c3b13bfa64fe08a8f855515cdc1d258808a` PR opened by Dutch-VanDerLinde at 2024-02-20 00:35:08 UTC --- PR changed 1 files with 15 additions and 4 deletions. The PR had the following labels: - No C# - Status: Needs Review ---

Original Body

> > > > ## About the PR > traitor syndie reinforcements get the autotraitor component, like traitor syndie monkies > > ## Why / Balance > syndie monkies can see the codewords, so why cant the more expensive human reinforcement see the codewords aswell? > this also makes it so they are listed as an antag with admin vision > > > ## Technical details > made syndicate base for human reinforcement > ![image](https://github.com/space-wizards/space-station-14/assets/45323883/4959010a-b867-4563-aa74-7232931f298c) > > gives traitor reinforcement the autotraitor component > > ## Media > https://github.com/space-wizards/space-station-14/assets/45323883/5ada01f9-d098-46e5-baea-487e2215ba58 > - [X] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > ## Breaking changes > no > > **Changelog** > no >
Co-authored-by: SimpleStation14 --- .../Prototypes/Entities/Mobs/Player/human.yml | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) 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 From cc41b007572611ef19ef02034e48548d7482556d Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 20:43:39 -0700 Subject: [PATCH 08/46] Mirror: Unify `Content`'s `EntitySystem` logging (#240) ## Mirror of PR #26216: [Unify `Content`'s `EntitySystem` logging](https://github.com/space-wizards/space-station-14/pull/26216) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `eeaea6c25b496106eb741e93738f2ab8503949ba` PR opened by LordCarve at 2024-03-17 20:05:08 UTC --- PR changed 13 files with 43 additions and 82 deletions. The PR had the following labels: - Status: Needs Review ---

Original Body

> > > > ## About the PR > > Log things via `Log` with generated sawmill name rather than an explicitly set one for all Content `EntitySystem`s, except the ones with `Rule`s. In all cases the explicit `_sawmill` was redundant. > > ## Why / Balance > > - Bringing consistency to logs (all logs originating from `EntitySystem` should be recognizible in the logs `system.something`). > - Logs' sawmills match system class name to assist with debugging. > - Less likelihood of someone building a new `EntitySystem` to copy-paste the unnecessary `_sawmill` and instaed use the appropriate inherited `Log` instead. > > ## Technical details > > This addresses **_just_** `Content`'s `EntitySystem`s. > > `GameRuleSystem` **and all classes inheriting from it are excluded.** I want to include both the calling system name and the rule name in the sawmill name - this however requires engine changes. I thus opted to cut out that part and made this a `Content`-only PR. > > Also, even with the rule changes, the `GameRule`s themselves will be excluded pending antag refactor, because currently they are a _hot-hot_ mess and I'm sure it's preferable by everyone for me to wait for it to cool down before introducing merge conflicts unnecessarily. > > Log Sawmill changes: > **System class | current master sawmill | this PR's sawmill** > `VaporSystem.cs`: `vapor` -> `system.vapor` > `DeviceListSystem.cs`: `devicelist` -> `system.device_list` > `ForensicScannerSystem.cs`: `forensic.scanner` -> `system.forensic_scanner` > `MappingSystem.cs`: `autosave` -> `system.mapping` > `MechSystem.cs`: `mech` -> `system.mech` > `LagCompensationSystem.cs`: `lagcomp` -> `system.lag_compensation` > `NpcFactionSystem.cs`: `faction` -> `system.npc_faction` > `EmergencyShuttleSystem.cs`: `shuttle.emergency` -> `system.emergency_shuttle` > `EventManagerSystem.cs`: `events` -> `system.event_manager` > `VendingMachineSystem.cs`: `vending` -> `system.vending_machine` > `SharedAnomalySystem.cs`: `anomaly` -> `system.anomaly` > `SharedDeviceLinkSystem.cs`: `devicelink` -> `system.device_link` > `ThirstSystem.cs`: `thirst` -> `system.thirst` > > Manually tested most (all that I had doubts about) and confirmed that `LagCompensationSystem`'s `Log.Level` is getting correctly set like this. > > ## Media > > > - [X] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > ## Breaking changes > > Log sawmill name changes. Any analyzers/other software that processes logs needs to be adjusted to new sawmills. Full list of changes in PR - section Technical details.
Co-authored-by: SimpleStation14 --- .../Chemistry/EntitySystems/VaporSystem.cs | 6 ++---- .../DeviceNetwork/Systems/DeviceListSystem.cs | 7 ++----- .../Forensics/Systems/ForensicScannerSystem.cs | 10 +++------- Content.Server/Mapping/MappingSystem.cs | 14 ++++++-------- Content.Server/Mech/Systems/MechSystem.cs | 6 +----- .../Movement/Systems/LagCompensationSystem.cs | 8 +++----- Content.Server/NPC/Systems/NpcFactionSystem.cs | 16 +++++++--------- .../Shuttles/Systems/EmergencyShuttleSystem.cs | 9 +++------ .../StationEvents/EventManagerSystem.cs | 18 +++++++----------- .../VendingMachines/VendingMachineSystem.cs | 7 ++----- Content.Shared/Anomaly/SharedAnomalySystem.cs | 15 ++++++--------- .../DeviceLinking/SharedDeviceLinkSystem.cs | 6 ++---- .../Nutrition/EntitySystems/ThirstSystem.cs | 6 +----- 13 files changed, 45 insertions(+), 83 deletions(-) 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/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/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/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/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/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/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/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/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/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}"); } } From cd0be961a109069a5abc2c062be0346765b4dfff Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 20:44:08 -0700 Subject: [PATCH 09/46] Mirror: Thrown soap/banana/(etc?) will fail to slip until it lands (#280) ## Mirror of PR #24494: [Thrown soap/banana/(etc?) will fail to slip until it lands](https://github.com/space-wizards/space-station-14/pull/24494) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `e061cb3f8c9dc8ddc26624ead2086dfb41465aae` PR opened by Errant-4 at 2024-01-25 00:04:36 UTC --- PR changed 1 files with 21 additions and 1 deletions. The PR had the following labels: - Status: Awaiting Changes ---

Original Body

> ## About the PR > Thrown objects can no longer slip until they have landed. For a succesful slip, the attacker must now calculate how to throw the soap in front of/on the target. If the target is chasing and very close, it might be more effective to drop the soap/banana rather than throw it, but then this choice is another decision that must be quickly made to carry out the slip (also you can mess that up and slip yourself) > > A "MISS" popup is displayed mostly just to communicate that this was not a glitch until players get used to the idea. This popup can be removed later if we don't want it > > I tested what I could think of, but might have missed something, more eyes would be good on this one > > fixes #18027 > > ## Why / Balance > Slips are too easy for how annoying (or potentially lethal) they are. Currently, slip throws are heavily slanted to succeed at short range, where they will nearly always hit. As the range increases, it becomes more and more possible to dodge. But it's basically impossible to _fail_ the attack, the question is, will the target be able to anticipate and slow down to dodge it. This change is intended to make thrown slips, especially at short range, difficult for the attacker too, not just the target. > > If the argument for the current state is that the target should git gud, why should that not also apply to the attacker? > > > (Also if we want to talk about what's "realistic", it also makes very little sense to yeet a banana peel at someone and have them fall over from that, unless one tacitly agrees that the attack automatically always hits right under their feet (yet keeps flying anyway) ) > > ## Media > > https://github.com/space-wizards/space-station-14/assets/35878406/9e548b2d-ab99-4cbf-98b8-9ecd7cd14711 > > - [X] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > **Changelog** > > Make sure to take this Changelog template out of the comment block in order for it to show up. > :cl: Errant > - tweak: Thrown objects can no longer slip while they are still in flight. >
Co-authored-by: SimpleStation14 --- Content.Shared/Slippery/SlipperySystem.cs | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) 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); From a7923808070f0f11d1dafb66394cf07d0a6bd326 Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 20:44:51 -0700 Subject: [PATCH 10/46] Mirror: Fix some invalid damage types (#288) ## Mirror of PR #26295: [Fix some invalid damage types](https://github.com/space-wizards/space-station-14/pull/26295) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `b34777177ca2b379c67fb5d0d117f95b8809f43e` PR opened by Tayrtahn at 2024-03-20 19:10:30 UTC --- PR changed 7 files with 8 additions and 8 deletions. The PR had the following labels: - No C# ---

Original Body

> > > > ## About the PR > > Corrected the names of a few damage types in various DamageTypeSpecifiers. > > ## Why / Balance > > This might have some balance implications, as a few things will be doing damage they didn't previously. > > - Space bears now do some blunt damage along with the usual slash. > - The Throngler does massive structural damage. > - RobustHarvest does a little heat damage to non-plants. > - Fresium does a bit of negative heat damage. > > All of these effects were presumably intended by the authors of various PRs that added them, but were nonfunctional due to using an invalid name. If it's decided that these additional damage types are undesired, they should just be removed instead of relying on a bug to ignore them. > > I also changed a few entries that were doing 0 damage in invalid types. They now do 0 damage in valid types, for whatever that's worth. > > ## Technical details > > I haven't figured out how to get the YAML linter to properly catch these issues, but I got it to spit out a list of these errors while messing around with it, so I figured I'd go ahead and fix them. > > ## Media > > > - [X] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > ## Breaking changes > > > **Changelog** > > > >
Co-authored-by: SimpleStation14 --- Resources/Prototypes/Entities/Mobs/NPCs/space.yml | 2 +- Resources/Prototypes/Entities/Objects/Tools/cowtools.yml | 2 +- Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml | 2 +- Resources/Prototypes/NPCs/Combat/melee.yml | 4 ++-- Resources/Prototypes/NPCs/utility_queries.yml | 2 +- Resources/Prototypes/Reagents/botany.yml | 2 +- Resources/Prototypes/Reagents/fun.yml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) 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/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/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/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/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 From 3e66b812456209fa374eb9d4111f34238885c58d Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 20:45:54 -0700 Subject: [PATCH 11/46] Mirror: Split smoke grenade sound into two parts (#198) ## Mirror of PR #26095: [Split smoke grenade sound into two parts](https://github.com/space-wizards/space-station-14/pull/26095) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `696f97f78ecfb86e4483148588a52e39bf27073c` PR opened by Tayrtahn at 2024-03-13 23:58:41 UTC --- PR changed 4 files with 7 additions and 2 deletions. The PR had the following labels: - No C# ---

Original Body

> > > > ## About the PR > > Split Smoke-grenade.ogg into separate prime and detonate sounds. Also converted them from stereo to mono to stop client errors from playing a stereo sound at a position. > > ## Why / Balance > > Smoke-grenade.ogg covers both the priming sound and the sound of the smoke being released, separated by a few seconds of silence. This is inefficient, and inflexible for changing the fuse length. Separate sounds keep it better synchronized with the action. Additionally, the smoke release part played alongside smoke.ogg, which made a lot of noise. This swaps smoke.ogg for the smoke release part of Smoke-grenade.ogg so there aren't two overlapping sounds. > > ## Technical details > > I also moved the sounds from Audio/Effects to Audio/Items, since it seems more appropriate, and updated the attributions.yml files accordingly > > ## Media > > I don't have audio recording with my screen recording setup... > - [ ] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > ## Breaking changes > > > **Changelog** > > > > Nah
Co-authored-by: SimpleStation14 --- Resources/Audio/Items/attributions.yml | 5 +++++ Resources/Audio/Items/smoke_grenade_prime.ogg | Bin 0 -> 6184 bytes Resources/Audio/Items/smoke_grenade_smoke.ogg | Bin 0 -> 40075 bytes .../Objects/Weapons/Throwable/grenades.yml | 4 ++-- 4 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 Resources/Audio/Items/smoke_grenade_prime.ogg create mode 100644 Resources/Audio/Items/smoke_grenade_smoke.ogg 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 0000000000000000000000000000000000000000..1c6cbcd25ab32f7f468ea2be6a8ea091b41739a7 GIT binary patch literal 6184 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/Items/smoke_grenade_smoke.ogg b/Resources/Audio/Items/smoke_grenade_smoke.ogg new file mode 100644 index 0000000000000000000000000000000000000000..7603869d1748f1e3dd23826c6af298318c9a54bb GIT binary patch literal 40075 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 Date: Sat, 11 May 2024 20:46:06 -0700 Subject: [PATCH 12/46] Mirror: Round start Ion storms (#223) ## Mirror of PR #26165: [Round start Ion storms](https://github.com/space-wizards/space-station-14/pull/26165) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `23e6d537a44d8aaea781462ce600292811ac4998` PR opened by Plykiya at 2024-03-16 01:37:52 UTC --- PR changed 1 files with 0 additions and 1 deletions. The PR had the following labels: - No C# ---

Original Body

> > > > ## About the PR > > Changed the earliest start for ion storms to be at shift start > > ## Why / Balance > > Ion storms rarely happen, and it adds more variety for borgs if it does happen early on, also Discord discussion... > https://discord.com/channels/310555209753690112/1218041638115348500 > > ## Technical details > > Changed earliestStart from 20 minutes to 0 minutes in the yml > > **Changelog** > > > > :cl: > - tweak: Ion storms now have a chance of happening from the start of shift.
Co-authored-by: SimpleStation14 --- Resources/Prototypes/GameRules/events.yml | 1 - 1 file changed, 1 deletion(-) 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 From 4b53cdf5e5e2fdeb1becb2c19158288659bbb4b4 Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 20:47:38 -0700 Subject: [PATCH 13/46] Mirror: fix eggsplosion (#218) ## Mirror of PR #26146: [fix eggsplosion](https://github.com/space-wizards/space-station-14/pull/26146) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `d87be642ee9ec81064eff22389705755ab557b54` PR opened by deltanedas at 2024-03-15 15:46:48 UTC --- PR changed 1 files with 2 additions and 1 deletions. The PR had the following labels: - No C# ---

Original Body

> ## About the PR > how does this shit not make yaml linter fail so many bugs have been caused by it > > ## Media > > ![15:49:11](https://github.com/space-wizards/space-station-14/assets/39013340/7a642926-4197-435c-a886-871808b59d7a) >
Co-authored-by: SimpleStation14 --- Resources/Prototypes/Recipes/Construction/Graphs/food/egg.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 From 89d5d17770f0c2f16713c7506507218faf624dc5 Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 20:51:14 -0700 Subject: [PATCH 14/46] Mirror: Fix borg charger error (#252) ## Mirror of PR #26230: [Fix borg charger error](https://github.com/space-wizards/space-station-14/pull/26230) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `29887636e5614f4f91b968107875722293f0c8b4` PR opened by Tayrtahn at 2024-03-18 12:52:09 UTC --- PR changed 1 files with 7 additions and 7 deletions. The PR had the following labels: ---

Original Body

> > > > ## About the PR > > Borg chargers can now charge borgs again. > > ## Why / Balance > > Bug fix. > > ## Technical details > > An oversight in #25871 caused ChargerSystem to call BatterySystem's SetCharge with the wrong EntityUid. > > SearchForBattery has been given another out argument which gives the found battery's uid so it can be passed to SetCharge. > > To the author of #25871: get better at testing your code! > > ## Media > > > - [X] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > ## Breaking changes > > > **Changelog** > > > > :cl: > - fix: Cyborg recharging stations are able to charge cyborgs again.
Co-authored-by: SimpleStation14 --- .../Power/EntitySystems/ChargerSystem.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) 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; } } From b872c15092b0d19feafd9788926a51b428a658bd Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 20:51:32 -0700 Subject: [PATCH 15/46] Mirror: Fix blunt melee weapon hitsound (#282) ## Mirror of PR #26286: [Fix blunt melee weapon hitsound](https://github.com/space-wizards/space-station-14/pull/26286) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `205edfe6d74c14b288fae27db7530e3bed4f5511` PR opened by Dutch-VanDerLinde at 2024-03-20 13:23:56 UTC --- PR changed 14 files with 36 additions and 0 deletions. The PR had the following labels: - No C# ---

Original Body

> > > > ## About the PR > most blunt weapons sounded like you're not doing any damage > > ## Why / Balance > quietly gibbing people is bad > > also helps #25929 partially > > ## Media > > > - [X] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > ## Breaking changes > no
Co-authored-by: SimpleStation14 --- Resources/Prototypes/Entities/Mobs/base.yml | 2 ++ .../Entities/Objects/Specific/Hydroponics/tools.yml | 2 ++ .../Prototypes/Entities/Objects/Specific/Mech/mechs.yml | 2 ++ .../Prototypes/Entities/Objects/Tools/flashlights.yml | 3 ++- .../Prototypes/Entities/Objects/Tools/jaws_of_life.yml | 2 ++ Resources/Prototypes/Entities/Objects/Tools/tools.yml | 8 ++++++++ Resources/Prototypes/Entities/Objects/Tools/welders.yml | 4 ++++ .../Entities/Objects/Weapons/Melee/baseball_bat.yml | 2 ++ .../Prototypes/Entities/Objects/Weapons/Melee/cult.yml | 2 ++ .../Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml | 2 ++ .../Prototypes/Entities/Objects/Weapons/Melee/mining.yml | 2 ++ .../Entities/Objects/Weapons/Melee/sledgehammer.yml | 2 ++ .../Prototypes/Entities/Objects/Weapons/security.yml | 2 ++ .../Prototypes/Entities/Structures/Furniture/chairs.yml | 2 ++ 14 files changed, 36 insertions(+), 1 deletion(-) 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/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/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/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/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/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/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/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 From 7f3c8fdf2fc89c9c74b440e50b497800859248e1 Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 21:02:02 -0700 Subject: [PATCH 16/46] Mirror: Recolor paper-stamp detective (#230) ## Mirror of PR #26194: [Recolor paper-stamp detective](https://github.com/space-wizards/space-station-14/pull/26194) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `0ea4c5ca7c6045e715446b50990bd08cc651bffe` PR opened by Awlod at 2024-03-16 22:18:06 UTC --- PR changed 1 files with 0 additions and 0 deletions. The PR had the following labels: - No C# - Changes: Sprites ---

Original Body

> > ![old-paper-stamp-detective](https://github.com/space-wizards/space-station-14/assets/159960340/e0f3e7fb-34ca-47c9-a4c1-b26e334b3ea4) > ![Paper-stamp-detective](https://github.com/space-wizards/space-station-14/assets/159960340/52c2d314-3c1b-4925-a171-eb7eaea3f9a2) > the old seal of the detective on paper has been changed to a new one > > > > > ## About the PR > Due to the fact that the color of the detective's seal has been changed. However, the printing on the paper has not been changed > > ## Media > > > - [x] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > ## Breaking changes > > > **Changelog** > - The color of the detective's stamp on the paper has changed > > >
Co-authored-by: SimpleStation14 --- .../bureaucracy.rsi/paper_stamp-detective.png | Bin 115 -> 134 bytes 1 file changed, 0 insertions(+), 0 deletions(-) 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 097234f2830988431b5619c52ac14a5be7246de2..284d01c6ddde87ba24115678161abf805294ab03 100644 GIT binary patch delta 104 zcmV-u0GI!Bh5?WyVgYkfM?wIu&K&6g002NqL_t(oh3(M62>>7v#K3#ofOUvPSdsOg zFF||@0m(FwWg{d>(gSm}MB}}dL`Li=GUAS64`BD7Be1w6=?e?^u^e5v6OX?D0000< KMNUMnLSTYbVku$( delta 85 zcmV-b0IL6n0dtTfPdZ6NK~#90?a;vq05A;0K<$~8yHoNil)ejwqFX@5AW4!QSkTdU rK}SaHXk^44jXe;%{~QsEOOn1YCc7H#?r5V|00000NkvXXu0mjf9fl*3 From a34a1eb8d280f8abc7c2cbab9d4b7b30b5709cb0 Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 21:02:18 -0700 Subject: [PATCH 17/46] Mirror: Small performance optimization. Don't do String.Trim() second time (#219) ## Mirror of PR #26161: [Small performance optimization. Don't do String.Trim() second time](https://github.com/space-wizards/space-station-14/pull/26161) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `3425444c5383f73c830f6299885e44cb4bcab46a` PR opened by CrafterKolyan at 2024-03-15 21:45:04 UTC --- PR changed 1 files with 1 additions and 1 deletions. The PR had the following labels: ---

Original Body

> ## About the PR > Super small performance optimization > > ## Technical details > Obvious change
Co-authored-by: SimpleStation14 --- Content.Server/Disposal/Tube/DisposalTubeSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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)); From 371c2a5b01381f450a100c527249a7092b8cfa88 Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 21:02:38 -0700 Subject: [PATCH 18/46] Mirror: Fix store refunds (#226) ## Mirror of PR #26173: [Fix store refunds](https://github.com/space-wizards/space-station-14/pull/26173) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `f8d023f286bdf1b38bb69349e1c474792a950f51` PR opened by metalgearsloth at 2024-03-16 11:25:11 UTC --- PR changed 1 files with 4 additions and 2 deletions. The PR had the following labels: ---

Original Body

> Index out of range + error log + cleaning up boughtentities. > > :cl: > - fix: Fix store refunds.
Co-authored-by: SimpleStation14 --- Content.Server/Store/Systems/StoreSystem.Ui.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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; From 10f5e66cdb3c0d63c249df506c2019eb9a24811f Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 21:02:50 -0700 Subject: [PATCH 19/46] Mirror: Convert "IgnoreWeatherComponent" into "BlockWeatherComponent" (#220) ## Mirror of PR #26135: [Convert "IgnoreWeatherComponent" into "BlockWeatherComponent"](https://github.com/space-wizards/space-station-14/pull/26135) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `4aa72af574cc7a3370085fb70831fbde1df29077` PR opened by TheShuEd at 2024-03-15 09:30:10 UTC --- PR changed 10 files with 12 additions and 11 deletions. The PR had the following labels: ---

Original Body

> ## About the PR > inverting the logic of the component. Now inversely, tagging an entity with this component will cause it to block weather if it is attached to the floor. Previously, this conversely excluded the entity from weather checking, and only applied to trees on planets. > > It now blocks rain on walls, windows, airlocks. > > ## Why / Balance > 95% of the structures in the game should not block weather. Railings, tables, chairs, fences all logically allow water to pass through. We're making a map under rainy skies, and it's annoying. > ![image](https://github.com/space-wizards/space-station-14/assets/96445749/d383e2c1-17a3-4c83-8620-e558f3ba9b3c) > ![image](https://github.com/space-wizards/space-station-14/assets/96445749/f872d0ca-aac2-43b0-a2c4-ba0ed29443f5) > ![image](https://github.com/space-wizards/space-station-14/assets/96445749/4b225631-0ec6-45d7-911d-76aa35128b35) > > this will also be useful for the visual part of expeditions or something with planets when weather is added there in the future
Co-authored-by: SimpleStation14 --- ...reWeatherComponent.cs => BlockWeatherComponent.cs} | 4 ++-- Content.Shared/Weather/SharedWeatherSystem.cs | 11 +++-------- .../Prototypes/Entities/Objects/Decoration/flora.yml | 1 - .../Doors/Airlocks/base_structureairlocks.yml | 1 + .../Structures/Doors/MaterialDoors/material_doors.yml | 1 + .../Structures/Doors/SecretDoor/secret_door.yml | 1 + .../Entities/Structures/Doors/Shutter/shutters.yml | 1 + .../Entities/Structures/Furniture/bookshelf.yml | 1 + .../Prototypes/Entities/Structures/Walls/walls.yml | 1 + .../Prototypes/Entities/Structures/Windows/window.yml | 1 + 10 files changed, 12 insertions(+), 11 deletions(-) rename Content.Shared/Weather/{IgnoreWeatherComponent.cs => BlockWeatherComponent.cs} (51%) 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/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/Structures/Doors/Airlocks/base_structureairlocks.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml index a185d453533..5fca0819984 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml @@ -147,6 +147,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 d3b8521a9bc..4b6f72de934 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/MaterialDoors/material_doors.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/MaterialDoors/material_doors.yml @@ -56,6 +56,7 @@ key: walls mode: NoSprite - 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 87fd8ef0106..e38ba1fd667 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Shutter/shutters.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Shutter/shutters.yml @@ -97,6 +97,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/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 03d7622a23c..fca0b975e98 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 From 087681459d7e8410df108dd0e3008d0455897feb Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 21:04:58 -0700 Subject: [PATCH 20/46] Mirror: fix legally distinct visor man plush name. (#287) ## Mirror of PR #26299: [fix legally distinct visor man plush name.](https://github.com/space-wizards/space-station-14/pull/26299) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `b06d40e8531250b2e7e391ea02e5c17e219a343a` PR opened by PJB3005 at 2024-03-21 01:33:59 UTC --- PR changed 1 files with 1 additions and 1 deletions. The PR had the following labels: - No C# ---

Original Body

> am in vr. approved by real spaniard. > >
Co-authored-by: SimpleStation14 --- Resources/Prototypes/Entities/Objects/Fun/toys.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index 7d9de4ac3df..794af663539 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml @@ -1229,7 +1229,7 @@ - type: entity parent: BasePlushie id: ToyAmongPequeno - name: among pequeno + name: among pequeño description: sus! components: - type: Sprite From a734bca6bdc17e69e216414d93f797ab6fd84737 Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 21:05:49 -0700 Subject: [PATCH 21/46] Mirror: Make fireaxe & shotgun cabinets destructible (#187) ## Mirror of PR #25962: [Make fireaxe & shotgun cabinets destructible](https://github.com/space-wizards/space-station-14/pull/25962) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `6574681bcb88e9c524b998c525d1980e88884e96` PR opened by Gyrandola at 2024-03-10 12:10:09 UTC --- PR changed 1 files with 19 additions and 1 deletions. The PR had the following labels: - No C# ---

Original Body

> > > > ## About the PR > > Makes fireaxe and shotgun cabinets destructible. > > ## Why / Balance > > Fixes #25525. > > ## Technical details > > Simply added the component to the fireaxe cabinet base entity. > Glass breaking sounds regardless of state. > Damage thresholds: > min: 200 > max: 300 (The axe will be destroyed as well). > > ## Media > > > - [X] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > ![Screenshot 2024-03-10 123916](https://github.com/space-wizards/space-station-14/assets/62253058/2ef7f962-8bac-4f6d-b97e-99efc3205b86) > > ![Screenshot 2024-03-10 124912](https://github.com/space-wizards/space-station-14/assets/62253058/984b8d3d-d073-4fe8-a66f-b7db18b23725) > > > > ## Breaking changes > > > **Changelog** > > > :cl: > - add: Fireaxe and Shotgun cabinets can now be destroyed. > >
Co-authored-by: SimpleStation14 --- .../Structures/Wallmounts/fireaxe_cabinet.yml | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) 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: From 3d0c9ff7f17c114a0795caa882d7dc84311eea03 Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 21:06:23 -0700 Subject: [PATCH 22/46] Mirror: Add "Juice that makes you Weh" to moths eating Lizard plushies (#152) ## Mirror of PR #26003: [Add "Juice that makes you Weh" to moths eating Lizard plushies](https://github.com/space-wizards/space-station-14/pull/26003) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `6d1f07a375a5d3f973d279a5d356b1f185d07cd5` PR opened by SlamBamActionman at 2024-03-11 15:42:49 UTC PR merged by web-flow at 2024-03-11 23:05:25 UTC --- PR changed 1 files with 18 additions and 0 deletions. The PR had the following labels: - No C# ---

Original Body

> > > > ## About the PR > > > Eating a Lizard Plushie as a moth now also makes you consume 10u _Juice that makes you Weh_. > > ## Why / Balance > > > 10u was chosen for 2 reasons: > > - Just finding and eating a plushie shouldn't be as rewarding as having to go through the additional process of juicing the plushie. 10u Wehjuice lasts for 40 seconds, while 30u Wehjuice lasts for 2 minutes. See it as juicing the plushie gives a higher, purer yield. > - Each bite removes 5u of the food's reagents. Having 10u fiber, 30u Wehjuice would take a whole 8 bites to get through. 10 fiber, 10u Wehjuice takes 4 bites, which is more manageable. > > ## Technical details > > > Just edits the SolutionContainer for those plushies. Plushies can't be drawn/injected with a syringe. > > ## Media > > > - [x] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > ## Breaking changes > > > **Changelog** > > > :cl: > - tweak: Moths eating lizard plushies will now start to Weh! >
Co-authored-by: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com> --- .../Prototypes/Entities/Objects/Fun/toys.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index 794af663539..bf45a44582b 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 From d3ad07a6c5e66fa6c56212dd073a03d68ae109d5 Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 21:07:01 -0700 Subject: [PATCH 23/46] Mirror: Slimes can drink fourteenloko (#116) ## Mirror of PR #25889: [Slimes can drink fourteenloko](https://github.com/space-wizards/space-station-14/pull/25889) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `a846966515e3051c131f00dc56743c360a91766e` PR opened by Nimfar11 at 2024-03-06 21:30:38 UTC PR merged by web-flow at 2024-03-07 20:50:10 UTC --- PR changed 1 files with 4 additions and 0 deletions. The PR had the following labels: - No C# - Status: Needs Review ---

Original Body

> ## About the PR > > Slimes can drink FourteenLoko not 1 time or even 2, but as much as they want. Their stomachs can process this obscure slurry without harming their bodies. > > ## Why / Balance > > Strange finding legal poison, that way they'll have at least one consumer in them. Interesting feature for the slime people. > > ## Media > > - [X] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > :cl: Nimfar11 > > - tweak: Slimes can now drink FourteenLoko without harming their bodies. >
Co-authored-by: Nim <128169402+Nimfar11@users.noreply.github.com> --- Resources/Prototypes/Reagents/Consumable/Drink/soda.yml | 4 ++++ 1 file changed, 4 insertions(+) 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 From c89418d51de0e32e7b7dd55ed6de8ad5f6c2dd8b Mon Sep 17 00:00:00 2001 From: FoxxoTrystan <45297731+FoxxoTrystan@users.noreply.github.com> Date: Sun, 12 May 2024 06:26:54 +0200 Subject: [PATCH 24/46] Vents Resprites (#399) # Vents Resprites This PR provide new sprites for Vents that in my opinion are more better looking with the up to date style then old TG. Those vents were first imported in Frontier Station in this PR: https://github.com/new-frontiers-14/frontier-station-14/pull/404 I am now importing it here as i will import a bunch of new/others sprites in the future. Also those vents sprites uses less space! --- # TODO - [x] Sprite Import. ---

Media

![image](https://github.com/Simple-Station/Einstein-Engines/assets/45297731/789f8a6e-66b2-4384-b519-27bdbb13be0b) _(Not Centered because i forgot the "NotRot" before testing)_

--- # Changelog :cl: - tweak: Better looking Vents Sprites! --- .../Structures/Piping/Atmospherics/unary.yml | 3 +++ .../Atmospherics/scrubber.rsi/meta.json | 17 ++++++----------- .../Atmospherics/scrubber.rsi/scrub_off.png | Bin 1002 -> 181 bytes .../Atmospherics/scrubber.rsi/scrub_on.png | Bin 20683 -> 468 bytes .../Atmospherics/scrubber.rsi/scrub_purge.png | Bin 7441 -> 514 bytes .../scrubber.rsi/scrub_welded.png | Bin 2012 -> 974 bytes .../Atmospherics/scrubber.rsi/scrub_wide.png | Bin 10949 -> 478 bytes .../Piping/Atmospherics/vent.rsi/meta.json | 14 +++++--------- .../Piping/Atmospherics/vent.rsi/vent_in.png | Bin 1595 -> 521 bytes .../Piping/Atmospherics/vent.rsi/vent_off.png | Bin 1117 -> 174 bytes .../Piping/Atmospherics/vent.rsi/vent_out.png | Bin 2926 -> 525 bytes .../Atmospherics/vent.rsi/vent_welded.png | Bin 1958 -> 243 bytes 12 files changed, 14 insertions(+), 20 deletions(-) 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/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 efc173d893669b4ff418f61ae32ccd3d92ffd3fd..9752342e2d884ee73dd117145eba5ebf99de6d20 100644 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv{s5m4*8>L*L`FtRNlEGI>YAIG zp8E1c8z{wC666=m;PC858jus>>EaloF)=wo!a{+Ak;%Yr@d6VU* literal 1002 zcmVl*O7=|C$od|F^psYA>5N~k^Gx1;;@L+rKV59~AMS;!%@|!vqC^QL$mN*7D_!Ys>XLI~0{ z#TY}=G*neZUDpU92!a6L_whWBJkP1?dZj^FC;!PEkY(9ye}CWJJO~1+s$z0mFrH|3 zcOrYOQp!#en5`lR>*oLP6kG^l;gj2fyQxA-$#|jx7*8}(O75nL$!$TN=Xjon5W?o` zYZkw5{?Y)HWl5T*7CxS6hNBCbrs3@L5P-AOLz<>xIJ#gw(RLDPnm#I2ZPW#SVF0o$ zn7U8 zs;c7cyFCk=Pv-5rJ({MmpO21D@O>Ypl>Pnr`FWf5cg9~BfU+!^PQUWy%R|BW^RK@- zJ3Zv+_yhpo_qn;gvJ>ma4|zBoUD(28%ulV;pez2;8URq&wJkWq(FJ!?^$31*eTDD) z77h=Esjll*3-6l$WB`N^Hlp*KYnsNw=i6|elK{Ir5kiPo3+|e~Fa^ReB#yVazYhR- z|I4p5O=EMgA4?0rn<}){937wV@xvZUDS{xN*V{(xu+_r5;x8?Nd7dMs1mNcS%5E`$ zek{4UzM>yXwAPF#n(^ch`!D&vPoC$k7T+a*VG0ZegRP<{@H~&Is?b{7v7_S?n{#(l zWeXF4)|#rS@H~&AC|W-fcg0`21Hv%04;6DoQH1aN_TLzeF8KIikF(Q5wASprN$kVR zyi04VF8E7};9xM=s_PnK3~8FO^CqDmOO#T!FzxO{D5dDf(!z}~D`|+j;6K?6eZR@0 zZfvffd*P#Qtk>(Uyc=9M|JjqA_v1;DEbPaNqF~+c16Ix7_%}jMPEJlvPEJlvPEJl6 zsg3UjTloXhG-W#dYRBSun>^1u^9QVw@B9JJfjfVI^9MM8z-Iabq?EScv^k%bQgV5D z*=GI!;rC<7@4u~{ztkV#c^*os*5~uRUhh@@fG+sXAMn%#8|@F67a(YNK5vX^eL&h3 ze`yg^O1aQ*c_kC2dt96@o$8joSdAToHkhB Y0J!73`lX51o;L3hX96q z&3hw(Vw?pYk;M!Qe1}1p@p%4<6re?ho-U3d5$$KQ9|jpT5? z=z4ti8^g9|>#}cgz1nbZ&b4u>R``)m-mwnBy7MID+er z9q#$QvEg@_?$5GwKd$Is3;!T*#_{-;?Wf>)$9WHK1)I&!1CoEPRkC_GxG_ENW__~U z|IwNHf3`C!LhIjaJ20i45WX>woAuTYu6O^Vdw8Dr)=NLh-q*x>Yg+5BjA!;%vFJX# q>f2nt)I7pFf5WtU39_$$vA@d6EjuqUV;L|+89ZJ6T-G@yGywojw8-oL literal 20683 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 NE?>J;a?#?!{{!f+=`#QT 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 75ba6d6de046aae288fa21c5aa213a07c35a64a6..e0e3e44556be0515c9fa3a7ff112d2f91c21ba8c 100644 GIT binary patch literal 514 zcmeAS@N?(olHy`uVBq!ia0vp^3xHUGgBeIJTG)IXNHG=%xjQkeJ16rJ$YDu$^mSxl z*x1kgCy^D%mk96)agB_Ol#-It)z$T5V(4aOn8?gvZe|LUv|*4E0#Y0$L4LviA%Njt z^WI3H7-xY;WHAE+-yslY6xHx*09q99>Eaj?;r=%4_PWCgJk3G3{{Me$c`$O9>7^}& zeGeEH_nq)--nk{#O8vOejqcP9;-?ez=doSZK4Eo28U;6Pw_EyVN16%GW!;8-xzX3! z>@*BKwlh@eRg1o1{kXQ_PNdh#9ZS4cycWovV}DuK!RcmZLVN211|bW^DIFy#C;nQw zths!^d>1R{YxSk7jDaB!9<$uyiJE!i0Kf1C2KOzm?k$|!mF#toVQ
  • NzZ5Ci2xw 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 literal 2012 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 literal 10949 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 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 cf1b050c0246a699f147b5c266fe21f404b4f2fe..2a7787aa4b749f9fa5bc77fcc8af755e859ce371 100644 GIT binary patch literal 521 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K56gZfHHf=`26kJKRuK$wBDDW z^Lcum7elPfK0DKgMt&>Sh<*6Q%yx9=zks*DuC&PTaz5P@ci<)exu5-YYszY~_|!QR zlLEr(?h0=ZbTHKT?cXu$FsD<;xu2zfdl}}P3IF_zZ_VFb)^EPgTe~DWM4fK6Kw~ literal 1595 zcmY*a3pmqj82^ux4Q13iIl@pO!#qz%bj*ebDO5riA@@rZ$&zNail|gt(q&st&!J@N zI4p#@9TcJxl4CBJ>)giJ^54#X)v4z^&-cCG<$b^3@ArPs_q^X_Pj}}vDq1Q40IYF! zaoi7$WO+v@LAD+r*a84b3a*a!Uc~!?`$s%Jh60!TwTxA^WSi<~Zat`#S>hHEV3Kw_ z;(=k2o0SPGu{;xGfn>km6DX|xrS6fIN*D{R(mh)dZrjvR5rY<;+DWxjy@vQz@N^;G zM_;pl=4$ow?2fa51493Tx`Rv9o6x0}@$vB|65oBOZkZR#Nif&idgX+Yu-%ILk9qRx z(TqoS)Bx`Uk#t(=xL0)-i~gc@9)<| zP&|d@Ji6>MNZr)8Y&|mG6GG!cfkQ2p$){#G`t3M1d-d6c4|yW@1x(8Mc=*VEWxzdH zv19%qy`6pkPzvZfF+M{?XjW+KH2rxePJi(Aqp^}5D5u)6Y^Ubpsj{Mtohu8o>4Tpd zGl&jv`(dLu*v2Xj0>R#QyfX?Yl~vKB$Wz3`6yQ{WjKPlN*ftC>~*0B_kB`a}{gROU2 zRS?MQz{PWLENEtA_vg{Z#zBp)Uh}}uvR^bkTv*rai%o-y1Z%geWqF$B*lyswVkfNT zyuvPJR*y_B0rr!z<&M^P{IT^;8YxB9rBza|H;e~H*;Jw=TI2bpwVtR|LZOhJVj2ai zc*ivueYy$fbt;Q1FNDWxQuI2j)bsfMFM54^q@{)Dt3MTjZD9lM;aQP4|ZzTOV*4!{k@bVz7+ zR)2Nvtxi&!`t{Px9!wx<^o2clZBK#Jn@#POa?Sy+H=l8R8m6*0^y+NICf09ut*fh} z2!Kldx$=!&=_|~|MBGo0(wwztOcKr{4ARFd4kQvJUS%(>!WappZA+s@lsg_@%E1pq zQJGQV5b+>jM)x3)n;?vQbWK{aQ1k9%0tlFYeuuOp03ZOhq%k-XO(p>n*ciM_otKp_ zU(|~h6g$3#e4UU5&`w$N7pDY9k$^Hq)$ 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 6208c59db793f9026125288653ea9d2ffe249a05..e7634ef5a297809e7f84050ce18be45e3b2a3217 100644 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvp#Yx{*8>L*L`FvH>gtM#iE(mr znwy!bwGWf@C?{DK)Ap4~_Ta=biU978lFCMQT(C~z<`8Q3jeAjF};b%?cPN^FnM zoT&m#s}?SFT)1#yR{>+H_yR8R^rHvYGac4{u`ji?tzE;W!AVhp!C&H%6a&Mt_i{y6 T%<%_-rZRZC`njxgN@xNAJxMT* literal 1117 zcmV-j1fu(iP)3`LKn`vq_TpW_V8cRC6C)|GJva#o3Bnd>F}4ZG56GqDSjeHbUV3Q>gky{z>E1K@ccIOmaXrq$dB=NvO%oe5oM zQu;#!AcTNn7-)Am+8qvie$JQw`02BO_3q!hD_bo8^@T`%cM|#|yTC%8fiZ@eoZ%Z> z9{%#v&XU)^_}mX^B&JdJ*0M!D_d)81)CZ{rO!Fw}y=JZ-7y#FG(b(Ao09?O%1;78cgI=$Pw}1UB%ly~t z0YKmJc4z!A7! z)*l)Gns3z>c<{sbp)Oh-iPd>K3R&p~J^{9E!g!0FIZX?D;v&m9$A(KXd>FZ9p={P`-I1ws;iM(vLL@5QSn%j>cKe0!iw} zng!ICi}kft2q7|^1(MVcCJNT3*Jfk$L90|Vb-5N14{zaj-_QI@BRV@QVc+vyj}niT|CIn{psuaCL1b6xL3 zktJ%&4fyZc7OSeqc68=t&9P(1+WdtvVD?h}hFdzf8Sa#CV2exO-E%;yqS5pNQ}zSa zYX`X3G>YGN5IT3a7za%v6Y zFTXk~>DSa}-N}s!u-xNtx8_8gy+FXKz4oSga=gN`PJd)w^-P~_Ld1LF%B)(Q@L(Iq zic_^p=j|EiH58rj_V1YWi1SeJza)mp*PlNxEZ95ijI7_&pVl>I|2GIv_%CTc`@67% z!_Ti(rc=vb{1OiMrMpnAnEloLr{|w7y)TqyRQ}-C?mste%K8H)?_|FI{=-e1N~V8* zw*T4v`NZaySx+-FE5$z7o$J>Z_%yZPY=7kg<<{9 literal 2926 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 literal 1958 zcmV;X2U+-uP)t7RNt&s8b-6fX6pTG$1ZqY!68Wfq{v6+k@@pE))<-L-hcQ0g?=U1ADGX{iJN=y}|qfhA7J9_uO;OIrrXk4rIuX zAw!1Ci`={)A3S()D%U{}q<*PoS^E0bt5@FikVH0055T$mQvI zl<>depQ!*rr`-Zz`(_oTRQ$yNbUV8MRJLznSr$PM&}p|A^aHkUR+kcb7XQu{Ut-&K z;=b?u+A3tmTdkIsuhVX&;-9Mkr4+;AkbC!Q0932d3**ALu8Z&c`hE}u7=}Tw*F!0l zYLN5zi={Jj7M^i;knfJ;=t&q3hpG5yDj*1ggxPi4Eeylp!@H55ZQHi_`KKSXko9^U z%d)gpOcOROguh;|wHu@g;x$@jJKg+)ZfzV1JJvzJE%wWKpS9Xf~TEhdZ4=j%(L%;JPjl zS;jPefl?|J|6B$1`=3XC=Q!Hm0g5FHr4+qhk5(&MCBo4OVHg6ivAM-?IHceIe90kC z@>>=(8Vx?4=IFFr9PIC5jLcKwFFFT8JFHz}9PTDJJAlm@93Af_*Sf?~;HV{?l) zubXUaZlRP)Sb&i)P^;D0+q+l{h$9R`y%HJuLV_R8_A9RIE)@vpDxg$)PZ+Lizu&%D z)v>_$eZtWR)oN7-DbMrhc6RmBRVuwd*I?uPy&fDN9a1ir^(r*Z9|Qr8<0NL^EUu^G zpR0gwx2pq@_+C8f8u^0uK{$)R@#imsZnw*owa@tWyQjQ({tTrQN-4eS82JJ(fBTh3 zkDmZ%yF*#EF1!kurl~g;KtlU4xyk6XTdd{I)^5`@&%F_n=Z}vL@qM4KzWxT!^Cn~% zmq#{X;vOs62tl;0h!w=w{XsuqEf*cy)^d^QiD0Wj^W`tpb{^uoE{#S*^FDg~Br)q( zuIBY->CNkO%kNADNaR00I>d1t?Q4)YY3b|n9hnFkKbkIs_;XjT<_UrT+qNgpBerd0 z+qVAy@flylKi2{r$Ih+H$dDmJh76Yym;N-k zbbr8bIHXdkB#IuT(tEnyZlaj_srmy}&7Z12AYS7um&=JPORZK*eA>26qtQrRpHIs# z`F|Z~wC=_*l3qtW2-@DR`QmUe+Szhzmv`{Q7LPnXEzg;L2C#!Ki*sfGOi zSR{yLS-7sN%VS2qpaqc6%Jwatk{%A;E>)Xb1f>)~5D<<|uq;a#Mmy~mp6BuNPe1Cc zaAo@zhGAe?R_gAQg$f9QK&QFI3@yvTFbp87*}JZbkuR()5gLcMlaVjz?DKf4+w(lF zgb(jV0I8Fr3l$J=cd>1oK|jjR%S^~;92cnu&BCA`B&tEhlEuOPUZRHxB5PcxD6>!j zLMQ?hOO_TyqHf&eKc40$?p*|;%xTS1y1$kopy_Gbb{x3x?mcH zq2>>QfO@^YR4`l^1RckTHX>oDJ1+p;l_3a6CsCVhzM#o3+A1rsZ5y+=&T#OS5AQ~Q zTVqZ)WXY$r$gHGCNCqK?n(doax}9CEgdhm?F46Nm-M=Hfy5sLz7V?~!^>|-^^dA`c z0>?*(eEZ!~eBY<}@)xdL%@c+p#ges}{($%?>)!p^#A(bduH!h4Hv8kFLrl|LNq@l0 z-+rZ7vUKBBTp`i~Su9z+c>YZ93;63lpRPYZ8mHn-h~ww+jm@ppThX-qGUM@lK)GB^ s@XHAm(r<+?eMTrlh71`pWVpomFVlds1Eg$( Date: Sat, 11 May 2024 21:27:46 -0700 Subject: [PATCH 25/46] Mirror: Church Bells (#388) ## Mirror of PR #26030: [Church Bells](https://github.com/space-wizards/space-station-14/pull/26030) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `a0cc87c2673bc0930adafe9ab8650700d8ecf2e3` PR opened by SphiraI at 2024-03-12 08:33:08 UTC --- PR changed 9 files with 68 additions and 0 deletions. The PR had the following labels: - No C# - Changes: Sprites - Status: Awaiting Changes ---

    Original Body

    > > > > ## About the PR > - Adds a church bell to be used with station chapels > *idea and sprites by Kezu, proto/sounds put together by me.* > > > ## Why / Balance > "if the jani gets their jani light for convenience and rp, the chapel gets a church bell to signal for sermons" -Kezu > RP purposes, and to give something to chap similar to something like Clown's horn. Would let Chaps use it to get passerby's attention and whatnot. > > > ## Media > ![image](https://github.com/space-wizards/space-station-14/assets/145869023/565ced49-0eb7-4a34-a5e9-da06ec67aa29) > > **_There is a .ogg sound added, but I'm not sure how to make it play nice with git, please someone bwoink me with how_** > > - [X] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > **Changelog** > > > :cl: Sphiral&Kezu > - add: Added Church Bells! You may hear otherworldly chimes near your local chapel soon... >
    Co-authored-by: SimpleStation14 --- Resources/Audio/Effects/attributions.yml | 5 +++ Resources/Audio/Effects/church_bell1.ogg | Bin 0 -> 17616 bytes Resources/Audio/Effects/church_bell2.ogg | Bin 0 -> 17566 bytes Resources/Audio/Effects/church_bell3.ogg | Bin 0 -> 17108 bytes Resources/Audio/Effects/church_bell4.ogg | Bin 0 -> 16712 bytes .../Structures/Specific/church-bell.yml | 41 ++++++++++++++++++ .../SoundCollections/church_bell.yml | 7 +++ .../Specific/church-bell.rsi/church-bell.png | Bin 0 -> 2517 bytes .../Specific/church-bell.rsi/meta.json | 15 +++++++ 9 files changed, 68 insertions(+) create mode 100644 Resources/Audio/Effects/church_bell1.ogg create mode 100644 Resources/Audio/Effects/church_bell2.ogg create mode 100644 Resources/Audio/Effects/church_bell3.ogg create mode 100644 Resources/Audio/Effects/church_bell4.ogg create mode 100644 Resources/Prototypes/Entities/Structures/Specific/church-bell.yml create mode 100644 Resources/Prototypes/SoundCollections/church_bell.yml create mode 100644 Resources/Textures/Structures/Specific/church-bell.rsi/church-bell.png create mode 100644 Resources/Textures/Structures/Specific/church-bell.rsi/meta.json 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 0000000000000000000000000000000000000000..9713bd3d256d9b9b7fdc4e2b1d73200f105df7de GIT binary patch literal 17616 zcmajG2|Se1`!{@M#u#JYvm3H6g^(o-QH*`fp2$wwDcjh$NE%DF#=gs5NgB#7*(nMw zC`1ub^xo?C|3CltdEd|T+@ITV?sMJeI_Emq_qxt?&YauO)zuWh!GEqJi+>rVYt6PW z9$3(IKSy`}<06=5?SEbghW*Vvf*Bsy{O{|y<}oEk=-?i`@}K|LHGufXNF1VDy8F1D zGW2uBc)2@T{AG{P!N^ES%Sg#coxzA0dS7$*@pJZfz7`;Q%o~RMS5;KwyafzUKqb<8 zm>&FSx;X&!05}MU(%yB^5iKJWiQLE`XdmZ#q>^$7Nj+>%x1@XjE5XQKWdVQ;;6>1B zCCfSRtIZe3Y;v49 zCi2CzK}iCaUq4?(z8|GnB{7;(rXLfdC-b@Vu7T3$%91ptFCs0Y8dQ=k<2XI(DGR6i zr{s2F{v(Pj`Tt4Kf91eHebFFize=w`am+qZv^>WTV)aif48TKTf{S;UbsCw68o6GM z2^fBtFlLe)JELW4rf&{ifp(XIoM(apXM)15a^h?rgH6|+8w7V~oyzgH|q#Kzac!PVm-!JsqvMKelt%3VC_-SgVqYTCSqnk0sr zsQ6GlaH-PA#TmJvKU97U4|L-@}tzQgap|R}qq3(OdXY!*_LY3vUiK@{ zd+y`8sH)eNP+hCh+~vy0%up_gkSE;w*z6y_|G=WkK7XW3aS5uC^d`^qG1?Bw{k)q0 z^(Fea?0<(37Sh|5S+?GSXiRt-xg#@QIp1BLfZMcpiPHU|r97!=7jRWEMkegSWdYHD zCC2~|OaB+e|CRiO@;?-pW+aOZiZl<)3`ra(wa-VC)*7DEpQo0FP%I$_p*Xd5xzN8} zQQNbub=q3Ij9`KjE&FFtkWw*M)78n@{~Aerj^ChY1!NWfQ*m1YuNb(;{>T058<#Po zAasw(NSdBeF*h^66y$A{9XR(e&TckvVJ3WGCiU`(`2QVP|7|${GMd=GHc4>2CEb@F zW1xZlr{Mpx9ADI1azAO^v5M$ewQ`emK|f#GM3dhWw9G$37lYcHkG%VkaM0e zcb*Dze%V)9C2nn+TXds1%o<6^JD`nC4|>;2!BbJ0%#x*^Na z@)P(UmP3-}IuBV>lZ5{EKN(fVpaBigI`Kah001eSTKBIXF*cE$GLf4yku*0``9E6> zM4gh=pOA$HHWL7L08TkO0<*mRQ%N*SG!>Yz#h1^rPKji$4}u*?8BQkzhU#t}?L zM3>V|2Bkl7ncx&F@=Zq+DY#_onfV;6zImIVK9j!wj+r@= zmN|?0M3%mJtM@Be=htTDZ&}T!+MMTDBQ9kHE}YS~f*z+KYT!&(_~mJDyPW^9(r5n5 zO5S{?P0l#L+}PaN%FNs<$k}So{L*x|E<`oef6ZcU-e&&#hqrlF_)>tm-6iMOd*)WG z5jHb%OS|DqY{#5urUD`Am1*ZI4+9rO+;iPMiYu#gMXIZ-s@uG)>+5WaSF4Mw2b)~0 z>uU#_9@Nx(twGfK%IYSG>S~FarrKZC5^HUh)$MhIO$~YVHEV5~RL>>W+I_0)>uZ|U zkE!i-YrVc}?NVXoqC@31U)rnM+pn#)`wq8xbCpzo=@c94ZWwIZTx&nw63Az49{84E z_u&#Ghxg^+LYuv~CU50ub-xB72IKpRudZ`FhN?ARg zS!=o`{=9Zg!`M9BF4KA8tew?~YYS)7Y-Uo6tG~314Rt~dNzeCQ=XxT=Wj7}e5ek~> zsKTB4_t39A=X!mADSg-tEO|hU?z;_P19prJra^2GpEw+^00ZQFE6k?!Vm+7udXq1h zQZs3CK7RvT4;R4*=fOvq6zj#9rRntN-(|$Pi4w+5P(@`%IL{)&w25b9`K03prj!-u zE=d@-_NeNew7$jQL@%>adUZqxUDk3;fLN^%OKCN5Wu?rzI7y3P2*@Sl>e^MMjHWtO ztq`lSQdV7@bQ`nHHR)+Cs75KHjgDw9v#GaaZ|=!n48&^SxbeSje99p}tnS5R;Ba-B z879N|caK@cq~UZ#+cI!^P_J;f#yAseFX`!g6E8WaR}iZVoR?&;wT)hDAiXu!-(J6a8@kX8;eY$_4=5TW;Sm6fM>`XbUC6Q7swbL^=(yAS4J(SFHHH<1 ztNipdL`BVq)hPs9M-)Xxd!`jB1j|@;#Uy(yJViwzDI}q|nHWVC~2(FKohd! zUJT@S$l1%-Vn*3YnVsnQ%h({jlrcL&W6S1Gt0BhjG@>pd8f%0T6OE(C=?IoV0WKvM z6wi5$5-ho(4*l~Z4%Cj+((#x8GZ`_4SUsF@RTMO$b%78R%6f*aJ?dI!u@rT2(=xh( z5ENYMUgTIq5$rnDq4mFhL=dE-0G6!;YFE*f-f>uQl}i@#j9js_V!in>v>FsFP&c5t zYFH6U=rte$6z>(qKuH;4{Fq>Z`;39gM9Tt>2?P^L0K|Nth^WE%s(0}bOX>3C+xWa*Xs^Aw^zIZ%vK z&UPGnK$Glo{Ba8+K##o;L2-raILY@<`(J^{|H`5Ne}t%l;w%OWXtwTU3x@uI7xv5VL)hnRLuk(;)r0*lvt0A9PnH$JnpxqEE!udex^U|ZwwXdf>OOdwqlkI}-X ziGxsej1j(ANDcqWV$=V-j9zKwAG9Dqt^9kBV5IRES`0D@HrZoEzC17dm(2v4Xr>3@~P_4?4kaqKdm{<%M zUt$l8IUOIvbS>mPjp3s%w31dC?Y{*u4DbMuL4)Dv&s9vLy-k-+e}^H1@h%eqf-eAz zFgzW=3m_8{6J63uo_|0HXkLvieesb@@Gto|p`iG;R3ZDD|F=NK>i#1iFOZL$=_uiJ zW|fwcU0mN>TbzCKW`61Q{LriC1J7UfeMAmDy)heC$+Zy?fg^D%FTUmcndb85haJ8I zk^O z?UbkPIlU7<`}vAz2`btvb;fu#Qu`L1S#?O>Ff{6C&$xBoO$ zLcq)7;bWJdp&#c8ITF}mWOS0npcY05k&=mY@G3( z&upll2NhD=qg)%lT?jcr49=_dn84^@E7GQd4C3f@2T>YIRN`snndGVzZyzlxTIv=H zyr~I3%2APh+N>oGlLG7DGQcLF@KlS9#a%#l+R3WB8C-bzwxV{c#E#t;#rf4Sr(=`j z0q#Y^Sv$R&(9(6u#0qmJK9}-``A34ZBBF~jY!1a5@-|gm6X3@nr=(R=OIO#+;Ly!O^1trfyUy23)z}~tNne};Icw=c5t*g*`P#M zGIQTpI?D*Nlo&T~X7Q?eFK*|7_FSfXx8X?cd75{k=;g`Bs_C>3c_+@3wnW9g>X6E0 zq^HF~Z*<+z%s(OZDll(OmsVyWZBlH0;IqR3*rI+ji&EZdVh?J_eY2zgs$mU8XmdBI z#wY2*HJV1sUGf{nFPJ3ghfGe{3uA}Xecs_4$EP0doiTe?B0(d7t`N@nY z&g(f<*J;;OK|=eWM7kSA<+^C`Z`A&sSBBCL3{kT$ zQq#i2Z`^y*$*`52TV=*(WK+BgB1E{~--rD*zUW;E-CkS_UF zhm>zYk~iPuq+E=|V(LCE80auvqkr`E5tfJ-SaY?Ucue{|F?OQ#LHZuO+x#GtJ1w?5 z^7+%3KUCzNZ#kW9i6a&S7TZ7QC-|%mUPu|ZwpE>cDq#)RYzi+t`&N64Rt}EXYWyYe z```(Ar*8l9dm$waR0Uqw$9FO6<*ZaucEGT}8BEvbupG+AbHVfPjXPSoPYH{<#?2a} zMD|={OOk(Yj7G`-(yNr1OGxHzMHzY(!&_#GgS{KhaQV$_&$C|_XOP|KlF#K)PZXd2 zXtb|j=XXb@%_Vw-Wf?H;YB%Jq{sj5dRl;t}F#pivU-XFS{j^B1Koyqw$2;6XBA?8@8;Bl|+kN z9V7BpswWaW-~Vh(1KL&>=DNy1=P1PCl7wa^n!Vzb6OR^L+v}LA?Na)9Xzub~iGG#+ z2EAFqZ*rfnv08*h1rL2zmIH_r6c06tIf@@hddMCfdQXU2A*|rA8fshlJl`7J_omCVQqS%z}Go_ zEhBwxzJ$tX>XV1$)C@z)zGZLH{bZW@j6**!rvAJK2%6kR$_SbbgFnnA`vkTGhpKxnf_}KOGv*_~I8!Av--5zR9D1ZbrZ+ z+Ou`MJgzaWEVY50bg^W^59llT^g4dz1lkcHFRRpq{ncCa_x~J+Ec3AL(&oF1Fw&GN z$VXrc@xDNV$)OA2BeINwHHmvbr@HklOWeKv;m`svJ6Y9NWFG^=m|l2>vrw-tRE&Iv z@i1fdFwD#kEK+qu&Rc#_e{B}6O{G1_*yR!nD9@Yo$Es34=c2lm{On?X(H19)#wG;i zU(Hlw)8anoomu;G%^)?g_-WbhzN_#khJ2J{{Z5X>fvjEAK=km&&;Cp*A6p@=s8n#D zmaA7-Zh-E=CNJL&0?3cs-`kf-ZrMd}9MVaiDjUM1%=Fe(W?oGK)x?)#mu*;ST7+l* zoPY#$*jojs(dY_5>Z4tU&H69qFo_VUkP6LGj?!fTotNwxTu1$0O#B#2G)nh` zfrXRKvd%xp5>#Ok0^AGEH|tAu#lC#`bG_`I!6??Nc4JipSO|G-wg`|>$A95-pYdwB zDVlckzZ#pFd7=?5sf|3|9NeEf zJ|rq$B~<*nbGP_RjztF`==};H7qu9;H9mR! zOi3ytRh6UHSp>ufEX~<}n}_i+@gOCt{IM_>=^i$9khD~j1ZQ@TEl ztFg`HHZd`>n;R*~uL5a**Elyt?2g}Pz0%QLfF!L-PyIr6B!ef zQSRRKk^U|^bnwY87eVyf!zA?&Dr8&r!J~~}KMB?{A0=t=L`23iv6v~Y(`(EGVW0St zA+m6Cf+c4B-I~V!Zb{!=?4P|V901hoCax6#jX$D5@mQvvN8#JhQlOd^J-!^2cSDKwC!+sbM|v$!&y#QPOU03MS(5m2hDK-#k7RpQtRflzU0N* zHIq)vwj?6~$K{Jd>x|5+k&{N=CjtEHVY!Nfi^@;)Bkc=GE_ou?A7^t#UoMxz?;#jw z5wi`x`v+2ew-SPVA2yQ7?&@Dj>B%ik?Fdg?CnpBv9J!tiZ7d!Qe)Eb4g{DwVr0G|4 zt!}}Ez<(`Ok{|sHg}g?P6ihWHwtyoYgEv(Gvqftfg^mDRD5#`UMXmE)MF_ftDKKGI z-D!*+G9+tqzN}?L9e5zdgOgr?8*G{WvYiD~6&G~`6PcTcxC2Y3Tc?mFmDieC_QXgf z2bba#%NaXLPKJghJrXhq<#oC?x~_%@VI-<9U$@1JF;Y=CU$kfVnS^RUq}*lu(EV)w z!PfbTdLia);cRsT8Ju}7eftd|(9cHc(L(y0l>{rT0Z z2fzW$UY$g{g$Ad&6daVfgn(>PtTQEGd%QQ08HjxzV1Mi5dv`j#R7S%{DH>~JGD+GO z6qnHM(7_M0HBLt_BQR_Q{?eMT3LQO7F7+Z_!iqAJaM^T&#l1l@Y$CQkl3H9T1vpQb zIf!0zc)vb?yJSuqhD0EK$fd2%4vU``x?RQ4k%-;UV&a4Qe0?-YfGxI;|F|yw!zvN) z26o^+>sd~}>hJ8;mFX<}I$r<>jP@a|q)qXZfT*(#yxWmfA)CCJc-SbNk$^y$05}I6 z2(;@_NvG&3MaTh>+W(ib1*7-xbww;(ju9i#6=$;o!=CoAVhY^NO6R3g3=q+~W_ z#<=mWv3Y6-MB_N+&F4i27k`E#mD-F9ChGcF^V&}@PUZIeq`y#l<@Prf?vi^Y^K1K* zFfee`Na0O!o+G~c`ztXiY~~|v&X=qY6NnG^8#EV!oWIwZ$$8&bj6MfQDlZ(ptJpDO zJw7?J1GizSA+3q`e^q`SFFpKFNjeR=F_KDonp{Bv$3DQnx`Mh1mx9v*BGrv77_hud znoJ<)iH9k@2(}jCp754zo6r9saJ?)lqdo)vJq~RMdj=o!Kxk^z!x`OpnY-O7?23og zT=16klvd5x(_rZiC+^e^oFI~`gF4>A5@pIS1lgVwXsN+{HMN2b6pQ%IZloMvx_!O* z4W%0#$x*&B;)_&(?IGrwlY9iCjyX8fm`dulKyopMrDq3o$o{typNMbVEl+MmZ?6mF z!U2yP&FHgN^h+{=hKqlvn&4HifVm;JY{kTYJRcBO-6oJqzZh=T@^+YK!67)c&Zu7=%*4cVB7I|we`#fS#YeS z-tAo>hu`H3?c^diw;sDYo1*>wKGJ$Pa1@j`otK$V*B`6Eva_}CF}OpK6VQt`wPgq^ z;XyDP_V3XG(yQ$^BA4#Ye`6Z`KtrMt3EflVP4G~PCQ)6_hlBs@W!yiWQ~)^M%RoT? z?c=Ufv-Ay&zvvzu?H}zO7@rs&9v|tSn&{ziYfV}(tp6lK*mWAdcNuyYAL=FFsNq@x zLxM186c1p+(=frOp_K@Dpe165T$B;Sx_xP&Kd}_rSGjtv1beH+s5qG=tIB@9$LisQ zr}xnK?`**6@U{^aVfJ!G9LtDyHkIgXB1A(!ihH=&G@cPfo|G>bwdQY9eil}n93bp` zyRD)H{xq*8Z_`{bN6k}Yh71qi5Xt1_07kMZ??f(bRTIu4!ybZau<`H~!>*`&)8sPl z8U0C?KZonYT^c54PQYW?I`HRR$fIfe3ViqEpGVdqt~Jp7;t(B}vu;L0g5ff5OPIq& zQal=AbmycJIl#Uzj(maqv_rG^{oPHU`Lm!Pq(1<+8r<4>ed&Bc$T@B!7Djr5u^Y@Q z(x&VO40rG!8UeV|#6s3n^xIL)K`^eB>>)eclEI*Af^k%zD;B=hX+ONsj+c!wYtq70cVKMmI2yhB)DQ}QC@DX?#n&>E@k7!6E#!)ft zAnX~PfKEkplXk1h^4oMfZv4x80Q3zp8s$-EvQw@JIxf|_TDwlAMeE?C z3wX3?5+ha1<8-^3X6ZIBQK{Ln2mlf-&mxz=I@u#Kd{F~}4lmt+O>iKJt$0F0x&P8f zQ@LGePR;$wer;D5|H6}!yZ3=-$TrsrSmI_Js1!6q=|*@?1>h&*jZh1s$Vx$gLEVZX zQ;O66)d&{=RH7-F@LG*1innoaV*oP}Ju(#>4cT#ch?n4Tx6UTacR1vpB*q2bfSqK6 z?b{{hN^-7q7dGf$_$FlJG7wTmRy17E1W%{_2v^JetRFC{4OF#T$NtzhJsvXZh&o)2 ztdG4MIV?bpw{h}zj2|(8;lRGX!e~?)Qi%+~cU2AnF!w$`v84Qb_H0}KDnpG+G%@i6 z%);m3!JZ%YS;RquBqru0d900T_d{%+$aD8Qo-pNIfZsjmD+(`DxLgkBX3n300oZ7U zVRjrNWRaNMrh6KUj~~BenpHSkCB=a=5U_ZnEBlQ}>D>KP@5o?Q?u0(x-9RtmotsxD zy@f|Ow`N>5&A436Xd{hvQE8@q_sDp(Tes8<=ek>kid3Thn)%xj8`=(htSRa~bI=V3 zn)L>3lmo_Ui5UrY5@JuE<&2t%fvFqQoD$KJw+{V#(yic@7LB2w?42u z;30Og53G3SxW0aJ|vqp_p1ofCMJArpU9@G|E=NVd9Jz$XApZDYI;W#dF*t4vwcs1xbLc zrnMO0kC@IW3vDTprCYq$i8XoOoJ)Nvgbc*~1YQY@$gGsl>C9|1qwmF#>0FF}K3HiI z)>q`wN&gKlBDCO=q{M3Ryy-p{s{sb<$}BXyv77_JT8 z3AgS;a&(vJY-~`tW1zX^3)gg*cgN%M8!D>>sCHMS6_K^~Pe2q2o>rMC()1*L`uPnJ!EmMTC zF&ArMoSH~C>02%9XG{CkpT5cOkDBVHTI=cydOOusjnPdSEqh7b5{vZZpi{V&@F%?Q zIi<7slUOYFo8Xgf_KWI9s@Jb>6T+FxAiA(L|e@lDaKJ{>*!=31@)iYvroqK@}{by zEo~lMBY2pEduG-0O=rhYY>0=iIX5|JEk83ncT@xlPqb$KQG6LtBamt1zI|*hKDSvK z=*07*7C9^j5O^A?Q7m4+8~P!{22JqRT6{!D5?j=U4SopR4E=*;R6o5E_0TmLf4MpM zlt_cH-exBwDH8Z>3s*VgW#He61fsKuq_2etcyb3FcNrk0+tpT|N6PMY>?=%}h3kkd z94JK%qtMUSG$$1vg(C&NS+V zs`7wUGCZfU6of7+y{!`IWKlqvrL-bn+)cO`(2^u4eWfTimzMUS-W~T)Nram_Iq5?} zIdasy+zrui5i9rF6eOAg?H|PY}-zEtHD zP`zZ5tDi!5n)a;uw}QzeA#1MO;gFr5`kamYR4Fl+=MYP}DHnDOcQr4G@v7)wwRJEq zHS%A%Frk?nFaNFEii2v)D-^y6JKB5k`&sayie}Ac>_32X79@NSTO4w=-H z+WC_nsDnm=3@&cQd3yKvpR%rL*w1$<7D{@r?v(7H!`Hpu7B*gSyR)a^Jtj98H(elf zPb$JQOl+IXZ4myu7%!}qrJlp3B+M|@{ykAr}Fk#&Dc*W=DQw09+l3`9R@x_HN1SN5s38()ooHAMxsq|EzClgM^F(CVe>e$-a}wlsGPX*4=}X z4l=epS%4hE$5#6U+mhXpi@*jJM&Y7}59p%=A34cRHsp);P9!jIq4bEqpL)Q!nfrR- zX3WglSu8+1wWBjWS0Ly1pnGOzx@JIFE!s@7x>V*qC1x?bFC9+$E&W>T9PMk|A&+o7 zI(t8p@tesdx#`fu=8`}aTyOW|P;&Y^+){OumBg~@mk$-nwcfh?*zs${Q7G$rSgyC^ zB4nu@4MkqVLFWqD@8xW?e@{P~!HIcDH@`d8W&_ITuxLD|!r})6kOzzJNeDW_L3i&Q zIO(Qo>|QVo+r4@YOobDFi}x@i1+XZ$(*p=DAa@srdB_E3V;;o`c{c8`1n0%^Jjw9PNJ#A)&Q~dcO<@C>nu9j?fyTc&U&YwLAu9q{$ z^*wb8;pdbqw=RcM+*%XinkJWj^zKg*DVe)3yCEK1_C2=?7$d{NHzL^T_BA4B8dMv` zm3>oRf5svTSI7pRWxFk%CwL2UsjkmdZ~d7qd>TZ{9s*$i9!Ka#aiAx{sx_)PXhAe8~(nkp}FDRWW+z zZ#+Irb+bcAXCzzXIx)-wQHeqZ;S*(k*j)w0UN|_c9yP*Rag!zDXSS{6%(b_Ce*0(D zaSxMjD8X!+g@!V!Ka@HaeZLKhi4b(^$L8^NmtUuB(19muO=rEElX`h0y*-6YL)v;5 zV~7)ejgb_M$qQ>;(A!ousPjK-fla!PKZR&Y3c8gny?=s@&2KZ@SF9EbB4#vyN5+)f zD~?~tTQJ?8`t^6xX(0Es2(bmDu$#0E>{J0;tul|4}Hk)M~Z)Qe%A@SPr*mVV{p!33!bX4y-Y{N zolTN(!0q37nuW>m__MrzaZkn%Cn;+>nrN*n!6vb)k*l^GzSPxGT%@Whlj zE6#t(IVAGSK4=%R=hgkF{48h#`apE)E=p@rhS@<-hK2r}YXhf0J&>M= z3VI3KmpZ{OMVtBdz!nw_zom1x3~M*58(g6naIs>p26yXADZiGvv4(r<yrHbZ|MHlw+A5 zofsJ#9U30$?jZF&dC}S4-dIzn+E+UG%+MsTM^m>(B^17XbZlk{mU)&5uCCfdGW_v| zhbiWgv`3u?*tx&BVorARG;}_N7i;;d@7y{;j(BN8`XZ!IJWKYEa)zzw#kV+rXcAs%%bu2dt+D!}y7xRjvDJ8} zZPDVVy-N+(H|cEt2LTlR+`#_f)fdkyXnwFKos?7wX84EAAS`O6tNQ~Sj~oFBia@QM z?H(LIhukmlC%xnuttAmO&`yP$Z#tQgmkVft@FSaNh z`eCtlm^=mmZhg0g^HHSDQHHSsjyb_;%F;q#mi9Su@|>uhKjK}T?;X9Elq%@`ghStV zXwNABQWj78$;2SZ-t-+O_2BwxntN_66&I1Top^`36Z=SJp$8j|QRZ(>U%7OeQEh|q z7QMgcMk@eJaOiNjhc69wd_DB3f&b|`3B}{2>6|5nlUuN9 zUm}A0MwPZw7c;=Ukq)GGFnDdl&sZ7VBZjdf5{p+N!qBWFJx?loc}gSHHUe7^+uR@w zLMchSp_CNFkWXigqs8CW#0$fi9mZ6YV2XU)90gVBwBEcGOw>h%Wf5qy_5-)Gy{se= z^^J?0mju7JuWWDOc~3PJ1RZ5{g_p17ehF53+t-otw!+=bg%d01%CU>~9mRg8tPl_I zZS>4d`D|r?&@a=I0SO(CL z$vy^i*i(na`St#?(?WjdvVCi>f8k63<5o88*4$~s&z2Xj+kWfvMl^ply6GG4uDSs0 z`2CSVftA0gaQ2r(jZB03RgFb`T?wW(4hG+MS}?2W3>& zO|oTkS+wHnyh4C#0`uyoi>)18Qj#vQjQHjd1xUexqXBVmqdt+496V%;BG`fKhHU7kKYM6O{YhFd-V(w8BII5^1ckZ$#1HNB{;%<@jexXc8Q_lZzlP zmMvNsw_`-Mb^=kFI?D2b<5hUgIU{2#c@_yuc?}KOBd%1;{aE{)%!D}KR(qo*?O8Lf z#uF1}RNoGIBxf&_O8burJ_(rKaF*DiDgEfpGH$4`%R!V;d^CNF@5-C{8<|R7*SGAi z@rkeGo1_E#VCEOko}Asr>9}19JzMRiyxDj382_sdnv2g-;o-YWiZon4ir9n{bX95@ zNUxky)Bs23?JM{M^E1E>Uxt*xlvK`4vuR=%=3+vdz!wuC=7w_`jtA@j1|oH1B*17X zj51ak<&Ij9pK@6!q@;GjzmtzC81k=YKh5kRY&lGFYK7r|>J>^HQ*={5?B|qG4)hy<__en6>dVF%mpzPP`)7Ln$;JayL zM?tak&nm2zp`(V~9%}s0k5$umwZV4D;SH^FS^>xgKGLM;y{k-Gi78m`bGs#Ul@OEd!^sYZ}kwCmGxYl@2u2SmyTI9kD8N)0lw_0(i2}Q?08fuKl>ot6cRSvh zwlI?5BW&M3@KPeNdL|$P4#L@pz$>oe$#2R@$P+H3;>dv-a|;|F5^jWqnXRV;;u7bc zOgqQgDh=VHMT9t9em;B@bv`M0Z10O&?6;Y5o~ng-j{VKv@T|T>TRpdQ;x-SZ!mEc7 zKOF`Y6s%`7UN`Goe~*qU`Q`HD3{^G#x473I$8*5Yii@255=_ej+Vi9MY0z4 zB)59=jPi{$EIigx^aD1(ZeC3}kY#urTDPJ6y^+hiUO7H^kxH;N?)_`E=H!^sNfv^6 z=7v$*0al%Z!^q5PD`r-SK@MAln1Ua~&p00aK%lVt=p*tj*t_J~}>GL8Rwa2&olh#?)K6 zRq2F|UJz7HHWuw@ycN>?xaRlxW6PoHsM+As)DIHv{iEDo&c56}gmFXTY zwEv`!O_1c)OIT5q!;o&luvsNz8fO3-p_@t^wpd63Ta;Q5ijfFr#t+=JRy!g`9jx8M z^NN50aSA*q?wl?q7J(1jl{Gdi;w~X|5%T0(MY}=|>KQU4-jR{<95hFp>&_}$j%K|J zGI~$P8t7Q`=e^o8DUg@=!q?V!jkC!i6w>zd0eKRLjF%RTOEvnQ&xozAtP~zL*PN z66MZM8}X&2U(~r#*6K$IFup!7onYtB9i+4wf*VHCK;Yq6&^6H;aFN@tE!Jq{{wPm} zJYd_-AmVTPaJV2zFw0Utq9&8>%}!3tgFmo-&FAH^(|f1izQ0iCr=hhIE9R44;H`b` zs-vJq#`oZw^OlZD8dZ<`S#`=P;c(yU&n~4G9W>CdT)FVAV0p@1L0RsmK@zNHBs!q{ z#s^rTOX=@r!~0*1WuAC{h(6ogegp$szO3nmUFs;$LIl?+jT9fJBFA&+@DPs8k%}=r z^@J@5nm6e@G$Lm4hc@VCj@M79MruAPf%MyPwq z`aJ#>jO*W)rW*Z|x+)Q;XBzn(bFS_7_iW)FrZNfi%1P};iBAQH%dJU(ppY+BYFrjf>$86!pFxUZUveP z$h1FjT1f-qGgQ8>IB3|t15fvgFsGII4L9OBJ$e(*uoYQ{4}+5)C0RK4Z;4RvR_nyR+pN&rjp{z zmPyv&d(p;5atkBj@)v1-jI&nnebQXG@hp6uk*B(_-sNVQR@$v|j>axQx?XC+cp7^b ziRnGXOgm?DLw~*iIE4B@Sfr*M%qtLcj^*oUSFV%xmXcyp69YBSUQfJ2LE_H${#0p6 z$=TrxwC7f{ep2726?wkktx-ZLXsaFdz6_xbGXwkSafg&d*pu_nN^}jC1q7^0$Qmk# zR56JXKsc%3(p#dD^s9+ytcglYyYI8Lvwl7hy=V5PNz=WRm<$~aB=1UOxSay0CO@KD zq3(ZRxHjnhV=Vl-Sm*hDZJrvRyn_d&(1Eh!o=@A^Z4@b=bUrx@jkpTCHYJMb+$$lx zLC^(*92hXbEpo#_4lN3w`s(#1p6C8B=9fR@NE8yUD3cA5i$7Vo9N>qsqPK7ERANL3 z!4g#_9H|_57|9U&q+pdB-=dpwdb77wFpnvb$UnBl$Wflc-PQV}Kt!U*|C2W&b!X$u z%YH$EhKL$>QLFZnxMsG%)RCm52YVqI*2kJ$wIob&5hs@gQ#dMK!^6Rmv)=ArV664H zV4+IuKAfNiKs_>p5+%M!(g7GOM_sEUz)M8&ropgnr(wXIuAYP4MN}c*?t+6!lMHwBvkN#9nDRz$R0cRoBR)X60QT;U15wm$$;iLHMmeqDjqR?x2 z3mM>X(fhskxvXB}>E2`_dLIFZHSncsA0|2>!xhiE0tW!Rko$G8^aFNYkmlcWsC?0s z+UHTDJJTjTP`nD;F9sU3J586=8(gPbymw9Dwl(y~3$CMDip&ETLu=S=Q!>*Aq^SYNvn`^?#4ZVH-b zv5So9nO8<;mHuuRkiDWi-tG9eVQ{iT{0#f2w=4NRc^b)eps1K7fe59z^xQNjImEP2aP`Wp%Sfy4<=&idl($)!kS!jXNb zRS_c71RsHRKw)8|5^Sg3dAQjubJzHHntt6%lq*cMIRy&~!t)u5Nw)JOUg&ecV6Y*R;YQ?<^y?JZPo#p-JB=WiUc5G1^IS6qVvTg^Kj zx}-?)?mk2QHVH)keu}L~iJ_&D~cDE zFeN)l0o&5m!AAn4^F(l(;sYK~08c%9=lq81AtQeM+V(|#Q~Ac~feAq;(+6V%*gqe3 zpK4g6W4fHm)<3;ckoB%`vnerqvYkThCi=>e^u=zT;)Z^66rBU&owL{A$|Z9Zj&IjJ zhkJfQbBYb4>JS&56XBKD4cq`2(Xb6#RgWplw3iZNscH=hwI<~1LOe3 zA}j#49IhhgFv|1GJJ3`Sr1xOn72Le0Q&aK9YxUf3+uQ+VDS_a6i~En*Np3 zesxnVUn`lQYmA=`ZDw(3>lGSrSjlpaB?pDhwO{&#+i&W<5B8MVy7GtM^UN5oB5GMb z&Mg!&+Lm<>`evHYp7B165~KESzDdJn6+g}#Wf6gn@e{R+n4=lI=$#ccpypV2Wm>& zr>t*!&h17Iq5RQ*mf-DVsU{Pmf5GncN(|YCqBg`Mugb^6NxmX?xp5Al{=qkYa*ful z1rk5N>z(OQMxkrp-u~5KAKYgtaT8YP+`*LaVmHxN>9zf}s{u+p0gelLQDSb|&^M6K zWx%VFzI37uYqI!3O$eL6`qlHL2l!4kVUOOw-<@r|zNFnMr?mBx&$Ax&&iVJI$YmTr I{jCW8AG<2{Jpcdz literal 0 HcmV?d00001 diff --git a/Resources/Audio/Effects/church_bell2.ogg b/Resources/Audio/Effects/church_bell2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..1d0f58b74d1367d38cf7c8f8d8b85fc1033d6981 GIT binary patch literal 17566 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/Effects/church_bell4.ogg b/Resources/Audio/Effects/church_bell4.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c6f6aab9ddbdc0611f274c971ffd60da8acf40cb GIT binary patch literal 16712 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 literal 0 HcmV?d00001 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/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/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 0000000000000000000000000000000000000000..dc95f2cdac126c14b7b93e1ed2c21076c1d4b0b7 GIT binary patch literal 2517 zcmV;`2`cu9P)Px;k4Z#9RCt`_nr&=T*BQruw+_xtjO~yY*GXI)$O=xOgqLKX(m{f?4K|IwNv*W> zOVoB#I;oo`?E_QAhkS{qNo?(h?ZaAis@lDLXiKMNlxcxLwMp~^+JUIMjCKYB)Xod` z#rBP3=j?-Xjcx4Y-W$gZ^)Frdp5t?#=Q+=P&U4Oro+Dub_te*l!n#XSamfs=+l?wS zo$8%6*zI;yH4VV*Y@AC|@v;h5DVS0KfY&KuZL*O}&X7=LKKY`YVpR^N%y!=`xT2)7+cRaaQzB6<6TV)#DNs%yWLN?3jZI6PYZ`>t zDPgr%GZt1+6cvZ*$z&WGJu3;T)d0w{1w~Oz`yf+dx7aNNBLYyf7T|Q)0mO1o1I+?A zdaAHmt4StjIH#DWcbCx)`!>166(yZ52P1+D6RLR$Od=Q&jD=N#5kZUHVw#R&1swTT zNGitgm61Tj9AJyxg4Zc=Z<7o_?gudn!wPtO767KA3Buv&>@yWj0I*}v{mW(vgFOzhW6%BcKi-r#1vCp7 zdcK#sbuEUKV8{Y&tqx-2Q2^q}+3cgip4`WkU_}yziHAQPt3m6{g6t3>IS?>>^M6QyEPm+jFl1j~zO3f=l zP7?}T#{c-vvRT1kk3;w$-$^KN8RVODJ$DM^`heJY6j%3J-Bz%u1=#EAS+UYebJuo) zBPU9>v)HRZ0aOdNM&rxTLa;SDh+U3>oW^3W$~%l{c;?ANJm0@9yBgT*>UGgxQ~|q& zj!P#G^omAb#`~vdLL}Acyf(3`8JC<6q)?gRFTXj$!O>`0&ITDeN5qZ?HX~Dut<{k? z1#;o_?*<@xCd96xwg9n2lu{WN&PXN@^)F4+|sj|wXk}B#|E0zHhLU65h;aFzL+${*Yrl{-M3zpatB{Y6x#=w#gZa<&C$OB@Mw3d z0C@9*@nu)Wqus6I!h~AX37Wx@6ySEdd9+&*l^D2&H$NDcI@dImZKt{9vp^*Wp9?K3 zwN%`3hanBJY(5a0i#t{U6VRZV5f@fq_cQmI&;Ef*U-D>--h zM&5g=Iv`tL2&1{XQgY?;SxmNKV&Nw4`fXB!+&2gq=2q< z_lQDAw-BFFvXvT(hPxJ;M^CeO2^67&1s+!6Ro$G}rmnKs#P3?W_ z+NQUj!f$RkFzs4O(5{Z?X0n9>x&9o}j6Y ztn!M{FUGr2zTEO>7pHDzBwHl0zPV1UZm1QqMG}xX)dBSTeWKs*E9xT-^!4QZcc8DQ z=zF;N86M)e51ZrC3IjY4nzLm@fFC@c( zK6g=CbJ>+ zA67cs%#bsLmCiOcaEU*ki}K?icJkNp6|~3Bv%-4o=0^_<9fq_^3Kpz%Jh7ckwoLb* z{d^mT;LNPN~F^b8fHdg{kAP%jY3B9?i=aLMAhl zhveR1xB^B_>NI>fM`$VbDPT`l<(qol?t<{lD%`e8k za1T%j-BUpG{tjRLEzEO~PS4T)#OAWD2EzlLqWy`@*_3=S*qUo``05R>2F9jbY@cMVN?)zKIVg(wF_-8lc7TVo}!Y7rQh5409uNCOF05ulHK|O1F*Ae>g zT8UPft7@7h*z5kQmwZXs>*{I#P8&7O^^00oOo`(1dFY{*(PO7{(buJbgQHPtkWa<_ zZEeiN5(_SMHzuzmC9Qn^$D@YQ)TOX%=(u!}Ug6jhFY5gA;U;!9&gijIx>NMJE#Tm2 zRBEX^F1G#P>&z;}1B?Jz;ltnmqpWH2T|>vEH=eprw14}4ZYbde+kW(i_YK`oFysWE zJ{*!>;(f8Ip|Rv00j-@8x_a=~%jcyxpz`+<7K#h(edIZ@dFMl7?<3Du Date: Sat, 11 May 2024 21:28:18 -0700 Subject: [PATCH 26/46] Mirror: Make parrots talk like parrots (#381) ## Mirror of PR #26340: [Make parrots talk like parrots](https://github.com/space-wizards/space-station-14/pull/26340) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `cd4eda44b88a75d7498efca42c464dd4c73c5684` PR opened by Tayrtahn at 2024-03-22 17:22:18 UTC --- PR changed 8 files with 168 additions and 0 deletions. The PR had the following labels: ---

    Original Body

    > > > > ## About the PR > > In the rare cases that parrot become controlled by players, they now sound a bit more parrot-y. > > - Added the parrot squawk sound as a speech sound, so they no longer speak silently. > - Gave parrots a speech verb set, so they "squawk", "tweet", and "chirp" their messages, instead of just "say"-ing them. > - Parrots can "scream" now (which just plays the squawk sound). > - Parrots have their own accent that gets applied to everything they say! It adds some random squawks to the beginnings and ends of messages. Sometimes they repeat the longest word in a message. RAAWK! Sometimes! > > ## Why / Balance > > There are a lot of animals, but very little that sets them apart from each other. This makes parrots a little more interesting (though there's plenty more to be done). > > And no, I've never seen a player-controlled parrot in the game either. But it could happen! And when it does, now it'll be cooler. > > ## Technical details > > Added a few components to the parrot entity prototype, and made EmoteSounds, SpeechSounds, and SpeechVerb for parrots. > > Added ParrotAccentComponent/System, which handle the accent. > > ## Media > > > https://github.com/space-wizards/space-station-14/assets/85356/a863f384-8244-4d03-b9bb-2c0394b44488 > > Sorry for the lack of audio; blame Apple. There are squawking noises whenever the parrot chats or screams. > - [X] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > ## Breaking changes > > > **Changelog** > > > > :cl: > - add: Parrots now sound more like parrots when they talk. RAWWK!
    Co-authored-by: SimpleStation14 --- .../Components/ParrotAccentComponent.cs | 47 +++++++++++ .../EntitySystems/ParrotAccentSystem.cs | 79 +++++++++++++++++++ Resources/Locale/en-US/accent/parrot.ftl | 8 ++ .../en-US/chat/managers/chat-manager.ftl | 4 + .../Prototypes/Entities/Mobs/NPCs/animals.yml | 7 ++ .../Prototypes/Voice/speech_emote_sounds.yml | 7 ++ Resources/Prototypes/Voice/speech_sounds.yml | 9 +++ Resources/Prototypes/Voice/speech_verbs.yml | 7 ++ 8 files changed, 168 insertions(+) create mode 100644 Content.Server/Speech/Components/ParrotAccentComponent.cs create mode 100644 Content.Server/Speech/EntitySystems/ParrotAccentSystem.cs create mode 100644 Resources/Locale/en-US/accent/parrot.ftl 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/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/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index d56bab16455..380f7801710 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -1866,6 +1866,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/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: From abe7f55db684608994d7b9144a2178af9d145d12 Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 21:30:00 -0700 Subject: [PATCH 27/46] Mirror: Fix RUN_THIS.py so it would be cross-platform and it would be possible to use it from cmd on Windows (#153) ## Mirror of PR #26017: [Fix RUN_THIS.py so it would be cross-platform and it would be possible to use it from cmd on Windows](https://github.com/space-wizards/space-station-14/pull/26017) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `7ed94f8824d455cab2c712eb952312c4e8fd7c52` PR opened by CrafterKolyan at 2024-03-11 22:02:53 UTC PR merged by web-flow at 2024-03-12 00:02:41 UTC --- PR changed 1 files with 1 additions and 6 deletions. The PR had the following labels: - No C# ---

    Original Body

    > ## About the PR > I'm not sure why it was decided to do this weird setup with `py -3` on Windows cygwin when there's `sys.executable` which contains the full absolute path to the current python3 that executes the current script. > > ## Technical details > Everything works correctly: > ``` > Hooks need updating. > Copying hook post-checkout > Copying hook post-merge > $ git submodule update --init --recursive > Submodule 'RobustToolbox' (https://github.com/space-wizards/RobustToolbox.git) registered for path 'RobustToolbox' > Cloning into 'C:/Workspace/SpaceStation14/space-station-14/RobustToolbox'... > Submodule path 'RobustToolbox': checked out '2b6381c332793b6207db2d865234674f36824bbe' > Submodule 'Lidgren.Network' (https://github.com/space-wizards/lidgren-network-gen3.git) registered for path 'RobustToolbox/Lidgren.Network/Lidgren.Network' > Submodule 'NetSerializer' (https://github.com/space-wizards/netserializer) registered for path 'RobustToolbox/NetSerializer' > Submodule 'Robust.LoaderApi' (https://github.com/space-wizards/Robust.LoaderApi.git) registered for path 'RobustToolbox/Robust.LoaderApi' > Submodule 'XamlX' (https://github.com/space-wizards/XamlX) registered for path 'RobustToolbox/XamlX' > Submodule 'cefglue' (https://github.com/space-wizards/cefglue.git) registered for path 'RobustToolbox/cefglue' > Cloning into 'C:/Workspace/SpaceStation14/space-station-14/RobustToolbox/Lidgren.Network/Lidgren.Network'... > Cloning into 'C:/Workspace/SpaceStation14/space-station-14/RobustToolbox/NetSerializer'... > Cloning into 'C:/Workspace/SpaceStation14/space-station-14/RobustToolbox/Robust.LoaderApi'... > Cloning into 'C:/Workspace/SpaceStation14/space-station-14/RobustToolbox/XamlX'... > Cloning into 'C:/Workspace/SpaceStation14/space-station-14/RobustToolbox/cefglue'... > Submodule path 'RobustToolbox/Lidgren.Network/Lidgren.Network': checked out '45f89ca2639ec05d4700691a1160fccd79cb4c86' > Submodule path 'RobustToolbox/NetSerializer': checked out '7f51deaecab8498a8953f7fb3e551b9892c5dff4' > Submodule path 'RobustToolbox/Robust.LoaderApi': checked out '99a2f4b88077629f69fb66f74f50e88dbe43e0e8' > Submodule path 'RobustToolbox/XamlX': checked out 'dca5a5f8c2759b940a87449584724ec71aa0dd19' > Submodule path 'RobustToolbox/cefglue': checked out 'e265d67a21d0e526178f72326bd45f36d85ad6ca' > ```
    Co-authored-by: Nikolai Korolev --- RUN_THIS.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) 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") From d3798519fc09f71d1ec203400feed108b6c6715e Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 21:30:25 -0700 Subject: [PATCH 28/46] Mirror: Fix barotrauma pressure protection (#256) ## Mirror of PR #26236: [Fix barotrauma pressure protection](https://github.com/space-wizards/space-station-14/pull/26236) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `db81438d30f83a542abe6c81c2ce4a5040aa3ddb` PR opened by PJB3005 at 2024-03-18 15:16:25 UTC --- PR changed 1 files with 4 additions and 2 deletions. The PR had the following labels: - Status: Needs Review ---

    Original Body

    > Oops > > In #26217 I re-organized the logic for the calculation. Part of that was moving the logic for GetFeltLowPressure and GetFeltHighPressure to be done before we actually check the hazard thresholds. What I didn't realize is that, with how our pressure protection is set up, these functions can return values so extreme they rebound into the other category. > > For example, according to the math, when you're wearing a hardsuit in a low-pressure environment you have "felt" pressure of 1000 kPa. Yeah that's not right. > > Now these functions clamp their result to OneAtmosphere, in the appropriate direction (101.3 kPa). > > Fixes #26234 > > :cl: > - fix: Fixed hardsuits in space causing high pressure damage
    Co-authored-by: SimpleStation14 --- Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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( From ce7eea355015b1e28a46eeab5e17dc224a15f0b6 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sun, 12 May 2024 04:31:37 +0000 Subject: [PATCH 29/46] Automatic Changelog Update (#399) --- Resources/Changelog/Changelog.yml | 6 ++++++ 1 file changed, 6 insertions(+) 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' From 959dca1df710fe85d47b89e5f2554e63a7504c47 Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 21:32:55 -0700 Subject: [PATCH 30/46] Mirror: add decoy syndicate bomb to uplink (#236) ## Mirror of PR #26034: [add decoy syndicate bomb to uplink](https://github.com/space-wizards/space-station-14/pull/26034) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `90be67e67956c7dd0348ddd0688d7d3ab614cb99` PR opened by Ilya246 at 2024-03-12 10:07:47 UTC --- PR changed 3 files with 26 additions and 1 deletions. The PR had the following labels: - No C# ---

    Original Body

    > > > > ## About the PR > adds a decoy syndicate bomb to uplink for 4 TC > in all ways similar to a real syndicate bomb, but only explodes as hard as a training bomb > > price has been discussed on discord several times and seems good > > *also fixes syndicate bomb description saying their timer is 120 seconds, when it's actually 180 > > ## Why / Balance > a lesser distraction (no huge hole and dead people if it blows) for a lesser price, and allows syndicate bombs to be more effective for more TC if you buy one together with decoy bombs to draw attention > why 4 TC? anything above that just doesn't seem like it'd be worth it; yes, a syndicate bomb will likely cause nearby people to vacate the place, but it will also draw at least one person to go defuse it and you will be very sus if you're spotted nearby and aren't defusing > > ## Media > > ![image](https://github.com/space-wizards/space-station-14/assets/57039557/1b619411-cdd4-4f53-972c-7b9704bbd4b5) > ![image](https://github.com/space-wizards/space-station-14/assets/57039557/373dd1b2-ba85-4c14-b219-a8e71e11142d) > ![image](https://github.com/space-wizards/space-station-14/assets/57039557/c6488260-2f35-4a77-9f4b-c769c71899a1) > > - [x] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > **Changelog** > > > :cl: > - add: Syndicate decoy bombs may now be purchased from the uplink. > - fix: Syndicate bomb description no longer lies about their minimum detonation time. >
    Co-authored-by: SimpleStation14 --- Resources/Locale/en-US/store/uplink-catalog.ftl | 5 ++++- Resources/Prototypes/Catalog/uplink_catalog.yml | 10 ++++++++++ .../Entities/Structures/Machines/bombs.yml | 12 ++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) 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/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/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 From 3b2eb1348ebf819751d15d36a544a82a717307da Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 21:33:33 -0700 Subject: [PATCH 31/46] Mirror: SlowContactsSystem to SpeedModifierContactsSystem mini rework (#235) ## Mirror of PR #26110: [SlowContactsSystem to SpeedModifierContactsSystem mini rework](https://github.com/space-wizards/space-station-14/pull/26110) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `c35ff87e146f0cda7c10782f4ab80b784b51e5fe` PR opened by TheShuEd at 2024-03-14 09:45:33 UTC --- PR changed 9 files with 42 additions and 34 deletions. The PR had the following labels: - Status: Needs Review ---

    Original Body

    > ## About the PR > system and components are renamed. It can now be used including to accelerate entities > > ## Why / Balance > more reusability for the system > > ## Technical details > Now the system calculates the arithmetic mean of all the entities that affects your speed.
    Co-authored-by: SimpleStation14 --- .../TileReactions/SpillTileReaction.cs | 4 +- .../Fluids/EntitySystems/PuddleSystem.cs | 8 ++-- ....cs => SpeedModifiedByContactComponent.cs} | 2 +- ...t.cs => SpeedModifierContactsComponent.cs} | 4 +- .../Systems/FrictionContactsSystem.cs | 2 +- ...stem.cs => SpeedModifierContactsSystem.cs} | 46 +++++++++++-------- .../Entities/Objects/Misc/kudzu.yml | 6 +-- .../Entities/Objects/Misc/spider_web.yml | 2 +- Resources/Prototypes/Entities/Tiles/water.yml | 2 +- 9 files changed, 42 insertions(+), 34 deletions(-) rename Content.Shared/Movement/Components/{SlowedByContactComponent.cs => SpeedModifiedByContactComponent.cs} (80%) rename Content.Shared/Movement/Components/{SlowContactsComponent.cs => SpeedModifierContactsComponent.cs} (83%) rename Content.Shared/Movement/Systems/{SlowContactsSystem.cs => SpeedModifierContactsSystem.cs} (59%) 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/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.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/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/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 From e7709bd037c4ea80a47f52f791bad3c199596051 Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 21:35:00 -0700 Subject: [PATCH 32/46] Mirror: Gives glue tag to crazy glue (#234) ## Mirror of PR #26154: [Gives glue tag to crazy glue](https://github.com/space-wizards/space-station-14/pull/26154) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `209846b18a0b22e60c520ee98f7afcfa08a102a8` PR opened by Adrian16199 at 2024-03-15 18:05:23 UTC --- PR changed 1 files with 3 additions and 0 deletions. The PR had the following labels: - No C# ---

    Original Body

    > > > > ## About the PR > > Gives the tag of glue to crazy glue. > ## Why / Balance > > -Glue but clown advertised. > -Cant be used to craft stuff like stunprod or someother stuff even tho its same thing as space glue. > -Suffer. > ## Technical details > > > ## Media > > > - [ ] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > ## Breaking changes > > > **Changelog** > > > >
    Co-authored-by: SimpleStation14 --- Resources/Prototypes/Entities/Objects/Fun/toys.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index bf45a44582b..6697aa711e0 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml @@ -1465,6 +1465,9 @@ Quantity: 100 - type: TrashOnSolutionEmpty solution: drink + - type: Tag + tags: + - DrinkSpaceGlue - type: entity parent: BaseItem From 71299f60192de423463cefc9f5043152c895c981 Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 21:39:00 -0700 Subject: [PATCH 33/46] Mirror: Fix presetidcard extended access throwing (#232) ## Mirror of PR #26195: [Fix presetidcard extended access throwing](https://github.com/space-wizards/space-station-14/pull/26195) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `677fd3c6db4550431d8801203c03aa2ab5075c29` PR opened by metalgearsloth at 2024-03-17 00:47:51 UTC --- PR changed 1 files with 4 additions and 2 deletions. The PR had the following labels: ---

    Original Body

    > Resolves https://github.com/space-wizards/space-station-14/issues/25798 > > :cl: > - fix: Fix ID cards sometimes not loading properly.
    Co-authored-by: SimpleStation14 --- Content.Server/Access/Systems/PresetIdCardSystem.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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); From 6465a4370acc2d8060c94d4c15dea805b431606e Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 21:39:33 -0700 Subject: [PATCH 34/46] Update custom drinks (#96) ## Mirror of PR #993: [Update custom drinks](https://github.com/DeltaV-Station/Delta-v/pull/993) from DeltaV-Station [DeltaV-Station](https://github.com/DeltaV-Station)/[Delta-v](https://github.com/DeltaV-Station/Delta-v) `be0d84458adc156a7f2bcb6305a7d6dbb5042c10` --- PR changed 0 files with 0 additions and 0 deletions. The PR had the following labels: - Changes: YML - Changes: Localization - Changes: Sprite ---

    Original Body

    > > > > ## About the PR > > Gives all the DeltaV and Nyano drinks new empty and fill sprites. > Fun. > > ## Why / Balance > > Looks better. > > ## Technical details > > Fixes #985 > > ## Media > > > - [ ] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > ## Breaking changes > > > **Changelog** > > > :cl: > - fix: Fixed our custom drinks not having different fill levels.
    Co-authored-by: Fluffiest Floofers Co-authored-by: VMSolidus --- .../en-US/deltav/flavors/flavor-profiles.ftl | 2 +- .../Objects/Consumable/Drinks/drinks.yml | 60 +++++++------ .../Prototypes/DeltaV/Flavors/flavors.yml | 4 +- .../Reagents/Consumable/Drink/drinks.yml | 44 ++++++--- .../Objects/Consumable/Drinks/drinks.yml | 85 ++++++++++-------- .../Reagents/Consumable/Drink/alcohol.yml | 45 ++++++++-- .../Reagents/Consumable/Drink/drinks.yml | 16 +++- .../Consumable/Drinks/arsonist.rsi/fill-1.png | Bin 0 -> 540 bytes .../Consumable/Drinks/arsonist.rsi/fill-2.png | Bin 0 -> 811 bytes .../Consumable/Drinks/arsonist.rsi/fill-3.png | Bin 0 -> 1113 bytes .../Consumable/Drinks/arsonist.rsi/fill-4.png | Bin 0 -> 1204 bytes .../Drinks/arsonist.rsi/icon_empty.png | Bin 0 -> 249 bytes .../Consumable/Drinks/arsonist.rsi/meta.json | 43 ++++++--- .../Consumable/Drinks/daiquiri.rsi/fill-1.png | Bin 0 -> 188 bytes .../Consumable/Drinks/daiquiri.rsi/fill-2.png | Bin 0 -> 252 bytes .../Consumable/Drinks/daiquiri.rsi/fill-3.png | Bin 0 -> 267 bytes .../Drinks/daiquiri.rsi/icon_empty.png | Bin 0 -> 323 bytes .../Consumable/Drinks/daiquiri.rsi/meta.json | 38 +++++--- .../Consumable/Drinks/dulleavene.rsi/icon.png | Bin 716 -> 0 bytes .../Drinks/dulleavene.rsi/meta.json | 14 --- .../Drinks/greengrass.rsi/fill-1.png | Bin 0 -> 228 bytes .../Drinks/greengrass.rsi/fill-2.png | Bin 0 -> 339 bytes .../Drinks/greengrass.rsi/fill-3.png | Bin 0 -> 410 bytes .../Drinks/greengrass.rsi/fill-4.png | Bin 0 -> 475 bytes .../Drinks/greengrass.rsi/fill-5.png | Bin 0 -> 527 bytes .../Consumable/Drinks/greengrass.rsi/icon.png | Bin 1026 -> 631 bytes .../Drinks/greengrass.rsi/icon_empty.png | Bin 0 -> 357 bytes .../Drinks/greengrass.rsi/meta.json | 44 ++++++--- .../Consumable/Drinks/gunmetal.rsi/fill-1.png | Bin 0 -> 186 bytes .../Consumable/Drinks/gunmetal.rsi/fill-2.png | Bin 0 -> 261 bytes .../Consumable/Drinks/gunmetal.rsi/fill-3.png | Bin 0 -> 314 bytes .../Consumable/Drinks/gunmetal.rsi/fill-4.png | Bin 0 -> 351 bytes .../Consumable/Drinks/gunmetal.rsi/fill-5.png | Bin 0 -> 374 bytes .../Drinks/gunmetal.rsi/icon_empty.png | Bin 0 -> 385 bytes .../Consumable/Drinks/gunmetal.rsi/meta.json | 44 ++++++--- .../Drinks/healthcodeviolation.rsi/fill-1.png | Bin 0 -> 170 bytes .../Drinks/healthcodeviolation.rsi/fill-2.png | Bin 0 -> 213 bytes .../Drinks/healthcodeviolation.rsi/fill-3.png | Bin 0 -> 254 bytes .../Drinks/healthcodeviolation.rsi/fill-4.png | Bin 0 -> 306 bytes .../Drinks/healthcodeviolation.rsi/fill-5.png | Bin 0 -> 342 bytes .../Drinks/healthcodeviolation.rsi/icon.png | Bin 0 -> 420 bytes .../healthcodeviolation.rsi/icon_empty.png | Bin 0 -> 318 bytes .../Drinks/healthcodeviolation.rsi/meta.json | 32 +++++++ .../Consumable/Drinks/kvass.rsi/fill-1.png | Bin 0 -> 198 bytes .../Consumable/Drinks/kvass.rsi/fill-2.png | Bin 0 -> 222 bytes .../Consumable/Drinks/kvass.rsi/fill-3.png | Bin 0 -> 282 bytes .../Consumable/Drinks/kvass.rsi/fill-4.png | Bin 0 -> 325 bytes .../Consumable/Drinks/kvass.rsi/icon.png | Bin 0 -> 219 bytes .../Drinks/kvass.rsi/icon_empty.png | Bin 0 -> 295 bytes .../Consumable/Drinks/kvass.rsi/meta.json | 29 ++++++ .../Drinks/lemondrop.rsi/fill-1.png | Bin 0 -> 183 bytes .../Drinks/lemondrop.rsi/fill-2.png | Bin 0 -> 246 bytes .../Drinks/lemondrop.rsi/fill-3.png | Bin 0 -> 262 bytes .../Consumable/Drinks/lemondrop.rsi/icon.png | Bin 746 -> 388 bytes .../Drinks/lemondrop.rsi/icon_empty.png | Bin 0 -> 364 bytes .../Consumable/Drinks/lemondrop.rsi/meta.json | 38 +++++--- .../Drinks/mothamphetamine.rsi/fill-1.png | Bin 0 -> 279 bytes .../Drinks/mothamphetamine.rsi/fill-2.png | Bin 0 -> 389 bytes .../Drinks/mothamphetamine.rsi/fill-3.png | Bin 0 -> 449 bytes .../Drinks/mothamphetamine.rsi/fill-4.png | Bin 0 -> 520 bytes .../Drinks/mothamphetamine.rsi/icon_empty.png | Bin 0 -> 324 bytes .../Drinks/mothamphetamine.rsi/meta.json | 41 ++++++--- .../Drinks/atomicpunch.rsi/fill-1.png | Bin 0 -> 174 bytes .../Drinks/atomicpunch.rsi/fill-2.png | Bin 0 -> 200 bytes .../Drinks/atomicpunch.rsi/fill-3.png | Bin 0 -> 222 bytes .../Drinks/atomicpunch.rsi/fill-4.png | Bin 0 -> 257 bytes .../Drinks/atomicpunch.rsi/icon.png | Bin 453 -> 383 bytes .../Drinks/atomicpunch.rsi/icon_empty.png | Bin 0 -> 319 bytes .../Drinks/atomicpunch.rsi/meta.json | 15 ++++ .../Drinks/brainbomb.rsi/fill-1.png | Bin 0 -> 201 bytes .../Drinks/brainbomb.rsi/fill-2.png | Bin 0 -> 258 bytes .../Drinks/brainbomb.rsi/fill-3.png | Bin 0 -> 319 bytes .../Drinks/brainbomb.rsi/fill-4.png | Bin 0 -> 350 bytes .../Consumable/Drinks/brainbomb.rsi/icon.png | Bin 491 -> 494 bytes .../Drinks/brainbomb.rsi/icon_empty.png | Bin 0 -> 355 bytes .../Consumable/Drinks/brainbomb.rsi/meta.json | 15 ++++ .../Drinks/bubbletea.rsi/fill-1.png | Bin 0 -> 171 bytes .../Drinks/bubbletea.rsi/fill-2.png | Bin 0 -> 225 bytes .../Drinks/bubbletea.rsi/fill-3.png | Bin 0 -> 278 bytes .../Drinks/bubbletea.rsi/fill-4.png | Bin 0 -> 312 bytes .../Drinks/bubbletea.rsi/fill-5.png | Bin 0 -> 327 bytes .../Consumable/Drinks/bubbletea.rsi/icon.png | Bin 533 -> 508 bytes .../Drinks/bubbletea.rsi/icon_empty.png | Bin 0 -> 367 bytes .../Consumable/Drinks/bubbletea.rsi/meta.json | 18 ++++ .../Drinks/circusjuice.rsi/fill-1.png | Bin 0 -> 220 bytes .../Drinks/circusjuice.rsi/fill-2.png | Bin 0 -> 254 bytes .../Drinks/circusjuice.rsi/fill-3.png | Bin 0 -> 310 bytes .../Drinks/circusjuice.rsi/fill-4.png | Bin 0 -> 338 bytes .../Drinks/circusjuice.rsi/fill-5.png | Bin 0 -> 405 bytes .../Drinks/circusjuice.rsi/icon.png | Bin 633 -> 596 bytes .../Drinks/circusjuice.rsi/icon_empty.png | Bin 0 -> 500 bytes .../Drinks/circusjuice.rsi/meta.json | 18 ++++ .../Drinks/clownblood.rsi/fill-1.png | Bin 0 -> 182 bytes .../Drinks/clownblood.rsi/fill-2.png | Bin 0 -> 193 bytes .../Drinks/clownblood.rsi/fill-3.png | Bin 0 -> 229 bytes .../Drinks/clownblood.rsi/fill-4.png | Bin 0 -> 250 bytes .../Drinks/clownblood.rsi/fill-5.png | Bin 0 -> 264 bytes .../Consumable/Drinks/clownblood.rsi/icon.png | Bin 428 -> 414 bytes .../Drinks/clownblood.rsi/icon_empty.png | Bin 0 -> 407 bytes .../Drinks/clownblood.rsi/meta.json | 18 ++++ .../Drinks/graveyard.rsi/fill-1.png | Bin 0 -> 186 bytes .../Drinks/graveyard.rsi/fill-2.png | Bin 0 -> 217 bytes .../Drinks/graveyard.rsi/fill-3.png | Bin 0 -> 279 bytes .../Drinks/graveyard.rsi/fill-4.png | Bin 0 -> 322 bytes .../Drinks/graveyard.rsi/fill-5.png | Bin 0 -> 335 bytes .../Consumable/Drinks/graveyard.rsi/icon.png | Bin 499 -> 411 bytes .../Drinks/graveyard.rsi/icon_empty.png | Bin 0 -> 341 bytes .../Consumable/Drinks/graveyard.rsi/meta.json | 18 ++++ .../Drinks/orangecreamcicle.rsi/fill-1.png | Bin 0 -> 1459 bytes .../Drinks/orangecreamcicle.rsi/fill-2.png | Bin 0 -> 1479 bytes .../Drinks/orangecreamcicle.rsi/fill-3.png | Bin 0 -> 276 bytes .../Drinks/orangecreamcicle.rsi/fill-4.png | Bin 0 -> 306 bytes .../Drinks/orangecreamcicle.rsi/icon.png | Bin 500 -> 483 bytes .../orangecreamcicle.rsi/icon_empty.png | Bin 0 -> 388 bytes .../Drinks/orangecreamcicle.rsi/meta.json | 15 ++++ .../Drinks/pinkdrink.rsi/fill-1.png | Bin 0 -> 168 bytes .../Drinks/pinkdrink.rsi/fill-2.png | Bin 0 -> 215 bytes .../Drinks/pinkdrink.rsi/fill-3.png | Bin 0 -> 236 bytes .../Drinks/pinkdrink.rsi/fill-4.png | Bin 0 -> 248 bytes .../Consumable/Drinks/pinkdrink.rsi/icon.png | Bin 400 -> 350 bytes .../Drinks/pinkdrink.rsi/icon_empty.png | Bin 0 -> 333 bytes .../Consumable/Drinks/pinkdrink.rsi/meta.json | 15 ++++ .../Drinks/sakeglass.rsi/fill-1.png | Bin 0 -> 175 bytes .../Drinks/sakeglass.rsi/fill-2.png | Bin 0 -> 179 bytes .../Drinks/sakeglass.rsi/fill-3.png | Bin 0 -> 210 bytes .../Drinks/sakeglass.rsi/icon_empty.png | Bin 0 -> 350 bytes .../Consumable/Drinks/sakeglass.rsi/meta.json | 18 +++- .../Drinks/sapopicante.rsi/fill-1.png | Bin 0 -> 171 bytes .../Drinks/sapopicante.rsi/fill-2.png | Bin 0 -> 241 bytes .../Drinks/sapopicante.rsi/fill-3.png | Bin 0 -> 283 bytes .../Drinks/sapopicante.rsi/fill-4.png | Bin 0 -> 381 bytes .../Drinks/sapopicante.rsi/fill-5.png | Bin 0 -> 431 bytes .../Drinks/sapopicante.rsi/icon_empty.png | Bin 0 -> 381 bytes .../Drinks/sapopicante.rsi/meta.json | 18 ++++ .../Drinks/silverjack.rsi/fill-1.png | Bin 0 -> 226 bytes .../Drinks/silverjack.rsi/fill-2.png | Bin 0 -> 293 bytes .../Drinks/silverjack.rsi/fill-3.png | Bin 0 -> 320 bytes .../Drinks/silverjack.rsi/fill-4.png | Bin 0 -> 393 bytes .../Consumable/Drinks/silverjack.rsi/icon.png | Bin 515 -> 472 bytes .../Drinks/silverjack.rsi/icon_empty.png | Bin 0 -> 272 bytes .../Drinks/silverjack.rsi/meta.json | 15 ++++ .../Drinks/sojuglass.rsi/fill-1.png | Bin 0 -> 191 bytes .../Drinks/sojuglass.rsi/fill-2.png | Bin 0 -> 219 bytes .../Drinks/sojuglass.rsi/fill-3.png | Bin 0 -> 223 bytes .../Drinks/sojuglass.rsi/fill-4.png | Bin 0 -> 277 bytes .../Drinks/sojuglass.rsi/icon_empty.png | Bin 0 -> 349 bytes .../Consumable/Drinks/sojuglass.rsi/meta.json | 21 ++++- 147 files changed, 595 insertions(+), 188 deletions(-) create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/arsonist.rsi/fill-1.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/arsonist.rsi/fill-2.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/arsonist.rsi/fill-3.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/arsonist.rsi/fill-4.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/arsonist.rsi/icon_empty.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/daiquiri.rsi/fill-1.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/daiquiri.rsi/fill-2.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/daiquiri.rsi/fill-3.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/daiquiri.rsi/icon_empty.png delete mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/dulleavene.rsi/icon.png delete mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/dulleavene.rsi/meta.json create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/fill-1.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/fill-2.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/fill-3.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/fill-4.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/fill-5.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/greengrass.rsi/icon_empty.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/fill-1.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/fill-2.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/fill-3.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/fill-4.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/fill-5.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/gunmetal.rsi/icon_empty.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/fill-1.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/fill-2.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/fill-3.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/fill-4.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/fill-5.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/icon.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/icon_empty.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/healthcodeviolation.rsi/meta.json create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/fill-1.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/fill-2.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/fill-3.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/fill-4.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/icon.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/icon_empty.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/kvass.rsi/meta.json create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/lemondrop.rsi/fill-1.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/lemondrop.rsi/fill-2.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/lemondrop.rsi/fill-3.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/lemondrop.rsi/icon_empty.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/mothamphetamine.rsi/fill-1.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/mothamphetamine.rsi/fill-2.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/mothamphetamine.rsi/fill-3.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/mothamphetamine.rsi/fill-4.png create mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Drinks/mothamphetamine.rsi/icon_empty.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/fill-1.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/fill-2.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/fill-3.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/fill-4.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/atomicpunch.rsi/icon_empty.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/fill-1.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/fill-2.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/fill-3.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/fill-4.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/brainbomb.rsi/icon_empty.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/fill-1.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/fill-2.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/fill-3.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/fill-4.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/fill-5.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/bubbletea.rsi/icon_empty.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/fill-1.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/fill-2.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/fill-3.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/fill-4.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/fill-5.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/circusjuice.rsi/icon_empty.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/fill-1.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/fill-2.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/fill-3.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/fill-4.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/fill-5.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/clownblood.rsi/icon_empty.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/fill-1.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/fill-2.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/fill-3.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/fill-4.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/fill-5.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/graveyard.rsi/icon_empty.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/fill-1.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/fill-2.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/fill-3.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/fill-4.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/orangecreamcicle.rsi/icon_empty.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/fill-1.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/fill-2.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/fill-3.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/fill-4.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/pinkdrink.rsi/icon_empty.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sakeglass.rsi/fill-1.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sakeglass.rsi/fill-2.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sakeglass.rsi/fill-3.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sakeglass.rsi/icon_empty.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/fill-1.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/fill-2.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/fill-3.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/fill-4.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/fill-5.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sapopicante.rsi/icon_empty.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/fill-1.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/fill-2.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/fill-3.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/fill-4.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/silverjack.rsi/icon_empty.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sojuglass.rsi/fill-1.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sojuglass.rsi/fill-2.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sojuglass.rsi/fill-3.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sojuglass.rsi/fill-4.png create mode 100644 Resources/Textures/Nyanotrasen/Objects/Consumable/Drinks/sojuglass.rsi/icon_empty.png 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/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/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/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 0000000000000000000000000000000000000000..992465a8ca7f0402d3cf40e883646dfaf0674388 GIT binary patch literal 540 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+825R)IEGZ*dUJcPUvq#6`-ft^NfKF7>f(hH zSbXUD*4Ha9G5sr=a<%=o0=jEU4849c|NCuVHHQgRO0G@o=*qoI&5q3Zb?o~0&v_az zLT8mcw0Zsg^Rg3P thNh2;pqym^?{={D7@jcm zU8g(${kwTn_8u&&yJB6p?_*o)^?xgWndiKVwQpCqWz|a$C`w|EROV1^2;jJ{%(r^$ z_B93!hq+jtPNr@=JkiJMxn<6SIl4b5?%O{h;NsqCw|asyB|gt!+|ruY{PWG`!sw*G zf(a#sg^Z>dD_(FITrDFJ$@aZ(T8$eKbj#W95OyBMbO>zKOIi^P0A$ zPoB+tt5{TLgHN}(7+c+)y1NN~uixlu@Y$|6_uyiknaqqu6`Q{9%P#rs)f!uOa~t=A z^4#vQd9km5dF?UjezmLrnwX=s-?OP@QE@iETo z&K1^{UB# z6LYzGf@+t>nEhS3?)RxL0wz9SMf0?RBr zyR$QMulLMj!4-BHn2C=)zc3k?`#5vId(PdRITt3Sghm#J1{VP!00e*l5C8%|00;m9 zAOHlQF{Rh5z!(F3V!YV7C(>i%^}bOSwqJ?zmk;PoJ%i5eQ*APv!oKSDC!t_VICE!& z#p(fXrj|bbD0SsOYvs{6Zec&l8?UC1b#PEdr*O?5AMp}~#kAK2K5O>4Q%XLmmM7QY9Gpv$5& z_j~m@Nlhvjch!RDxN5-z-=L`$gIU2LCw%uWn^tLGzabOxfKY9FTYtGY@^XyLZ-MAIyt@XeWZ)tYgpP5T;6gdQv7-Uqb zfwJH`Ot|EuD+o34$e%?^@_>I?^~OgJLj-^T5C8%|00;m9AOHk_01yBI(1@!0KHz`f zMn@q)00;m9AOQ3+SVObj2Uj=s43-|B+b`Fr`CLMB@y|_|u>>5uHT+w}<-B1|dVfG& z0L8p1n$&q>#)gf}8l-g&e35|&FH0*_T{pHF!uOq`3?1!DRae9p z0#?y-@O=9IC>x(DL2jl9hEaq(9{G}g82&XZ!#Y?O+l+VZSaFCc``&1-JRD^oCvEsK zQ--O08K&`=4UW8j4a=|&)(z~l6?;HS@7oH_X`>AKDgi0ZK*yB$y!^bQ$lF4~beS*M zcDeei_6Hax0c&jAOHJEe&M=H^-~BN~ZMdn#7OX$AKcHGSJ2uM=nhUrdhUswJ7l4kM zb2T{sWCHW^o4L-v?tJh~taK6l>-GmsSQ~7y8v&>)Z3sQrgfiIQmbxLk2sW7-V^v<(WYkz>U?<5uiwKQ-f zlfnCGe`YQ?`*DOo9s7~@2P_MKGQT%CaGc zRT2C+saZ7cZdi%_2aDbpyr?LMqFy8y4-yETlwB5b@U*bvMOb!^-rS&MadFXj()BaO z&m@zcq-Xl8%6iq^$s{Dx-AQ$3W$KZlhOSrj`u*y?*VX-A2jf4%Cjj;`a9 zcF`9Nfa}M)h5V$=<&sx<40t?|UiU1#NmQ-aa#Mf0*y#nPKAE?W~6aW+qiEtdqz!9773joRD40Yl>;>WaZ3dY)mKWKcSlrgzQ*Qw*TC(cT{a)DTN#nxA0}=52Kmbu{~b|w_(^jVKJv{rzJ`Q8P~#MSz4vrh=-&rQo4fIrYn&AuV|{rSVWZJZ|L=NV_vdF83H4~b2$ z4{-YTw_|_fcz5cY`%=8ip{CadxQ8Mr0YdD5H$Q#KgE4F~mgHLARoU~jp+ZnV`0w$)!>+va(?!5VqsXhufy*^;fF~FxxMEbe>d?1376;OE3!tm?bPPzM*#qzKM)%5|H0T>v5 zCAaZn&n8|XVYHv&23#7RJAC-Hpq7^#{C4j@DW_3=fROL!<^qjqxVKou`{^07Su@@S zms20GEC7Tc8d*S$UMR SWj7!I0000~)nP$y(KtaGI_G4J4PO(n^)Jtm5japqzR4i6E z38YykCeHgUId#gUNXctDd`toj3@im}Sp;|T-|oBltn!3OLwiL-u_MQ7f&Q*jZd;=K zZf;^=_Q`MLJMce;_p?LghcwIlR|1zfKboyLWgo<7Z}fBOR^g&CGtij~p00i_>zopr014|@8UO$Q literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..00e60a6d6dc68f1ba1298674e64c816cd7311177 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1Gah@)YAr-fh{`~)Mf7pRZt&NdwF`q=~ffdYdvIegj0@-3;`(P3VB)%tNpb;1=!WQ~IF85$Uv Z8RqneSU;F5^BrgtgQu&X%Q~loCIDACL~Z~8 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e70ad2618f1f74e2bc628e5bbc0dcafb75a354ed GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G^E_P~Ln>}1{rUgj{;&g+S{ozVVm^t|11p%_WDQ<5FqSiL zTh5xc&$d3krTP2w+4A#m?*I4uE4#|Ev&TL@eZ5}ZCUeoVRVL*P*W?3_evY4S`#dcv z`Pawi*YhVxOn9~>HE4?BRUNmYRmpB{Zf(W-a>g-#{(rfAI)48D#v^xbn6mV!q)2+0 v_7`rk1zHx!-eZ+;g%NCjM>&H-10zG6q4D&TH>-XDUCQ9;>gTe~DWM4fukU6S literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f7f56ad32ad25885096aa329f4c666c2c05995b6 GIT binary patch literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GYdu{YLn>}1{rUgj{;&g+S{ozVVm^t|11p%_WDQ<1h!vUW z{;l}9=Nf;abIHeSnf&wapI=K~y2Hp*|BrLeqo0M3&-R~x6aWA3FJ_@fX^($=`g)yT zZdXggHTl4!pX2A-K2J+Z{`K+s_52AE6P|5J4Vt2ORmZJpRkE9#TU)WdoN>&b|6eYj zj-UU(@yMMUrYt=wDUu$h{e@d>4PG?_viDdeTww$|r=y&~p@EUXx!&4fp^$Pm(BTZ8 Lu6{1-oD!M}1{rUgj{;&g+S{ozVVm^t|11p%>?l9^s$x28` zIif9Zto>KBBW{ve@T?h5eXTO#^Q%ApkTm-^(^|bFGHX^ItI<@+G{XiNCErqZ2i^W7 zYTqA!|86S8^odX3&c=q}$t(fUMN6)+K99F+v`nxR%iLh0p^|p&`=$#zToZH-b2&`A ztRpVrdBW@A2U`xE_EVS5q@}t}Cls@soHltX+l0-^MR^C(ECbV;MJ6_No}F}LmTibP0l+XkK`bl`k literal 0 HcmV?d00001 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 49aa80be1dbea17ac21614f0d0d0622f266d9991..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 716 zcmV;-0yF)IP)VsJ(qLeAI~|@%Q?>hXC$ZRt&Sk%3q>;;4rxovE1LTa zHy#G)L5u5_F}E-qqwV;9z@h4WK=o?BujS}TrYs#CUBZ*PVHSm_g(I6qL-DR~zn+aJ zg^z{(rW{cCM(K$fzbeku_*1bNi_U;k_0%#=oM>V_YvzT=gnjv3Nw1$r-NchBEG|eL zk~xe;lrSMQ5|mgcN0ETkf@Id(7p(f`*$|H|e}ginI5K3#>ld{oT~kuiqNn7`QC7MC z&(lgzjMut*LeTkQ+aDv~-h4!K~yMHV`PAWITy~}gt2kaDF(*sAUQ@5 z0oAaKkS3sf6i6c@NQ1$&G_?y^vu+X6WN;Fw&V1G_7LY;?adrlfMr2JOF%bA6^AjO_ z7RWS5bsmGo+FZCsm}29!nG9ba++kSpQ5EbGn7`mAft-3~rtyCe{{R0B7+0#*lx9EN^uHh~m_ yFem}v#O6#CoA9J|aO#Fxi5^cN35^>bP0l+XkKw9i*3 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f596e55cfa070c7c00e9d24c8f7266c03b3fd823 GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GUp-wMLn>}1{rUgj{;&g+S{ozVVm^t|11p%_WDQ<51hV&7 zC0t>2zR#F`F8|;D^i1ZPZ>`*dZnb=ro_(P{k)M6V-z3Lo1PpV`}+S%mRufX2iEVemyqghl8pGb*+s2;%GyWO=`Tdpk;fnhGk`g!m85eBW)cDl#RmLO^ j_tT9a&oqcJC>&s5iwJ%t(9szO3;+gCS3j3^P6|BWuWvP^b0gZk-c#%2i|`*h zIGbYd#^w+cL%-X=$@Jh_4wknmOHW%zD<$xBcY~{PDVc`|mBeGafs1l6DgMC`ya_^S z!G$+jg$M|}`xcHTMiEJ#)_#tx(b|FPj7u>KR4iT+IY-TLfCvz;0(RlM)yk|(Ljinc zw^>KgF2J!ldV!Cv%4+(3zk81NJZYx5p$RF;snFPVpl0T@8ufKLGi0NH4C*DEBoq5uE@07*qoM6N<$ Ef-`YaB>0XP5$-~b%p{{s|?M>K!1`D0JtySeUpzT~Ib zeqozVib*Jscc_fTF(IYCpWw2X^B~kx0g3b!a~bmI0E%tl{oxAb@geWL(Qd-2lwhW3 z8HfRy64>mh*^OWlcvhQOn9gFJN;s_Nk*vPrd?W_z;~vW|ZK$l~bU4aLt5^#Hz_I{G zaNuYy&*ugstht7eEa5m2{VMXehI|328o|!f8RBvbMu$LWV`Fp)lo0HeFM|IH7E@Vb zb%2&`vWa21-gGRyDK*b`hg%m&0aX#-&1IH?d*7|=RfPYTZ~zX_Z-7q$1^_QXibT;^ Rr=tJ>002ovPDHLkV1f%c(4+tW literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a697bbbf6d67b109df666427c8a20b11025dfe4e GIT binary patch literal 527 zcmV+q0`UEbP)K^XLhmlfK=!cGy|0X8`cV@lWdyN2& z?+UrCzJoT10o-2{+J+1Qv~dm%lS}=&m^BM}Li_VQ5NV}p)yt|g0>>k;J#OnDREO(P z`4`c`=rW<He zgQ}=d0!8Re*p>suQ010jYi1U!x%D5@%MVZJhVb(^DQ`ji9LEG=0y6L|zyR>Cv6L;! Ryv+ar002ovPDHLkV1h4*=BfYy literal 0 HcmV?d00001 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 0852b6bdf9bf0d40703818da8cb80beb078cf8ee..e558e125e0f86518d4a9753266921d51fcbd8be7 100644 GIT binary patch delta 607 zcmV-l0-*hZ2=@e#BYyxHbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU! z8A(JzRCwC#R!d79K@k3WUal*sXowmJxS|JLVT}=Tlf`2~a>*?y2>Ju^6TJB+l7Em~ zqTcl+_y{KGUX(zx2vMS=yK(2yGt-&wo%IkR>4u#wgsq|I>VN5;s&DGi)r2vIR+5Gm zQyV}VfHZ)$@-8EUK!v4S;``VO4&EH>-w9%Q>M>E#No0FLBdfXb`+XtKFZC5ZAFz+-hfX&h9!$PoO}4Hy zK*;D;0+9Uq=70BcxtPo4-~_?%+cuN2$U(^HHdJF)h)#Ud#Xk1M+?~k7g(v1={G^ftZ$Eux8r>H1c=izt$H&>p z7JA3$#5?=*dcE}WPsDhx4P&V=O_~~lYDmR+=pKSH3V-ro5ZQ>va)2*mL+H_a&<_(A z;SXuwDgijDRm9kBMessj@Nwl5Gyw+i^>RH|`U=elKodJOb}S9+T&p@TGseF;h-ywf zq$VTq0s=SSa}$J`@B^A|JLYvgJNyhZF8!abAAe{Gne+9vb1QS^`(#fJ;m?X<;~CQeUsq{J t%FU?JkYu`HQ=3uyR@?^g-van0zyM7zi|hpYWb+bsH_L8<1Y5zzLa-2Rd=>r!Z3SBeK~Mw{J9}S^g!PUQBBHa*-j6eL zE;DDqKV|5qTQ>xzRdiy}h&G>C&>Ej;po1Vigp#^zPtQ)q`G0r3-{4dAdQkQHf8U=Y zn9jI5_?m=Ab=xTlj|)$&6m7*D!tHuKnHJs`9&qGHIK{Dsr575vpt9+C9|xXS zIfTGHoLM!0L2?><6MeI$h4-Ls4NlH$T520k*P-*yPCCgiDIn9I&BF6Bv?d^Q1_VUHZ(I5V?p0_4x5O9k00009aDPZya{vGf5&!@T5&_cPe*6Fc z0y;@VK~z`??N!Zd6HyTVWp}eNYe-9K1;K-n^k8F2{Q%KZw3njPi#I{=;Mt4+K>q=BBZgT4T(v=vYUOoS$AG`(-tJW2Nps1!P}X6^JeC^znNu$ zXhjS}41WkR@N#|06TEsn*K%{W|1JP}t$&gQMW$gd?j>V?ngvY;!1Tifd8~G{WUKGLJC0e z=8K!vYB8J5!gQQ|$%E%&pcX|zNVR~H7kV4T^MCs*h-;^y*e&Sr&@L~-n7m5vVyFBO zm5X;t7g|z7NEw^uC7jIPf?+2B&*ru@nTLfgw_UhGg~Ln2Egic2qljmx@n4kB%kYQe6{c=D1}0`nMZ=@f4En6EqdK5+&k>IlXVN7HQp zf`8mf0a)woZ~$q&hpua*n__rxuA*%<`8h!TD%T5{LU1-*NC9Ad0>J#nF~8NcD_b=f z8GU$_Azmo}9kV|&aW96h6NBY%Boi>yF*No<7KT*&jZ1h4DV7HD-P&uM&~zmHy>0FB zly=*OK6=2yOzw`*08+3N0~FBO-$7DKaApuKYnP7T&mGcQ8nx|u- z+JRU{u#k~+XGzG)&SK^Gwe0&BrYIb09B5t=E}6fUD&-K-Q2-5o6d&{P{9E=3cPK0) zCK@QJ3#bta6gj{zG&Bkn3IkdjQW^>rJAl$qAld=Y1htIFP*_H6IY5;L2_>OGwH6V% zX@RV|0KGgwD;F4ORu`Z-Vqj{+(PsIm1BRUg00ImEdNts*4Zdt700000NkvXXu0mjf DwNZw_ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..138c83559702e223c834f46d9c8084ec861c4645 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GF`h1tAr-gYTw5sEU?AXf(YC{rT_fj|x2dMaT9=EAY|kXT zJkHGA|Ln>=o1M?zb)8xE0H_HHJhYcab=eQ=@ X&}=1W{V;CsE|7?)tDnm{r-UW|bXz@e literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c11695450c79456dce5a2e02155993efe6852216 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G%ROBjLn>}1{rUgj{;&g+S{ozVVm^t|11p%_WDQ<51hV&7 zC0t?DS(4>p68z`9vdZxfk1q$a@!4gvEvtVo5x4ixVFk5whdzAy$lqpqJ>U3}3CoRr zg+_mV*UfMIEY5%U|9pPQeKvp2Dd>Icet3CrzQZr|lZppC{AL@($Nv2<-}#& z2tWV=5P$##uuTulCS#o>62+o}S1XmGT=o!#*LSzNJ!WzrGhImfowoKHK4dK5xcuFp z9Cv4of+@@N1#aSi)4qiGvW8o!!%|1=ws%x(_7f0i{|B6iLx}~r^q`X^u1kShRpK&_ zo}Cy2*f%@jpxM-SU%=jQyc(+l&`2>1R_reTngawN009W_%RB@a04-KiRmfoKqW}N^ M07*qoM6N<$g7_kS`v3p{ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d3133dc9e3a1c8d33970a2a2353280754e8098ba GIT binary patch literal 351 zcmV-l0igbgP)I^_nZvwJOm&B0SG_<0+`pn(C@Y+=K{8EA#IWzkk1zoMQhdPTHVkJ=)AU3e)5pD zZ0rQTcs3g{G-`Fd8wi6?RcvEeIY;$8-^*Y9XTY!cSh9)wc-qhT7tBng>Uu@}fRDEU zvX4F%vyrOno>o8pQJoH$et@-cki>I1q5#Pm)+|QJ6Ii`(PUTkvj9dN*U#eBP_hXo$ xgR}@9fXV^QUSRwSfNnwp5P$##_{%v8FaSldUvUve%-R3|002ovPDHLkV1nN^lNkU2 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..690e598921ee35b18054fef196668da962eac7b0 GIT binary patch literal 374 zcmV-+0g3*JP)kdX zQ`atB0#3m#I1NYO7A#x=6}42Pm4gr=QY%1C+!zuQTk607Qc;~OewSymzDJ*5$+mJyhP9Qe{h#G-5vOAcq=7*inCvb$M;146{Jb3$hQpMQJ}cXCVSVv zfoL2dBMUWL@_F?N*UlBg;YkZu@GwR1IKoR)M#(U2RzH7Je4G;f0$vfIW-A1I08tW9 z!Y~?gd@PHG`xnys&!6yeG7(=9gPR7BMB)JB3Rky@)rx?5jEsO0Fak#4kogv102F|S U!snHj3jhEB07*qoM6N<$f_Lba7ytkO literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..0651b3e9523be7e9ac80181404240e9895fc345a GIT binary patch literal 385 zcmV-{0e=38P)d)13eQHP9>(e*5;FpqlSQs2R|vtlUq`DgKWhGRR={!exw*`hm(07%hlK9Wd&E fQ3ucp00bBSv3q}a@Wl;hkc7k zW}M{BzS&E6$N*J?!2xRq&(l}#ElR0;_qS})4^Bp)=!5D50tpO;Iy@;aIhVwMlzF=P KxvXFO&dG6(taxUnm^U$Or1 zkNx74S)7MNTn~OeKVP$t>DWcHhY0g3*cn(P7%uZhu~_DvS_^angQu&X%Q~loCIDk* BN}d1! literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9d8344cfdc41132b30b6bc1d7cbc7218eb60a47f GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G3p`yMLn>}1{rUgj{;&g+S{ozVVm^t|11p%_WDQ<51hVt& zV2Mol$dHs5$J4{{mr)M3Vk(9s_=IkYU-eXPD z4CaKs4H2_{%g=tg#Hyk7&Vt=6TVz=B?(I6N;O!~X5aZ3`#=an6Mfroj{EJSS3b$x_ wwVb!FUuGd_)VGb(9b#>dRl*T#289C*m-m$zopr0BY1=I{*Lx literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..7a4178c0cdc4083ce10aaf26960b13b91a3b9a8f GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GS3F%DLn>}1{rUgj{;&g+S{ozVVm^t|11p%_WDQ<5FqSiL zZ{&I&XT!cs_u8{V+3V$v>)Ua{G8F8 znVEm&TY%;<9}CY~`>*+kr>SsD~M7yF%Y^fmynX; z!pRyCazN+*G}CUwqX#5ZSys$ryKr#n^a(%qSH2c&)=^zK;fhIv4A)n_JsO4neo_lG vr0xFynfWN^gvBj28Mt!=-!n8YFf*vio@!b7}1{rUgj{;&g+S{ozVVm^t|11p%_WDOqhB`AhH zyje2&zxbv!L!qGb0;9M43vWrft+H-#o-_AgLe#DL5<`I>il2o~E;Zq56h1il;J!@} zv$@Mz&LlnFGLt7>{!U`V$H1u*56YZSKgzn`)&vP2=3>1$sTRhUf7o;U|6kA6v;Iod zU-r()S!x`cCrmCdx#K0dLo`HU-L;9od%KP*czfEZnDQ#LJMCrG_qsEAGMk20$GrM~K821)EN-dE kK)v*;LGV380|PU|v;WsV&3`Wu2MhxSPgg&ebxsLQ02DHZjQ{`u literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..67afd251437e25fe7c930e4795f0cee395dec83f GIT binary patch literal 420 zcmV;V0bBlwP)^Z{$#jCra2@<0eUEaq5@|5x2##WVA&5j1gM$_(ZQvckodoO>lTA7 zxrUIF29QIc-huZ&uEL2Jb15#0pMU;LnE{l90HLCpE+IfEpd=T-nBXE8m;$$@3FQ6Xc7XWZNgCp3|j{P1Q-B+V?_X*zv!j_ O0000P)!xA7ViE!wZ10Y|b zCq{JN52=C(99M)euB>_B@yj$^g%dI6g7DA{0YXLdkO={j%K@m*VN7t53(NsnLx7gK z;3gDhX8 Q8UO$Q07*qoM6N<$f_GAP9{>OV literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..db910a5a1f51eb199194a175f350a5403b280b97 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G8J;eVAr-fh{`~)Mf7pRZt&NdwF`q=~ffdYdvIegj0@-`4 z60R_Ugc!J2O2ygk`T76t#od(!Y%O-gDcn>SR@#36v=TjzIomX PbPI#0tDnm{r-UW|r&LrS literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..befe1fee89f2c657578c74a73e4bd4a202bd2066 GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GdpunnLn>}1{rUgj{;&g+S{ozVVm^t|11p%_WDQ<51hV&7 zHMGk3n(N8^(^pYoOWR*t)bAMK*7@*mdpM8OuWdagg$MrY$4lH}GF0a0pTWOLM#YUU zL1nA!m-p}0+59d4{g-d}W?0C;%V5c&RsQE`z1yy(jA;v=)*SfoxV24Do_p@4hOHv@ zHx4VTulv_5@c&Euxt$D8KL5Y)K>hmn6ibG*o9bFW=B?5A@u79sQ-;SG`xCA(0v-5~ ckAcI0A(+L?RBpRd7SJCIp00i_>zopr0Q-z=-~a#s literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..6ff9030f023d21967921a610b269f43133e2efab GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G&pllnLn>}1{rUgj{;&g+S{ozVVm^t|11p%_WDQ<1hy|JM zsjB$=e>eYni58Y42mWmLe`m;XTEnp6h{=~+$;@{R^Md^sPP1w4+F)#8)4XB#7f*gh zx1j99_4W3KcWeqp)^tv6Z-4lIx_&{_hWz5dDNbr^oXJBZ^MP-@&A_BiZnDZ z@G~D?ZqGb}J7L=AjS4a@;p`1MY^>HN6nl84w6fiN%3#cXL~)PKiiM7!O%iljJsT9} z*Z*sl)Ggs=oN(Sz@27v``;$csXEynVe6WoS{P2*w^flA5i**OVo_Hk7AdtYY=Z#NV UqW5egpqCjuUHx3vIVCg!00L8gUjP6A literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..58a6f2157621e53c398a386d9100cca4be13cadd GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvl>na**8>L*RBSs@x@zys2RE)? zICSmEw!eQqn(;AMh%p>|{L)Q|!BUK2j+(C`P(5QwkY6x^!?PP{Ku)Tsi(`n!#N-5t zq=vwN00CErn>VkxFh)9fczSv=L^|kPxhm?~A5rPrsC>kgdPhIpX<%lU^j7Rj>3Qi0 PpoI*cu6{1-oD!M}1{rUgj{;&g+S{ozVVm^t|11p%_WDOqhB`CUn zJlM=GxozLC?#*w$i6y7GJiC4ScJOsZh10RUA%&;s@BS-)S1_cM!IgBpJt2 z_6b6N7PAUQ@*SAU{J^rYg~cPxOl1ml0_VgVTMjtAm2t>&QaR3OymBUYgvZ&W1DD>} pZ`EOEJa)0~B-oi3_!u}07>?vR-}qgpW(o8ZgQu&X%Q~loCIC&mbkqO< literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..971a973332e4575087ad800b4c0f913bb26417cd GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1Gk)AG&Ar-fh{`~)Mf7pRZt&NdwF`q=~ffdYdvIegj0@-6Q#*pz> Vz&h>Nx@e#!44$rjF6*2UngCFxKVSd= literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..47265766105cf0a735bcf56da4e3515e53c60f86 GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GGdx`!Ln>}1{rUgj{;&g+S{ozVVm^t|11p%_WDQ<5FqSiL zuaq)-XMZ+fq5kjx_wW1j=+C>G^x%1VdP3slM2q^*+>7@w);!6Vpt9901qg0zcrVht zbKaT%`SaHs)cpA|`Qb(D!eb2T#%x7dVVh(am=xSSKH2>K|EF8zMv=gRZf3XQgHXEy m*?X)Kt}q@x$H>6Q#xQNVk#X7uc_yG689ZJ6T-G@yGywoFyIgbt literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e734aa69dce93f3a920b04532c6dfb5f42881b49 GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GD?D8sLn>}1{rUgj{;&g+S{ozVVm^t|11p%_WDQ<1hy|JM z`TghH|MT+slK=kyJ@Vo4@oF|cK1Tyxg`6V_N3_p)d={{%c_ybUY%I^LEKvXFhj5N1 z_iUbsIdcRORJNL>0Ktt7??sw-&O7rzfByOg*^e*gS|m42mSnax)sEz2V4R?=QaSH$ y{XbW(97~Q1M;RC2EV#mmV(1%v~TBYyxHbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz zCP_p=RCwBA{Qv(y!$1Nih5-hn4j6U7r~_DtRmjN5NR+yh7wq5#i@CueMuO!GNC7dJ zSj+$YfBOH)i~0LOG>A{gTozJ-Ys0=%2k^;1f5&j}*~?x3rCr3`9Dp=PtpnB40MzpR z<^~$_+N$!PAlZ+MLE^leyX?HwG{%=KjKzkR;K@bTkM zhDYzjv06@y1IW$=AV-`$wc$UZgh|j`O0pp#%ZYKoXi+@sfB|;^+2sJbJh|ln<7l&d k)B&Ro7p4d+5i9m delta 698 zcmV;r0!96V1L_5kBYy#JX+uL$X=7sm04R}lkvmHRK@^3*tdEFBQYa!~ks>|{1EL_7 z5PbVI&8WtIEyJe|z&kk>sBg@#AheeD7NHdMA;_w&$o zD@RcG0Oy6Oe?@W{eHVSJs)hF(XB*IYZ>8+iw^S!n%Vgl?1X`2Ob`8x7 zURFQr9N$4=O`hlqcK4uH_6HZg0NR{q`Eq~Vvj6}934d@%S#tmY3labT3lag+-G2N4 z00ALML_t(o31eUw1*0J_8UiCd1Q@9u04Fcl{fC)pZg7a|=EKa!N`ox__y6htCoksj z2hqrm!Kwi$$bw4(oA`!(rw(8fhlxFZ$8hl3%U%Da#N8Z#G)S!jOb!>#gi8Wl9BTP~ za{~=|ZB12qP%!UD#vpNC&RzCru4yxZEC)FP-3)AelHv&D2wM{+`=3AFGW`GhiQ&hO z_Y52yf?!%e*ofiqnR^E%g-YyU77>#MNOAzkV2~q`{~Tg~Sx!?LB&07*qoM6N<$f@>Z*yZ`_I 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 0000000000000000000000000000000000000000..5db51797e798538acbe372814a8aed1bc688c5a8 GIT binary patch literal 364 zcmV-y0h9iTP)A{gTozJ-Ys0=% z2k^;1f5&j}*~?x3rNrGFfHX+01J%+1)bjo21{(6(s`8*9*^i7t;=G)@?9W`&W&~Ld zas*LPOKk9h(g4U2Ad9|y{r=!H>#qi6c}X_@1t%}ucql1UVoypMAjtu+kN`R2`LB-& zFgf1eYz}1{rUgj{;&g+S{ozVVm^t|11p%_WDQ<51hV&7 zC0t6s^nOp6a^ozB#c;5f}^-r0b7xyt7UisdKr~I_2q{yp$BZK0NjW-Px zCYDWW?3~-`IQ>8K;bU6CZmU`k{1NeVD+|nPvyZPkq+4@g#kmjPZ|k%Dyd^C$O?|ee zVUQ_Hg2Udgf)O7Nhw-wlywhD!7-m;yu=d~&p`4xjS936Ld}h>Fb{6QY3w#V51`K&i W%*FMc`-Op?VDNPHb6Mw<&;$UB*JRCwBA{Qv(y!$1Nih5-hn4j6U7 zr~^hFFzSF&2aGyk)B&Ro7;p!$5Tj_*p0^B}Ui|xi<{vAVZ_fRn;pA6FxcrR_DF)@v z`wV|R{bW%7{D>jLMU&CbMVNXau=d8c|A!xbXZZc`CsxZr;BL7hTx{;Cd;h5#1^@p1 z1=AoO{{8+3Z0X-0f52FE!XvPpeDw{mY1e)TQ$G!`@US!deEpTdN}QEpNt!%Z>~?`1 z!@r+@!59?$Ad`N+{K~+@&O&_$1S+sGvWs#v{Q2^eK_cxeSWKb*Cd1!vzrbSOpMHW{ zuFL;{A=ylckyr;X64NtcWMpL6xcd!5>B+BP#lL}3fecvr*uk_0<4dsR{;nbn#P+xt jN4sXD4j5<$00bBSY43I>XJ$*200000NkvXXu0mjf)vd4q literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9dd5c81f4c123d309885fe8c9df4eb92b2d82123 GIT binary patch literal 449 zcmV;y0Y3hTP)&MzDonzx@Z(APfR`xMdmUUwZT(q>koMV9x!Y0pt+6 zr2&wyHof@wAD5*!GNc%OfBeaC?Yl6;j6K&$3I(DZu=d8c|A!xb2U~*fdywTIaJO6$ zE;jenz5i5oz`s9`c>eS0C&S;zCItcd za~W7236kZ-frc2T&pdGwSP#I&Z$PB!F0tnGWz(<}2sA)A1!$@S)yzBSok}3A8R%0q z3Mt3r zkZpPw{&WiFy%ZS8za2xC)!Ca(e-n+b4}($EA*T9a|MIb^U2p_&5?APTMn#dI*)wrw z&s!5U-@)w*brrxit93R@I#`v)W1^O3;+Wpc;#_Duj;qBqzxyQ+x+T!xWmpJ`a2yGt zFR?KWwr=5=+D+j~dR_*PB)AW-67D3@pcl+99fl(J=nL;Wfu)qur@oeI;}1{rUgj{;&g+S{ozVVm^t|11p%>?l9`Kh!_|d zC3WQ9`TOkPQ{&$cYhs1n+3LduSxZWfh!pj-h%B^bNcp+>_;kr7DWwmS4D5C(cN8*k z?{s9}B*M0@{;%796NXQ!o8CK4)6Sle+}m_9#=u6F;WVqkfs<#C7JNVExxwPBY(tJE zzqz%ssf=OCA_m(R7a4ahbO_^UX!?Kp`uzHrVoWVH{+=2FYq-tcR(2;@8t!YK+E=G{ zi0klbnFVQggx@lJIn^$pu(e2Om#u@3lgsuwuXu%$g3LFaU-_uv;;n)k)(i><7~YFd Ul1W_o8{}gKPgg&ebxsLQ0H8O1X8-^I literal 0 HcmV?d00001 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/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 0000000000000000000000000000000000000000..626b771591227e7e0106c4931565f3c37974c58c GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G0iG_7Ar-fh{`~)Mf7pRZt&NdwF`q=~ffdYdvIegj0@-`4 z60R_Ug&M3IT4j9Qb8|Lqd%8X3yV17lS^R4S5@g=a0IOks%h15U%%CE|ZT)^>AP>-N N22WQ%mvv4FO#pW*I9C7w literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..94362120a817e7ea646afd2984efac41d09e5600 GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GS)MMAAr-fh{`~)Mf7pRZt&NdwF`q=~ffdYdvIegj0@-`4 z60R^V=1Wj?zkJ_*zT~+omPICN|Ns0vykX~_$s6xpp7V{bA+m$#-{Oy%uN(e9iT0Rk tQgGf#TY47DP6ivWK$bxuf#E%~Y+;@IbyuLR44$rjF6*2UngHynOOpTq literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2fed2373f7ccb7c1985266a47c3e01d3ee8e91b6 GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G4W2HJAr-fh{`~)Mf7pRZt&NdwF`q=~ffdYdvIegj0@-`4 z5)Q~7aOzt&``|%|wKL@J?{Cihn|oU#^Bu#CRAqDC7dcTUe|)~K&zAD%>uvKk(Vbs= zN<5hrK0H4!FY>S6#4cC%!~7cVl|roQGPeKuXS}1{rUgj{;&g+S{ozVVm^t|11p%_WDQ<51hVt^ zvftt1`)B|Bldc7CaN($bLY zta|9G$F#}JCyE$$PUD^LvSM?l>f`hA`z0oPyqzopr06EcL A>i_@% literal 0 HcmV?d00001 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 95e24bc9cff48440b64b8a27b62e3b2c5c504769..c3cd7597e6b6b093054418a3d3af5ec68a88b1ca 100644 GIT binary patch delta 285 zcmV+&0pk9}1OEb$NdX~|N+y2?Dg><0U;hht3=x2Z6vGc5Jjk%)JI6C@a)+KcNy6Ai zQ@%11YbHq!*z)S{GapOEPuLy60Cs>C|K{hUm`RcYSa`V^ECje!YPO$zg)RrP7^H?~ z4uAn4OPvN}e)&q3nJ~7a_U`92&jk|snKO~;&hR_w3y--nfH0|mtPp>AF>!i2j21{s zn90G(2^RnH{X2ae0P{H*P+&RP4j|XEpuN6Ndae(N+y44;edk&4}vix5a4vg`Rjk-jv)dtl2R0dEZ_R-FNTJH z|Nk)@|KyKiE{Hgq@|B>OETn`0$Z{V`9Sm`hCywugh5-L&hNB;Si8hlY2Qc$+GZ={o zFf?sGf+GI){aXeDh6QjnN0l@g8H~^Tr@8|`fRmk-0Tv2BfBs}(XJ>zBC|julmv{UR z3<@GGCo32H`}>taJU^4+*82|(a%BZzI>qe_!@^^(VEmtfktFk2$jNSp8`|NtX?Xzy z2PY?(|Kt0220R&rdJeE{s6>hrgyrM_k{!TEfn`I#DE8p`!C1TdDud3Zl?*?B{X)TC zzkOp^kz3CYF}abE=4n>|1pfT_gIXA&@oDRT|F|vG-?okRY2bvT=kQ5{B-e%@u;UvC zh9)M)e++J%zfcmOy}dnk9WdG?8+E|2bO1nr0RVdHk9j;>@yY-I002ovPDHLkV1jCd Bqpkn| 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 0000000000000000000000000000000000000000..dd2bbc94ace6cd21c87286523c179e8e42e44c78 GIT binary patch literal 319 zcmV-F0l@x=P)<0U;hht3=x2Z6vGc5Jjk%)JI6C@a)+KcNy6AiQ@%11 zYbHq!*z)S{GapOEPuLy60Cs>C|K{hUm`RcYSa`V^ECje!YPO$zg)RrP7^H?~4uAn4 zOPvN}e)&q3nJ~7a_U`92cK|x*48M~OWAC_fzhSf>8g&589N@wELkg4yfmv}H)^g(b zl?ITS(I}v~15SMSnl)@ffaH>}JJd<4a>vPMxa3GRk8!kTH0pp6?*M=R0|1@KLirta R9Gd_D002ovPDHLkV1gd7fLQgAcO`*!cuDDL&lHu0~1UNUSe pI;XYNW|zYQeFlaH-y6Ie7#SptC38Q@AH4?B@9FC2vd$@?2>|*|MnwPs literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..728c1477ce314c06dde5d97c28bf3628ee953275 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GOFUg1Ln>~)xo*gH$UuVi!E~)O0WTxbqLw>OclJ0RsIFq) zuBUg?ONq}hN+ozp7kj`4*_!-6ihJIl|JEJE^~|SrrZWR0i+}@|IPmE*d;8;kcRq=J zy_FzQwdP5-+%4TX#gCphY^-Vg6&v+lv2cM3~gu9x;d;<^^KWQsuY z95#bzdvni8-mA`7d(q@|2q BV!Z$W literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ee6e21f7447c362b735484e3ce4f788299c5fb43 GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G4?SHRLn>~)nQq8+$Uvm+|Ed{X0k>98P%inxrlc2lOuLec zRXtyUFV;mvZ=>kMC>^t{5~eR$tz52r-^Oz2``-ED9y&`!>>_z(AaRnI_)3}Q{ZRQs|%v-h4Z~E(V zvkL;eoQ*d`^j?*o_dI>?^|S+p#s-rQxTfuTto~=iJLSIQf^!ddt&?o5wO~r-aq3{- z(Wt;NVVUM66~l7wdw0Dw1ziPg&NsjRy_H4hm-qw*&Odt(#5OQ8+};(!ciz~1Inc8V Mp00i_>zopr00sSh)c^nh literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..df040cd99e652ab1a41965db9a00d78b7f61904f GIT binary patch literal 350 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@j0~PGjv*Dd-b_E+b;v-Z)ql>vlMP$AHNOb{5^J`OKeqjo z;IXydGkeb*>eWa!n;Yihwe`xDqdx2VHp`2@JXEbPf#uN8bG}TS0bUEezh2lV(ZC2n zR_q4+@L_t(|+G70w|3AY(0w#t52BQubb-<_thLi*TGcYp#2h#)O z07i!Y{~5tF#357xETn2ETfOgp7qIvS(dcqrp-zmXn#V{=T>!Gw)kqc0c2$vM*nQ^_ ziu~?#w@G#cNg=?@!_8nREzZ!i`3M8oz2^+O&s@Whr+E}`vVXHOcw6eE{{gZKH!hfY ztD`3!Cb#4A{h2g(z`ws=84P$Y%>4E14+HCz7zP8z3t&q@{2dI!^eG2^{P@nm%E|)F z48Iv*mb0<3&?gsw00##r*byL_f#Em9)#uw8e*gIbWM|So1Q?+{hFH$PaQ@+ThEHFg z(XSi;fveBAfqyOKvupP#@! z23h{*mLtQ97cUs3q@)-G1O({gfLB+&7}(j_8J<0R2DF%oK}$=E;lqay3@=~4WMGgM zqfa&j`4;5spFe*x+`oSxEG8~4PF4solG-n*+;I}8hA4Iqb4HpwV6;g#>VQ!PP#XXQ Z7yzi9k`dNkeenPQ002ovPDHLkV1fy~%k}^O delta 428 zcmV;d0aO0&1M35jNq>z=L_t(|+U!>`Pr^VLeTRiY2!zCFlLr3)(dgjf)EF0I-24?z zP7eG6evGS1CnJMVCNY7jyiFYKJh#*)%i2ZK_3rtVNFMn~~EYkw(LcaJwVV390 zhY5!mh7p{A^NSmLytj!`!$u*yj?#O3u6}u6rN+;wf)JpjlAOdN`=cK02p9?{ySTF) z7#o`C#4OBeJ$L~eJE;mj+E>_)RwkPQ7!JoUu_|X5IL-jksKUrcQ}S3$k+2IUh{qE` z1Ydy>YRw`><9{AIKb6w~?${#-9^Z=S_AN;{AfkXW$Jc^1oz#W%6{InAB_-kQ)7g}~ z-|vZgF%|fFIgrzVf!h_1Ir-=FK3c67bX`X#laV8!T|0uRs<14J5l4{A<t6V1nihNq_{YY~ZqZkMvG(h>IVDr~D}aPQCZT{(z_JB=3orn^ WjgM)jVlgHF0000=Mjqh?sK1q`vGY7UHqA(Ol zb^t~aPfs7%q8OA2)dYEG(#-)!Uwp&#G6kVPmCA^cP@rCINMz=8>RiaP>a4zlj)_`$4r zz1(+FiuvTXML^XsP{IG;-K#*8?XI!AtC>9hFflOfW9MOHV@U54U8vG`^)N`Cr>mdK II;Vst0BXNA3jhEB literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..16ca3cbdc5bcc76331ec3f7038bedfe8bc041d8b GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G&7LlfAr-gYT;IsqU?9MHA^48&-UkXw7e!gP1DW*{&9X{( z4PVa)Hfm~h{Imbpbs7G3yBcPmOn3Su1Jn!y``8VlHVQQLuT5WUef_)Z#z@iqOebb_ zt}z==Lxi;_pyag-RwJx`$*zStl_Uqz2hI&Q@hCgxzoCXYEc4{wd5Vbe} OGS1W0&t;ucLK6VLzfmm! literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..11a86987cc9f3b2f959bfde0039d12900bddd5ea GIT binary patch literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GJ3L(+Ln>~)xo*gJ$bg6S!uuuMF|FMSZYt*jLj$TeFKK=5U%jTUr@47r*zUP5&qXoEI{y6wA&|J?K%kysMalQGA zmgnq{i^w{5J87Nk`I1`Kg5))`#m*$&P+RlL*z71%YHjE5O)vNDYJU@-z`*>+_JQsJ ZhLSonO^!()Rs#LN;OXk;vd$@?2>|ReXV3ru literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9673504e305597fe0f32fd69357310788bebedc7 GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1Gw>(`OLn>~)nZBRvkOR-L{kvCt)r!U+IqLesa!JNpZH}g+ zkDk2H(VNP(uidVr**RA@nY~hLEP4KUW`UpFMAZLJjwHg{^C3?QIKo zznK}aBUa-c-$}K0MK+?1)kK?|lnssWZ(rf_AfGF3QH5yl(ie?${8!}4ck8eR zzAfjO{G}n)#Bq+??CLq9_D2nW=?5^d{-|!4&cMv@_N0qJLT*7l(3cFJu6{1-oD!M< DKtOoV literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d47c0694e22e4ae1161f5bd5a8000c99f12a0d1d GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GFFjoxLn>~)nQqJFWXN;;f9C2%(?3f2@ijdc`1qQuX@N#w z-nmDgt{lwfkUMg+|GUs(;W;rSFQk1GmdalGH|bBNW+z9NNqf^-2A%_8w4k8jLoP$Q z_?&O6`|~UI-dwC9DiGc{p_%(>xY(3ua%)-T!Y6!I*w?tnDIkT{qQlC0#)BVxg7W^% z`FV8>&Z3j@C%ug53U2&dsH=18?P{sFhO^XfaRvJR@X)<5<@aglx*g9&F8eWSwpK{J z$UHVV&%0Z$WS{f1ED1d!gY-iEMHh3L3%B VKD$ox?*V$6!PC{xWt~$(696jghE)In literal 0 HcmV?d00001 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 1494632f2d91d2d90f8d3fcd98e2bdab9db42e16..293ae99a1c5c445d05cc3edaf0ef048ff5ba0cea 100644 GIT binary patch delta 420 zcmV;V0bBl+1pEV#NdcabN*#YQFf#r}qKN{GR4EBT7XJUwNRCz(QZKn}JaQEC?APp+Ichlb;5F#+OXl2DY5}-yep)d=G{{ zjF5l?B|Z=aB}AI#f?}YLy9rfKdkwv;!Cb0t^6vCzW`;`@Q7= O0000xj|6Rb4Py;&XInV)A4*_N# zZiX$#uV6}KR5LID#X<5kjRFwp2r^+f^85#im_&Re!wX;tY`=UT92I}2?b)~p8O~P z8ecMH8`yH@e}5SI@;w;-FhT+nl=wgxln{wc3nV+B80h2f!XRLvvjEv!82&PGF_cZ( z%<%8uU$DibSWZ!GSl+*ep`$RAp|pP;m|r?+8(F!4k(7P`uF5e82F^{WW2~yGg7b-~ nj2K5dCZi4*b-+M703g5sx>cU}=d>t{00000NkvXXu0mjf+0fB> 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 0000000000000000000000000000000000000000..cba7f74b94b08a948a10052897f7a8d4d62bc86a GIT binary patch literal 367 zcmV-#0g(QQP)Yjv&ba%sku-meS%3O`DIPh;!Y0&anH;HLyI*qkxm0mBHImCmmT#siI`2 zcSle9j?4FFR&GD}zunWEk!HEz-`}s8f-`5rnV!0e3?N6)HyfrS0%ZH;`y@GnIu1Yz z0aAjWEC(Zuc-JxiVrL?U;-@VAKHv?EruP0{}^)XYig2+ui^G N002ovPDHLkV1l@(n27)Y literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..db884c3d25791fa80429150deac70acd77755d25 GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1Gb)GJcAr-fh{`~)Mf7pRZt&NdwF`q=~ffdYdvJTUjKbgxd zo5d{Q-u)<$y~iryh;>7&jPLsRIe*TdIdt;CxnHs`SQ**c>g6T&G0u#+!^CrE&#NAj z@&h(A1=c)zt|o50?o7z?T9F2wLuzLF$BMUT$U#gtc*QV@(V>Bn;qE_K)ni|EZUSAx N;OXk;vd$@?2>|GxPrU#D literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ccf14afe99a96bb03b660e683c3dd9b0ca96a7aa GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G3p`yMLn>}1{rUgj{;&g+S{ozVVm^t|11p%_WF4k4e=?U_ zHj7!pz57uhJI@y8h!Yo0rUr_opE~>R|BONhrw8K3%6~UKyxy<=|Noz}oN536exBRN zeI!LF;m6O<>dg~6&}EM zuhnCSZ1K&B>v^6LX!EKekiEw$;R>S)a{~i2gTiV(71?LJsX(_fc)I$ztaD0e0sz2; BVO9VD literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c56db9fe56c80f0a6fdcc0b34c23c0884d9f86c4 GIT binary patch literal 310 zcmV-60m=S}P)Z0AmP9`e6g;2mk;807*qo IM6N<$g6v^?%m4rY literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9cbe1c22f956837b9cb13b24a7c5766e67c0c9d1 GIT binary patch literal 338 zcmV-Y0j>UtP)lY{gfBgu=pKtyLiQQaiLb6#bl(?RYlY!yqZ%&54e?EZu z>hWjj>wr~);Rw$9#X~aO5mOdc>wwzl4;vir; z0P)EIWTk;Qyc$@8O^t!!Kg0jWj02JeelauBFAae5J}B5h;P0RBkaWN#!0_|uPX-|o zJ=%u=EWX)Uzr)kPx33=<*xA|XlLqF=gkTjvH@TQ`Wu`jqa{-_)plbzw~Peu?IMEvJw|Ifh3{*!?(@CqZ%LxA1&BqPZ3-+%wZF^FHw zG@X%T!$1WQsW@-LA%-8Hzc4IkQT`9ZAhE~GjYu|&g_8Jle!P@{ixU)%0u0CZy@Evv z?b84ZfGq#{o0H-1pATTZdi)vsI$)JxID)f&@zBhMjO5gYKfios`1AM5|8L(R(EtNg z2YxY5^tYu?2!Ji;7JxVim<~XEx)nrocr~yFn;I}zGyH$dI3Q`@7c(RM(!ke`C;x+j z9R&XV`3^4&e*XN)AS9wk`w)P|H#_Thcsls@^#cPtJ3D>Sz&x1{tm5Y;7c;KRRHuC| z09k}hY+j5febT^ai)hpVqYfB#z_4-vK!5=N9QeS0c$!Iv00000NkvXXu0mjfN071c literal 0 HcmV?d00001 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 41bd94c3ef420ad8c51c7999548eabf9c04996b5..67fb208946ab4b39a7de3c600740c78024fcfb12 100644 GIT binary patch delta 535 zcmV+y0_gqu1k?nONPhwLNkl$w(Ci>el zl42esDcNw!lqvsH6A~GI?lx!m^pl<8>rY087Ye=;3gP=5$M$Z#e7Bg1kQ<^Ldh znm|9v!4C$YC?Ez;o;>+KEV}YG9Qyy`^Oygxo}c*tjxAyG|dIbV3lAvg0p@xeaZoRJ|xxmM5h5*oE|uE03QFKxQC|! zC8=MZl)1f3>_krnum$MPW99|8q@@gP88Sv~u(Pw%HVp&`{9}w; zJo~>RB93RwebK^8E3YG@3G zevn>}8Du#iC@APZuB-^6T~-`m5MI9lB3L((q50@_hH2N%|0l&Pybf5mZXM&kefzM= z>Gbu&Ef2qWAB?^ury$AZ%>;h*=VzT)B(fN0RRC8 Z06RI-d=L;IEY$!2002ovPDHLkV1g@$@RtAp delta 572 zcmV-C0>k~(1o;GzNPhwwNkl;@ zx(`f*N-oBU{9`zDohSeS)yEeZ%YXJV{O<}r$go~e9~>$m z;`o~R45i--7&kB^{-;$U{0|LoIB(G#7`8}-!^LudiF8;NMDX~(Evx^(%h`zG&)+KyKF?M%guRF0 zHU~CP4uK^=qJPr?*&*=lJ1`A!3xL_+bnu-HB_YiBb9gnd%Bz9Oi4Ds@g%u-Rase{< z#mq>v5WvX)2_M#ggB=9^{`n5hjtoo!3_pMVWN1A4kpV3oFyhM@OytHt2(Yt$ho=Kj zS-{TDPTMp9Du&}0pZ#x?+ly8H+~i`0>7h=Hu=0Q=xqra+FAF2cB5an=i}7S6H58ag zjeigTh5*p7=+hv zfC$u01dEmbd5l&4zJ2>}n#G8#YX)=xJOrGaoKVUFoxWa#AhgBA2(}(0^50r-4ZUc8nlL{QUCuKf2|l20s{pqJS7YdGh4{u;>C=_T%#x z3HXX&EwxPoIF2#Xul?^%AfgRYL$* z{7Xm~Gk_d1+dklbxTxZPkmXZDV;IOu2RI!N6cqFyS5^ekE-MZ&2(RA&5v-fY(0ued z!?bJX|C3@CUI(mOw~le&zI|BbbozSXmWSWG55_N^oyDpaWCqAAsI5aRa X9O~n@Zv3VKatMQ`tDnm{r-UW|zUDru literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..247b3cfabaa2f15a325c87be836bc5e6eba5bcf8 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G$(}BbAr-fh{`~)Mf7pRZt&NdwF`q=~ffdYdvIegj0@-`4 z60R`nJjr;KKJoC)9<4v0J0?C;{LuZ--t$oiKV!_axwB)=cuY5GIIA>ahHIYu$uz^h jZC&nAy%p>XED{VXbHr|GUv_*4w2r~k)z4*}Q$iB}K$=8O literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..6ffeba8e6d16e99601c72629878405acdf36a907 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G?Vc`J@vVoxbY=bmJN|CLYq&#Rlccn>|)qQs11Ve85$Uv84{MM VT+(vXJPULZgQu&X%Q~loCIGh8RN4Rl literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..210fa67f279982048afcce66cc4d4f870e12e911 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1Gb39!fLn>}1{rUgj{;&g+S{ozVVm^t|11p%_WDQ<1Y?7I< z|D(a-^ZN0U&x|$yv?oruF@cBCttiWR!u#nTGm|s+Y^XDQ>{1^+=}eO1^{4m${g>S# zFyoX)cX05x|HpfnC$ZHT8c$l<-#TmB#K#<)oF0fDuAg)ya}vkK$g;d5L*-Z}hS{zP uhTV7Uem!ZrxGUibBiQy0MGOuNj0~a+%~m8mxEBa?CxfS}pUXO@geCx&5n_P= literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..00d78b7074dcea037739af9bfa622c1b40c7b707 GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1Gt2|vCLn>}1{rUgj{;&g+S{ozVVm^t|11p%@mN9=amrMKc z^Qrb>uCS^94S0l@FFEV8L}-{k_o2^FDW}_Wlu}fdo3W@KNUgagA*H`2 z{*1-N`_t?)AKd=GpIMwKSTeOR>(syhGYTCp9nep6`<3b(Gi~Byj!jMv#1Gd`I+8hw zV`F4lUXh`4tP{g*R|UiFJ9fXGG+lgEafK1=mJLM=4h@V9hTQhMZp%$S4Rkewr>mdK II;Vst0Pz`R+W-In literal 0 HcmV?d00001 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 05147c65ad37bed558981358fd5eea6aacbae46d..7d08454a16246e25ec8e3f8a11a01b5ecaab6857 100644 GIT binary patch delta 350 zcmV-k0iph^1D*qrNq;~|L_t(|+G70w|3AY(0w#t52BQubbpQ*g8uB+D#+z*>`r9(n z%mE_hyMTg{N+Ek@&hDCs(B-$5zASW z;g}rDL3n88f`bPSGN1?j_rHI@7+DS7vLUj?bSnq&`H)oKlYixabsw0(S#cSkHj21G zU@TaU<^>T9eEa{G{)rIg`#HQCSmo6MqDT$}s%67p%#38|W1*&HjA7k9&*>KCy@wv&xU^O%ifh;XUMvz7503-&Iqe~P>NEw4I6tV`=f-GS6)X*6E zl!UNs=Ca}dgIDnS4G_V)i44t0uQN=$cK$zILO`dl7jAj@&HG^d;@MfULV%H!jtQ)+ wM=orTErz85SnG)D4j65gk2+vjIshQR04?w@a6Rw}-v9sr07*qoM6N<$g0tnLeEsq^|?M|NR5TAb$|?`wo4xA~) z!7@H=6mf&VSXeHgT|tBlzWx78{}6!reh#k&R(Z96C}K)V+N6PB%#38|W1*&H?;UybXu`|M>jnKeqA% zBuA=wBs&0R5y%mgS`NZPD;FF*c#wfm(G5~FyvqT6J|xxmWI15n2PSY<U{8`ipzuE2G!1U;n4O1F-o#Y+65U6Je0RKgPJl zv%zr}EX)Yb1u)v~-y66Znub7@mLX&K^a=mb>xb;sOTcn;i2?~JV+N2TX4?n+4;NMZ z53+n}XbgSQ0IaZaS#f|tc>M;5VBJK9=A+jcrd>NvpMprIuNQ84_|5xZ{NmYJvO<87 zl#U6ktVb?#ku8R$0a)vZ>JAufmXA7MSULb8zyMBhb;N^#by5HT002ovPDHLkV1m%p Bty2I1 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d93b5da40caaf82ce75de4d7d28b0764bf075d78 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GF`h1tAr-fh{`~)Mf7pRZt&NdwF`q=~ffdYdvIegj0@-`4 z60R_Ugc!JYO2zNp^YQ=t`}=tmc$kbfRrQn*tYG@f7|@~liqL~yI6M+tn-m9 bgFphqWHwP7D-~@~pgjzpu6{1-oD!M<%cMUR literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..24cc104349041c0bd6158696fcd5f9eeb3acc103 GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G)t)YnAr-fh{`~)Mf7pRZt&NdwF`q=~ffdYdvIegj0@-`4 z60R^V=1Wj?zx+8p{J${}{Q3J^yeHAYEv$c{9^Z_rf4q-dk6id~KS5`E#HP-TuG8WI z4;(qvkYlOZFmX=W&h8BcVZPP(_N6ZAW_H{B5Nz-o83us_2DJbc&5!R6=m4F;;OXk; Jvd$@?2>@+QPtgDX literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e89d6ac3c9b08531ac75c91bd4f2e4656475c384 GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GJ3U<-Ln>}1{rUgj{;&g+S{ozVVm^t|11p%_WDQ<51hV&7 zB^;1F;Iyjk`T2GK($mt?e*FHfKZAdfV~qgA#r<`ElO{~On!IEtb3=n*hGv`cgr}KO zObQdS9(08MVZWfrt@mbmuGEaecd9p(at>5oj5@}XEPl&s!Nud92a_&Zxy|TLypiy* z>e%MaLyDg5e^{r&gvUj`V>%*+gC!)P&a4Mv)U0La2@3s1OZFfo`o z%wfa=Mp7Fjp^A$CfB*iCSIveePZ(+D01)sI6Z_A?#s=sA`Sptd#0Sw^UcF+ZX(Igf z_aEF+7>4nG0E53~`%&8Fg4XQ^z!qTx){E9MUWgB*tpgf;oER(?tpf)$$RRLnuy8%& z*~BoMj-zflz{G;nqCIcl($)c>I6e{MhmmqYV!%)!*)NQv{en>kj5=V%I{+ZS02O<0 U)i0n5xc~qF07*qoM6N<$f^6r73IG5A literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9707e28b252260605c14977bbf6d3e32e45bd1bf GIT binary patch literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GA3a?hLn>}1{rUgj{;&g+S{ozVVm^t|11p%_WDQ<5FqSiL zuat`0yN7Yz-hco8o@Q7)bLPy0ITE^R>kfKs7GQ{+k^7KyJC7QhFneMUgYwF&g)0^* zb+z5!UvIo&)22l$B5VKKy>((pQ8eP+EOVqian>@%39T>s7GR6W;wJU@Paz>$O+ zfn1whGi6_AhPy#2|M(M}{+vAJep?{pZXH98pjpD+4Bf}AKOAmZEx35R^I+0Ns{(^& z8K%Q*+}Dlg`SKioY4K`Wi;s?l?yb+?baQ0`HviQ)+$mw-bBI}mjfZv8-$NF+^dTPF d!_2_M!ytXQBFe}`yawob22WQ%mvv4FO#rxIf>!_l literal 0 HcmV?d00001 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 dd62bd08da44b60e9c2849f4c1195d8131bf470b..cf58cd4e06912114b026e0434df372b7b8498bec 100644 GIT binary patch delta 319 zcmV-F0l@zA1DgYoNdY~PN+5p&<^Yi8Z@zwIh_|sJ$`LH2T2QunA5Me+&goGE`8QML}8EKLTK^A6Pc*1`zgNeb!L6{Uk zaw5#L_5sr{i+=z9&A`gaO22XdWFayQvmC^SVVZ^j$U<~SPy$HG1+awZFD}l&!o~&{ z|MTk?m=B_L7i}gw0g@F0$d;n>e?W5v%|ZYc3a6vJ7&wq}0Su7pd$Jq=bHwF1Ulbpk zF5O15rrNdc9SN+5qgOq5y{T3G((>sJsHRKhV*%>f4w9t6`{Uj2QBOU=JI zosv+?8HqKQq!0jE?qjKg)d8E5V~s(Ui{&>xe>Jg=fhG_8nJS(-6k_Yks{{71UqnVkR!E7Kc38H`dYkEPUBt?^4 z0J1RK!V_*OObjLt!lVF_b3vZ95158o^!xX323A&9`jrD93z2D<v+xN39y>s{TpI^UF+D{ka14TDHc|yBH*y!WLZLw(G zClDLt5EwRCxc<%A#4vtbj-zgE$i(s$i$&lRx##U$+B%?S`_X47V*Di0#X(}gPHHV$EYA)pA!O zRjhJ5vQog7i|03yVm&O#g%LJV~F3sa0*N-8km9Uu23gNsym=^$I1UK?q&=} zp1w{;7QeV?-pnsQe=%66X28XFT)989-NT%b=7|uS<#fx2)Ucdv2T;p$vK&B7%Sp}! zxDp~tb|fJI4!ybnW^d$K|RWC6$`YFIurt7A|?^w3enNQ59UkQ~i(0kP3U n69Ht~*fB*vkK#q&Zb>}_n00000NkvXXu0mjfj!TV^ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..7cf061e463f7bd7e0de9cf1572a2437d16a576ac GIT binary patch literal 1459 zcmbVMOK22H7;Yhm&x0uJA}B@Y5?A{dk|o2%dyx54$Y59^AmPM?nu>1QEOh5fAD`K}6B&c{D1~pbgda`s(}N|8L`C z``548yhf6w^`&BALd+l;t5%9XYqegAX?0jU!X#FJu3Y_5lKP%|#oVk;t(t+6t0&0x!w z_v{8kO(+O_!Vzftjex$(o|mTF;) zvo6^IOx-j!J);>}#W0{b2n`E#KUs*2+$x+X{M;2LcD7vSJcODS$FUk`R2tPZ!?G+* zH#O5#1VUkR0Y^gZ@t(@S%%~YKaM%l68nbO5Js<_d zi7kt$WfeW6m`2$&p=rQucDrssUGG30>U!0=rJz{@=01groN*CH%Yt1Dt2FYFFxc}^ zjc8#|lR@f6I6@mV5`u+xnYI>=14{wpD8Qstuw`Mh>Ul2AnL901bqAGdo@A7KE?ZS9 zm8zv6Glww36@4d0z4rx*XOqbG-n-xU{+GxTrG*;b&65;dk`l1!F%hh}ZbeLzW8GE5 z1MMt;2q)QX%Qy)uapmr@_uU@o(8hHlNWT*94vf(%k5NR1Yrm-e7ikZ@v=>i;2T?&UJ<3l1nUAo_s%YTlef{3=|NZ}Z zZuZ0NTi@O)2*UQ#OmQA&l#MNKz(4JD{)6ewc;-|p2-|jKV?_Ar=Yk+?eB_rG`J!_i z6Bf#@$0}5Ag)yK7;mCL^cF8j3s6uOgWQ&ilUK5e;+2YBAj_SmdwC>Mz61vctEtAeN zu{?47C_2)@KoC;yqE;A0DQ?+fj~Bx_J61&0gYacroX7;CMQ098vV@{BS(AvWs%XrT zEkcOt(E~_VbzM;nMKdK$!}=ktS!nQyATIH$c)mD25C%J2taBb?MQJvha?_AmQd2a` zvJ_QUbX@|3l(r-8wxlTCJ7g%*lq7!4eHNjN(XFrsw?$C3Z$lX8v{5?n6L?H%xv`?j zYGzXp=#d;3Hx?)QdZ?nH=z?X@YYMyNde`RtPcBj zD9@VMyIWJULpU^oY?-$p*yK%&M$owuXi+PTrEj6VeNie-lo!vFC*AJ&&0`yW8M*TL zKO>jkDm1SDIy(K1`e5b6W@tsfUA%Pv;U9Oqy9$NEYIpU<^;>_A?!5QI@7}(D4@@V! z_ceFkTD`Y)ZsVN`r@MvkckKBtutrBWomdI1cUOYV=#%4@AMYyc|7ydhXGi|tw1!;} Ze*A0CHw*3CA7`z$G&Nhi{K3+f{{sUo*R%it literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c014db520a843683925bf2ae7315e192a7714dfa GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G+dN$yLn>}1{rUgj{;&g+S{ozVVm^t|11p%_WDQ<51hQ|K zuvZEapbr>4UHx3vIVCg!03p$EKL7v# literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..cc7b5ab8fe64f84a931dcec4b9d14ee6db75816b GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GS3F%DLn>}1{rUgj{;&g+S{ozVVm^t|11p%_WDQ<1hy|I} z)RxJ_RsQ+^x3zKNRCd>S(WfR&T&BpdNrY{JE_5Donb@Mrn3nZr`rT+N;-u&?S z`~M{?p4`7|#@nFdxJ`nk?$00AWj7-wGv{-#D$h5n`+fQ}!=d>4;sqAVy6df#&&pod z@Y|@_<45T+`ThSIeJQ355wp89%&xyY8CJGB9VnVWg%57zvex|0c8l|7vc| z@aNAr1`akx2KM8Z7?^T@GSV#s7}*6Fe*gN$F!9ekh9X0ChNd?c7#Mb(e1=a?yN9_H z)g18e-(Ln+HZBH+KMcSS_{&hE_YWj2367fIUl?igT`W*BE~N z_|5>c6dpQAmV?BR<*1qn!3hr%?2^Avgkwe%6D!02f4>=i{syKeksY+nhG0vOECzue zKYxK~c2-8}=K^F<2@Hh>S6#_BD>dO_T+E-rj^bcvW9a1F^qiCgNU{Td{{6<#u=_ID z5l;D zg^ejVDu7&ZAb#n=`2%dZy}dnsDx(uePBTC)gJg1C%FG}kiN+uPH}0g-_ee?Y}2 zBi%xPkzIh{_pfgZ6aUO(C^A(4*YxHB6T^3gXFGPBL~$n&e+Oc25U1V4T#9-j@b51J zD;pOB!yg6)cGiDPHF_Ys7$m__^ZN?}BP$Pz`j$&f USnV6Uvxz1f<`1RvE1I$u* z=pb1R5=WM!UKFIgWMBrx`Hqv%e?UI}eIguF4HGNF|9`(3e*Oj~50M?T&4yr0kSqp) zA3uMAX?9jd+LZ$yoIj)*_gs1|82Oap+h1NV{`#8(#W7v{+nV1&;KT@V$R8etPToz=%Rl=`(XAxpV1sCfIfQOSF({9NLIK(0ITCB0V5htYkrD`f zNs?KNq_hbS9z2M`-|?LTlq)J4MjbHF4gd%+0Ka~p8JAc}82|tP07*qoM6N<$g2w)^xc~qF 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 0000000000000000000000000000000000000000..0bd85f3127be4a8c33327970b8dae48f82077bd0 GIT binary patch literal 388 zcmV-~0ek+5P)JGB9VnVWg%57zvex|0c8l|7vc|@aNAr1`akx2KM8Z z7?^T@GSV#s7}*6Fe*gN$F!9ekh9X0ChNd?c7#Mb(e1=a?yN9_H)g18e-(Ln+HZBH+ zKMcSS_{-p-qqqd0`W;v9J5x0gg5sR(+%<+@KfVuKE`TPy=Oeou041!3-It$RNbG$~48W)W z6-MGf{L+K-2iS6Zdwcrif)hthGe9kcTR!rt;~n2Qo*~mTt&Xu-j7(+JYD@< J);T3K0RYEmQE~tP literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..bb9631211d17a6755f7704b27405bb4f9d74d2d0 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GeV#6kAr-fh{`~)Mf7pRZt&NdwF`q=~ffdYdvIegj0@-`4 z8d_z1?f2KD{t(&m{lEV)d!9G{BPIS788sbMHT!9FNteZ8+TjE9<@dAeaXsLx{NDYK zkAcbP0l+XkK9jsbJ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..1f7df6b2f3ee427ea63fda7eff835b9ed9c5a141 GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GvpiiKLn>}1{rUgj{;&g+S{ozVVm^t|11p%_WDQ<5FqSiL zTh6Mh`+4evU6#C?uG+?v(FgTe~DWM4fmziPA literal 0 HcmV?d00001 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 d06532d6d8fdb085c13164dc145459614ffb19f4..a0afde5f2d26f13e6b787ea7998c01ab16d6337a 100644 GIT binary patch delta 286 zcmV+(0pb3T1Kt9VNq+!IL_t(|+G70w|3AY(0w#t52BQubb-<_tSg2)?Qv(;gK-t&u zjge@Lpn`}}>{!qFpIp6+u}_|Glr*>4{~W|__b`{Dc@&hc-uKMMQs)!G z0SuBJI*OlQa^0a$QZ#h{3ojRwg#foo&GwV8Kzu#*MGRYxUw`3)$5{bWMm>~(jR)3+e^Ygxj zZ;W(x0Mv3ux`e>Ng9jOoa?8PeyJw3wgNx5q5c5Bf%}9F({1N(JXQIf6Z~($$2iueX z>zs8NY3cwLejbLOU%vkDJb8}+YAM+FFgdy3`5K8!~^#ti;Hv*hmh6 zpYNXlNii_nPbLH|zV6O)2FBk%=@0_YB<8Ie3Z}Q-UJa&$R3aJv{{KUJ2e1psp!gc( z5D*P^8zUqA(g60*p@Red{QL^{Jt){=!4HlKMkd-PLS{BDNL2i1fyX~a0-J%C?7(ouph$$w%xts|0qd`i80Sqe!dm3n1La5#(b0av ir~^hFFyb8m5MTgcrE1y4_lYS00000E z$k(u72hrq)0>x1PN&_P^3I?<~KJnq}9UxT!&W8F~3@|o1fa2N^8IV&OGLCjkMjbHf ffPr=ZK!5=NhmN+=4*6_L00000NkvXXu0mjfApL~? literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..39a89a7c4252e94a91798402f19351fd506cf6d4 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1Gfu1goAr-gYTwBP?puppDaoPrsNgEv6-y5-<6i8(dS=IFa zud4q%x0aMJ6-%IUFlZ=osFmHZdyCyV`R&(3jH}r+<_mx%_OZ(_vN2Rn|9XG&ukO literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..dfa4dd5e066a5d11e201c9716b5f8198e2c75730 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1Gp`I>|Ar-fh{`~)Mf7pRZt&NdwF`q=~ffdYdvIegj0@-`4 z60R`nJjvMg`-`QUu~%f&q=|Zp8`96qt$C#GH%CF6MZ*1d3qs2ySq6awhS&vs#|xJg R$^tE5@O1TaS?83{1OTL$IynFU literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..30fbfc3478e0498de4793e131ba80282bb04a970 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GC7v#hAr-fh{`~)Mf7pRZt&NdwF`q=~ffdYdvIegj0@-`4 z5)Q~7a9Y(SZJuYa;nSzX(S~Q%zlGkCiCxvXK|WxK5ERt7d{2%8SxD8u!@~o11c*ik zqDsmPUoKswPd1d1kpWu>N)I4hlNZ8pWBp0`L;=X+_gCLC{C@YAAt%lS%$~An4}-A2 z2ziMBlnaQ(AYf%6^BjhDm}&|CZ=1LR w%>H@z2Lrn@2Ym{n(aLDl0izC}1po*z01g?hMgII+C;$Ke07*qoM6N<$f;Pd2%K!iX literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a1f7784a53479fcd562d4c1dc6008de0c4a9674b GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GzMd|QAr-fh{`~)Mf7pRZt&NdwF`q=~ffdYdvIegj0@-`4 z60R_Ug&M3IT4j7+&#m0J?J4v3x-^+0#RC?%3?)H|*={j1FtRZ`6Xmj=t^Ji7XfT7P LtDnm{r-UW|!sa&! literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f1ed4e31627d1cab054286fb4312ecf56381243c GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GlRaG=Ln>}1{rUgj{;&g+S{ozVVm^t|11p%_WDQ<51hV&7 zC0t=#%$K0(9{jX#GSAi|_y6^k-+LP8PM+O3_o=<}+}=jTyR+8_B&aM8-E%jZXU)s|_v;?L+pd-a{qpzQ{gqN= k-p&A9!~B+^fq|J}=O@iRg9(ZaK<6=dy85}Sb4q9e09%_};{X5v literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c7a110b19a2849420b8674b7533a60481c408e1e GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1Gdp%toLn>}1{rUgj{;&g+S{ozVVm^t|11p%_WDQ<51hV&7 zC0t?Dd6M;~Y~B0+)636G+_2m!c_Z?l@t;9(w;4k4h@yYgOw&crcYuv-EEi3A$j|K{PS~8Sllv{1UZiF e79#^A8^e+fPRFBHTzv)f2!p4qpUXO@geCyL+;*t| literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..8956c55b2e0c251fc831475f04f860ede3970fe6 GIT binary patch literal 381 zcmV-@0fPRCP)79u_5e0E9zhWAu(bzRv=9VAv=js{p^c@u?8wX}nLIOF+3w(GEbK4vaE?*xC7h7q95{b?h0zw;=YYKf!(oBP(;GUvnuGyZRP}0i z?eZ(b-=O^**YpMkor{^w0N$_HUa5Feum5CQ&D bKLQK@f<|V50%o~v00000NkvXXu0mjfR*9V> literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..abda666bd66fbfbad98990112134ee6d0eff381e GIT binary patch literal 431 zcmV;g0Z{&lP)^F%X4MHp%`X*UCo_ zdODh{2dn-%f;@#bBe$B3p?OnXN7MUj1Og`qE znS?m!u*^uXtfErxqFW7`+~> zJ1I5FJV)KsU?~Hq9Gp{ZT)dHmcc9lTPbq5Az$FAiXjo>U4GSZIau#*lfmjd2C>qg$ zRT+$wVN9qx1)~jm^%4)GwS>|(+!VChA)ySyUo1UH>OG*e4hOJx{Z71lk+T$?wMYm> zk)^mjydpt7(1&ye6a>~f%wz|f&~P0%d3b^HV<@G9^BpM53XexOWcPAE48T__hI6pp zuQgIDGk2{~i|Br5ZAh}lBlvu&f5z|W_>P?KZ7<#fLbU($F>Ye;MBb Z3;;S|jsb`8KU4q!002ovPDHLkV1fX(tbG6g literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..14d2fbf21de24c5d6b84c52a4b50288154dcfc53 GIT binary patch literal 381 zcmV-@0fPRCP)-2MMzW1LOCIzHvp9XNH^sm4FlAftaZ53DUIQh&&M-gjDxcc<KlqG`osHqwpFa#7tgOH~f)SQTrD&c8M%#p=4j6V0 b00=Mud^2Cz0wn3X00000NkvXXu0mjf>_e46 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2c639c4c838aa9dece84a29d02f5f3bbc931a69c GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GEuJopAr-fh{`~)Mf7pRZt&NdwF`q=~ffdYdvIegj0@-`4 z60R^Zzhe*!5($52adJUv`LF-$=f@fR`84zJfekxnH1>W}W_Es{)Y0^{kjI}VTQb^a zO{O^0d;2=}=o80Iu|50$>-_lx2RN2of9iBYMe3x*Ee%}1{rUgj{;&g+S{ozVVm^t|11p%_WDQ<51hV&7 zB^;1F;MDa<@~zze`hRIGn= z7iYPZUHi}TCXrk6M#RknN%i&hjJw(z8!NrVm_6S07TPJFb$W2T-i$5Jj&FNF z#Q*;(c|*e9s3v;e5d|%+Lmxz6%&1o}`xxQTyZO8PerC@)3;8D;VrD6YmnMlm&RAS> ig%RpZwp)x0j6h#A8z1%iQ=Sj>5`(9!pUXO@geCxpKW|n5 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d0eae4000242eb60e46d14e696aae22d54a7eab8 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1Gk33x*Ln>}1{rUgj{;&g+S{ozVVm^t|11p%_WDQ<51hVt& zV2<#(YOwfjbHd-bfjgTgswsZ>{ye)a-#${J?)SOmA8(DPH_n{OuJiA+`GtK4Tm^hi z3(UAH{(HVQQ{u_{_u~)rC8Ym2bbz6x`M`gF9(j)v7Eiv4%#gDh`|RG?YlyhGx=QSG zl4WE%Gkddy9mCD@J+CArO^#$t=BWRZp8Vk17jT7g{MW0i1)k@+n{0|PU|)_HDMnY1q) Q1^Sl3)78&qol`;+0Lo;6wEzGB literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..6de8ef9f60f3f6313be25acbc7c8bbb6456606fe GIT binary patch literal 393 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@jM|46o@Zn6fi8W_tN zxHY@dw^R$n7N>^1OIT9Hu|!Na?a#N#t&Ow&n;K_MW$$r(@I2pbgM|I9i5rpsjsN`k*V;JqrT!g3lVS$v2ao>e{IBP1oH55n zhUfmi+SCO8=r8~EPZUNQN&f%$&&ito%sZetTzLWvKc#Xs#rY4%FPOk^`1yYMnq|iS zqoyDB*c|iW(u!GvIUnuQ3g$F3+&KO^Nzy)FFF7$n{`8My7V`r?#mMK%e0XdxeIqHr z>c_8_tcTbC|C3M{u&21dN$82a(CiA8<&EFv_cMFeS;#-(5Hm|DRBPL_YO2fZ;}*9x jWZ|LESjOPcz{pUgl{kNyWZErY*fMy!`njxgN@xNACa0oJ literal 0 HcmV?d00001 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 25dd13a6af6052c56b5cd3b48c6a009adc1fac47..87a1bffde3c78bc9c5668d03c38595ce4b5bf103 100644 GIT binary patch delta 309 zcmV-50m}Y^1lR+RNdbD1N@suS4!FKJZYI%+4I7_REf;uj{*bENaZ)Oya>vK;R+Ja*!UXhX4q0vHxNC;4<+mi2ZwcG&dJJ0|Ptje}*65 zzc4T}{e?S%s@V_)1TOy1`u`Ufh{?gj!SLyxI2gWt`^vx`w&?#~kmG;0WHSE!{e?CT zU}X5uGP^Gp6x@s;KFHT#OSyO${sKh=7(V~~;4_{1*SZ`=nv{fX9u{IRjjDfuE&j(0 zj&pG01o?PfEaT_RWh@NqV;SEV=YNzu*C$1F2Y|qj|7`C;7K75k*H14Pe*NbMi-Y2w zgAvj&zH{I$lC|zm ymy**-1ha{$3m8XR#iI@wb-<_tM!W+60t^5yGMC|yC8?4C0000<|{Ln>}1{rUgj{;&g+S{ozVVm^t|11p%>?l9^c(Xguc zpm2Cvc>Vl|NgMhlHc#2R*S1uKVbh)CLG3E+IhJ)#B`;KIuCi!ooj&_uoLkSrlCO4} zi<-q&v}Xk}@P~QNWlOsHZb#An#2-(X_|M4)O||y(VqC1)8*#t+OV2dskn#fu)z_!- z&R}*Z^zu2SruwhlFR+L065AQZ3mFw|9=w`qMt$45++_`3H3YKvRIoF!NHC;NHgEf| Tlr*<{an^LB{Ts5a++oi literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..44cbfbf3b732ef1cc02958142213769f5119395a GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GiJmTwAr-fh{`~)Mf7pRZt&NdwF`q=~ffdYdvIegj0@-`4 z60R^hpJz1Pecr&P;{QimE4I$b%n=?}KfJ!2ZczLEZaU+P8Jh&&v(Kc74G%%1Xb`ThSKQQn-F?O5vm{`8(?aaDH1_h-s%CHD^> zc`3xY->#PJa{2vQv4&1f?vHg1os+pF+@+TyjK09fz+u4fdzog>=Xr(gK!-4Ry85}S Ib4q9e0N1Tj8UO$Q literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..8d027fe94f2288905a4a932abb7bd256e5332b58 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1Gjh-%!Ar-fh{`~)Mf7pRZt&NdwF`q=~ffdYdvIegj0@-lA>6}?=$k#Cj@}t|J>6z7?B0! z)wLMxxqiN9VBioW)i6dGKD4IR!y}!Qr0^o__x$NQyYs9q{YV zUy{VB?tr~FA2DEye~>s`a>1`ppCS4F-Dd%qn6eP>2beg`bHQj`FzSF&2aGyk)B)56 b009O7e>FX;qZ)XT00000NkvXXu0mjfXGC$X literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..fe6fd09e9ebc02ceb0a1ccdd94acf5b08882f5a2 GIT binary patch literal 349 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G|2}1{rUgj{;&g+S{ozVVm^t|11p%_WDhuXCAqn| z8Q6Y5`Cb1-(Mh8@HVU(@Oqx1Tgja#RK_~p@|BrIJ?yP&=KQ-#EPo+mGgQsG^-q$8K zKK3cg96*a`^S6 zfFJ)g|C%v7%b%5HVEUG2^iqTAzx_pB=_39L%L9jw*i05FT$O&fmOuVqa#GR>hv~n+ z_b0YZ-eV!W^5%pm0ynBZUo;OovT`0reeEwEKlb{%e_0LEht6GN5MEv>(%|rNR;|RW sUCwhPGUG)0!;V9}*S3_Ifr*FVk#B;$ap(ejU{El4y85}Sb4q9e055Nm3;+NC literal 0 HcmV?d00001 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 From 151b5e1007bd3f99659735a6f76729f583bd54b9 Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 21:40:56 -0700 Subject: [PATCH 35/46] Mirror: Fix SCRAM implant not working while cuffed. Incidentally fix freedom implant working while dead/crit (#266) ## Mirror of PR #25978: [Fix SCRAM implant not working while cuffed. Incidentally fix freedom implant working while dead/crit](https://github.com/space-wizards/space-station-14/pull/25978) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `22e9d6562f21bdd4f0962d6e3b6fcdd81bb4c253` PR opened by nikthechampiongr at 2024-03-10 19:33:05 UTC --- PR changed 13 files with 142 additions and 3 deletions. The PR had the following labels: - Status: Needs Review ---

    Original Body

    > fixes #25662 > > > > > ## About the PR > > This pr makes it so you can use the SCRAM implant while cuffed. Also fixes the freedom implant working while you are in crit, or even dead. > > ## Why / Balance > > The implant is made so you can escape horrible situations. It should as such work while in crit. > > ## Technical details > > ActionBlockers now has a specific check to see if someone is conscious. It is also used in the Interaction check now. Actions can now use that check if the bool is set. The bool is now set for the freedom and SCRAM! implant actions. Additionally the SCRAM! action now ignores whether the user can interact in order to be able to use it while cuffed. > > ## Media > > > - [x] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > ## Breaking changes > > > **Changelog** > > > > :cl: > fix: You can now use the SCRAM! implant while cuffed. > fix: The freedom implant can no longer be used while in crit, or dead.
    Co-authored-by: SimpleStation14 --- Content.Client/Actions/ActionsSystem.cs | 1 + Content.Server/Bed/Sleep/SleepingSystem.cs | 8 +++ .../ActionBlocker/ActionBlockerSystem.cs | 21 ++++++ Content.Shared/Actions/BaseActionComponent.cs | 11 ++- Content.Shared/Actions/SharedActionsSystem.cs | 4 ++ .../Events/InteractionAttemptEvent.cs | 8 +++ .../Systems/MobStateSystem.Subscribers.cs | 2 +- Resources/Prototypes/Actions/crit.yml | 5 +- Resources/Prototypes/Actions/diona.yml | 1 + Resources/Prototypes/Actions/types.yml | 9 +++ .../Entities/Mobs/Player/guardian.yml | 1 + .../Prototypes/Entities/Objects/Fun/pai.yml | 2 + Resources/mapping_actions.yml | 72 +++++++++++++++++++ 13 files changed, 142 insertions(+), 3 deletions(-) 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.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.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/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/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/Entities/Mobs/Player/guardian.yml b/Resources/Prototypes/Entities/Mobs/Player/guardian.yml index d892b31fac3..c7cd40988d4 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/guardian.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/guardian.yml @@ -253,3 +253,4 @@ event: !type:GuardianToggleActionEvent useDelay: 2 checkCanInteract: false + checkConsciousness: false 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/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 From 144ee9c417ee00d64c0eb336b41fe4570805dfa6 Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 21:41:12 -0700 Subject: [PATCH 36/46] Mirror: spawn panel rock crab suffix (#276) ## Mirror of PR #26264: [spawn panel rock crab suffix](https://github.com/space-wizards/space-station-14/pull/26264) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `c28cbe40c31f3f45d1127b88bc2c306acebd76f3` PR opened by IProduceWidgets at 2024-03-19 16:44:28 UTC --- PR changed 1 files with 2 additions and 2 deletions. The PR had the following labels: - No C# ---

    Original Body

    > > > > ## About the PR > > > That's a crab. > > ## Why / Balance > > When youre placing a crab, its good to know its a crab. > > ## Technical details > > > ## Media > > > - [X] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > ## Breaking changes > > > **Changelog** > > > > no changelog only crab.
    Co-authored-by: SimpleStation14 --- Resources/Prototypes/Entities/Structures/Walls/asteroid.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 From e967bd245101f9c25899ca68837fb67f52fbb105 Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 21:41:27 -0700 Subject: [PATCH 37/46] Mirror: Zombies can very slowly regen heat and shock damage (#264) ## Mirror of PR #25925: [Zombies can very slowly regen heat and shock damage](https://github.com/space-wizards/space-station-14/pull/25925) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `3884c2d2d2e8c907a33cbef28a55bda701cc4963` PR opened by shampunj at 2024-03-08 05:06:55 UTC --- PR changed 1 files with 3 additions and 1 deletions. The PR had the following labels: - Status: Needs Review ---

    Original Body

    > > > > ## About the PR > > Zombies have learned to regenerate burns very slowly > ## Why / Balance > > Make zombies stronger, make it possible to get up from crit when severely burned > ## Technical details > > n/a > ## Media > > > - [ ] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > ## Breaking changes > > > **Changelog** > > :cl: > - tweak: Zombies now passively heal 1 heat/shock damage every 50 seconds
    Co-authored-by: SimpleStation14 --- Content.Shared/Zombies/ZombieComponent.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 } } }; From b8ad6e48d090793a8e7b4bf9582e720fd7036b39 Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 21:41:43 -0700 Subject: [PATCH 38/46] Mirror: Monkey and gorilla melee weapon fix (#281) ## Mirror of PR #26288: [Monkey and gorilla melee weapon fix](https://github.com/space-wizards/space-station-14/pull/26288) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `3836da964cab669e2c2ddbd071a666e93eeb4ec4` PR opened by Dutch-VanDerLinde at 2024-03-20 13:38:25 UTC --- PR changed 1 files with 11 additions and 0 deletions. The PR had the following labels: - No C# ---

    Original Body

    > > > > ## About the PR > when they hit things it made the no hit sound, this fixes it > > ## Why / Balance > more realistic > > ## Media > > > - [X] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase >
    Co-authored-by: SimpleStation14 --- Resources/Prototypes/Entities/Mobs/NPCs/animals.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index 380f7801710..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: From 3c06ff16151b750c517696744f9d80396c1d5a73 Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 21:44:41 -0700 Subject: [PATCH 39/46] Mirror: Attempt at a more noticably whispered bubble (#171) ## Mirror of PR #25602: [Attempt at a more noticably whispered bubble](https://github.com/space-wizards/space-station-14/pull/25602) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `4f698a6e0d74d28713e2dabbfb20969477538e11` PR opened by maylokana at 2024-02-26 14:44:39 UTC PR merged by web-flow at 2024-03-13 08:03:32 UTC --- PR changed 2 files with 10 additions and 1 deletions. The PR had the following labels: ---

    Original Body

    > > > > ## About the PR > > Added a bigger difference between talk bubbles and whisper bubbles > > ## Why / Balance > > Because (at least for me) it was a little difficult to see when someone was whispering vs when someone was normally speaking. There is a small change between borders, but it is hard to tell between a lot of bubbles at once > > ## Technical details > > There is probably a better way to do this > One new line in `SpeechBubble` checking if `speechStyleClass` is `"whisperBox"`, if true manually formats `bubbleContent` > > ## Media > > Screenshot showing new differences between the two bubbles > ![hellotest](https://github.com/space-wizards/space-station-14/assets/88361930/3fb9cedf-c9fa-4f1f-945a-0fe9109cf94d) > - [x] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > ## Breaking changes > > None that I know of > > **Changelog** > > > :cl: > - tweak: Italicized whisper bubbles >
    Co-authored-by: maylokana <88361930+maylokana@users.noreply.github.com> --- Content.Client/Chat/UI/SpeechBubble.cs | 3 ++- Content.Client/Stylesheets/StyleNano.cs | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) 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/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)), From c23aff04818f44ab46544032ce0b5442ce0d8b84 Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 21:45:01 -0700 Subject: [PATCH 40/46] Mirror: Remove butchering popup when clicking own sprite with a knife (#169) ## Mirror of PR #26051: [Remove butchering popup when clicking own sprite with a knife](https://github.com/space-wizards/space-station-14/pull/26051) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `4e57f1977e3d3e8a48e0d054bf0043af40abc048` PR opened by Gyrandola at 2024-03-12 19:13:34 UTC PR merged by web-flow at 2024-03-13 03:52:20 UTC --- PR changed 1 files with 1 additions and 1 deletions. The PR had the following labels: ---

    Original Body

    > > > > ## About the PR > > Prevents a useless butchering-related popup when one clicks themselves with a knife. > > ## Why / Balance > > Fixes #26025 > > ## Technical details > > Simple (target != user) check > > ## Media > > - [X] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > **Changelog** > > :cl: > - fix: Clicking yourself with a knife no longer triggers a butchering popup > >
    Co-authored-by: Gyrandola --- Content.Server/Kitchen/EntitySystems/SharpSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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; From 7c55b6afc6d9bdddc3fec310347f4ae9b2383518 Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 21:47:42 -0700 Subject: [PATCH 41/46] Mirror: Fix mailing units turning into disposal units while recharging. (#387) ## Mirror of PR #26383: [Fix mailing units turning into disposal units while recharging.](https://github.com/space-wizards/space-station-14/pull/26383) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `94e4755a8de6885c97fac1cfb767144e8e07981a` PR opened by nikthechampiongr at 2024-03-24 11:57:45 UTC --- PR changed 2 files with 14 additions and 3 deletions. The PR had the following labels: - Status: Needs Review ---

    Original Body

    > fixes #18275 > > > > ## About the PR > > This fixes mailing units appearing as disposal units when flushed. > > ## Technical details > > The states were hardcoded. > > Now they are not. > > Bug seems to have been introduced in #17803 as a part of a larger refactor on disposal units. To my understanding, this was made in error with the logic that no other objects would ever have a different animation when flushing and charging but I am not sure. > > ## Media > > > - [x] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > **Changelog** > > > > :cl: > - fix: Mailing units no longer spontaneously turn into disposal units when flushed.
    Co-authored-by: SimpleStation14 --- .../Disposal/Systems/DisposalUnitSystem.cs | 15 ++++++++++++--- .../Entities/Structures/Piping/Disposal/units.yml | 2 ++ 2 files changed, 14 insertions(+), 3 deletions(-) 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/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 From 42145993f831f7c3da0260c84431b02a4e5affde Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Sun, 12 May 2024 01:22:03 -0400 Subject: [PATCH 42/46] Fix Double Trade Station Bug (#351) # Description This fixes a bug introduced inadvertently by https://github.com/Simple-Station/Einstein-Engines/pull/344 by adding a CVar that makes it a choice to be made by our downstreams. Also, welcome to our new CVar standard where they should be included in other systems. --------- Co-authored-by: Danger Revolution! <142105406+DangerRevolution@users.noreply.github.com> --- .../Cargo/Systems/CargoSystem.CVars.cs | 26 +++++++++++++++++++ .../Cargo/Systems/CargoSystem.Shuttle.cs | 5 ++-- .../Prototypes/Entities/Stations/base.yml | 1 + 3 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 Content.Server/Cargo/Systems/CargoSystem.CVars.cs 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/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 From c51af1b4dd021c9bae3fd20ca059fc9d712242d6 Mon Sep 17 00:00:00 2001 From: stellar-novas Date: Sun, 12 May 2024 01:31:34 -0400 Subject: [PATCH 43/46] Remove glibc from shell.nix (#401) Change just for the nix devenv, Currently it pulls glibc from 23.11, which breaks the devenv if the rest of your system is on a different version, such as unstable. --- shell.nix | 1 - 1 file changed, 1 deletion(-) 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 From 763da782d4e4929d8f09d7292a3b8312c3656b6c Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 22:36:24 -0700 Subject: [PATCH 44/46] Mirror: Spray Paint (Review Ready) (#258) ## Mirror of PR #23003: [Spray Paint (Review Ready)](https://github.com/space-wizards/space-station-14/pull/23003) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `e4d5e7f1aebfc37b1bc3453fdb39578f3897b6a1` PR opened by brainfood1183 at 2023-12-26 12:15:46 UTC --- PR changed 41 files with 1008 additions and 11 deletions. The PR had the following labels: - Changes: Sprites - Status: Needs Review ---

    Original Body

    > Added - new spray paint sprites and entities. > Added - paint system which lets you paint over entities. > > https://github.com/space-wizards/space-station-14/assets/113240905/b1b30678-b9c5-45e2-83a7-d146d02c3751 > > - [x] Spray paint can paint objects. > - [x] Spray paint can come in different colors. > - [x] Spray paint can be removed. > - [x] Add a doafter for removing paint. > - [x] Stealth objects will keep their post shader. > - [x] Sprite outlines work after object is sprayed. > - [x] Add doafter for applying paint. > - [x] Add a blacklist for items that should not be painted. > - [x] entity sprites in icon slots appear colored correctly. > - [x] Add verbs for paint and remove paint for painting containers. > - [x] Spraying an entity with inventory slots. Now any items in inventory slots are also painted. > - [x] Spray paints now use fewer entities (no cap, open and closed entities) instead they use OpenableComponent and visualizers. > - [x] Spray paints must be opened to use them and can be resealed. > > What Can Be Painted > > Everything with the following exceptions, Mobs with humanoidAppearanceComponent, Items with RandomSpriteComponent, BlackListed Entities such as Holograms, Entities which go under the floor, Entities that are already painted. > > How it works > > Painting an entity will attempt to add both a greyscale shader and color to each layer of the entity. This will fail if the target has humanoidappearance, is already painted, has randomspritecomponent, is an under floor entity or is blacklisted from being painted. > > when paint is applied each layer is shaded and colored only if there is no existing shader. > The icon, inhands and clothing sprites are recolored and shaded. > > When an entity is painted it cannot be painted over without first removing the current paint. > > To remove the paint you use soap on the painted entity. When soap is used on the entity the color is removed (if the layer had a color prior to removal it will revert to that color, seems like it is color + color then color - color to end up back at original color) from the layer provided the current color of the layer matches the color in paintedcomponent. The shader is also removed provided the current shader matches the one in paintedcomponent. > > bugs & work arounds > > Currently entities with RandomSpriteComponent cannot be sprayed, these include screwdrivers and wirecutters (essentially sprites that have a random color on spawn. Entities that have a specific color on spawn work fine.) The paint system checks for RandomSpriteComponent and provides the all ready painted response. > > Entities and clothing in hand or equipped if sprayed or paint removed will not update their visual status until interacted with. > > - [x] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > > > **Changelog** > :cl: > - add: Added Spray Paints. > >
    Co-authored-by: SimpleStation14 --- Content.Client/Paint/PaintVisualizerSystem.cs | 120 +++++++ Content.Server/Paint/PaintSystem.cs | 180 +++++++++++ .../EntitySystems/SpawnItemsOnUseSystem.cs | 6 +- Content.Shared/Paint/PaintComponent.cs | 60 ++++ Content.Shared/Paint/PaintDoAfterEvent.cs | 9 + Content.Shared/Paint/PaintRemoverComponent.cs | 24 ++ .../Paint/PaintRemoverDoAfterEvent.cs | 9 + Content.Shared/Paint/PaintRemoverSystem.cs | 96 ++++++ Content.Shared/Paint/PaintedComponent.cs | 41 +++ Content.Shared/Paint/SharedPaintSystem.cs | 11 + .../SprayPainter/SharedSprayPainterSystem.cs | 3 + Resources/Locale/en-US/paint/paint.ftl | 8 + .../Prototypes/Catalog/Cargo/cargo_fun.yml | 10 + .../Prototypes/Catalog/Fills/Crates/fun.yml | 48 ++- .../Prototypes/Catalog/Fills/Lockers/misc.yml | 4 + .../Markers/Spawners/Random/crates.yml | 1 + .../Markers/Spawners/Random/maintenance.yml | 5 + .../Prototypes/Entities/Mobs/NPCs/carp.yml | 1 + .../Entities/Mobs/NPCs/revenant.yml | 3 + .../Entities/Mobs/Player/guardian.yml | 2 + .../Entities/Objects/Fun/spray_paint.yml | 292 ++++++++++++++++++ .../Objects/Materials/Sheets/glass.yml | 1 + .../Objects/Materials/Sheets/metal.yml | 1 + .../Objects/Materials/Sheets/other.yml | 3 + .../Entities/Objects/Materials/materials.yml | 1 + .../Entities/Objects/Misc/tiles.yml | 3 + .../Objects/Specific/Janitorial/soap.yml | 1 + .../Objects/Weapons/Melee/e_sword.yml | 4 + .../Structures/Decoration/bonfire.yml | 3 + .../Structures/Holographic/projections.yml | 3 + .../Entities/Structures/hydro_tray.yml | 3 + Resources/Prototypes/tags.yml | 3 + .../Textures/Interface/VerbIcons/paint.svg | 39 +++ .../Interface/VerbIcons/paint.svg.192dpi.png | Bin 0 -> 15653 bytes .../VerbIcons/paint.svg.192dpi.png.yml | 2 + .../Fun/spraycans.rsi/clown-inhand-left.png | Bin 0 -> 20773 bytes .../Fun/spraycans.rsi/clown-inhand-right.png | Bin 0 -> 20783 bytes .../Objects/Fun/spraycans.rsi/meta.json | 19 +- .../Fun/spraycans.rsi/spray-inhand-left.png | Bin 0 -> 21199 bytes .../Fun/spraycans.rsi/spray-inhand-right.png | Bin 0 -> 21213 bytes .../Objects/Fun/spraycans.rsi/spray_cap.png | Bin 246 -> 0 bytes 41 files changed, 1008 insertions(+), 11 deletions(-) create mode 100644 Content.Client/Paint/PaintVisualizerSystem.cs create mode 100644 Content.Server/Paint/PaintSystem.cs create mode 100644 Content.Shared/Paint/PaintComponent.cs create mode 100644 Content.Shared/Paint/PaintDoAfterEvent.cs create mode 100644 Content.Shared/Paint/PaintRemoverComponent.cs create mode 100644 Content.Shared/Paint/PaintRemoverDoAfterEvent.cs create mode 100644 Content.Shared/Paint/PaintRemoverSystem.cs create mode 100644 Content.Shared/Paint/PaintedComponent.cs create mode 100644 Content.Shared/Paint/SharedPaintSystem.cs create mode 100644 Resources/Locale/en-US/paint/paint.ftl create mode 100644 Resources/Prototypes/Entities/Objects/Fun/spray_paint.yml create mode 100644 Resources/Textures/Interface/VerbIcons/paint.svg create mode 100644 Resources/Textures/Interface/VerbIcons/paint.svg.192dpi.png create mode 100644 Resources/Textures/Interface/VerbIcons/paint.svg.192dpi.png.yml create mode 100644 Resources/Textures/Objects/Fun/spraycans.rsi/clown-inhand-left.png create mode 100644 Resources/Textures/Objects/Fun/spraycans.rsi/clown-inhand-right.png create mode 100644 Resources/Textures/Objects/Fun/spraycans.rsi/spray-inhand-left.png create mode 100644 Resources/Textures/Objects/Fun/spraycans.rsi/spray-inhand-right.png delete mode 100644 Resources/Textures/Objects/Fun/spraycans.rsi/spray_cap.png 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.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/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.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/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/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/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/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/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/Player/guardian.yml b/Resources/Prototypes/Entities/Mobs/Player/guardian.yml index c7cd40988d4..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 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/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/tiles.yml b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml index 78bbd32f174..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 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/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/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/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/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/tags.yml b/Resources/Prototypes/tags.yml index 789b7c92968..2694cbeaf39 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -877,6 +877,9 @@ - type: Tag id: NoBlockAnchoring +- type: Tag + id: NoPaint + - type: Tag id: NozzleBackTank 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 0000000000000000000000000000000000000000..b7bd88245f2ab069dbf5a39850a866af0c5dc174 GIT binary patch literal 15653 zcmeI3Ym6J!6@c$%At6fwD^Z{%uuL393Tejkve)auHrd!ob^#~b&7$l^6=XbfZ4a?$ zoSE^icLQO0mqGyXgEvtlDvC%zAkn5$c`8a@KR`fGMTH1e8(?XniJ&}$1l*bN^RD+2 zK_vcM%O3mObI&>Ve&?R!`7^f-ZQQW9Ye^RXVDaEUY8ZX5aX+WcN7pCx9q*v8g{6Tp z8-NRLbw3?<9X$>KxOkO5GU|+`FPBxb7*sSf1A~=f3C#u|c1fkAsN12#WMED=;(`DD z@x=h6Yw^IAaGFn-k}$6iOj&UA)W#8YYP%ZM0+%GZVig%VC_+bJD#e0f%awS*^DCp@ z?l2c%yeZE1c%a`6$c(0kn51bzCLHW#RlYaEM4~|<9EpS?s~M3O!W=Jg63>c~9OC7W z$W&i}L>KxMv$U){oLXNEhopEQ?>Hry<0d91f)i5Ev~rvfjYc_Mg|JMlok4OD+s_f;&_0~vOe9iqrploBTdd9Iz2rq*pr zWvk#VO;b5ofJJCHHnJ1i+LiLAW7>Ihj*xZroPkkJhV@+DvFq{MuG#YDv|R%7kWQ1W zi^aBugabg z<-_PbBJ|3l^fO+NdA`YmKMiw`HZ?svS#uC#dC_&i^Kv*OhoW13^QK9-IjTHOag^_J z&^)clg{I0`(<&-XLN6*g$d!y-jB5hvH6m++G<$_}5;(-dQ z!K_j)IDtem$umRcOhH$flvz}CgGoV6R~4^5tLI5|^Q4bMRC+}d9SOJEOP-D9nQ&9k zGQAYXIJcw=dg~he(blDTdz-b5SiQ{Tq**X6L>nfg7}svNiAcTl%>G|h4MqM=|}ffstSqQ-{9s>Eth6fBd;s;r=9#7L-5vzZbuw8|-Se054j$BE zT+3)#&A8*Rs9&9t~OehxY&!OXSB8|`Y+G>Wo zZ(n&QB@4DP{=;%`VkPxGa?qwn|9Ba2S^Lq|JnFKj3vsoBTN^mBr1`0At*Ba+&aS|i z`?oBk>P3gi>)Ht+#?2aQME2*8x>Z;xdsQYxMIOC4!M#>(oAtQu*mu}A>v7wL=@o|V zB*bbsY`DqFy?gNg3pS%$WtivVor!L$??281k9Tx33&mg2&IkVT4%%m>p_To@3tNO6(*U|Na`140%lE;1iXOL1X9 z$Rfo>=7VV|E({1+q`1g@FfGM}0U?VN7nu*HrMNI4WRc<`^TD(f7Y2kZQe0#{n3m$g zfRIIsi_8bpQd}4ivPf}}`CwX#3j;zHDK0V}OiOWLK*%D+MdpKPDJ~2MS){ngd@wD= zg#jUp6c?Efrlq(rAY_r^BJ;tt6c+}BEK*!#KA4u`!hn!PBCf8+1F+CQPrXi{$6Mb! zmwOC78q25y!)XAfRsb-4BLH81gT7|~DDwb(xD5dLegMuj@44#GdH_1ggQ@`d;nH-J03Zr|Ct&;EP&wwn%Znb)2De;!;OJaeCP>1qFb`z&qb zg)8@-^X`%LZ){q!ck-1BpXgZqbmESl&P`|DK7V@ADIfoI-Z{G~r|l^uJHXQD`dFJrr zYaZS8?4R>VcFlroKUneXvSrhEzG~gOYt5<*A7mc6YOA>XZxXv~Xw}p^pRE1e-k*Ri zrS~5^-uH*Y_pQ)xy78qiuK-iITc3L1-+S`XlSgL0{?D<$Ja+2N$%Dtaf!HnY9TInZ z)bZ|<2bV7FeDvz;xy2v6_Sfs5(R#+um`?6F@bIGFb{so;PtTRY>VL&{pML1-rJp4h p2EWO5KELuJFpt6C3+_AuIgtw=ow{Om$WDZhO1a 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 Lg-7S^{K9_#hzGN8 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..27b68e2cfe5d2b364b379707b887bdfcb115eeb8 GIT binary patch literal 20783 zcmeI4Z-^vE6~OzF5cJ|fFa!@j#9@LEHMLWJ`d^K^lkDx@c}Lvj*lfsMz~ri{s(0Jl zou16h-R_++UepMRD42Xu6Uc!V@effWLBU*%ND`2!1VM;?2+{cAA^|~<12K5Mp6;3I zot?ew%&nS0FYIn@_j|9Zf3ND*d)3Q)asRC!+p+!q+bzr5v2X9}Jp8^n`F_`x@bi1o zy|2KpcenN)>{!-S*CgNDtZzQL)3R=RJX$!=Juvt2x{OyQgo*<_v9{6zY0H|tX{{yX zVco3+dNFEFRsZ(%v(-wZrmA;3b9k;bqnDz+$J_e$1-*{QEhReN^p&`vJbs+FEd_wZD8I_a=-U~Ye9CT{DBGvOkMU9aNt3F3I3?cG?R zm^d}eY78UF>Nc+1w32;Q8{45Z*;ZkFes)jR9sD&_UFvpQ^;&Ipb#-EuO~mcR8sVJR zFs)IFKmv7+HM?RBH9Oa*M*4PUbw{?NRyT^9mBg+H;v?OuYBlL-@RdE+N^8(jvy-s{ zinTS-s*wp?8>OV=K&N%2z1$m`k~O`oS9G)60X;HOueB6+fJ}-QLZ2L^qua!Hr^><3dBbm>PF!v zc9J`rLeOi`CThu@RIN9sQdds`wE9e2i*DRrh~wo(I$ihoeNma2=}phd4R=OO6|Z(a zG+7%~F%!pF)3c(h8x+G_Bp6}3K%6>r>csm9CUuN+MpDTk8*{OW!ef0K3=xW`y+GVL zV|9n!m8$22hSgyWD$x}eGmsa{nNYGG#_bi+ZA2?#QP*0{#mSnvn3Eh#%KA*a9JgUa zy1^!Eqb`rsnvLa=WK~QzrS55bYC8ATxpgreBi7>^6Y@dM(!6eI1~_STNtQ%tdd2rw<3jI{V*=qyYK>hAthKkbqvl$%FaWE8=0Rp!6M_Oy!Lv}tLuXt!N@6>X?@HK# zSq4N<*GAx7rJ2i_W_nB@ib)YLC6O;enT}f6QXt=9lu{xwJj}SJUCIT~A+T22lG&Ld<$`1({cPr4Lb{%dD z#5|D&RoDeE;=bSx1YBPWHRcQnDWS}V8DhHtycbjj4uMaIwZoXCUNE+4hr&h$;Ryzq zE%diO>ct3hqjYQRH6io}U$`z}jvFF7uwg^QK0`iHTEK4U+y2Ej0Z5)E6l}JRYYXXf zja=phh`Bawu~Ill!CoS5B4nt;i*oH73j!QS6%r&u&5?5K5Vq<7oa6>z%(t~qoWjOJ zhbV4i7tz2M$PutB!S3lJm%376=}V9E;>LszIiMuS1vMC6GDkg|ppao2N=yMK zg5Iw0U4PZ2puG~ZCE6XG6i8FmeuXrsIn#VI%Q}07R$a)X_-x3e?9i~p*IhNk8fZ?Y z0?|fy7DKQ>ee*t6mvr+&WlL(RC$+heP8@buMO#lVLTX>6qDrl-7ao@-;|OXVOJLcC+U0r8aAcXQ5*!;hFeOb#$qj|^dwRFBEAhz(_5 z?(XKw>p2!EXp7)CW0Omwxu{j6)*nv)!tjXR&K~nUAF8;JqJVN6c^Ec$UqMdn!|vm; zAe20W?I#5@hR4_f#`VN$q;y($5bxsVQQdwk5f9?3fb&ER=K^6nUa1U@BP!jvB3iBG zNQxws){Zt+b~-mG;``pq+4vt$P^H_^TL~(;QOZ81$~)|tFFB0D34o%Kg$U9T2RWe) zHLy)Q1jU%^bBE&)!`Vo=Cb5wvm1jRq3-4Y_Ha6%7Su19@h zhi(Y9*H}*5aO#;_`F~^|Z?Eld5F+|uvy5^$z?o6!;!7{8TqJlV@pTYv`<>)$40rTj z-0HV3lD>1E`H~l9u`;h*lvyNAr|kZOD)dRUPhQPz4iStYjEdk@yX<6 zU>&M^s5E=2U<1x;H(bkE>)kt$RO!n{dR4ebF?`iX@-tJ--yT*ycwyE2?O|1;c}Fwq zHsIAmZ!klbb6Uw8%k;(C?eLafH(bYIaE>*6d01nAw5FF2%tr8Ht&^NHxNs`h(;2=o zQt{wsin$w^V!CW{@6&sZNw31&diY0y+TcG0ay~QZ%a*sy6K%O^W3cSRuqev`SnBAQ_Pomtj$$RpKfD$%vG=42uG-5?298Mx?}LSQKcLxC%frA|)=vqCl&} zRREF^DRCJV1zIJp0+5VIiOaAk&?<2ifMi5UT!uw~R*9+U4^cBdG6fF zQ`3LndFQteJ#gcRTb91de(|LB-~$!)=1sp^`OAI$vFc+#d-|zIzhPgOd=%iiueJBy zaV_hx!`DD*&Ke(IsiPCeXx;|o7|r>D>E+xE#9U*7TjGl%Z3e7O4O>ijL&o{2tv!z({*qu+k@>UH+l|MBp1zdjwE zc=R7HzINu>%f1sW|NDvSPCjw@Q=i!O{og!u|F+f7eColg-#mWszO!Gxr}n~YX9v0` ie?JNB^XD(OKJepnS6;F36_MQ9xBJ%FAM85x+5Z4lF0`ir literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ad3ad959de4138922ea09c84316ad9369fedf403 GIT binary patch literal 21199 zcmeI4eT*bU6~G%61ILFZ5K;bdTr`SUJN3~YRm1GS-tL`u35)0667CKYuDYsvuVr_7 zn3=oXJBb1O!)S=2Mx!SZC4MAEi5mFBaK=P}e+c}c5s4o$l3-MVL5+!GqWF4xW~ygy z_O6-RC?q|}?$&m{_p18$>f^mPllj=b8{d1$jw^RKj&sT0J&Vim_xkkbg4e_EZ^pO( z7XDn=+H)H5wvKAci@W>X!GCizN4nisty(^2iX)s2&8CABNV z6sw!ERVA~yI!Q^Zp-$^)d#yJ#t*U0ttea-H1A1hlUh7EGO*%)CExH`u-m+ux$7;) zVJE$_B?Pk>Z=sgn$<%stDsy!mpw$-IMs}0-N|LNKvgx{S;ET$_LT`Fj-gR@_)X7HY z>Uwot#ZDY+%`D2UX;2Jvkzj=B3h`>ptC8RuOllbCjAW8yHkJ|{N5=;?7$Ou=u|oVB zp*6w}W$HPhadlXOT6X2x4CKXfCbX(WNqb#(8}YhaHPu#gwO+LsbCSbJSzAcfk~WOU zG+4bl>GDLa#Y7!VSH*l&nGU$1lXDF?sJHHS%GJ@UgBxpcgY4!zcM6Z~a+%;e7sx!_ zIq!SEhv(;oPj~ZrHC^E#XnXJby?;I1wsfLmU9+RcK9`=N24NF&M2Im+a_S=?IK@n0 z#)LbqX{Ds0U`zQN<_0kug&2M*-(Vt`%dt>Xnq~nDa3lmWzKSx_TzMW+t}vWN+NU&} z(zGk7#*s8gxIm>hY929)A`(hXv1>4%7Kq0~!hMR730!x3M;&OUSx6+9R$iaA0X{0= zfuuB&jL<282(664J_Xh$*xpeKqgfP!)zFBrZ`u%o!a&2bP$nX8S~n`J^x zp;j(3A=1B#?)T*)<$2$}XMFp=>+;Y!2; z+22&*6u?MuDLmM4xsiIx84^)K8HX9-`T)GQsY)CHp9mX|F-3!LYSSKtg9^4M7+`;) zzx+|J#t<82M`N!ETaV<@_Yw2_2)UsP2O{PSaiWcc(~`UV?1umZPqP{hThDi;;=&-G z1tDU-3rDPy9@21@D3?eTndq!s2gbq>he}5T$;b$#JvV}*Is_;AAsFMX;lwL!Eb@pJ zF7^=(xkR3XQwdH_j(qAXjTKjc5XFs24l$r2$OknTUOGnum!ODY8YxTxC&WvWf|Ts) zXz-Jdtj-iVrE%!eQf+Uu)0Gfe?Okl7q+-Ah@r&{`48`|!fUtB!Bp6jFfOs+T!yr)F z??soR>Nb4pn;!HIrnd;8VE5#a2ABALZw7*Yg@!nX7&r6{_&WlM**J5?PV4A>?HCeM zxt5a|cs)?y4CQGQ1rbaf=6Wb}!Syh$m`j*zL?8!UOfYj=S9{_#1U)_)EA~Rr{pR-3 zt2PAfrI0Pz?wB+|nwuG9NW+{ni#PjGXD`vJNtGs_4V9)H2A259RXePqW<3*#Pj_cA z1gEKQ-N(ie(>zn!l9}pBZEd8JMBNS9HuI|x+84>FGOMF%@c> zU_KX~z!8SpNVzD7fk9RvTZ_*j2svk`u|RPG6(&R#WL!LiKwd~6PC*rTjC)}erM0rD zoR(HS-L&e-+!~|hPP&ad=~*_ml2&EFnZJ$Po-{Oxg7t9es1?l$24qTXP}F6Xq;x0$ndL-)f+D@?=pJO;(b@yp{H z`{GTrc3?4vcSAdAama_Dsi!l3W1`~0trT-N`ij}I$$bc-=a}p&e8d7i-BBHWyd&o` zyHjp^%RbSzo3;kaPArQ8trAxONLHl8WmyzxmADE(vLYoe%c4N5#8m*26)AC976n=* zt^$y(NQuj`D9|c#6@X+#N?evjfmVsD03<6?;<79Xv`SnBAX$+Tmt|3)RpKfD$%>S? zEQ)qoTJ!ro;&O~wa+`w70IV>eQY<#zOZ+3er5Al&;RnfmpqCu zUi|6)d*4Fux$?-Tp*^Ug1S?#}!7{0M*M3s<-6 zm)Aji^mTaopZYrfLI}hLeU!MjguK)l5 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..353e47c56fa71b948a6443d4a3a850de2edcb5c0 GIT binary patch literal 21213 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 From 4ecb00f9ddf0d8050ccdd985cb55d6c39c8e4d6d Mon Sep 17 00:00:00 2001 From: SimpleStation14 <130339894+SimpleStation14@users.noreply.github.com> Date: Sat, 11 May 2024 22:36:55 -0700 Subject: [PATCH 45/46] Mirror: Update close-master-pr.yml (#373) ## Mirror of PR #26416: [Update close-master-pr.yml](https://github.com/space-wizards/space-station-14/pull/26416) from space-wizards [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `a30fb1fffa107bac79668866fdbf7fb7c6d3f8e0` PR opened by PJB3005 at 2024-03-24 22:47:21 UTC --- PR changed 1 files with 1 additions and 1 deletions. The PR had the following labels: - No C# ---

    Original Body

    > Fix name of "Close PRs on master" workflow >
    Co-authored-by: SimpleStation14 --- .github/workflows/close-master-pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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: From 255e307fe9d0ce0f99d4c8a008d34752d850303a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 12 May 2024 23:43:13 -0400 Subject: [PATCH 46/46] Update Credits (#403) This is an automated Pull Request. This PR updates the GitHub contributors in the credits section. Co-authored-by: SimpleStation Changelogs --- Resources/Credits/GitHub.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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