From 77753debeb2bb1a6a9ca6d6515c99c3ad0c0dc87 Mon Sep 17 00:00:00 2001 From: PrPleGoo Date: Sat, 6 Apr 2019 17:11:51 +0200 Subject: [PATCH] Leather gloves and an LED tube light. (#187) Added BurnTemperature to bulbs. Added HeatResistance to clothing and species. Added HeatResistanceComponent which resolves armor vs skin. Made the hand burn on lamps only happen when heat resistance is too poor. --- Content.Server/Content.Server.csproj | 3 +- Content.Server/EntryPoint.cs | 1 + .../Components/GUI/InventoryComponent.cs | 12 ++++- .../Items/Clothing/ClothingComponent.cs | 8 +-- .../Mobs/HeatResistanceComponent.cs | 21 ++++++++ .../Components/Mobs/SpeciesComponent.cs | 4 ++ .../Components/Power/LightBulbComponent.cs | 10 +++- .../Components/Power/PoweredLightComponent.cs | 50 +++++++++++------- Content.Server/GameObjects/ContainerSlot.cs | 4 -- Resources/Maps/stationstation.yml | 46 +++++++++++++--- .../Prototypes/Entities/Clothing/gloves.yml | 25 +++++++-- Resources/Prototypes/Entities/Lights.yml | 19 ++++++- Resources/Prototypes/Entities/Mobs.yml | 2 + .../black.png | Bin .../Clothing/glove_icons.rsi/leather.png | Bin 0 -> 2772 bytes .../Clothing/glove_icons.rsi/meta.json | 26 +++++++++ .../yellow.png | Bin .../Clothing/gloves_black.rsi/meta.json | 42 ++++++++++++++- .../gloves_leather.rsi/equipped-HAND.png | Bin 0 -> 2097 bytes .../gloves_leather.rsi/inhand-left.png | Bin 0 -> 1611 bytes .../gloves_leather.rsi/inhand-right.png | Bin 0 -> 1662 bytes .../Clothing/gloves_leather.rsi/meta.json | 41 ++++++++++++++ .../Clothing/gloves_yellow.rsi/meta.json | 42 ++++++++++++++- 23 files changed, 312 insertions(+), 44 deletions(-) create mode 100644 Content.Server/GameObjects/Components/Mobs/HeatResistanceComponent.cs rename Resources/Textures/Clothing/{gloves_black.rsi => glove_icons.rsi}/black.png (100%) create mode 100644 Resources/Textures/Clothing/glove_icons.rsi/leather.png create mode 100644 Resources/Textures/Clothing/glove_icons.rsi/meta.json rename Resources/Textures/Clothing/{gloves_yellow.rsi => glove_icons.rsi}/yellow.png (100%) create mode 100644 Resources/Textures/Clothing/gloves_leather.rsi/equipped-HAND.png create mode 100644 Resources/Textures/Clothing/gloves_leather.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/gloves_leather.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/gloves_leather.rsi/meta.json diff --git a/Content.Server/Content.Server.csproj b/Content.Server/Content.Server.csproj index 2aa95b10b7..42cfb7a73b 100644 --- a/Content.Server/Content.Server.csproj +++ b/Content.Server/Content.Server.csproj @@ -69,6 +69,7 @@ + @@ -194,4 +195,4 @@ - + \ No newline at end of file diff --git a/Content.Server/EntryPoint.cs b/Content.Server/EntryPoint.cs index 500ca70c25..d4d2118c6e 100644 --- a/Content.Server/EntryPoint.cs +++ b/Content.Server/EntryPoint.cs @@ -130,6 +130,7 @@ namespace Content.Server factory.Register(); factory.Register(); + factory.Register(); factory.Register(); factory.RegisterReference(); diff --git a/Content.Server/GameObjects/Components/GUI/InventoryComponent.cs b/Content.Server/GameObjects/Components/GUI/InventoryComponent.cs index 8e202296ba..2443bd55b6 100644 --- a/Content.Server/GameObjects/Components/GUI/InventoryComponent.cs +++ b/Content.Server/GameObjects/Components/GUI/InventoryComponent.cs @@ -78,7 +78,17 @@ namespace Content.Server.GameObjects /// Null if the slot is empty, otherwise the item. public ItemComponent GetSlotItem(Slots slot) { - return SlotContainers[slot].ContainedEntity?.GetComponent(); + return GetSlotItem(slot); + } + public T GetSlotItem(Slots slot) where T : ItemComponent + { + return SlotContainers[slot].ContainedEntity?.GetComponent(); + } + + public bool TryGetSlotItem(Slots slot, out T itemComponent) where T : ItemComponent + { + itemComponent = GetSlotItem(slot); + return itemComponent != null; } /// diff --git a/Content.Server/GameObjects/Components/Items/Clothing/ClothingComponent.cs b/Content.Server/GameObjects/Components/Items/Clothing/ClothingComponent.cs index 30fb384630..6bd553fe75 100644 --- a/Content.Server/GameObjects/Components/Items/Clothing/ClothingComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Clothing/ClothingComponent.cs @@ -1,9 +1,6 @@ using SS14.Shared.Serialization; using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; namespace Content.Server.GameObjects @@ -13,6 +10,9 @@ namespace Content.Server.GameObjects public override string Name => "Clothing"; public SlotFlags SlotFlags = SlotFlags.PREVENTEQUIP; //Different from None, NONE allows equips if no slot flags are required + private int _heatResistance; + public int HeatResistance => _heatResistance; + public override void ExposeData(ObjectSerializer serializer) { base.ExposeData(serializer); @@ -25,6 +25,8 @@ namespace Content.Server.GameObjects SlotFlags |= (SlotFlags)Enum.Parse(typeof(SlotFlags), slotflagsloaded.ToUpper()); } }); + + serializer.DataFieldCached(ref _heatResistance, "HeatResistance", 323); } } } diff --git a/Content.Server/GameObjects/Components/Mobs/HeatResistanceComponent.cs b/Content.Server/GameObjects/Components/Mobs/HeatResistanceComponent.cs new file mode 100644 index 0000000000..4d5bec36aa --- /dev/null +++ b/Content.Server/GameObjects/Components/Mobs/HeatResistanceComponent.cs @@ -0,0 +1,21 @@ +using System; +using SS14.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Inventory; + +namespace Content.Server.GameObjects +{ + public class HeatResistanceComponent : Component + { + public override string Name => "HeatResistance"; + + public int GetHeatResistance() + { + if (Owner.GetComponent().TryGetSlotItem(EquipmentSlotDefines.Slots.GLOVES, itemComponent: out ClothingComponent gloves) + | Owner.TryGetComponent(out SpeciesComponent speciesComponent)) + { + return Math.Max(gloves?.HeatResistance ?? int.MinValue, speciesComponent?.HeatResistance ?? int.MinValue); + } + return int.MinValue; + } + } +} diff --git a/Content.Server/GameObjects/Components/Mobs/SpeciesComponent.cs b/Content.Server/GameObjects/Components/Mobs/SpeciesComponent.cs index f8a335e301..223210dac5 100644 --- a/Content.Server/GameObjects/Components/Mobs/SpeciesComponent.cs +++ b/Content.Server/GameObjects/Components/Mobs/SpeciesComponent.cs @@ -34,6 +34,9 @@ namespace Content.Server.GameObjects /// private string templatename; + private int _heatResistance; + public int HeatResistance => _heatResistance; + public override void ExposeData(ObjectSerializer serializer) { base.ExposeData(serializer); @@ -43,6 +46,7 @@ namespace Content.Server.GameObjects Type type = AppDomain.CurrentDomain.GetAssemblyByName("Content.Server") .GetType("Content.Server.GameObjects." + templatename); DamageTemplate = (DamageTemplates) Activator.CreateInstance(type); + serializer.DataFieldCached(ref _heatResistance, "HeatResistance", 323); } public override void HandleMessage(ComponentMessage message, INetChannel netChannel = null, diff --git a/Content.Server/GameObjects/Components/Power/LightBulbComponent.cs b/Content.Server/GameObjects/Components/Power/LightBulbComponent.cs index d7ab69e8c8..b9aae3a803 100644 --- a/Content.Server/GameObjects/Components/Power/LightBulbComponent.cs +++ b/Content.Server/GameObjects/Components/Power/LightBulbComponent.cs @@ -1,4 +1,4 @@ -using System; +using System; using SS14.Shared.GameObjects; using SS14.Shared.Maths; using SS14.Shared.Serialization; @@ -49,6 +49,12 @@ namespace Content.Server.GameObjects.Components.Power public LightBulbType Type = LightBulbType.Tube; + private int _burningTemperature; + public int BurningTemperature => _burningTemperature; + + private float _powerUse; + public float PowerUse => _powerUse; + /// /// The current state of the light bulb. Invokes the OnLightBulbStateChange event when set. /// It also updates the bulb's sprite accordingly. @@ -82,6 +88,8 @@ namespace Content.Server.GameObjects.Components.Power { serializer.DataField(ref Type, "bulb", LightBulbType.Tube); serializer.DataField(ref _color, "color", Color.White); + serializer.DataFieldCached(ref _burningTemperature, "BurningTemperature", 1400); + serializer.DataFieldCached(ref _powerUse, "PowerUse", 40); } public void UpdateColor() diff --git a/Content.Server/GameObjects/Components/Power/PoweredLightComponent.cs b/Content.Server/GameObjects/Components/Power/PoweredLightComponent.cs index 91b9065086..10db5dbd24 100644 --- a/Content.Server/GameObjects/Components/Power/PoweredLightComponent.cs +++ b/Content.Server/GameObjects/Components/Power/PoweredLightComponent.cs @@ -1,20 +1,15 @@ using System; using Content.Server.GameObjects.Components.Sound; using Content.Server.GameObjects.EntitySystems; -using Content.Server.Interfaces.GameObjects; using Content.Shared.GameObjects; -using Content.Shared.GameObjects.Components.Inventory; using SS14.Server.GameObjects; using SS14.Server.GameObjects.Components.Container; -using SS14.Server.GameObjects.EntitySystems; using SS14.Shared.Audio; using SS14.Shared.Enums; using SS14.Shared.GameObjects; using SS14.Shared.Interfaces.GameObjects; using SS14.Shared.Interfaces.Timing; using SS14.Shared.IoC; -using SS14.Shared.Log; -using SS14.Shared.Map; using SS14.Shared.Serialization; using SS14.Shared.ViewVariables; @@ -33,8 +28,6 @@ namespace Content.Server.GameObjects.Components.Power private LightBulbType BulbType = LightBulbType.Tube; - [ViewVariables] private float Load = 40; - [ViewVariables] private ContainerSlot _lightBulbContainer; [ViewVariables] @@ -50,23 +43,44 @@ namespace Content.Server.GameObjects.Components.Power } } - bool IAttackBy.AttackBy(AttackByEventArgs eventArgs) + public bool AttackBy(AttackByEventArgs eventArgs) { return InsertBulb(eventArgs.AttackWith); } - bool IAttackHand.AttackHand(AttackHandEventArgs eventArgs) + public bool AttackHand(AttackHandEventArgs eventArgs) { - if (eventArgs.User.GetComponent().GetSlotItem(EquipmentSlotDefines.Slots.GLOVES) != null) + if (!eventArgs.User.TryGetComponent(out DamageableComponent damageableComponent)) + { + Eject(); + return false; + } + if(eventArgs.User.TryGetComponent(out HeatResistanceComponent heatResistanceComponent)) + { + if(CanBurn(heatResistanceComponent.GetHeatResistance())) + { + Burn(); + return true; + } + } + Eject(); + return true; + + bool CanBurn(int heatResistance) + { + return _lightState == LightState.On && heatResistance < LightBulb.BurningTemperature; + } + + void Burn() + { + damageableComponent.TakeDamage(DamageType.Heat, 20); + } + + void Eject() { EjectBulb(eventArgs.User); UpdateLight(); - return true; } - - if (!eventArgs.User.TryGetComponent(out DamageableComponent damageableComponent)) return false; - damageableComponent.TakeDamage(DamageType.Heat, 20); - return true; } /// @@ -110,7 +124,6 @@ namespace Content.Server.GameObjects.Components.Power public override void ExposeData(ObjectSerializer serializer) { - serializer.DataField(ref Load, "load", 40); serializer.DataField(ref BulbType, "bulb", LightBulbType.Tube); } @@ -122,6 +135,8 @@ namespace Content.Server.GameObjects.Components.Power UpdateLight(); } + private LightState _lightState => Owner.GetComponent().State; + /// /// Updates the light's power drain, sprite and actual light state. /// @@ -141,7 +156,7 @@ namespace Content.Server.GameObjects.Components.Power switch (LightBulb.State) { case LightBulbState.Normal: - device.Load = Load; + device.Load = LightBulb.PowerUse; if (device.Powered) { sprite.LayerSetState(0, "on"); @@ -159,7 +174,6 @@ namespace Content.Server.GameObjects.Components.Power sprite.LayerSetState(0, "off"); light.State = LightState.Off; } - break; case LightBulbState.Broken: device.Load = 0; diff --git a/Content.Server/GameObjects/ContainerSlot.cs b/Content.Server/GameObjects/ContainerSlot.cs index dee9a283c6..0d939a58dc 100644 --- a/Content.Server/GameObjects/ContainerSlot.cs +++ b/Content.Server/GameObjects/ContainerSlot.cs @@ -1,11 +1,7 @@ using SS14.Server.GameObjects.Components.Container; using SS14.Server.Interfaces.GameObjects; using SS14.Shared.Interfaces.GameObjects; -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using SS14.Shared.ViewVariables; namespace Content.Server.GameObjects diff --git a/Resources/Maps/stationstation.yml b/Resources/Maps/stationstation.yml index f9093e2180..a7bfcfe5d3 100644 --- a/Resources/Maps/stationstation.yml +++ b/Resources/Maps/stationstation.yml @@ -5,10 +5,10 @@ meta: tilemap: 0: space 1: floor - 2: plating - 3: underplating - 4: floor_white - 5: floor_techmaint + 2: floor_techmaint + 3: floor_white + 4: plating + 5: underplating grids: - settings: chunksize: 16 @@ -17,17 +17,17 @@ grids: worldpos: 0,0 chunks: - ind: "-1,0" - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAEAAAABAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAABAAAAAQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAADAAAAAQAAAAEAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAEAAAABAAAAAwAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABQAAAAEAAAABAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAIAAAABAAAAAQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAAAAQAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABQAAAAEAAAABAAAABQAAAAUAAAAFAAAABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== - ind: "-1,-1" - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAAFAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAQAAAAEAAAABAAAAAQAAAAAAAAADAAAAAwAAAAMAAAADAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAAAwAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAwAAAAUAAAAFAAAAAwAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAMAAAABAAAAAQAAAAEAAAABAAAAAAAAAAMAAAAFAAAABQAAAAMAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAADAAAAAQAAAAEAAAABAAAAAQAAAAAAAAADAAAABQAAAAMAAAADAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAAAwAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAwAAAAUAAAAFAAAAAwAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAMAAAABAAAAAQAAAAEAAAABAAAAAAAAAAMAAAAFAAAABQAAAAMAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAADAAAAAQAAAAEAAAABAAAAAQAAAA== + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAAAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAACAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAAAAAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAAAQAAAAEAAAABAAAAAQAAAAAAAAAFAAAABQAAAAUAAAAFAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAABQAAAAEAAAABAAAAAQAAAAEAAAAAAAAABQAAAAIAAAACAAAABQAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAUAAAABAAAAAQAAAAEAAAABAAAAAAAAAAUAAAACAAAAAgAAAAUAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAFAAAAAQAAAAEAAAABAAAAAQAAAAAAAAAFAAAAAgAAAAUAAAAFAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAABQAAAAEAAAABAAAAAQAAAAEAAAAAAAAABQAAAAIAAAACAAAABQAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAUAAAABAAAAAQAAAAEAAAABAAAAAAAAAAUAAAACAAAAAgAAAAUAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAFAAAAAQAAAAEAAAABAAAAAQAAAA== - ind: "-1,1" tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== - ind: "0,1" tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== - ind: "0,0" - tiles: AQAAAAMAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAADAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAgAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAACAAAAAwAAAAIAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + tiles: AQAAAAUAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAFAAAABQAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAABQAAAAUAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAABAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAEAAAABQAAAAQAAAAAAAAAAAAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== - ind: "0,-1" - tiles: AAAAAAMAAAAFAAAABQAAAAMAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAADAAAAAQAAAAEAAAABAAAAAQAAAAAAAAADAAAABQAAAAMAAAADAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAAAwAAAAMAAAABAAAAAQAAAAEAAAAAAAAAAwAAAAUAAAAFAAAAAwAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAABAAAAAQAAAAEAAAABAAAAAAAAAAMAAAAFAAAABQAAAAMAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAAAQAAAAEAAAABAAAAAQAAAAAAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAABQAAAAUAAAAFAAAAAwAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAABQAAAAMAAAAFAAAABQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAUAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAFAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + tiles: AAAAAAUAAAACAAAAAgAAAAUAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAFAAAAAQAAAAEAAAABAAAAAQAAAAAAAAAFAAAAAgAAAAUAAAAFAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAABQAAAAUAAAABAAAAAQAAAAEAAAAAAAAABQAAAAIAAAACAAAABQAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAABAAAAAQAAAAEAAAABAAAAAAAAAAUAAAACAAAAAgAAAAUAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAQAAAAEAAAABAAAAAQAAAAAAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAAAgAAAAIAAAACAAAABQAAAAUAAAAFAAAABQAAAAUAAAAAAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAAAgAAAAUAAAACAAAAAgAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAIAAAAFAAAABQAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== - ind: "1,-1" tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== entities: @@ -37,12 +37,16 @@ entities: pos: -1.47174,4.550247 rot: -1.5707963267949 rad type: Transform + - charge: 1000 + type: HitscanWeaponCapacitor - type: LaserItem components: - grid: 0 pos: -0.6748645,4.487747 rot: -1.5707963267949 rad type: Transform + - charge: 1000 + type: HitscanWeaponCapacitor - type: Brutepack components: - grid: 0 @@ -2779,4 +2783,30 @@ entities: pos: -7.5,5.5 rot: -1.5707963267949 rad type: Transform +- type: LeatherGloves + components: + - grid: 0 + pos: -4.332221,4.64238 + rot: -1.5707963267949 rad + type: Transform +- type: LeatherGloves + components: + - grid: 0 + pos: -3.519721,4.64238 + rot: -1.5707963267949 rad + type: Transform +- type: LeatherGloves + components: + - grid: 0 + pos: -2.597846,4.61113 + rot: -1.5707963267949 rad + type: Transform +- type: LedLightTube + components: + - grid: 0 + pos: -3.511025,-10.35149 + rot: -1.5707963267949 rad + type: Transform + - color: '#EEEEFFFF' + type: Sprite ... diff --git a/Resources/Prototypes/Entities/Clothing/gloves.yml b/Resources/Prototypes/Entities/Clothing/gloves.yml index 8036c1b19e..a47c382c76 100644 --- a/Resources/Prototypes/Entities/Clothing/gloves.yml +++ b/Resources/Prototypes/Entities/Clothing/gloves.yml @@ -14,10 +14,10 @@ description: Electrical gloves that keep you from frying components: - type: Sprite - sprite: Clothing/gloves_yellow.rsi + sprite: Clothing/glove_icons.rsi state: yellow - type: Icon - sprite: Clothing/gloves_yellow.rsi + sprite: Clothing/glove_icons.rsi state: yellow - type: Clothing sprite: Clothing/gloves_yellow.rsi @@ -30,10 +30,27 @@ description: Regular gloves that do not keep you from frying components: - type: Sprite - sprite: Clothing/gloves_black.rsi + sprite: Clothing/glove_icons.rsi state: black - type: Icon - sprite: Clothing/gloves_black.rsi + sprite: Clothing/glove_icons.rsi state: black - type: Clothing sprite: Clothing/gloves_black.rsi + HeatResistance: 500 + +- type: entity + parent: GlovesBase + id: LeatherGloves + name: Botanist's leather gloves + description: These leather gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin. They're also quite warm. + components: + - type: Sprite + sprite: Clothing/glove_icons.rsi + state: leather + - type: Icon + sprite: Clothing/glove_icons.rsi + state: leather + - type: Clothing + sprite: Clothing/gloves_leather.rsi + HeatResistance: 1500 \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Lights.yml b/Resources/Prototypes/Entities/Lights.yml index 7a94c3f73d..ce44c3087d 100644 --- a/Resources/Prototypes/Entities/Lights.yml +++ b/Resources/Prototypes/Entities/Lights.yml @@ -45,7 +45,6 @@ priority: Low - type: PoweredLight - load: 40 bulb: Tube - type: entity @@ -71,7 +70,6 @@ priority: Low - type: PoweredLight - load: 40 bulb: Bulb - type: entity @@ -97,6 +95,23 @@ sprite: Objects/light_tube.rsi state: normal +- type: entity + parent: BaseLightbulb + name: LED Light Tube + id: LedLightTube + components: + - type: LightBulb + bulb: Tube + color: "#EEEEFF" + BurningTemperature: 350 + PowerUse: 9 + - type: Sprite + sprite: Objects/light_tube.rsi + state: normal + - type: Icon + sprite: Objects/light_tube.rsi + state: normal + - type: entity parent: BaseLightbulb name: Light Bulb diff --git a/Resources/Prototypes/Entities/Mobs.yml b/Resources/Prototypes/Entities/Mobs.yml index b6a8f9e4e5..8523ceb11f 100644 --- a/Resources/Prototypes/Entities/Mobs.yml +++ b/Resources/Prototypes/Entities/Mobs.yml @@ -50,6 +50,8 @@ - type: Species Template: Human + HeatResistance: 323 + - type: HeatResistance - type: Damageable - type: Eye diff --git a/Resources/Textures/Clothing/gloves_black.rsi/black.png b/Resources/Textures/Clothing/glove_icons.rsi/black.png similarity index 100% rename from Resources/Textures/Clothing/gloves_black.rsi/black.png rename to Resources/Textures/Clothing/glove_icons.rsi/black.png diff --git a/Resources/Textures/Clothing/glove_icons.rsi/leather.png b/Resources/Textures/Clothing/glove_icons.rsi/leather.png new file mode 100644 index 0000000000000000000000000000000000000000..74cadf937cea88d7717c3692c5cfef86f0edc879 GIT binary patch literal 2772 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 WH0o3oH*|4a|6mwPoCOo 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 IM6N<$f?)pp5&!@I literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/gloves_leather.rsi/meta.json b/Resources/Textures/Clothing/gloves_leather.rsi/meta.json new file mode 100644 index 0000000000..525c5d6586 --- /dev/null +++ b/Resources/Textures/Clothing/gloves_leather.rsi/meta.json @@ -0,0 +1,41 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 9a3a3a180344460263e8df7ea2565128e07b86b5", + "states": [ + { + "name": "equipped-HAND", + "directions": 4, + "delays": [ + [ 1.0 ], + [ 1.0 ], + [ 1.0 ], + [ 1.0 ] + ] + }, + { + "name": "inhand-left", + "directions": 4, + "delays": [ + [ 1.0 ], + [ 1.0 ], + [ 1.0 ], + [ 1.0 ] + ] + }, + { + "name": "inhand-right", + "directions": 4, + "delays": [ + [ 1.0 ], + [ 1.0 ], + [ 1.0 ], + [ 1.0 ] + ] + } + ] +} diff --git a/Resources/Textures/Clothing/gloves_yellow.rsi/meta.json b/Resources/Textures/Clothing/gloves_yellow.rsi/meta.json index 5008a3259f..525c5d6586 100644 --- a/Resources/Textures/Clothing/gloves_yellow.rsi/meta.json +++ b/Resources/Textures/Clothing/gloves_yellow.rsi/meta.json @@ -1 +1,41 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 9a3a3a180344460263e8df7ea2565128e07b86b5", "states": [{"name": "equipped-HAND", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "inhand-left", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "inhand-right", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "yellow", "directions": 1, "delays": [[1.0]]}]} +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 9a3a3a180344460263e8df7ea2565128e07b86b5", + "states": [ + { + "name": "equipped-HAND", + "directions": 4, + "delays": [ + [ 1.0 ], + [ 1.0 ], + [ 1.0 ], + [ 1.0 ] + ] + }, + { + "name": "inhand-left", + "directions": 4, + "delays": [ + [ 1.0 ], + [ 1.0 ], + [ 1.0 ], + [ 1.0 ] + ] + }, + { + "name": "inhand-right", + "directions": 4, + "delays": [ + [ 1.0 ], + [ 1.0 ], + [ 1.0 ], + [ 1.0 ] + ] + } + ] +}