]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Arachnid 2: Episode 2 (#19984)
authorPixelTK <85175107+PixelTheKermit@users.noreply.github.com>
Wed, 8 Nov 2023 20:18:52 +0000 (20:18 +0000)
committerGitHub <noreply@github.com>
Wed, 8 Nov 2023 20:18:52 +0000 (12:18 -0800)
* Shield

* minor sprite changes and buffs

* structure buff

* Crafting stuff

* tweaks

* 88-88

* Better web pocket sprites.

* yeah it's fine now.

25 files changed:
Content.Client/Construction/UI/ConstructionMenuPresenter.cs
Content.Server/Construction/ConstructionSystem.Initial.cs
Content.Shared/Construction/Conditions/EntityWhitelistCondition.cs [new file with mode: 0644]
Content.Shared/Construction/Prototypes/ConstructionPrototype.cs
Resources/Locale/en-US/construction/conditions/crafter-whitelist.ftl [deleted file]
Resources/Locale/en-US/construction/construction-system.ftl
Resources/Prototypes/Damage/modifier_sets.yml
Resources/Prototypes/Entities/Mobs/Species/arachnid.yml
Resources/Prototypes/Entities/Objects/Shields/shields.yml
Resources/Prototypes/Entities/Structures/Walls/walls.yml
Resources/Prototypes/InventoryTemplates/arachnid_inventory_template.yml [new file with mode: 0644]
Resources/Prototypes/Recipes/Construction/web.yml
Resources/Prototypes/Recipes/Crafting/Graphs/web.yml
Resources/Prototypes/Recipes/Crafting/web.yml
Resources/Prototypes/tags.yml
Resources/Textures/Interface/Classic/Slots/web.png [new file with mode: 0644]
Resources/Textures/Interface/Default/Slots/web.png
Resources/Textures/Interface/Modernized/Slots/web.png [new file with mode: 0644]
Resources/Textures/Mobs/Customization/Arachnid/chelicerae.rsi/downwards.png
Resources/Textures/Mobs/Species/Arachnid/parts.rsi/eyes.png
Resources/Textures/Objects/Materials/silk.rsi/icon.png
Resources/Textures/Objects/Weapons/Melee/web-shield.rsi/icon-inhand-left.png [new file with mode: 0644]
Resources/Textures/Objects/Weapons/Melee/web-shield.rsi/icon-inhand-right.png [new file with mode: 0644]
Resources/Textures/Objects/Weapons/Melee/web-shield.rsi/icon.png [new file with mode: 0644]
Resources/Textures/Objects/Weapons/Melee/web-shield.rsi/meta.json [new file with mode: 0644]

index cdc9044a40f88aa40f0dea6c20b6326f9ea2b9de..28cf3ba16c0d54bfdc5f6b996404e6947c023985 100644 (file)
@@ -1,9 +1,11 @@
 using System.Linq;
 using Content.Client.UserInterface.Systems.MenuBar.Widgets;
 using Content.Shared.Construction.Prototypes;
+using Content.Shared.Tag;
 using Robust.Client.GameObjects;
 using Robust.Client.Graphics;
 using Robust.Client.Placement;
+using Robust.Client.Player;
 using Robust.Client.UserInterface;
 using Robust.Client.UserInterface.Controls;
 using Robust.Client.Utility;
@@ -25,6 +27,7 @@ namespace Content.Client.Construction.UI
         [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
         [Dependency] private readonly IPlacementManager _placementManager = default!;
         [Dependency] private readonly IUserInterfaceManager _uiManager = default!;
+        [Dependency] private readonly IPlayerManager _playerManager = default!;
 
         private readonly IConstructionMenuView _constructionView;
 
@@ -152,6 +155,11 @@ namespace Content.Client.Construction.UI
                 if (recipe.Hide)
                     continue;
 
+                if (_playerManager.LocalSession == null
+                || _playerManager.LocalEntity == null
+                || (recipe.EntityWhitelist != null && !recipe.EntityWhitelist.IsValid(_playerManager.LocalEntity.Value)))
+                    continue;
+
                 if (!string.IsNullOrEmpty(search))
                 {
                     if (!recipe.Name.ToLowerInvariant().Contains(search.Trim().ToLowerInvariant()))
index 21978f2d0cb2a23b4a012a7a1bb90af72cb96f3a..f3123087988725b4114619ca0c8ab86b87d99fa0 100644 (file)
@@ -15,6 +15,7 @@ using Content.Shared.Hands.EntitySystems;
 using Content.Shared.Interaction;
 using Content.Shared.Inventory;
 using Content.Shared.Storage;
+using Content.Shared.Tag;
 using Robust.Shared.Containers;
 using Robust.Shared.Player;
 using Robust.Shared.Timing;
@@ -29,6 +30,8 @@ namespace Content.Server.Construction
         [Dependency] private readonly ActionBlockerSystem _actionBlocker = default!;
         [Dependency] private readonly SharedHandsSystem _handsSystem = default!;
         [Dependency] private readonly EntityLookupSystem _lookupSystem = default!;
+        [Dependency] private readonly StorageSystem _storageSystem = default!;
+        [Dependency] private readonly TagSystem _tagSystem = default!;
 
         // --- WARNING! LEGACY CODE AHEAD! ---
         // This entire file contains the legacy code for initial construction.
@@ -330,6 +333,12 @@ namespace Content.Server.Construction
                 return false;
             }
 
+            if (constructionPrototype.EntityWhitelist != null && !constructionPrototype.EntityWhitelist.IsValid(user))
+            {
+                _popup.PopupEntity(Loc.GetString("construction-system-cannot-start"), user, user);
+                return false;
+            }
+
             var startNode = constructionGraph.Nodes[constructionPrototype.StartNode];
             var targetNode = constructionGraph.Nodes[constructionPrototype.TargetNode];
             var pathFind = constructionGraph.Path(startNode.Name, targetNode.Name);
@@ -383,7 +392,6 @@ namespace Content.Server.Construction
         // LEGACY CODE. See warning at the top of the file!
         private async void HandleStartStructureConstruction(TryStartStructureConstructionMessage ev, EntitySessionEventArgs args)
         {
-
             if (!_prototypeManager.TryIndex(ev.PrototypeName, out ConstructionPrototype? constructionPrototype))
             {
                 _sawmill.Error($"Tried to start construction of invalid recipe '{ev.PrototypeName}'!");
@@ -404,6 +412,12 @@ namespace Content.Server.Construction
                 return;
             }
 
+            if (constructionPrototype.EntityWhitelist != null && !constructionPrototype.EntityWhitelist.IsValid(user))
+            {
+                _popup.PopupEntity(Loc.GetString("construction-system-cannot-start"), user, user);
+                return;
+            }
+
             if (_container.IsEntityInContainer(user))
             {
                 _popup.PopupEntity(Loc.GetString("construction-system-inside-container"), user, user);
diff --git a/Content.Shared/Construction/Conditions/EntityWhitelistCondition.cs b/Content.Shared/Construction/Conditions/EntityWhitelistCondition.cs
new file mode 100644 (file)
index 0000000..22d86b5
--- /dev/null
@@ -0,0 +1,45 @@
+using Content.Shared.Construction.EntitySystems;
+using Content.Shared.Whitelist;
+using Robust.Shared.Map;
+using Robust.Shared.Utility;
+
+namespace Content.Shared.Construction.Conditions;
+
+/// <summary>
+///   A check to see if the entity itself can be crafted.
+/// </summary>
+[DataDefinition]
+public sealed partial class EntityWhitelistCondition : IConstructionCondition
+{
+    /// <summary>
+    /// What is told to the player attempting to construct the recipe using this condition. This will be localised.
+    /// </summary>
+    [DataField("conditionString")]
+    public string ConditionString = "construction-step-condition-entity-whitelist";
+
+    /// <summary>
+    /// The icon shown to the player beside the condition string.
+    /// </summary>
+    [DataField("conditionIcon")]
+    public SpriteSpecifier? ConditionIcon = null;
+
+    /// <summary>
+    /// The whitelist that allows only certain entities to use this.
+    /// </summary>
+    [DataField("whitelist", required: true)]
+    public EntityWhitelist Whitelist = new();
+
+    public bool Condition(EntityUid user, EntityCoordinates location, Direction direction)
+    {
+        return Whitelist.IsValid(user);
+    }
+
+    public ConstructionGuideEntry GenerateGuideEntry()
+    {
+        return new ConstructionGuideEntry
+        {
+            Localization = ConditionString,
+            Icon = ConditionIcon
+        };
+    }
+}
index bd6dc096adda80860da3ed423cd2472ffdb79462..e9863f83641caac0ebbd40d19c2c8300cec9971a 100644 (file)
@@ -1,4 +1,5 @@
 using Content.Shared.Construction.Conditions;
+using Content.Shared.Whitelist;
 using Robust.Shared.Prototypes;
 using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
 using Robust.Shared.Utility;
@@ -20,7 +21,7 @@ public sealed partial class ConstructionPrototype : IPrototype
     ///     Friendly name displayed in the construction GUI.
     /// </summary>
     [DataField("name")]
-    public string Name= string.Empty;
+    public string Name = string.Empty;
 
     /// <summary>
     ///     "Useful" description displayed in the construction GUI.
@@ -31,7 +32,7 @@ public sealed partial class ConstructionPrototype : IPrototype
     /// <summary>
     ///     The <see cref="ConstructionGraphPrototype"/> this construction will be using.
     /// </summary>
-    [DataField("graph", customTypeSerializer:typeof(PrototypeIdSerializer<ConstructionGraphPrototype>), required: true)]
+    [DataField("graph", customTypeSerializer: typeof(PrototypeIdSerializer<ConstructionGraphPrototype>), required: true)]
     public string Graph = string.Empty;
 
     /// <summary>
@@ -64,6 +65,13 @@ public sealed partial class ConstructionPrototype : IPrototype
     [DataField("canBuildInImpassable")]
     public bool CanBuildInImpassable { get; private set; }
 
+    /// <summary>
+    /// If not null, then this is used to check if the entity trying to construct this is whitelisted.
+    /// If they're not whitelisted, hide the item.
+    /// </summary>
+    [DataField("entityWhitelist")]
+    public EntityWhitelist? EntityWhitelist = null;
+
     [DataField("category")] public string Category { get; private set; } = "";
 
     [DataField("objectType")] public ConstructionType Type { get; private set; } = ConstructionType.Structure;
@@ -84,11 +92,11 @@ public sealed partial class ConstructionPrototype : IPrototype
     /// <summary>
     ///     Construction to replace this construction with when the current one is 'flipped'
     /// </summary>
-    [DataField("mirror", customTypeSerializer:typeof(PrototypeIdSerializer<ConstructionPrototype>))]
+    [DataField("mirror", customTypeSerializer: typeof(PrototypeIdSerializer<ConstructionPrototype>))]
     public string? Mirror;
 
     public IReadOnlyList<IConstructionCondition> Conditions => _conditions;
-    public IReadOnlyList<SpriteSpecifier> Layers => _layers ?? new List<SpriteSpecifier>{Icon};
+    public IReadOnlyList<SpriteSpecifier> Layers => _layers ?? new List<SpriteSpecifier> { Icon };
 }
 
 public enum ConstructionType
diff --git a/Resources/Locale/en-US/construction/conditions/crafter-whitelist.ftl b/Resources/Locale/en-US/construction/conditions/crafter-whitelist.ftl
deleted file mode 100644 (file)
index 646d89c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-construction-step-condition-crafter-whitelist = You need to meet certain requirements.
index 6ba8ae781348b830bfdf8f821903dfdfa55d37e1..81be8c4ab29d4d3e66703da11be51e9d6c31cebc 100644 (file)
@@ -4,3 +4,4 @@ construction-system-construct-cannot-start-another-construction = You can't star
 construction-system-construct-no-materials = You don't have the materials to build that!
 construction-system-already-building = You are already building that!
 construction-system-inside-container = You can't build while you're there!
+construction-system-cannot-start = You cannot craft this!
index 8ab45c8b63aaf47a96a64e4df965e0a7166313ec..d651373edeeff4bbc9aa3e6689b3c68f19c4e1f2 100644 (file)
@@ -95,9 +95,9 @@
   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
+    Slash: 1.4
     Piercing: 0.7
-    Heat: 3.0
+    Heat: 2.0
 
 - type: damageModifierSet
   id: Slime
index a996a73127bd7316c84e9eccd59e29d819c3d3ce..244631509c72398c594a4183b77a6331724f8391 100644 (file)
   - type: HumanoidAppearance
     species: Arachnid
   - type: Hunger
-    baseDecayRate: 0.0125 # Spiders have slow metabolisms all things considered, so I decided to just make their hunger drain slower.
     starvationDamage:
       types:
         Cold: 0.5
         Bloodloss: 0.5
   - type: Thirst
-    baseDecayRate: 0.0125 # Read comment in hunger
-  # Damage (Self)
-  - type: Bloodstream
-    bloodReagent: CopperBlood
-  # Damage (Others)
-  - type: MeleeWeapon
-    animation: WeaponArcClaw
-    soundHit:
-      collection: AlienClaw
-    damage:
-      types: # Realisically this is more like 5 slash
-        Slash: 4
-  # Fun
   - type: Sericulture
     action: ActionSericulture
-    productionLength: 3
+    productionLength: 2
     entityProduced: MaterialWebSilk1
-    hungerCost: 9 # Should total to 12 total silk on full hunger
+    hungerCost: 4 # Should total to 25 total silk on full hunger
+  - type: Tag
+    tags:
+    - CanPilot
+    - FootstepSound
+    - DoorBumpOpener
+    - SpiderCraft
   - type: Perishable
   - type: Butcherable
     butcheringType: Spike
     spawned:
       - id: FoodMeatSpider
         amount: 5
+  - type: Inventory
+    templateId: arachnid
+  # Damage (Self)
+  - type: Bloodstream
+    bloodReagent: CopperBlood
+  # Damage (Others)
+  - type: MeleeWeapon
+    animation: WeaponArcClaw
+    soundHit:
+      collection: AlienClaw
+    damage:
+      types:
+        Slash: 5
   # Visual & Audio
   - type: DamageVisuals
     damageOverlayGroups:
@@ -93,7 +98,7 @@
       - map: [ "neck" ]
       - map: [ "back" ]
       - map: [ "enum.HumanoidVisualLayers.FacialHair" ]
-      - map: [ "enum.HumanoidVisualLayers.Hair" ]
+      - map: [ "enum.HumanoidVisualLayers.Hair" ] # Do these need to be here? (arachnid hair arachnid hair)
       - map: [ "enum.HumanoidVisualLayers.HeadSide" ]
       - map: [ "enum.HumanoidVisualLayers.HeadTop" ]
       - map: [ "mask" ]
         sprite: "Effects/creampie.rsi"
         state: "creampie_arachnid"
         visible: false
-  - type: Tag
-    tags:
-    - CanPilot
-    - FootstepSound
-    - DoorBumpOpener
 
 - type: entity
   parent: BaseSpeciesDummy
index c3e3ea44ead7e35c7e3bcdc00ed52fe4465d8460..4596085f341babae40655e2df5957cd6249bd421 100644 (file)
                   min: 1
                   max: 2
 
+- type: entity
+  name: web shield
+  parent: BaseShield
+  id: WebShield
+  description: A stringy shield. It's weak, and doesn't seem to do well against heat.
+  components:
+    - type: Sprite
+      sprite: Objects/Weapons/Melee/web-shield.rsi
+      state: icon
+    - type: Item
+      sprite: Objects/Weapons/Melee/web-shield.rsi
+      heldPrefix: icon
+    - type: Blocking
+      passiveBlockModifier:
+        coefficients:
+          Blunt: 0.95
+          Slash: 0.95
+          Piercing: 0.95
+      activeBlockModifier:
+        coefficients:
+          Blunt: 0.85
+          Slash: 0.85
+          Piercing: 0.85
+        flatReductions:
+          Blunt: 0.5
+          Slash: 0.5
+          Piercing: 0.5
+    - type: Construction
+      graph: WebObjects
+      node: shield
+    - type: Destructible
+      thresholds:
+        - trigger:
+            !type:DamageTrigger
+            damage: 40
+          behaviors:
+            - !type:DoActsBehavior
+              acts: [ "Destruction" ]
+        - trigger:
+            !type:DamageTrigger
+            damage: 20
+          behaviors:
+            - !type:DoActsBehavior
+              acts: [ "Destruction" ]
+            - !type:SpawnEntitiesBehavior
+              spawn:
+                MaterialWebSilk:
+                  min: 1
+                  max: 1
+            - !type:PlaySoundBehavior
+              sound:
+                path: /Audio/Effects/woodhit.ogg
+
 #Magic/Cult Shields (give these to wizard for now)
 
 - type: entity
index a78565b1d5e99b9aa070660d5379736544cef54a..9059fd06d7f0e8509293881d3b55e1f6e5839eec 100644 (file)
           MaterialWebSilk:
             min: 1
             max: 1
+      - !type:PlaySoundBehavior
+        sound:
+          path: /Audio/Effects/woodhit.ogg
   - type: IconSmooth
     key: walls
     base: wall
diff --git a/Resources/Prototypes/InventoryTemplates/arachnid_inventory_template.yml b/Resources/Prototypes/InventoryTemplates/arachnid_inventory_template.yml
new file mode 100644 (file)
index 0000000..0ebbdb9
--- /dev/null
@@ -0,0 +1,134 @@
+- type: inventoryTemplate
+  id: arachnid
+  slots:
+    - name: shoes
+      slotTexture: shoes
+      slotFlags: FEET
+      stripTime: 3
+      uiWindowPos: 1,3
+      strippingWindowPos: 1,3
+      displayName: Shoes
+    - name: jumpsuit
+      slotTexture: uniform
+      slotFlags: INNERCLOTHING
+      stripTime: 6
+      uiWindowPos: 0,2
+      strippingWindowPos: 0,2
+      displayName: Jumpsuit
+    - name: gloves
+      slotTexture: gloves
+      slotFlags: GLOVES
+      uiWindowPos: 2,2
+      strippingWindowPos: 2,2
+      displayName: Gloves
+    - name: neck
+      slotTexture: neck
+      slotFlags: NECK
+      uiWindowPos: 0,1
+      strippingWindowPos: 0,1
+      displayName: Neck
+    - name: mask
+      slotTexture: mask
+      slotFlags: MASK
+      uiWindowPos: 1,1
+      strippingWindowPos: 1,1
+      displayName: Mask
+    - name: eyes
+      slotTexture: glasses
+      slotFlags: EYES
+      stripTime: 3
+      uiWindowPos: 0,0
+      strippingWindowPos: 0,0
+      displayName: Eyes
+    - name: ears
+      slotTexture: ears
+      slotFlags: EARS
+      stripTime: 3
+      uiWindowPos: 2,0
+      strippingWindowPos: 2,0
+      displayName: Ears
+    - name: head
+      slotTexture: head
+      slotFlags: HEAD
+      uiWindowPos: 1,0
+      strippingWindowPos: 1,0
+      displayName: Head
+    - name: suitstorage
+      slotTexture: suit_storage
+      slotFlags:   SUITSTORAGE
+      stripTime: 3
+      uiWindowPos: 2,0
+      strippingWindowPos: 2,5
+      dependsOn: outerClothing
+      displayName: Suit Storage
+    - name: id
+      slotTexture: id
+      slotFlags: IDCARD
+      slotGroup: SecondHotbar
+      stripTime: 6
+      uiWindowPos: 2,1
+      strippingWindowPos: 2,4
+      dependsOn: jumpsuit
+      displayName: ID
+    - name: belt
+      slotTexture: belt
+      slotFlags: BELT
+      slotGroup: SecondHotbar
+      stripTime: 6
+      uiWindowPos: 3,1
+      strippingWindowPos: 1,5
+      displayName: Belt
+    - name: back
+      slotTexture: back
+      slotFlags: BACK
+      slotGroup: SecondHotbar
+      stripTime: 6
+      uiWindowPos: 3,0
+      strippingWindowPos: 0,5
+      displayName: Back
+
+    - name: pocket4
+      slotTexture: web
+      slotFlags: POCKET
+      slotGroup: MainHotbar
+      stripTime: 3
+      uiWindowPos: 2,4
+      strippingWindowPos: 1,5
+      displayName: Pocket 4
+    - name: pocket3
+      slotTexture: web
+      slotFlags: POCKET
+      slotGroup: MainHotbar
+      stripTime: 3
+      uiWindowPos: 0,4
+      strippingWindowPos: 0,5
+      displayName: Pocket 3
+
+    - name: outerClothing
+      slotTexture: suit
+      slotFlags: OUTERCLOTHING
+      slotGroup: SecondHotbar
+      stripTime: 6
+      uiWindowPos: 1,2
+      strippingWindowPos: 1,2
+      displayName: Suit
+    - name: pocket1
+      slotTexture: pocket
+      slotFlags: POCKET
+      slotGroup: MainHotbar
+      stripTime: 3
+      uiWindowPos: 0,3
+      strippingWindowPos: 0,4
+      dependsOn: jumpsuit
+      displayName: Pocket 1
+      stripHidden: true
+    - name: pocket2
+      slotTexture: pocket
+      slotFlags: POCKET
+      slotGroup: MainHotbar
+      stripTime: 3
+      uiWindowPos: 2,3
+      strippingWindowPos: 1,4
+      dependsOn: jumpsuit
+      displayName: Pocket 2
+      stripHidden: true
index 2d61ac151583e4131b31e3f2df0f0336ca9e081d..9a0d832d012d9dbe778df8e2b6d177a5ba2e06fc 100644 (file)
@@ -13,6 +13,9 @@
   placementMode: SnapgridCenter
   canRotate: false
   canBuildInImpassable: false
+  entityWhitelist:
+    tags:
+    - SpiderCraft
   conditions:
     - !type:TileNotBlocked
 
@@ -31,6 +34,9 @@
   placementMode: SnapgridCenter
   canRotate: false
   canBuildInImpassable: false
+  entityWhitelist:
+    tags:
+    - SpiderCraft
   conditions:
     - !type:TileNotBlocked
 
@@ -49,6 +55,9 @@
   placementMode: SnapgridCenter
   canRotate: false
   canBuildInImpassable: false
+  entityWhitelist:
+    tags:
+    - SpiderCraft
   conditions:
     - !type:TileNotBlocked
 
@@ -66,6 +75,9 @@
   objectType: Structure
   placementMode: SnapgridCenter
   canBuildInImpassable: false
+  entityWhitelist:
+    tags:
+    - SpiderCraft
 
 - type: construction
   name: web crate
@@ -82,6 +94,9 @@
   placementMode: SnapgridCenter
   canRotate: false
   canBuildInImpassable: false
+  entityWhitelist:
+    tags:
+    - SpiderCraft
 
 - type: construction
   name: web door
   objectType: Structure
   placementMode: SnapgridCenter
   canBuildInImpassable: false
+  entityWhitelist:
+    tags:
+    - SpiderCraft
   conditions:
     - !type:TileNotBlocked
index 2bde191cdb28f44e415d4372c723b27bf60c2512..718af8be278d022173b0fac7d0e992d46db81aea 100644 (file)
         amount: 4
         doAfter: 6
 
+    - to: shield
+      steps:
+      - material: WebSilk
+        amount: 12
+        doAfter: 6
+
   # Deconstruction
   - node: tile
     entity: FloorTileItemWeb
@@ -51,3 +57,6 @@
 
   - node: cloth
     entity: MaterialCloth1
+
+  - node: shield
+    entity: WebShield
index 0cd8b22c0ac1c65db607dca2db5a1c6bf18b2d74..fe25b2f2246d5bafeb70ab7ac26622308864b61a 100644 (file)
@@ -6,6 +6,9 @@
   targetNode: tile
   category: construction-category-tiles
   description: "Nice and smooth."
+  entityWhitelist:
+    tags:
+    - SpiderCraft
   icon:
     sprite: Objects/Tiles/web.rsi
     state: icon
@@ -19,6 +22,9 @@
   targetNode: coat
   category: construction-category-clothing
   description: "Surprisingly warm and durable."
+  entityWhitelist:
+    tags:
+    - SpiderCraft
   icon:
     sprite: Clothing/OuterClothing/WinterCoats/coatweb.rsi
     state: icon
@@ -32,6 +38,9 @@
   targetNode: jumpsuit
   category: construction-category-clothing
   description: "At least it's something."
+  entityWhitelist:
+    tags:
+    - SpiderCraft
   icon:
     sprite: Clothing/Uniforms/Jumpsuit/web.rsi
     state: icon
@@ -45,6 +54,9 @@
   targetNode: jumpskirt
   category: construction-category-clothing
   description: "At least it's something."
+  entityWhitelist:
+    tags:
+    - SpiderCraft
   icon:
     sprite: Clothing/Uniforms/Jumpskirt/web.rsi
     state: icon
   targetNode: cloth
   category: construction-category-materials
   description: "Feels just like cloth, strangely enough."
+  entityWhitelist:
+    tags:
+    - SpiderCraft
   icon:
     sprite: Objects/Materials/materials.rsi
     state: cloth_3
   objectType: Item
+
+- type: construction
+  name: web shield
+  id: WebShield
+  graph: WebObjects
+  startNode: start
+  targetNode: shield
+  category: construction-category-clothing
+  description: "It's thick enough to handle a few blows, but probably not heat."
+  entityWhitelist:
+    tags:
+    - SpiderCraft
+  icon:
+    sprite: Objects/Weapons/Melee/web-shield.rsi
+    state: icon
+  objectType: Item
index 6d72187985f783d0633ec83c6c270d5c7008d6fe..33e2e376fe44018cc08723e0e9479be98c887b71 100644 (file)
 - type: Tag
   id: SpeedLoaderRifle
 
+- type: Tag
+  id: SpiderCraft
+
 - type: Tag
   id: SpreaderIgnore
 
diff --git a/Resources/Textures/Interface/Classic/Slots/web.png b/Resources/Textures/Interface/Classic/Slots/web.png
new file mode 100644 (file)
index 0000000..4c37ac4
Binary files /dev/null and b/Resources/Textures/Interface/Classic/Slots/web.png differ
index d85d84e28c189947b9122d881ad9132e5ce23bc1..f67ae575c787a9cf6e4ab20bf593faac6bcb9881 100644 (file)
Binary files a/Resources/Textures/Interface/Default/Slots/web.png and b/Resources/Textures/Interface/Default/Slots/web.png differ
diff --git a/Resources/Textures/Interface/Modernized/Slots/web.png b/Resources/Textures/Interface/Modernized/Slots/web.png
new file mode 100644 (file)
index 0000000..0e9a67f
Binary files /dev/null and b/Resources/Textures/Interface/Modernized/Slots/web.png differ
index f68272ec0eaaec9d3f5d65fdaa6f0aa8a98ce387..f072ef05e91f97c35b80660ddd36f433ab47e2f6 100644 (file)
Binary files a/Resources/Textures/Mobs/Customization/Arachnid/chelicerae.rsi/downwards.png and b/Resources/Textures/Mobs/Customization/Arachnid/chelicerae.rsi/downwards.png differ
index 3b205738f206e7c0e7db0a9e8c927a8761faf8be..a6620541083629766f8a2ec86d0b2c26465343f6 100644 (file)
Binary files a/Resources/Textures/Mobs/Species/Arachnid/parts.rsi/eyes.png and b/Resources/Textures/Mobs/Species/Arachnid/parts.rsi/eyes.png differ
index 648f370a54048c8d88f5c473215c1f3cabd4c1ad..003f17ab445c1e37bf29a837218a27d581f860a5 100644 (file)
Binary files a/Resources/Textures/Objects/Materials/silk.rsi/icon.png and b/Resources/Textures/Objects/Materials/silk.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Weapons/Melee/web-shield.rsi/icon-inhand-left.png b/Resources/Textures/Objects/Weapons/Melee/web-shield.rsi/icon-inhand-left.png
new file mode 100644 (file)
index 0000000..9b1341b
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/web-shield.rsi/icon-inhand-left.png differ
diff --git a/Resources/Textures/Objects/Weapons/Melee/web-shield.rsi/icon-inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/web-shield.rsi/icon-inhand-right.png
new file mode 100644 (file)
index 0000000..f0efd77
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/web-shield.rsi/icon-inhand-right.png differ
diff --git a/Resources/Textures/Objects/Weapons/Melee/web-shield.rsi/icon.png b/Resources/Textures/Objects/Weapons/Melee/web-shield.rsi/icon.png
new file mode 100644 (file)
index 0000000..29830d3
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/web-shield.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Weapons/Melee/web-shield.rsi/meta.json b/Resources/Textures/Objects/Weapons/Melee/web-shield.rsi/meta.json
new file mode 100644 (file)
index 0000000..5d87748
--- /dev/null
@@ -0,0 +1,19 @@
+{
+  "version": 1,
+  "size": {"x": 32, "y": 32},
+  "license": "CC-BY-SA-3.0",
+  "copyright": "Made by PixelTheKermit (github) for SS14",
+  "states": [
+    {
+      "name": "icon"
+    },
+    {
+      "name": "icon-inhand-left",
+      "directions": 4
+    },
+    {
+      "name": "icon-inhand-right",
+      "directions": 4
+    }
+  ]
+}