From f189b73fe57d9eaa72f043f2fca49754e7d161b8 Mon Sep 17 00:00:00 2001 From: PixelTK <85175107+PixelTheKermit@users.noreply.github.com> Date: Sun, 13 Aug 2023 08:38:05 +0100 Subject: [PATCH] Arachnid rework (#18631) * Merge before I fuck up anything again * craft whitelist * Sericulture * Spider * gone * quickly fixed * and coders taketh away * And we take more away * sericulture improvements * arachnid * better webbed * OH WAIT * test fail --- .../Sericulture/SericultureComponent.cs | 27 +++ .../Sericulture/SericultureSystem.cs | 101 +++++++++++ .../Sericulture/SericultureEvents.cs | 7 + .../Locale/en-US/actions/actions/spider.ftl | 6 +- .../conditions/crafter-whitelist.ftl | 1 + Resources/Locale/en-US/tiles/tiles.ftl | 3 +- Resources/Prototypes/Actions/spider.yml | 8 + Resources/Prototypes/Body/Parts/arachnid.yml | 4 - .../Prototypes/Body/Prototypes/arachnid.yml | 6 + Resources/Prototypes/Damage/modifier_sets.yml | 17 +- .../Entities/Mobs/Player/arachnid.yml | 2 +- .../Entities/Mobs/Species/arachnid.yml | 124 ++++++++----- .../Entities/Objects/Materials/materials.yml | 45 ++++- .../Entities/Objects/Misc/spider_web.yml | 5 + .../Entities/Objects/Misc/tiles.yml | 16 ++ .../Structures/Furniture/Tables/tables.yml | 29 ++++ .../Entities/Structures/Furniture/beds.yml | 28 +++ .../Entities/Structures/Furniture/chairs.yml | 39 +++++ .../Entities/Structures/Walls/walls.yml | 43 ++++- .../Reagents/Materials/materials.yml | 7 + .../Recipes/Construction/Graphs/web.yml | 35 ++++ .../Prototypes/Recipes/Construction/web.yml | 35 ++++ .../Recipes/Crafting/Graphs/tiles.yml | 2 +- .../Recipes/Crafting/Graphs/web.yml | 15 ++ Resources/Prototypes/Recipes/Crafting/web.yml | 10 ++ .../Prototypes/Stacks/Materials/materials.yml | 8 + .../Prototypes/Stacks/floor_tile_stacks.yml | 7 + Resources/Prototypes/Tiles/floors.yml | 14 ++ .../Objects/Materials/silk.rsi/icon.png | Bin 0 -> 391 bytes .../Objects/Materials/silk.rsi/meta.json | 12 ++ .../Textures/Objects/Tiles/web.rsi/icon.png | Bin 0 -> 302 bytes .../Textures/Objects/Tiles/web.rsi/meta.json | 14 ++ .../Structures/Furniture/Web/bed.rsi/icon.png | Bin 0 -> 491 bytes .../Furniture/Web/bed.rsi/meta.json | 14 ++ .../Furniture/Web/chair.rsi/icon.png | Bin 0 -> 967 bytes .../Furniture/Web/chair.rsi/meta.json | 15 ++ .../Furniture/Web/table.rsi/full.png | Bin 0 -> 566 bytes .../Furniture/Web/table.rsi/meta.json | 163 ++++++++++++++++++ .../Furniture/Web/table.rsi/state_0.png | Bin 0 -> 780 bytes .../Furniture/Web/table.rsi/state_1.png | Bin 0 -> 616 bytes .../Furniture/Web/table.rsi/state_2.png | Bin 0 -> 780 bytes .../Furniture/Web/table.rsi/state_3.png | Bin 0 -> 616 bytes .../Furniture/Web/table.rsi/state_4.png | Bin 0 -> 652 bytes .../Furniture/Web/table.rsi/state_5.png | Bin 0 -> 624 bytes .../Furniture/Web/table.rsi/state_6.png | Bin 0 -> 652 bytes .../Furniture/Web/table.rsi/state_7.png | Bin 0 -> 254 bytes .../Structures/Walls/web.rsi/full.png | Bin 0 -> 507 bytes .../Structures/Walls/web.rsi/meta.json | 46 +++++ .../Structures/Walls/web.rsi/wall0.png | Bin 0 -> 802 bytes .../Structures/Walls/web.rsi/wall1.png | Bin 0 -> 596 bytes .../Structures/Walls/web.rsi/wall2.png | Bin 0 -> 802 bytes .../Structures/Walls/web.rsi/wall3.png | Bin 0 -> 596 bytes .../Structures/Walls/web.rsi/wall4.png | Bin 0 -> 593 bytes .../Structures/Walls/web.rsi/wall5.png | Bin 0 -> 697 bytes .../Structures/Walls/web.rsi/wall6.png | Bin 0 -> 593 bytes .../Structures/Walls/web.rsi/wall7.png | Bin 0 -> 239 bytes Resources/Textures/Tiles/Misc/Web/meta.json | 14 ++ .../Textures/Tiles/Misc/Web/web_tile.png | Bin 0 -> 1540 bytes 58 files changed, 860 insertions(+), 62 deletions(-) create mode 100644 Content.Server/Sericulture/SericultureComponent.cs create mode 100644 Content.Server/Sericulture/SericultureSystem.cs create mode 100644 Content.Shared/Sericulture/SericultureEvents.cs create mode 100644 Resources/Locale/en-US/construction/conditions/crafter-whitelist.ftl create mode 100644 Resources/Prototypes/Recipes/Construction/Graphs/web.yml create mode 100644 Resources/Prototypes/Recipes/Construction/web.yml create mode 100644 Resources/Prototypes/Recipes/Crafting/Graphs/web.yml create mode 100644 Resources/Prototypes/Recipes/Crafting/web.yml create mode 100644 Resources/Textures/Objects/Materials/silk.rsi/icon.png create mode 100644 Resources/Textures/Objects/Materials/silk.rsi/meta.json create mode 100644 Resources/Textures/Objects/Tiles/web.rsi/icon.png create mode 100644 Resources/Textures/Objects/Tiles/web.rsi/meta.json create mode 100644 Resources/Textures/Structures/Furniture/Web/bed.rsi/icon.png create mode 100644 Resources/Textures/Structures/Furniture/Web/bed.rsi/meta.json create mode 100644 Resources/Textures/Structures/Furniture/Web/chair.rsi/icon.png create mode 100644 Resources/Textures/Structures/Furniture/Web/chair.rsi/meta.json create mode 100644 Resources/Textures/Structures/Furniture/Web/table.rsi/full.png create mode 100644 Resources/Textures/Structures/Furniture/Web/table.rsi/meta.json create mode 100644 Resources/Textures/Structures/Furniture/Web/table.rsi/state_0.png create mode 100644 Resources/Textures/Structures/Furniture/Web/table.rsi/state_1.png create mode 100644 Resources/Textures/Structures/Furniture/Web/table.rsi/state_2.png create mode 100644 Resources/Textures/Structures/Furniture/Web/table.rsi/state_3.png create mode 100644 Resources/Textures/Structures/Furniture/Web/table.rsi/state_4.png create mode 100644 Resources/Textures/Structures/Furniture/Web/table.rsi/state_5.png create mode 100644 Resources/Textures/Structures/Furniture/Web/table.rsi/state_6.png create mode 100644 Resources/Textures/Structures/Furniture/Web/table.rsi/state_7.png create mode 100644 Resources/Textures/Structures/Walls/web.rsi/full.png create mode 100644 Resources/Textures/Structures/Walls/web.rsi/meta.json create mode 100644 Resources/Textures/Structures/Walls/web.rsi/wall0.png create mode 100644 Resources/Textures/Structures/Walls/web.rsi/wall1.png create mode 100644 Resources/Textures/Structures/Walls/web.rsi/wall2.png create mode 100644 Resources/Textures/Structures/Walls/web.rsi/wall3.png create mode 100644 Resources/Textures/Structures/Walls/web.rsi/wall4.png create mode 100644 Resources/Textures/Structures/Walls/web.rsi/wall5.png create mode 100644 Resources/Textures/Structures/Walls/web.rsi/wall6.png create mode 100644 Resources/Textures/Structures/Walls/web.rsi/wall7.png create mode 100644 Resources/Textures/Tiles/Misc/Web/meta.json create mode 100644 Resources/Textures/Tiles/Misc/Web/web_tile.png diff --git a/Content.Server/Sericulture/SericultureComponent.cs b/Content.Server/Sericulture/SericultureComponent.cs new file mode 100644 index 0000000000..37da04ff13 --- /dev/null +++ b/Content.Server/Sericulture/SericultureComponent.cs @@ -0,0 +1,27 @@ +namespace Content.Server.Sericulture; + +[RegisterComponent] +public sealed class SericultureComponent : Component +{ + + [DataField("popupText")] + public string PopupText = "sericulture-failure-hunger"; + + /// + /// What will be produced at the end of the action. + /// + [DataField("entityProduced", required: true)] + public string EntityProduced = ""; + + [DataField("actionProto", required: true)] + public string ActionProto = ""; + + /// + /// How long will it take to make. + /// + [DataField("productionLength", required: true), ViewVariables(VVAccess.ReadWrite)] + public float ProductionLength = 0; + + [DataField("hungerCost"), ViewVariables(VVAccess.ReadWrite)] + public float HungerCost = 0f; +} diff --git a/Content.Server/Sericulture/SericultureSystem.cs b/Content.Server/Sericulture/SericultureSystem.cs new file mode 100644 index 0000000000..5eb538271e --- /dev/null +++ b/Content.Server/Sericulture/SericultureSystem.cs @@ -0,0 +1,101 @@ +using Content.Server.Actions; +using Content.Server.DoAfter; +using Content.Server.Popups; +using Content.Shared.Actions; +using Content.Shared.Actions.ActionTypes; +using Content.Shared.DoAfter; +using Content.Shared.Nutrition.Components; +using Content.Shared.Nutrition.EntitySystems; +using Robust.Shared.Prototypes; +using Content.Shared.Sericulture; +using Content.Server.Stack; + +namespace Content.Server.Sericulture; + +public sealed class SericultureSystem : EntitySystem +{ + [Dependency] private readonly ActionsSystem _actionsSystem = default!; + [Dependency] private readonly DoAfterSystem _doAfterSystem = default!; + [Dependency] private readonly IPrototypeManager _protoManager = default!; + [Dependency] private readonly HungerSystem _hungerSystem = default!; + [Dependency] private readonly PopupSystem _popupSystem = default!; + [Dependency] private readonly StackSystem _stackSystem = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnCompInit); + SubscribeLocalEvent(OnCompRemove); + SubscribeLocalEvent(OnSericultureStart); + SubscribeLocalEvent(OnSericultureDoAfter); + } + + private void OnCompInit(EntityUid uid, SericultureComponent comp, ComponentInit args) + { + if (!_protoManager.TryIndex(comp.ActionProto, out var actionProto)) + return; + + _actionsSystem.AddAction(uid, new InstantAction(actionProto), uid); + } + + private void OnCompRemove(EntityUid uid, SericultureComponent comp, ComponentShutdown args) + { + if (!_protoManager.TryIndex(comp.ActionProto, out var actionProto)) + return; + + _actionsSystem.RemoveAction(uid, new InstantAction(actionProto)); + } + + private void OnSericultureStart(EntityUid uid, SericultureComponent comp, SericultureActionEvent args) + { + if (IsHungry(uid)) + { + _popupSystem.PopupEntity(Loc.GetString(comp.PopupText), uid, uid); + return; + } + + var doAfter = new DoAfterArgs(uid, comp.ProductionLength, new SericultureDoAfterEvent(), uid) + { + BreakOnUserMove = true, + BlockDuplicate = true, + BreakOnDamage = true, + CancelDuplicate = true, + }; + + _doAfterSystem.TryStartDoAfter(doAfter); + } + + private void OnSericultureDoAfter(EntityUid uid, SericultureComponent comp, SericultureDoAfterEvent args) + { + if (args.Cancelled || args.Handled || comp.Deleted) + return; + + if (IsHungry(uid)) + { + _popupSystem.PopupEntity(Loc.GetString(comp.PopupText), uid, uid); + return; + } + + _hungerSystem.ModifyHunger(uid, -comp.HungerCost); + + var newEntity = Spawn(comp.EntityProduced, Transform(uid).Coordinates); + + _stackSystem.TryMergeToHands(newEntity, uid); + + args.Repeat = true; + } + + private bool IsHungry(EntityUid uid, HungerComponent? comp = null) + { + if (!Resolve(uid, ref comp)) + return false; + + if (_hungerSystem.GetHungerThreshold(comp) <= HungerThreshold.Peckish) + return true; + + return false; + } + + public sealed class SericultureActionEvent : InstantActionEvent { } +} diff --git a/Content.Shared/Sericulture/SericultureEvents.cs b/Content.Shared/Sericulture/SericultureEvents.cs new file mode 100644 index 0000000000..cf8e1063f6 --- /dev/null +++ b/Content.Shared/Sericulture/SericultureEvents.cs @@ -0,0 +1,7 @@ +using Content.Shared.DoAfter; +using Robust.Shared.Serialization; + +namespace Content.Shared.Sericulture; + +[Serializable, NetSerializable] +public sealed class SericultureDoAfterEvent : SimpleDoAfterEvent { } diff --git a/Resources/Locale/en-US/actions/actions/spider.ftl b/Resources/Locale/en-US/actions/actions/spider.ftl index 3fc482ce3e..f74e8db737 100644 --- a/Resources/Locale/en-US/actions/actions/spider.ftl +++ b/Resources/Locale/en-US/actions/actions/spider.ftl @@ -2,4 +2,8 @@ spider-web-action-name = Spider Web spider-web-action-description = Spawns a web that slows your prey down. spider-web-action-nogrid = There is no floor under you! spider-web-action-success = You place webs around you. -spider-web-action-fail = You can't place webs here! All cardinal directions already have webs! \ No newline at end of file +spider-web-action-fail = You can't place webs here! All cardinal directions already have webs! + +sericulture-action-name = Weave silk +sericulture-action-description = Weave a bit of silk for use in arts and crafts. +sericulture-failure-hunger = Your stomach is too empty to make any more webs! diff --git a/Resources/Locale/en-US/construction/conditions/crafter-whitelist.ftl b/Resources/Locale/en-US/construction/conditions/crafter-whitelist.ftl new file mode 100644 index 0000000000..646d89ca5e --- /dev/null +++ b/Resources/Locale/en-US/construction/conditions/crafter-whitelist.ftl @@ -0,0 +1 @@ +construction-step-condition-crafter-whitelist = You need to meet certain requirements. diff --git a/Resources/Locale/en-US/tiles/tiles.ftl b/Resources/Locale/en-US/tiles/tiles.ftl index 96db8fde57..973033ce02 100644 --- a/Resources/Locale/en-US/tiles/tiles.ftl +++ b/Resources/Locale/en-US/tiles/tiles.ftl @@ -100,4 +100,5 @@ tiles-basalt-floor = basalt floor tiles-snow-floor = snow floor tiles-wood3 = wood broken floor tiles-hull = exterior hull plating -tiles-hull-reinforced = exterior reinforced hull plating \ No newline at end of file +tiles-hull-reinforced = exterior reinforced hull plating +tiles-web = web tile diff --git a/Resources/Prototypes/Actions/spider.yml b/Resources/Prototypes/Actions/spider.yml index 8a5ee0e52d..988b9a3f8d 100644 --- a/Resources/Prototypes/Actions/spider.yml +++ b/Resources/Prototypes/Actions/spider.yml @@ -5,3 +5,11 @@ description: spider-web-action-description serverEvent: !type:SpiderWebActionEvent useDelay: 25 + +- type: instantAction + id: SericultureAction + icon: Interface/Actions/web.png + name: sericulture-action-name + description: sericulture-action-description + serverEvent: !type:SericultureActionEvent + useDelay: 1 diff --git a/Resources/Prototypes/Body/Parts/arachnid.yml b/Resources/Prototypes/Body/Parts/arachnid.yml index dbb656cc18..9c95d1d15a 100644 --- a/Resources/Prototypes/Body/Parts/arachnid.yml +++ b/Resources/Prototypes/Body/Parts/arachnid.yml @@ -91,8 +91,6 @@ sprite: Mobs/Species/Arachnid/parts.rsi state: "l_leg" - type: MovementBodyPart - walkSpeed: 3.0 - sprintSpeed: 5.0 - type: entity id: RightLegArachnid @@ -103,8 +101,6 @@ sprite: Mobs/Species/Arachnid/parts.rsi state: "r_leg" - type: MovementBodyPart - walkSpeed: 3.0 - sprintSpeed: 5.0 - type: entity id: LeftFootArachnid diff --git a/Resources/Prototypes/Body/Prototypes/arachnid.yml b/Resources/Prototypes/Body/Prototypes/arachnid.yml index 0c57d3a199..60a83500af 100644 --- a/Resources/Prototypes/Body/Prototypes/arachnid.yml +++ b/Resources/Prototypes/Body/Prototypes/arachnid.yml @@ -27,14 +27,20 @@ part: RightArmArachnid connections: - right hand + - secondary right hand left arm: part: LeftArmArachnid connections: - left hand + - secondary left hand right hand: part: RightHandArachnid left hand: part: LeftHandArachnid + secondary right hand: + part: RightHandArachnid + secondary left hand: + part: LeftHandArachnid right leg: part: RightLegArachnid connections: diff --git a/Resources/Prototypes/Damage/modifier_sets.yml b/Resources/Prototypes/Damage/modifier_sets.yml index 1a425226a0..47fc03fb33 100644 --- a/Resources/Prototypes/Damage/modifier_sets.yml +++ b/Resources/Prototypes/Damage/modifier_sets.yml @@ -91,6 +91,14 @@ flatReductions: Blunt: 5 +- type: damageModifierSet + id: Web # Very flammable, can be easily hacked and slashed, but shooting or hitting it is another story. + coefficients: + Blunt: 0.7 + Slash: 2.0 + Piercing: 0.7 + Heat: 3.0 + - type: damageModifierSet id: Slime coefficients: @@ -131,13 +139,10 @@ Shock: 1.2 - type: damageModifierSet - id: Arachnid # Don't do too well with high temperatures, venomous (well some kinds anyways) and have an exo-skeleton (so probably harder to stab but easier to... break?) + id: Arachnid # Exo-skeleton, should have simillarities to skeleton resistances. coefficients: - Blunt: 1.15 - Piercing: 1.15 - Slash: 0.85 - Heat: 1.25 - Poison: 0.8 + Blunt: 1.1 + Heat: 1.5 - type: damageModifierSet id: Moth # Slightly worse at everything but cold diff --git a/Resources/Prototypes/Entities/Mobs/Player/arachnid.yml b/Resources/Prototypes/Entities/Mobs/Player/arachnid.yml index 5ab7e4b9c3..dc6009c561 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/arachnid.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/arachnid.yml @@ -7,7 +7,7 @@ - type: Respirator damage: types: - Asphyxiation: 2 # Make sure you have O2 on you at all times + Asphyxiation: 1.5 # Make sure you have O2 on you at all times damageRecovery: types: Asphyxiation: -0.5 # Recovery will suck without chems \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml index 35c202be7f..32bf10ba5d 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml @@ -6,50 +6,40 @@ abstract: true components: # The important nessessities - - type: MovementSpeedModifier - baseWalkSpeed: 3.0 - baseSprintSpeed: 5.0 - type: Body prototype: Arachnid requiredLegs: 2 - type: Perishable - type: HumanoidAppearance species: Arachnid - - type: Damageable - damageContainer: Biological - damageModifierSet: Arachnid # spooder - type: Hunger - starvationDamage: + baseDecayRate: 0.0125 + starvationDamage: # Not sure if this should be changed. types: Cold: 0.5 Bloodloss: 0.5 - type: Thirst - - type: Icon - sprite: Mobs/Species/Arachnid/parts.rsi - state: full - # Damage and speed + baseDecayRate: 0.0125 + # Damage (Self) + - type: Damageable + damageContainer: Biological + damageModifierSet: Arachnid - type: Bloodstream bloodReagent: SpiderBlood - - type: Temperature - heatDamageThreshold: 400 - coldDamageThreshold: 285 - currentTemperature: 310.15 - specificHeat: 46 - coldDamage: - types: - Cold : 0.2 #per second, scales with temperature & other constants - heatDamage: - types: - Heat : 0.1 #per second, scales with temperature & other constants - - type: Barotrauma + # Damage (Others) + - type: MeleeWeapon + animation: WeaponArcClaw + soundHit: + collection: AlienClaw damage: - types: - Blunt: 0.20 #per second, scales with pressure and other constants. - - type: SlowOnDamage - speedModifierThresholds: # This is an ouch, but it does make up for their extra speed - 65: 0.7 - 80: 0.4 - # Misc + types: # Realisically this is more like 5 slash + Slash: 4 + # Visual & Audio + - type: DamageVisuals + damageOverlayGroups: + Brute: + sprite: Mobs/Effects/brute_damage.rsi + color: "#162581" - type: Speech speechSounds: Arachnid - type: Vocal @@ -57,20 +47,66 @@ Male: UnisexArachnid Female: UnisexArachnid Unsexed: UnisexArachnid - - type: Inventory - templateId: arachnid - - type: MeleeWeapon - hidden: true - soundHit: - path: /Audio/Weapons/pierce.ogg - angle: 30 - animation: WeaponArcClaw - attackRate: 1.5 - damage: - types: - # Actually does 3 + 1 damage due to +25% damage bonus on all single target melee attacks - Slash: 2.4 - Poison: 0.8 + - type: Sprite + noRot: true + drawdepth: Mobs + layers: + - map: [ "enum.HumanoidVisualLayers.Chest" ] + - map: [ "enum.HumanoidVisualLayers.Head" ] + - map: [ "enum.HumanoidVisualLayers.Snout" ] + - map: [ "enum.HumanoidVisualLayers.Eyes" ] + - map: [ "enum.HumanoidVisualLayers.RArm" ] + - map: [ "enum.HumanoidVisualLayers.LArm" ] + - map: [ "enum.HumanoidVisualLayers.RLeg" ] + - map: [ "enum.HumanoidVisualLayers.LLeg" ] + - shader: StencilClear + sprite: Mobs/Species/Human/parts.rsi #PJB on stencil clear being on the left leg: "...this is 'fine'" -https://github.com/space-wizards/space-station-14/pull/12217#issuecomment-1291677115 + # its fine, but its still very stupid that it has to be done like this instead of allowing sprites to just directly insert a stencil clear. + # sprite refactor when + state: l_leg + - shader: StencilMask + map: ["enum.HumanoidVisualLayers.StencilMask"] + sprite: Mobs/Customization/masking_helpers.rsi + state: unisex_full + visible: false + - map: ["jumpsuit"] + - map: ["enum.HumanoidVisualLayers.LFoot"] + - map: ["enum.HumanoidVisualLayers.RFoot"] + - map: ["enum.HumanoidVisualLayers.LHand"] + - map: ["enum.HumanoidVisualLayers.RHand"] + - map: [ "id" ] + - map: [ "gloves" ] + - map: [ "shoes" ] + - map: [ "ears" ] + - map: [ "outerClothing" ] + - map: [ "eyes" ] + - map: [ "belt" ] + - map: [ "enum.HumanoidVisualLayers.Tail" ] # Better here? + - map: [ "neck" ] + - map: [ "back" ] + - map: [ "enum.HumanoidVisualLayers.FacialHair" ] + - map: [ "enum.HumanoidVisualLayers.Hair" ] + - map: [ "enum.HumanoidVisualLayers.HeadSide" ] + - map: [ "enum.HumanoidVisualLayers.HeadTop" ] + - map: [ "mask" ] + - map: [ "head" ] + - map: [ "pocket1" ] + - map: [ "pocket2" ] + - map: ["enum.HumanoidVisualLayers.Handcuffs"] + color: "#ffffff" + sprite: Objects/Misc/handcuffs.rsi + state: body-overlay-2 + visible: false + - map: [ "clownedon" ] # Dynamically generated + sprite: "Effects/creampie.rsi" + state: "creampie_human" + visible: false + # Misc + - type: Sericulture + actionProto: SericultureAction + productionLength: 3 + entityProduced: MaterialWebSilk1 + hungerCost: 5 - type: Butcherable butcheringType: Spike spawned: diff --git a/Resources/Prototypes/Entities/Objects/Materials/materials.yml b/Resources/Prototypes/Entities/Objects/Materials/materials.yml index eb28eb5729..05961b355e 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/materials.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/materials.yml @@ -127,7 +127,7 @@ - ReagentId: Fiber Quantity: 5 - type: Tag - tags: + tags: - ClothMade - DroneUsable - Gauze @@ -193,7 +193,7 @@ - ReagentId: Fiber Quantity: 5 - type: Tag - tags: + tags: - ClothMade - DroneUsable - RawMaterial @@ -372,7 +372,7 @@ - ReagentId: Fiber Quantity: 5 - type: Tag - tags: + tags: - ClothMade - DroneUsable - RawMaterial @@ -453,3 +453,42 @@ count: 1 - type: Item size: 2 + +- type: entity + parent: MaterialBase + id: MaterialWebSilk + name: silk + description: A webby material + suffix: Full + components: + - type: PhysicalComposition + materialComposition: + WebSilk: 100 + - type: Sprite + sprite: Objects/Materials/silk.rsi + state: icon + - type: Stack + count: 50 + stackType: WebSilk + - type: Item + size: 50 + +- type: entity + parent: MaterialWebSilk + id: MaterialWebSilk25 + suffix: 25 + components: + - type: Stack + count: 25 + - type: Item + size: 25 + +- type: entity + parent: MaterialWebSilk + id: MaterialWebSilk1 + suffix: 1 + components: + - type: Stack + count: 1 + - type: Item + size: 1 diff --git a/Resources/Prototypes/Entities/Objects/Misc/spider_web.yml b/Resources/Prototypes/Entities/Objects/Misc/spider_web.yml index d0178e70c3..0cba7656cb 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/spider_web.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/spider_web.yml @@ -49,6 +49,11 @@ behaviors: - !type:DoActsBehavior acts: [ "Destruction" ] + - !type:SpawnEntitiesBehavior + spawn: + MaterialWebSilk: + min: 0 + max: 1 - type: Temperature heatDamage: types: diff --git a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml index 819748d58b..f13bb59e67 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml @@ -810,3 +810,19 @@ - type: Stack stackType: FloorTileGratingMaint +- type: entity + name: web tile + parent: FloorTileItemBase + id: FloorTileItemWeb + components: + - type: Sprite + sprite: Objects/Tiles/web.rsi + state: icon + - type: FloorTile + outputs: + - FloorWebTile + - type: Stack + stackType: FloorTileWeb + - type: Construction + graph: TileWeb + node: webtile diff --git a/Resources/Prototypes/Entities/Structures/Furniture/Tables/tables.yml b/Resources/Prototypes/Entities/Structures/Furniture/Tables/tables.yml index bf061c4a74..301b37205c 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/Tables/tables.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/Tables/tables.yml @@ -478,6 +478,35 @@ - !type:DoActsBehavior acts: [ "Destruction" ] +- type: entity + id: TableWeb + parent: TableBase + name: web table + description: Really smooth and surprisingly durable. + components: + - type: Damageable + damageModifierSet: Web + - type: Sprite + sprite: Structures/Furniture/Web/table.rsi + - type: Icon + sprite: Structures/Furniture/Web/table.rsi + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: MeleeSound + soundGroups: + Brute: + path: + "/Audio/Weapons/slash.ogg" + - type: Construction + graph: TableWeb + node: table + - type: entity id: TableDebug parent: TableBase diff --git a/Resources/Prototypes/Entities/Structures/Furniture/beds.yml b/Resources/Prototypes/Entities/Structures/Furniture/beds.yml index 1d37ada25e..3c578192bb 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/beds.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/beds.yml @@ -122,3 +122,31 @@ state: mattress - type: Damageable damageModifierSet: Inflatable + +- type: entity + parent: Bed + id: WebBed + name: web bed + description: You got webbed. + components: + - type: Damageable + damageModifierSet: Web + - type: Sprite + sprite: Structures/Furniture/Web/bed.rsi + state: icon + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/woodhit.ogg + - !type:SpawnEntitiesBehavior + spawn: + MaterialWebSilk: + min: 1 + max: 1 diff --git a/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml b/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml index 3afaaea408..4e84f1fbee 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml @@ -247,6 +247,45 @@ graph: RitualSeat node: chairCursed +- type: entity + name: web chair + id: WebChair + description: For true web developers. + parent: SeatBase + components: + - type: Transform + anchored: true + - type: Physics + bodyType: Static + - type: Anchorable + - type: Rotatable + - type: Sprite + sprite: Structures/Furniture/Web/chair.rsi + state: icon + - type: MeleeSound + soundGroups: + Brute: + path: + "/Audio/Weapons/slash.ogg" + - type: Damageable + damageModifierSet: Web + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/woodhit.ogg + - !type:SpawnEntitiesBehavior + spawn: + MaterialWebSilk: + min: 1 + max: 1 + - type: entity parent: [SeatBase, BaseFoldable] id: ChairFolding diff --git a/Resources/Prototypes/Entities/Structures/Walls/walls.yml b/Resources/Prototypes/Entities/Structures/Walls/walls.yml index 4da0c57273..aef2d6c3bf 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/walls.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/walls.yml @@ -927,6 +927,48 @@ key: walls base: wood +- type: entity + parent: BaseWall + id: WallWeb + name: web wall + description: Keeps the spiders in and the greytide out. + components: + - type: Clickable + - type: MeleeSound + soundGroups: + Brute: + path: + "/Audio/Weapons/slash.ogg" + - type: Damageable + damageModifierSet: Web + - type: Tag + tags: + - Wall + - RCDDeconstructWhitelist + - type: Sprite + sprite: Structures/Walls/web.rsi + - type: Icon + sprite: Structures/Walls/web.rsi + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 30 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:SpawnEntitiesBehavior + spawn: + MaterialWebSilk: + min: 1 + max: 1 + - type: IconSmooth + key: walls + base: wall + - type: Construction + graph: WallWeb + node: wall + # Vault Walls @@ -975,7 +1017,6 @@ sprite: Structures/Walls/vault.rsi state: sandstonevault - # Mime - type: entity diff --git a/Resources/Prototypes/Reagents/Materials/materials.yml b/Resources/Prototypes/Reagents/Materials/materials.yml index f3ddc4d082..1c4b00b906 100644 --- a/Resources/Prototypes/Reagents/Materials/materials.yml +++ b/Resources/Prototypes/Reagents/Materials/materials.yml @@ -76,3 +76,10 @@ icon: { sprite: Objects/Materials/Sheets/meaterial.rsi, state: meat } color: "#c53648" price: 0.05 + +- type: material + id: WebSilk + name: materials-web + icon: { sprite: Objects/Materials/silk.rsi, state: icon } + color: "#eeeeee" #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeee + price: 0 # Maybe better for it to be priceless, knowing how greedy cargo is. diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/web.yml b/Resources/Prototypes/Recipes/Construction/Graphs/web.yml new file mode 100644 index 0000000000..0a9186207e --- /dev/null +++ b/Resources/Prototypes/Recipes/Construction/Graphs/web.yml @@ -0,0 +1,35 @@ +- type: constructionGraph + id: WallWeb + start: start + graph: + - node: start + edges: + - to: wall + completed: + - !type:SnapToGrid + southRotation: true + steps: + - material: WebSilk + amount: 4 + doAfter: 3 + + - node: wall + entity: WallWeb + +- type: constructionGraph + id: TableWeb + start: start + graph: + - node: start + edges: + - to: table + completed: + - !type:SnapToGrid + southRotation: true + steps: + - material: WebSilk + amount: 4 + doAfter: 3 + + - node: table + entity: TableWeb diff --git a/Resources/Prototypes/Recipes/Construction/web.yml b/Resources/Prototypes/Recipes/Construction/web.yml new file mode 100644 index 0000000000..3d0f9cf484 --- /dev/null +++ b/Resources/Prototypes/Recipes/Construction/web.yml @@ -0,0 +1,35 @@ +- type: construction + name: web wall + id: WallWeb + graph: WallWeb + startNode: start + targetNode: wall + category: construction-category-structures + description: A fairly weak yet silky smooth wall. + icon: + sprite: /Textures/Structures/Walls/web.rsi + state: full + objectType: Structure + placementMode: SnapgridCenter + canRotate: false + canBuildInImpassable: false + conditions: + - !type:TileNotBlocked + +- type: construction + name: web table + id: TableWeb + graph: TableWeb + startNode: start + targetNode: table + category: construction-category-structures + description: Essential for any serious web development. + icon: + sprite: /Textures/Structures/Furniture/Web/table.rsi + state: full + objectType: Structure + placementMode: SnapgridCenter + canRotate: false + canBuildInImpassable: false + conditions: + - !type:TileNotBlocked diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/tiles.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/tiles.yml index caff139192..ad62fc08fb 100644 --- a/Resources/Prototypes/Recipes/Crafting/Graphs/tiles.yml +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/tiles.yml @@ -9,7 +9,7 @@ - !type:SetStackCount amount: 4 steps: - - material: Steel + - material: WebSilk amount: 1 - node: steeltile entity: FloorTileItemSteel diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/web.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/web.yml new file mode 100644 index 0000000000..13aa4eb6b4 --- /dev/null +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/web.yml @@ -0,0 +1,15 @@ +- type: constructionGraph + id: TileWeb + start: start + graph: + - node: start + edges: + - to: webtile + completed: + - !type:SetStackCount + amount: 2 + steps: + - material: WebSilk + amount: 1 + - node: webtile + entity: FloorTileItemWeb diff --git a/Resources/Prototypes/Recipes/Crafting/web.yml b/Resources/Prototypes/Recipes/Crafting/web.yml new file mode 100644 index 0000000000..0747806de2 --- /dev/null +++ b/Resources/Prototypes/Recipes/Crafting/web.yml @@ -0,0 +1,10 @@ +- type: construction + name: web tile + id: TileWeb + graph: TileWeb + startNode: start + targetNode: webtile + category: construction-category-tiles + description: "Nice and smooth." + icon: { sprite: Objects/Tiles/web.rsi, state: icon } + objectType: Item diff --git a/Resources/Prototypes/Stacks/Materials/materials.yml b/Resources/Prototypes/Stacks/Materials/materials.yml index f48cc49863..283c64a10b 100644 --- a/Resources/Prototypes/Stacks/Materials/materials.yml +++ b/Resources/Prototypes/Stacks/Materials/materials.yml @@ -69,3 +69,11 @@ spawn: MaterialSheetMeat1 maxCount: 30 itemSize: 1 + +- type: stack + id: WebSilk + name: silk + icon: { sprite: /Textures/Objects/Materials/silk.rsi, state: icon } + spawn: MaterialWebSilk1 + maxCount: 50 + itemSize: 1 diff --git a/Resources/Prototypes/Stacks/floor_tile_stacks.yml b/Resources/Prototypes/Stacks/floor_tile_stacks.yml index deb212f3ad..5b69430500 100644 --- a/Resources/Prototypes/Stacks/floor_tile_stacks.yml +++ b/Resources/Prototypes/Stacks/floor_tile_stacks.yml @@ -368,3 +368,10 @@ spawn: FloorTileItemGratingMaint maxCount: 30 itemSize: 5 + +- type: stack + id: FloorTileWeb + name: web tile + spawn: FloorTileItemWeb + maxCount: 30 + itemSize: 5 diff --git a/Resources/Prototypes/Tiles/floors.yml b/Resources/Prototypes/Tiles/floors.yml index 7e76b18599..6efef85de8 100644 --- a/Resources/Prototypes/Tiles/floors.yml +++ b/Resources/Prototypes/Tiles/floors.yml @@ -1438,6 +1438,20 @@ itemDrop: MaterialWoodPlank1 heatCapacity: 10000 +- type: tile + id: FloorWebTile + name: tiles-web + sprite: /Textures/Tiles/Misc/Web/web_tile.png + baseTurf: Plating + isSubfloor: false + canCrowbar: true + footstepSounds: + collection: FootstepCarpet + barestepSounds: + collection: BarestepCarpet + itemDrop: FloorTileItemWeb + heatCapacity: 10000 + #Hull tiles - type: tile id: FloorHull diff --git a/Resources/Textures/Objects/Materials/silk.rsi/icon.png b/Resources/Textures/Objects/Materials/silk.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..648f370a54048c8d88f5c473215c1f3cabd4c1ad GIT binary patch literal 391 zcmV;20eJq2P)lH#(-9!WcO8vEG5joV32pCeluIpxI5D_qQ0g!=%14TqKGlPh* zEXz>ut^)vIW+0+Q9$au@0LaW-_OVP0aNEtS5K#v3%LOL}03ym}c8KH80-W3l-HB%i zlV@fg7SVNJZ+mc}Mc|WT7e}u*0DO-WMIiuM9Musge-=*{rzcfaw==t|2)`Alv3T9p zez?3UHA9~$P8JxR*F;AHs}06Coe=14_bN>dJ` zlpf67roUP;;ffBEcLhWd;k3s%8etVth-jD`_y_NT?jBIp&70LT5tmGJVsE>uZX+&y l{Ci*u@Ax9RapT6v@dM#eCDSh>)QbQB002ovPDHLkV1m%dplSdB literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Materials/silk.rsi/meta.json b/Resources/Textures/Objects/Materials/silk.rsi/meta.json new file mode 100644 index 0000000000..5ac5189bae --- /dev/null +++ b/Resources/Textures/Objects/Materials/silk.rsi/meta.json @@ -0,0 +1,12 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by PixelTheKermit (github) for SS14", + "size": {"x": 32, "y": 32}, + "states": + [ + { + "name": "icon" + } + ] +} diff --git a/Resources/Textures/Objects/Tiles/web.rsi/icon.png b/Resources/Textures/Objects/Tiles/web.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e039f001337155981104526bdb1bb229402510b2 GIT binary patch literal 302 zcmV+}0nz@6P)Nkl% zB>(`Dl?W?vB=Qsi0O?A2rmdMf_omtKs)T2*s@Y~dT>!vmC73zcptWST$hxlEkJrQvap0d|2N!Jp1**!Qj_qgd3;0@>9PDIs*PKu^&7&hEb z&w(&==l#8>5>*0@wp!^fsNwS4@bdqG!C-JXPi$(qY*U8I8UO$Q07*qoM6N<$f(o92 Ap#T5? literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Tiles/web.rsi/meta.json b/Resources/Textures/Objects/Tiles/web.rsi/meta.json new file mode 100644 index 0000000000..3be76cef96 --- /dev/null +++ b/Resources/Textures/Objects/Tiles/web.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by PixelTheKermit (github) for SS14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + } + ] +} diff --git a/Resources/Textures/Structures/Furniture/Web/bed.rsi/icon.png b/Resources/Textures/Structures/Furniture/Web/bed.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..18aef2ee51ab269a3640fd28d63135c686b22a93 GIT binary patch literal 491 zcmVP0#sJVkDu(Go-Ha0?NoMI?V#yFFhAX}`=f{wdc z7OLfKhIgKCe)#4OXw|A!t5&W4yR4=M5JF@{-|zQJV_K%5Iwhq9=N!K80|2_+ZfO#> z5F(4?7`NLEaU6pXf})pFq6!C~%Up~x5JE~nYzZMULWmAhO2Kg)?eF(HY}@`dPtz2H z5F;;U!3KaZ455@l7=~~hr{u5KYbBodYvM)OMU$^nUOuZXZkzyP42-dt@2dP+rZ&K1 z4@fC>MX%Sx<#PG6cU>1!N+VCxRPTWf0C3KAfaiH79|S=qJ|2(3IX80Gb+zvRUu#oL zQE|Ph@Vq{XA}FOa_dKr@W1AZ0`fg2s;)lZl>-GADE2WSmiS{q|K-F{q%%dm*@Ocv! zQ$8FHaXz0B1i|MXNRkBm{T{yWgE5BLY=-T2tNmm$!SQ&kjSmKcQl@O6`E&n{1As*- z&F1s@+khst*=(>}E-m2k8d6Fddksy>2L~R<5C9g71$Mg~PN!2Tpbk+=v(adT>2!+K hYV|&-$xOWK{{yNloh=B$cnAOh002ovPDHLkV1h=<)kFXQ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Furniture/Web/bed.rsi/meta.json b/Resources/Textures/Structures/Furniture/Web/bed.rsi/meta.json new file mode 100644 index 0000000000..0699682b97 --- /dev/null +++ b/Resources/Textures/Structures/Furniture/Web/bed.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "", + "states": [ + { + "name": "icon" + } + ] +} diff --git a/Resources/Textures/Structures/Furniture/Web/chair.rsi/icon.png b/Resources/Textures/Structures/Furniture/Web/chair.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b1fb28b09d0760a26b589a5d4507881daa3ecdbd GIT binary patch literal 967 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 KMNUMnLSTZGvK^cN literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Furniture/Web/table.rsi/state_6.png b/Resources/Textures/Structures/Furniture/Web/table.rsi/state_6.png new file mode 100644 index 0000000000000000000000000000000000000000..786e798c3ea02cced3480498d93c05b6ad4db89c GIT binary patch literal 652 zcmV;70(1R|P)L_tL=s&tW%`2BQ9?ov^OhR#idD9ILkv&x~%Zk(|_Bi653A>r8b zJTV?8n}JE+_pJ6=mH_~|uIrnoL0Oh)+jjJCRaO7AU$560r~d_~@jH+NNDn|7RRYSg zgfS*+pQ;1^Kv5J?MW_=%#1f%a06`+!wheN9^#VepUVydsYaxj`ww*FqdDS0ZD-L0Hld3z!(#3OFNe+ z0x0mJC}MQyL{I^m11J83xM;}g%{OTg3~^D~@K|d@T;3}|GoY?(^&+C&0-8lcT?0sj zCek7(JpgHby#V%k0GD(gAPjpe{CXlZ1JNvG3uu}K0G#*!^mBMT9=Stc!4^P)8)GI{ zeb(CO=l^4{1<*{=Q(V_}+wGP+1Qy;h0GO5qnr0vHm;u1_EEu+Vs|*0X&jM|;4|vW1 z;O8uO{r=l!0D#f=dbG_x5Fi5pjNStO`>u2bcz-tN%4)S@jUm+nOp*ZU0Z7AM1iA0) z-)^@)&-1UM3K%b}hKp!bRk+{p0COD^KM?7A`xh5*xm>W{?`OB=A}(OLT;h7Y&Th*^T)=L(1Mqn(xbS>Fz4R|GfC4`p m4o*9|^ZCquAd^TW68Hd;CH}ilfN-7w0000V7P5FAI8bbNpZT<53z9d!4At=!SkJ4G~?%^u5{$d{zZNGD`rc83{Q;Bvd&9srP1 zLe3d6Mzq!-B6uZi>{=@TAoP-Rz^l<(LyU2YU28?q$pLKbnb0II_xt^!lTv{*lj~f8 zvg>wTS2qB?^N><<`<7+d$+}#{0_Xe!-?ts)*6C{>;`Ei?2ND1>ySVx<;(As zk~<+0`PcIvmo()?5 zBiW}3SUY-K)%J~K9}>_q+w*{uw${2kN4FY`)g$#bVpnU0h-{vZ%C+s&NkG?7#p3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/web.rsi/meta.json b/Resources/Textures/Structures/Walls/web.rsi/meta.json new file mode 100644 index 0000000000..f30b2eba61 --- /dev/null +++ b/Resources/Textures/Structures/Walls/web.rsi/meta.json @@ -0,0 +1,46 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "", + "states": [ + { + "name": "wall0", + "directions": 4 + }, + { + "name": "wall1", + "directions": 4 + }, + { + "name": "wall2", + "directions": 4 + }, + { + "name": "wall3", + "directions": 4 + }, + { + "name": "wall4", + "directions": 4 + }, + { + "name": "wall5", + "directions": 4 + }, + { + "name": "wall6", + "directions": 4 + }, + { + "name": "wall7", + "directions": 4 + }, + { + "name": "full" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Walls/web.rsi/wall0.png b/Resources/Textures/Structures/Walls/web.rsi/wall0.png new file mode 100644 index 0000000000000000000000000000000000000000..12426cbb8ef7c2e8ab1fca8f4655c45d696d507f GIT binary patch literal 802 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/web.rsi/wall5.png b/Resources/Textures/Structures/Walls/web.rsi/wall5.png new file mode 100644 index 0000000000000000000000000000000000000000..7b1cb7cd0cc42ff58bf3002612ba7c07e79201fe GIT binary patch literal 697 zcmV;q0!ICbP)1 zF_I%84D7wyka98~-~nVjz;B<#8QDBwK0x9k-wUqT!x+4?i=bJ%BYVnKlzJptEr~af zak*SRwAN5cA%pXngu!m&N=G&bOM%TxqIfl2LM=WvG04=^XUY9l>}2VwrztkMl@{b1e8L+T087~ zIsv5+*!TVO&G!bKfFpH4ER=eHPC)HnAPs|95lY8D05p}661ZNkAEoEpw%vTsjh8Bg z=^jvfqsEv+ziS1ZfEpedESV4J1hBOLT@A9)oCIr0>?m53SSw!M14MHGTiX5vVg%&I z=gDnWa=QErD5Z*p%#08xAR6zzzbR+eb(KC!1fm2)<73&HHZw*_-0z@E2t?yYN!k{4 zuLN^dHyehO!Z8$P3cczz{JMm0@WR%0`!dKx%YMbaC5j zHVg@YX!vaI4-67Rz&{Uo`Vfdn6=1}S?hkb82W;C0rPPhlGrB(@I2y}m_ea~}?9o`a zrs$~oek;TXh|A6qvl^U3ybkznczHQI?UK|{{QCO>Y|wXvev&MoYDubwNBadK1Thlm z1k?=qYEe=ObOLI71F4qC$L^A#6HuEJr7d%5@t2`CLrt+m6N zD0Bi!ArRm6h#mr+fRbCM4bEnRoy;w!FW*dE)_?vav+$>Ez0$rg3$^ool`+mJ<8;beuWkT)@mY zjxVh>hG9UA5#D=ftuaj#lv1nD#u&sH0RY1=006Gn>xFXt5Bd;}O&7o&05{?Ugb?7p zhqboJ^~4ES(n5x40ZT#%aL#>K|56-AKrOle?f|$sjDU0{SPIbsmP_GUh!fCa&`ZP# zXiXQu9RN3^UK#+N&*uxks!w;$A%p;HExh-u&uQ;}zu(C*P&j=CbOGD}aMMJfUVI$K7v=Zd&jUWGC(v3K2!ju@fYN()tsx62y;0E`vH>iAtJC~Ym!yaq_C z8Ds(J4$ixm8Cvc5?1d~KP3hmB0x6}=Jq4ttKTu%`0QqSkE&YKCQvleW1`^XBD7ZD2 z;+$I@8)G(qPkq&uO0|VhI$)^_CbEDWQU{!J`d*+v58w_US48*H|1UtKS`pj}cd=v_ zkRvUwwM4NC$lXQuE~Kci3rGh#lP;xm-=o4VV5@bu)^2u=HJT~*+u-Bz_;DLdAG6JD zNx9u_q%p8(z}8?}zG1>HARTNj{bx!~194Lzm;N)UoPRe3TEAc=E(89`;WL1{on{ws f`d;8&(W}iDw6@;T^(6nO00000NkvXXu0mjfBasD` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/web.rsi/wall7.png b/Resources/Textures/Structures/Walls/web.rsi/wall7.png new file mode 100644 index 0000000000000000000000000000000000000000..9cd950af77b2cef05ffa2e85b45574ef94c2a281 GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=+dN$yLn`LHy>*b&*^uWzz<<68 zf1jUWdMjXO^J4ltHpLpllg2Zu-E! z=zlt$QVzoq-}kXBOa9!KTCGN!rktOj(`vN{!;pHtUeKx6>x5xQtJUKC{G2pRsnu!) zoqhizsA{!}nx-ith%gLs97h^Cj)SIY%;$4#+a^g8@;s+fsh}uIK_}01k|dFOwOWnM zW+Qck>}SMr97?}_{rWhJOejvLQ|9xz{4Ua)rYX&4larGZmdhoh(MWz5WeUTPv$HdP z{P&8X7~MAmPIKDf)5U4y;jD3joz>l{k)N0AvDSu*>1OJn#SGT z9jB+K+}_^O>-9K0J1h9{eV?bNrvj{00U6u284ibdo+phg%ffYC`u#rLZkHekh@yzg z%S%2!K3k_;E>o}9d47Jz^E?`j26uON+}zx-TCEV}6+yIGEs`YR_4Sobr-Q2NdI2)R z2w=5Zp(qNA#eyIRXfzr!z3cTF0Mj%v41@W6PNUHv2m%(1MZuSN9>NMh^?je=a46F< znM~xCs#Gf6-`}I_I#Cp{TrTGgU?A=B&iXtUS6`< zY*1CTpd(<_>2&Zsk01zugKfCm?WD4*s_b?sjv0+cviqmg zDNz(rDwQxzQ^M-;@e#u?czk@6kTFe@QmI4~MNFqt7K;Unq7?jUnucxL{|C|GBy-q^ z0y59f&&=m@37M0V6RGnZSP8#kSBWiKKAdD+*TpnV;FIm0PKP|t@jQ=iw@bg@=j!ST z+qQwvGvey%O2W$XJn}rJ)9H|98Su#pag^^*RyQ{{sE2S6iwi?t*Eu~sEkGto5=p|< zYDJc1Utp!{y7VQUhtLC158)ur0>^O>_WS!gQ4}48)!Eq@j^hx=F`LbX zL+Cv`JW$TE4A*sOx7&Z5WO}_G&1REsw|f*a0#@B_mu9p1M_7enNW0y}bzNDWe?AZV z^NC0mvzn-tNSEU{sH#f8-+CbclZ?oUq9}Aa9q#Y%3zJp5-TrbjIt-%O zY<}Jg_CLmPENc|UF|*mMFv;k;PL^c_oh-|~KxQ_Z6?Eb_mR#AtiU28AaU2}SVKf?XOvIT0@bK_( qR3``mZf