From 80947b128a8e127bfd1101924c4515fd9c587c9b Mon Sep 17 00:00:00 2001 From: IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com> Date: Thu, 25 Sep 2025 17:33:28 -0400 Subject: [PATCH] Add explosive cord. (#25875) --- Content.Server/ExCable/ExCableNodeGroup.cs | 14 +++ .../Interaction/InteractionSystem.cs | 6 - .../EntitySystems/NodeGroupSystem.cs | 1 + .../Power/Components/CablePlacerComponent.cs | 19 +++ .../Power/EntitySystems/CableSystem.Placer.cs | 8 +- .../Storage/EntitySystems/StorageSystem.cs | 9 -- .../NodeContainer/NodeGroups/NodeGroupID.cs | 1 + .../PowerMonitoringCableNetworksComponent.cs | 2 +- Content.Shared/Power/SharedPower.cs | 1 + Resources/Locale/en-US/stack/stacks.ftl | 4 + .../Catalog/Fills/Boxes/security.yml | 21 ++++ .../Objects/Devices/Electronics/triggers.yml | 4 +- .../Entities/Objects/Weapons/Bombs/cord.yml | 115 ++++++++++++++++++ .../Objects/Weapons/Bombs/detonator.yml | 77 ++++++++++++ .../Entities/Structures/Power/cables.yml | 85 ++++++++++++- .../Graphs/structures/cordage.yml | 27 ++++ .../Graphs/weapons/explosive_detonator.yml | 59 +++++++++ .../Recipes/Lathes/Packs/security.yml | 2 + .../Prototypes/Recipes/Lathes/devices.yml | 20 +++ Resources/Prototypes/Research/arsenal.yml | 2 + Resources/Prototypes/Stacks/power_stacks.yml | 10 ++ Resources/Prototypes/tags.yml | 3 + .../Objects/Storage/boxes.rsi/meta.json | 5 +- .../Objects/Storage/boxes.rsi/trigger.png | Bin 0 -> 212 bytes .../Tools/cable-coils.rsi/coilex-10.png | Bin 0 -> 1674 bytes .../Tools/cable-coils.rsi/coilex-20.png | Bin 0 -> 1949 bytes .../Tools/cable-coils.rsi/coilex-30.png | Bin 0 -> 2511 bytes .../cable-coils.rsi/coilex-equipped-BELT.png | Bin 0 -> 1670 bytes .../cable-coils.rsi/coilex-inhand-left.png | Bin 0 -> 2569 bytes .../cable-coils.rsi/coilex-inhand-right.png | Bin 0 -> 2553 bytes .../Objects/Tools/cable-coils.rsi/meta.json | 21 ++++ .../Bombs/detonator.rsi/addtrigger.png | Bin 0 -> 242 bytes .../Weapons/Bombs/detonator.rsi/complete.png | Bin 0 -> 2351 bytes .../Weapons/Bombs/detonator.rsi/empty.png | Bin 0 -> 236 bytes .../Weapons/Bombs/detonator.rsi/meta.json | 34 ++++++ .../Weapons/Bombs/detonator.rsi/primed.png | Bin 0 -> 3508 bytes .../Weapons/Bombs/detonator.rsi/wired.png | Bin 0 -> 2332 bytes .../Power/Cables/ex_cable.rsi/excable_0.png | Bin 0 -> 158 bytes .../Power/Cables/ex_cable.rsi/excable_1.png | Bin 0 -> 201 bytes .../Power/Cables/ex_cable.rsi/excable_10.png | Bin 0 -> 294 bytes .../Power/Cables/ex_cable.rsi/excable_11.png | Bin 0 -> 401 bytes .../Power/Cables/ex_cable.rsi/excable_12.png | Bin 0 -> 144 bytes .../Power/Cables/ex_cable.rsi/excable_13.png | Bin 0 -> 348 bytes .../Power/Cables/ex_cable.rsi/excable_14.png | Bin 0 -> 361 bytes .../Power/Cables/ex_cable.rsi/excable_15.png | Bin 0 -> 486 bytes .../Power/Cables/ex_cable.rsi/excable_2.png | Bin 0 -> 201 bytes .../Power/Cables/ex_cable.rsi/excable_3.png | Bin 0 -> 164 bytes .../Power/Cables/ex_cable.rsi/excable_4.png | Bin 0 -> 183 bytes .../Power/Cables/ex_cable.rsi/excable_5.png | Bin 0 -> 280 bytes .../Power/Cables/ex_cable.rsi/excable_6.png | Bin 0 -> 262 bytes .../Power/Cables/ex_cable.rsi/excable_7.png | Bin 0 -> 375 bytes .../Power/Cables/ex_cable.rsi/excable_8.png | Bin 0 -> 179 bytes .../Power/Cables/ex_cable.rsi/excable_9.png | Bin 0 -> 281 bytes .../Power/Cables/ex_cable.rsi/meta.json | 75 ++++++++++++ 54 files changed, 601 insertions(+), 24 deletions(-) create mode 100644 Content.Server/ExCable/ExCableNodeGroup.cs create mode 100644 Resources/Prototypes/Entities/Objects/Weapons/Bombs/cord.yml create mode 100644 Resources/Prototypes/Entities/Objects/Weapons/Bombs/detonator.yml create mode 100644 Resources/Prototypes/Recipes/Construction/Graphs/structures/cordage.yml create mode 100644 Resources/Prototypes/Recipes/Construction/Graphs/weapons/explosive_detonator.yml create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/trigger.png create mode 100644 Resources/Textures/Objects/Tools/cable-coils.rsi/coilex-10.png create mode 100644 Resources/Textures/Objects/Tools/cable-coils.rsi/coilex-20.png create mode 100644 Resources/Textures/Objects/Tools/cable-coils.rsi/coilex-30.png create mode 100644 Resources/Textures/Objects/Tools/cable-coils.rsi/coilex-equipped-BELT.png create mode 100644 Resources/Textures/Objects/Tools/cable-coils.rsi/coilex-inhand-left.png create mode 100644 Resources/Textures/Objects/Tools/cable-coils.rsi/coilex-inhand-right.png create mode 100644 Resources/Textures/Objects/Weapons/Bombs/detonator.rsi/addtrigger.png create mode 100644 Resources/Textures/Objects/Weapons/Bombs/detonator.rsi/complete.png create mode 100644 Resources/Textures/Objects/Weapons/Bombs/detonator.rsi/empty.png create mode 100644 Resources/Textures/Objects/Weapons/Bombs/detonator.rsi/meta.json create mode 100644 Resources/Textures/Objects/Weapons/Bombs/detonator.rsi/primed.png create mode 100644 Resources/Textures/Objects/Weapons/Bombs/detonator.rsi/wired.png create mode 100644 Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_0.png create mode 100644 Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_1.png create mode 100644 Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_10.png create mode 100644 Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_11.png create mode 100644 Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_12.png create mode 100644 Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_13.png create mode 100644 Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_14.png create mode 100644 Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_15.png create mode 100644 Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_2.png create mode 100644 Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_3.png create mode 100644 Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_4.png create mode 100644 Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_5.png create mode 100644 Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_6.png create mode 100644 Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_7.png create mode 100644 Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_8.png create mode 100644 Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_9.png create mode 100644 Resources/Textures/Structures/Power/Cables/ex_cable.rsi/meta.json diff --git a/Content.Server/ExCable/ExCableNodeGroup.cs b/Content.Server/ExCable/ExCableNodeGroup.cs new file mode 100644 index 0000000000..b505fbad94 --- /dev/null +++ b/Content.Server/ExCable/ExCableNodeGroup.cs @@ -0,0 +1,14 @@ +using Content.Server.NodeContainer.NodeGroups; +using Content.Shared.NodeContainer.NodeGroups; +using Content.Server.Power.Components; +using Content.Server.Power.EntitySystems; + +namespace Content.Server.ExCable; + +/// +/// Dummy Node group class for handling the explosive cables. +/// +[NodeGroup(NodeGroupID.ExCable)] +public sealed class ExCableNodeGroup : BaseNodeGroup +{ +} diff --git a/Content.Server/Interaction/InteractionSystem.cs b/Content.Server/Interaction/InteractionSystem.cs index 9ac82b2185..c5488f458c 100644 --- a/Content.Server/Interaction/InteractionSystem.cs +++ b/Content.Server/Interaction/InteractionSystem.cs @@ -1,12 +1,6 @@ using Content.Shared.Interaction; -using Content.Shared.Storage; -using JetBrains.Annotations; -using Robust.Server.GameObjects; -using Robust.Shared.Containers; -using Robust.Shared.Player; namespace Content.Server.Interaction { - // TODO Remove Shared prefix public sealed class InteractionSystem : SharedInteractionSystem; } diff --git a/Content.Server/NodeContainer/EntitySystems/NodeGroupSystem.cs b/Content.Server/NodeContainer/EntitySystems/NodeGroupSystem.cs index 7b55e20f8a..ee72f89abb 100644 --- a/Content.Server/NodeContainer/EntitySystems/NodeGroupSystem.cs +++ b/Content.Server/NodeContainer/EntitySystems/NodeGroupSystem.cs @@ -447,6 +447,7 @@ namespace Content.Server.NodeContainer.EntitySystems NodeGroupID.Pipe => Color.Blue, NodeGroupID.WireNet => Color.DarkMagenta, NodeGroupID.Teg => Color.Red, + NodeGroupID.ExCable => Color.Pink, _ => Color.White }; } diff --git a/Content.Server/Power/Components/CablePlacerComponent.cs b/Content.Server/Power/Components/CablePlacerComponent.cs index d52cfa118a..4674692c4a 100644 --- a/Content.Server/Power/Components/CablePlacerComponent.cs +++ b/Content.Server/Power/Components/CablePlacerComponent.cs @@ -1,16 +1,35 @@ using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; using Content.Shared.Power; +using Content.Shared.Whitelist; namespace Content.Server.Power.Components { [RegisterComponent] public sealed partial class CablePlacerComponent : Component { + /// + /// The structure prototype for the cable coil to place. + /// [DataField("cablePrototypeID", customTypeSerializer:typeof(PrototypeIdSerializer))] public string? CablePrototypeId = "CableHV"; + /// + /// What kind of wire prevents placing this wire over it as CableType. + /// [DataField("blockingWireType")] public CableType BlockingCableType = CableType.HighVoltage; + + /// + /// Blacklist for things the cable cannot be placed over. For things that arent cables with CableTypes. + /// + [DataField] + public EntityWhitelist Blacklist = new(); + + /// + /// Whether the placed cable should go over tiles or not. + /// + [DataField] + public bool OverTile; } } diff --git a/Content.Server/Power/EntitySystems/CableSystem.Placer.cs b/Content.Server/Power/EntitySystems/CableSystem.Placer.cs index 55d517cf7d..79ea6b5285 100644 --- a/Content.Server/Power/EntitySystems/CableSystem.Placer.cs +++ b/Content.Server/Power/EntitySystems/CableSystem.Placer.cs @@ -4,6 +4,7 @@ using Content.Shared.Database; using Content.Shared.Interaction; using Content.Shared.Maps; using Content.Shared.Stacks; +using Content.Shared.Whitelist; using Robust.Shared.Map.Components; namespace Content.Server.Power.EntitySystems; @@ -13,6 +14,7 @@ public sealed partial class CableSystem [Dependency] private readonly IAdminLogManager _adminLogger = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly SharedMapSystem _map = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; private void InitializeCablePlacer() { @@ -35,12 +37,14 @@ public sealed partial class CableSystem var snapPos = _map.TileIndicesFor((gridUid, grid), args.ClickLocation); var tileDef = (ContentTileDefinition)_tileManager[_map.GetTileRef(gridUid, grid, snapPos).Tile.TypeId]; - if (!tileDef.IsSubFloor || !tileDef.Sturdy) + if ((!component.OverTile && !tileDef.IsSubFloor) || !tileDef.Sturdy) return; - foreach (var anchored in _map.GetAnchoredEntities((gridUid, grid), snapPos)) { + if (_whitelistSystem.IsBlacklistPass(component.Blacklist, anchored)) + return; + if (TryComp(anchored, out var wire) && wire.CableType == component.BlockingCableType) return; } diff --git a/Content.Server/Storage/EntitySystems/StorageSystem.cs b/Content.Server/Storage/EntitySystems/StorageSystem.cs index 4b5dd7290c..cdbac12d80 100644 --- a/Content.Server/Storage/EntitySystems/StorageSystem.cs +++ b/Content.Server/Storage/EntitySystems/StorageSystem.cs @@ -1,19 +1,11 @@ -using Content.Server.Administration.Managers; -using Content.Shared.Administration; using Content.Shared.Explosion; -using Content.Shared.Ghost; using Content.Shared.Hands; -using Content.Shared.Lock; using Content.Shared.Storage; using Content.Shared.Storage.Components; using Content.Shared.Storage.EntitySystems; -using Content.Shared.Verbs; -using Robust.Server.GameObjects; using Robust.Shared.Map; using Robust.Shared.Player; using Robust.Shared.Prototypes; -using Robust.Shared.Utility; - namespace Content.Server.Storage.EntitySystems; public sealed partial class StorageSystem : SharedStorageSystem @@ -24,7 +16,6 @@ public sealed partial class StorageSystem : SharedStorageSystem { base.Initialize(); SubscribeLocalEvent(OnExploded); - SubscribeLocalEvent(OnStorageFillMapInit); } diff --git a/Content.Shared/NodeContainer/NodeGroups/NodeGroupID.cs b/Content.Shared/NodeContainer/NodeGroups/NodeGroupID.cs index 214e9c50ce..f76a4f9022 100644 --- a/Content.Shared/NodeContainer/NodeGroups/NodeGroupID.cs +++ b/Content.Shared/NodeContainer/NodeGroups/NodeGroupID.cs @@ -16,4 +16,5 @@ public enum NodeGroupID : byte /// /// Teg, + ExCable, } diff --git a/Content.Shared/Power/PowerMonitoringCableNetworksComponent.cs b/Content.Shared/Power/PowerMonitoringCableNetworksComponent.cs index 75ac8869ed..5a79100d5f 100644 --- a/Content.Shared/Power/PowerMonitoringCableNetworksComponent.cs +++ b/Content.Shared/Power/PowerMonitoringCableNetworksComponent.cs @@ -34,6 +34,6 @@ public struct PowerCableChunk public PowerCableChunk(Vector2i origin) { Origin = origin; - PowerCableData = new int[3]; + PowerCableData = new int[Enum.GetNames(typeof(CableType)).Length]; } } diff --git a/Content.Shared/Power/SharedPower.cs b/Content.Shared/Power/SharedPower.cs index d45fb96cac..554146b731 100644 --- a/Content.Shared/Power/SharedPower.cs +++ b/Content.Shared/Power/SharedPower.cs @@ -31,6 +31,7 @@ namespace Content.Shared.Power HighVoltage, MediumVoltage, Apc, + ExCable } [Serializable, NetSerializable] diff --git a/Resources/Locale/en-US/stack/stacks.ftl b/Resources/Locale/en-US/stack/stacks.ftl index acc7cdba64..6ff0906b83 100644 --- a/Resources/Locale/en-US/stack/stacks.ftl +++ b/Resources/Locale/en-US/stack/stacks.ftl @@ -36,6 +36,10 @@ stack-hv-cable = {$amount -> [1] hv cable *[other] hv cables } +stack-explosive-cord = {$amount -> + [1] explosive cord + *[other] explosive cords +} stack-wood-plank = {$amount -> [1] wood plank *[other] wood planks diff --git a/Resources/Prototypes/Catalog/Fills/Boxes/security.yml b/Resources/Prototypes/Catalog/Fills/Boxes/security.yml index 818810d0cc..2f9decab7d 100644 --- a/Resources/Prototypes/Catalog/Fills/Boxes/security.yml +++ b/Resources/Prototypes/Catalog/Fills/Boxes/security.yml @@ -135,3 +135,24 @@ layers: - state: box_security - state: forensic + +- type: entity + parent: BoxCardboard + id: BoxDetonator + name: detonator box + description: A box of explosive detonators and triggers. + components: + - type: Item + shape: + - 0,0,1,1 + - type: StorageFill + contents: + - id: EmptyDetonator + amount: 3 + - id: TimerTrigger + amount: 2 + - id: VoiceTrigger + - type: Sprite + layers: + - state: box_security + - state: trigger diff --git a/Resources/Prototypes/Entities/Objects/Devices/Electronics/triggers.yml b/Resources/Prototypes/Entities/Objects/Devices/Electronics/triggers.yml index c6943a63e3..af5538fd34 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Electronics/triggers.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Electronics/triggers.yml @@ -17,7 +17,7 @@ sprite: Objects/Devices/timer.rsi state: timer - type: Item - size: Small + size: Tiny - type: StaticPrice price: 40 - type: PayloadTrigger @@ -79,6 +79,8 @@ name: voice trigger description: Adds a machine link that is triggered by vocal keywords. components: + - type: Item + size: Tiny - type: Sprite sprite: Objects/Devices/voice.rsi state: voice diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/cord.yml b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/cord.yml new file mode 100644 index 0000000000..4b91c444b7 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/cord.yml @@ -0,0 +1,115 @@ +# Explosive cable below +- type: entity + parent: [ CableStack, BaseSecurityContraband ] + id: CableDetStack + name: explosive cord + suffix: Full + description: Explosive cord for removing whatever is in your way. + components: + - type: Stack + stackType: CableDet + baseLayer: base + layerStates: + - coilex-10 + - coilex-20 + - coilex-30 + - type: Sprite + state: coilex-30 + layers: + - state: coilex-30 + map: ["base"] + - type: Item + heldPrefix: coilex + - type: CablePlacer + cablePrototypeID: CableDet + blockingWireType: ExCable + blacklist: + tags: + - ExCable + overTile: true + - type: Appearance + - type: Extractable + grindableSolutionName: excable + - type: SolutionContainerManager + solutions: + mvcable: + reagents: + - ReagentId: Thermite + Quantity: 3 + - ReagentId: Charcoal + Quantity: 2 + - type: Damageable + damageContainer: StructuralInorganic + - type: Destructible # should have the same general explosive behavior as in cables.yml & detonator.yml + thresholds: + - trigger: + !type:DamageTypeTrigger + damageType: Structural # as close as we can get to only letting explosives trigger it. + damage: 120 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - !type:ExplodeBehavior + - trigger: + !type:DamageTrigger # the idea here is to prevent you from just beating it until it explodes. + damage: 50 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - type: Explosive + explosionType: DemolitionCharge + totalIntensity: 60 + intensitySlope: 5 + maxIntensity: 30 + canCreateVacuum: false + - type: Tag + tags: + - Payload + # - type: Sticky #While cool, this doesn't actually work because the structure prevents the explosion from the cable reaching the stickied wire. + # stickDelay: 5 + # unstickDelay: 5 + # whitelist: + # components: + # - Airlock + # tags: + # - Window + # - Wall + # - type: StickyVisualizer + +- type: entity + parent: CableDetStack + id: CableDetStack10 + suffix: 10 + components: + - type: Sprite + state: coilex-10 + - type: Stack + count: 10 + - type: Explosive # TODO: some how make stacking logic handle the explosion scaling. Maybe also something for lingering stacks. + explosionType: DemolitionCharge + totalIntensity: 30 + intensitySlope: 5 + maxIntensity: 15 + canCreateVacuum: false + - type: Tag + tags: + - Payload + +- type: entity + parent: CableDetStack + id: CableDetStack1 + suffix: 1 + components: + - type: Sprite + state: coilex-10 + - type: Stack + count: 1 + - type: Explosive + explosionType: DemolitionCharge + totalIntensity: 10 + intensitySlope: 5 + maxIntensity: 5 + canCreateVacuum: false + - type: Tag + tags: + - Payload diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/detonator.yml b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/detonator.yml new file mode 100644 index 0000000000..d92cf1f77b --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/detonator.yml @@ -0,0 +1,77 @@ +- type: entity + parent: [ BaseItem, BaseSecurityContraband ] + id: EmptyDetonator + name: detonator cap + description: A detonator cap. Requires a trigger and wire. + components: + - type: Sprite + sprite: Objects/Weapons/Bombs/detonator.rsi + layers: + - state: empty + map: [ "enum.ConstructionVisuals.Layer" ] + - type: Item + size: Small + - type: PayloadCase + - type: Construction + graph: DetonatorGraph + node: emptyDetonator + - type: Damageable + damageContainer: StructuralInorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTypeTrigger + damageType: Structural # as close as we can get to only letting explosives trigger it. + damage: 120 + behaviors: + - !type:TriggerBehavior + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger # the idea here is to prevent you from just beating it until it explodes. + damage: 50 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - type: Appearance + - type: GenericVisualizer + visuals: + enum.ConstructionVisuals.Key: + enum.ConstructionVisuals.Layer: + emptyDetonator: { state: empty } + detonatorWithTrigger: { state: addtrigger } + wiredDetonator: { state: complete } + enum.Trigger.TriggerVisuals.VisualState: + enum.ConstructionVisuals.Layer: + Primed: { state: primed } + Unprimed: { state: complete } + - type: StaticPrice + price: 25 + +- type: entity + parent: EmptyDetonator + id: WiredDetonator + name: detonator cap + description: A detonator cap. + categories: [ HideSpawnMenu ] + components: + - type: Explosive # this is the cord, but its a little smaller because I dont want these to be grenades. They need to not really break walls themselves, but do enough to set off the cable. ~125 structural. + explosionType: DemolitionCharge + totalIntensity: 2.5 + intensitySlope: 100 + maxIntensity: 2.5 + canCreateVacuum: false + - type: ExplodeOnTrigger + - type: Sticky + stickDelay: 2 + unstickDelay: 2 + stickPopupStart: comp-sticky-start-stick-bomb + stickPopupSuccess: comp-sticky-success-stick-bomb + unstickPopupStart: comp-sticky-start-unstick-bomb + unstickPopupSuccess: comp-sticky-success-unstick-bomb + whitelist: + tags: + - ExCable + blacklist: # can't stick it to other items + components: + - Item diff --git a/Resources/Prototypes/Entities/Structures/Power/cables.yml b/Resources/Prototypes/Entities/Structures/Power/cables.yml index 2a4f1c7f1c..4722b6e0b7 100644 --- a/Resources/Prototypes/Entities/Structures/Power/cables.yml +++ b/Resources/Prototypes/Entities/Structures/Power/cables.yml @@ -1,6 +1,6 @@ - type: entity abstract: true - id: CableBase + id: CablePhysBase placement: mode: SnapgridCenter components: @@ -13,11 +13,21 @@ - type: Transform anchored: true noRot: true - # TODO: Remove both of these, same with CollideOnAnchor + # TODO: Remove both of these, same with CollideOnAnchor - type: Physics bodyType: Static canCollide: false - type: Fixtures + - type: CollideOnAnchor + - type: Appearance + +- type: entity + abstract: true + parent: CablePhysBase + id: CableBase + components: + - type: Visibility + layer: 1 - type: Sprite drawdepth: ThinWire visible: false @@ -33,8 +43,6 @@ - !type:DoActsBehavior acts: ["Destruction"] - type: SubFloorHide - - type: CollideOnAnchor - - type: Appearance - type: Electrified onHandInteract: false onInteractUsing: false # wire-cutting handled separately. @@ -215,3 +223,72 @@ components: - type: Cable cuttingQuality: null + +# Explosive cable below +- type: entity + id: CableDet + parent: [ CablePhysBase, BaseSecurityContraband ] + name: explosive cord + description: Spaghetti for people who hate walls. + components: + - type: Cable + cableDroppedOnCutPrototype: CableDetStack1 + cableType: ExCable + - type: Sprite +# color: white # maybe change this later and move the stripes to the CableVisualizerComp layer instead + sprite: Structures/Power/Cables/ex_cable.rsi + state: excable_0 + - type: Icon + sprite: Structures/Power/Cables/ex_cable.rsi + state: excable_4 + - type: Damageable + damageContainer: StructuralInorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTypeTrigger + damageType: Structural #this is as close as we can get to only letting explosives set it off. + damage: 120 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - !type:ExplodeBehavior + - trigger: + !type:DamageTrigger #A fallback that deletes it but doesnt explode in case something somehow gets here without exploding violently enough. + damage: 50 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - trigger: + !type:DamageTrigger + damage: 35 + behaviors: + - !type:SpawnEntitiesBehavior + spawn: + CableDetStack1: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: CableVis + node: cordage + - type: NodeContainer + nodes: + cordage: + !type:CableNode + nodeGroupID: ExCable + - type: CableVisualizer + statePrefix: excable_ + - type: Explosive + explosionType: DemolitionCharge + totalIntensity: 10 + intensitySlope: 5 + maxIntensity: 5 + canCreateVacuum: false + - type: ExplodeOnTrigger + - type: Construction + graph: DetCable + node: detonationCable + - type: Tag + tags: + - ExCable diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/cordage.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/cordage.yml new file mode 100644 index 0000000000..aa26a1f581 --- /dev/null +++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/cordage.yml @@ -0,0 +1,27 @@ +- type: constructionGraph + id: DetCable + start: start + graph: + - node: start + edges: + - to: detonationCable + completed: + - !type:SnapToGrid + southRotation: true + steps: + - material: Bananium + amount: 1 + doAfter: 0 + + - node: detonationCable + entity: CableDet + edges: + - to: start + completed: + - !type:SpawnPrototype + prototype: CableDetStack1 + amount: 1 + - !type:DeleteEntity {} + steps: + - tool: Cutting + doAfter: 0.5 diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/weapons/explosive_detonator.yml b/Resources/Prototypes/Recipes/Construction/Graphs/weapons/explosive_detonator.yml new file mode 100644 index 0000000000..ddd5e29efe --- /dev/null +++ b/Resources/Prototypes/Recipes/Construction/Graphs/weapons/explosive_detonator.yml @@ -0,0 +1,59 @@ +- type: constructionGraph + id: DetonatorGraph + start: start + graph: + - node: start + edges: + - to: emptyDetonator + steps: + - material: Bananium + amount: 1 + doAfter: 1 + + - node: emptyDetonator + entity: EmptyDetonator + actions: + - !type:AppearanceChange + edges: + - to: detonatorWithTrigger + steps: + - component: PayloadTrigger + store: payloadTrigger + name: construction-graph-component-payload-trigger + doAfter: 0.5 + + - node: detonatorWithTrigger + entity: EmptyDetonator + actions: + - !type:AppearanceChange + - !type:PlaySound + sound: /Audio/Machines/button.ogg + edges: + - to: emptyDetonator + steps: + - tool: Prying + doAfter: 0.5 + completed: + - !type:EmptyContainer + container: payloadTrigger + - to: wiredDetonator + steps: + - material: CableDet + doAfter: 0.5 + + - node: wiredDetonator + entity: WiredDetonator + actions: + - !type:AppearanceChange + - !type:PlaySound + sound: /Audio/Machines/button.ogg + - !type:AdminLog + message: "A detonator cap was crafted" + edges: + - to: detonatorWithTrigger + steps: + - tool: Cutting + doAfter: 0.5 + completed: + - !type:SpawnPrototype + prototype: CableDetStack1 diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/security.yml b/Resources/Prototypes/Recipes/Lathes/Packs/security.yml index f3e8891b25..0dc5fe3d90 100644 --- a/Resources/Prototypes/Recipes/Lathes/Packs/security.yml +++ b/Resources/Prototypes/Recipes/Lathes/Packs/security.yml @@ -90,6 +90,8 @@ - ScienceExplosives # sec gets everything for modular grenade making that sci does id: SecurityExplosives recipes: + - CableDetStack1 + - EmptyDetonator - ExplosivePayload - GrenadeBlast - GrenadeEMP diff --git a/Resources/Prototypes/Recipes/Lathes/devices.yml b/Resources/Prototypes/Recipes/Lathes/devices.yml index 62a6122342..b703aa1240 100644 --- a/Resources/Prototypes/Recipes/Lathes/devices.yml +++ b/Resources/Prototypes/Recipes/Lathes/devices.yml @@ -216,3 +216,23 @@ Steel: 500 Glass: 400 Gold: 100 + +- type: latheRecipe + id: CableDetStack1 + result: CableDetStack1 + categories: + - Weapons + completetime: 2 + materials: + Plastic: 50 + Plasma: 25 + Gold: 20 + +- type: latheRecipe + id: EmptyDetonator + result: EmptyDetonator + categories: + - Weapons + completetime: 3 + materials: + Steel: 100 diff --git a/Resources/Prototypes/Research/arsenal.yml b/Resources/Prototypes/Research/arsenal.yml index bb12a2c25f..846eef1452 100644 --- a/Resources/Prototypes/Research/arsenal.yml +++ b/Resources/Prototypes/Research/arsenal.yml @@ -116,6 +116,8 @@ - FlashPayload - ExplosivePayload - ChemicalPayload + - CableDetStack1 + - EmptyDetonator - type: technology id: SpecialMeans diff --git a/Resources/Prototypes/Stacks/power_stacks.yml b/Resources/Prototypes/Stacks/power_stacks.yml index 305c85943d..40782d382c 100644 --- a/Resources/Prototypes/Stacks/power_stacks.yml +++ b/Resources/Prototypes/Stacks/power_stacks.yml @@ -18,3 +18,13 @@ icon: { sprite: "/Textures/Objects/Tools/cable-coils.rsi", state: coilhv-30 } spawn: CableHVStack1 maxCount: 30 + +# Explosive cable below + +- type: stack + id: CableDet + name: stack-explosive-cord + icon: { sprite: "/Textures/Objects/Tools/cable-coils.rsi", state: coilex-30 } + spawn: CableDetStack1 + maxCount: 30 + diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 14dfa9499e..fde9057d64 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -551,6 +551,9 @@ - type: Tag id: Enzyme +- type: Tag + id: ExCable + - type: Tag id: ExplosivePassable diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/meta.json b/Resources/Textures/Objects/Storage/boxes.rsi/meta.json index ea483851b7..64c3fc85c1 100644 --- a/Resources/Textures/Objects/Storage/boxes.rsi/meta.json +++ b/Resources/Textures/Objects/Storage/boxes.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from vgstation at commit https://github.com/vgstation-coders/vgstation13/commit/ca674eff9d23e04357b7609ef7e07eadfc1a993f and modified by Flareguy (github), encryptokey was taken from Baystation12 at https://github.com/infinitystation/Baystation12/blob/073f678cdce92edb8fcd55f9ffc9f0523bf31506/icons/obj/radio.dmi and modified by lapatison. boxwidetoy, shelltoy, swab, flare, inflatable, trashbag, magazine, holo and forensic created by potato1234x (github) for ss14 based on toys.rsi, mouth_swab.rsi, flare.rsi, inflatable_wall.rsi, trashbag.rsi, caseless_pistol_mag.rsi, guardians.rsi and bureaucracy.rsi respectively, candle and darts created by TheShuEd for ss14, throwing_knives and vials was drawn by Ubaser, evidence_markers by moomoobeef, nitrogentank modified from extendedtank by Errant, agrichemkit by Cerol, modified by ps3moira (github). sechud renamed to secglasses, new sechud, sunglasses by K-Dynamic (github). utensils by gentleman-bird (github)", + "copyright": "Taken from vgstation at commit https://github.com/vgstation-coders/vgstation13/commit/ca674eff9d23e04357b7609ef7e07eadfc1a993f and modified by Flareguy (github), encryptokey was taken from Baystation12 at https://github.com/infinitystation/Baystation12/blob/073f678cdce92edb8fcd55f9ffc9f0523bf31506/icons/obj/radio.dmi and modified by lapatison. boxwidetoy, shelltoy, swab, flare, inflatable, trashbag, magazine, holo and forensic created by potato1234x (github) for ss14 based on toys.rsi, mouth_swab.rsi, flare.rsi, inflatable_wall.rsi, trashbag.rsi, caseless_pistol_mag.rsi, guardians.rsi and bureaucracy.rsi respectively, candle and darts created by TheShuEd for ss14, throwing_knives and vials was drawn by Ubaser, evidence_markers by moomoobeef, nitrogentank modified from extendedtank by Errant, agrichemkit by Cerol, modified by ps3moira (github). sechud renamed to secglasses, new sechud, sunglasses by K-Dynamic (github), trigger by IProduceWidgets, utensils by gentleman-bird (github).", "size": { "x": 32, "y": 32 @@ -197,6 +197,9 @@ { "name": "vials" }, + { + "name": "trigger" + }, { "name": "envelope" }, diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/trigger.png b/Resources/Textures/Objects/Storage/boxes.rsi/trigger.png new file mode 100644 index 0000000000000000000000000000000000000000..5be60b4622777470dc7ce41354860b721d7caa9a GIT binary patch literal 212 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 ZJ^|`z3#m1zNH72Z002ovPDHLkV1l7pm=yp3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Tools/cable-coils.rsi/coilex-equipped-BELT.png b/Resources/Textures/Objects/Tools/cable-coils.rsi/coilex-equipped-BELT.png new file mode 100644 index 0000000000000000000000000000000000000000..0ebbd08fae630f34358a115e472c2b16eec69ed4 GIT binary patch literal 1670 zcmV;126_33P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+U-_RlH?`~{pS=pf+ZmY$3cLq_69kA9&UHf^vv$g zY$ac*Hf4i_{3P^*a9V%=i1ZgOCd( zZ0MN>XxXwV#*GK~A#jF9!6r?nRFE}zB@u}E;R~I1+i7o5h2=?5Wda!ClV7&(=L zfu5qjZ6QiFF93uHwiV8hfPtfsC>1)4*@zIw3W7R3XUXhffK++HNzQ`Zl8h^F+xW)l z)Me$uTa4NSB2aebzpVqcSxLFJiB^v^Xkp}K>Cb4bd+JEjyC$_ zDHCO4mT9xjHv6KqP$^bky2`RuS6e-hYax+Cql86`7X886#p8lOyUJ$tYQ zX)?P*&@LysIRj&y35?rj013^Tv!hbZyqVja9gVRml;NaqZqlU97%0q(Sc4wiy)pMK z-jddD@y1^d+hY=oHTKAlWKAP@O{8PY@O>^Jf2Ej*0t%T4tmPzaz-set2ODd8jJe0nO0btQCUmA36Nk;N8N05`t_dd~ z;|&IKDYG;z#g}?p7Fh{fn_Aud{xkbspT1J~R&P1dq9e$*^MetDf;Hn@ceUA3MPhiF z&8@5zQ8IRQ*lIe)2A~CiftZb%sFqFYwoW`mW*&=mqowdI7zFc8@~^B^y8C{{Wq;+RC%ctd0Nx z0fT8nLr_UWLm+T+Z)Rz1WdHzpoPCi!NW(xJ#b48kA{7Tah&n{5P8N!aI7$_ZV4<`X zT6HkF^b49aBq=VAf@{ISkHxBki?gl{u7V)=0pcz=DY{6B|4RxjVmvtR$GdxvyLW)l zs4&$GL;+Q^j8r@(W^=1z_bUPz1`x%l#7sSrUd+IAeBHyx*SiSM@;>+H=u`401AHR! z9McVpc!PLm)6zNb6NgwyQi#uqCk(nE@gvt|m)|%S9Ts?I$jGGTi9^I+gyEO|_lWtNl26VmH_Qx2|y$dw!w*7r<+szZe{|sDd zZGW`^%zlzyZ)@Qrpnn^3_j_SAvuztrcfvV?`QN)Ibh%x=v{MrYwhFo z0mx8S%QwKmAuwK~>~)WK_jLC5@0nJAKdz;6zlQ)MrvLx|24YJ`L;xuOasV#AF-Q9V z000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2k8VG0SFqqevk10003%9L_t(|+U?Y_ z4FW+71i(9qg1!%OA{w|WgFf5?HIX7}*iQ&aUL>HKi8i#ol3N1+004kP^7gOupT1pw z&e?9SM@y34dta*ks>-Lll>2r~Rb`BkrGLTma$frY0000000000006&c2iX}T3Va2S QwEzGB07*qoM6N<$f*c+TqyPW_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Tools/cable-coils.rsi/coilex-inhand-left.png b/Resources/Textures/Objects/Tools/cable-coils.rsi/coilex-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..00ba40526d3fb3868238ae453ac238b055ba2b02 GIT binary patch literal 2569 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 P00000NkvXXu0mjf+<3lR literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Tools/cable-coils.rsi/meta.json b/Resources/Textures/Objects/Tools/cable-coils.rsi/meta.json index d1fcdea7f4..95b59f691d 100644 --- a/Resources/Textures/Objects/Tools/cable-coils.rsi/meta.json +++ b/Resources/Textures/Objects/Tools/cable-coils.rsi/meta.json @@ -31,6 +31,14 @@ "name": "coillv-inhand-right", "directions": 4 }, + { + "name": "coilex-inhand-left", + "directions": 4 + }, + { + "name": "coilex-inhand-right", + "directions": 4 + }, { "name": "coil-30" }, @@ -70,6 +78,15 @@ { "name": "coilall-30" }, + { + "name": "coilex-30" + }, + { + "name": "coilex-20" + }, + { + "name": "coilex-10" + }, { "name": "coil-equipped-BELT", "directions": 4 @@ -85,6 +102,10 @@ { "name": "coilhv-equipped-BELT", "directions": 4 + }, + { + "name": "coilex-equipped-BELT", + "directions": 4 } ] } diff --git a/Resources/Textures/Objects/Weapons/Bombs/detonator.rsi/addtrigger.png b/Resources/Textures/Objects/Weapons/Bombs/detonator.rsi/addtrigger.png new file mode 100644 index 0000000000000000000000000000000000000000..77e4b572933566538117a98d77e1ed729b5de9f0 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJot`d^ArXh)PFCbQY{27Mzii>e z36&RE4?6Gk@W0mmMZwkepyEQw48IADz7x4#d(2h)xiO;X&zDr@u0J@3Cm)OC6bMXB zJ0h_$SNd7yyQou#nJm*M2W7oajg0zxg~dygp&@hDu5~N58xtiA`X29Oddsr^h(vjj q`+uXL;`g=DJ4$1DMO*_#6!XnzIR5&fa_$ zaB^>EX>4U6ba`-PAZ2)IW&i+q+U-|ulH?`~{m&_K1P}&wgaL zHdXnNZDuTtF%o)D5)S*XKP~)$AC*Xxu9ePBznK zwy)idQsL2hGwL||;US+m;qrW5t7w9MMqf_rXf2Mo0J+8$C)!Fq5m2#^O42lvrG4Z| z3nmuYB#=Z4u=rTZLY)@yNx%#(8AX2T!XHo-2=Z}r!v;s3*AkP{ z2e6sD9CY0=0Cb zMh7XMCr{Kc8blsTBu^*om;o^=35bg$078>v7F#NX9684Y zEj_XOK<ep?jxhOH8X_ zo=zU7q1x2Bnju6cmYYa-yAKq#D%!304Slm^8x!$26@L?v)Ioht4C1RS#J{e9&_TwB zI^>mKk>OhpP+c-IL&ZiAp@a99fg{(7;v1T}u_0B$er&;08Vmt%ebk1Efz7b-)Rhxr z70y8PPNV?#u1x6>M_?pNc!6i%k~;I&%$u|X985*cc*B6TRFD}~Zp&u24EG!9N~UqxeeLny7A4dBU%;$8m~Y+8BhK!hle+(Y*F@2!B=>Uswpm!NQ4}496?I=;@$cP$6VpG6+Ee;Nf7|0pC zCgJppqZjHf+=DZ(d?P?`7(s?HetHK%g8GP~c=a?APms+1$U3-#Gd)GHgOkpdJ%Sze z(|HM@CX^hvE}>s0*6IX)@N3S7VNiM5SRaP93;DFlk?fy+4;elWd|%2eS{G~w5J;#e z&twor2WtNUV>=bknggsd&THfJ0JADwJclleMK??v8pkwjcX<@yu);W1;1gAEX>4Tx0C=2zkv&MmKpe$i(~2S$2Rn#5M5s;{ii$W&6^me@v=v%)FuC*#nlvOS zE{=k0!NHHks)LKOt`4q(Aou~|E;uQ=NQwVT3N2zhIPS;0dyl(!fY7Kg)eJ-dRkMs# zJSJvyt77*n0vHAm#i+zgJ&|6_z;k@v!^hXV2+#69_vh$S@+Jd(BJmv44U2e#cxKbm zIqwsPSV>Zd&xt1tx*+i**JYRAI2RojcxK4Rq~?i3#A307gLnWRj4lAlg`9juZ zh4U6?wNhiPd-4|s^V&+9>oi9Y#}X1qLWGPO%Ba9XgjS6d6Dit{dH9DMf0A4>xyoSV zSU?pjB*zc_2fw>D3saMBQZNQ|z1a507|^{7H0!qgeQev!6TtrrTxo58wE@h2l3s6X z;Ul1b8@RY`Yw{j&xdRM7>5?HilAoqfC;;zg^i4Tn;1=jzb9-y;kZ8-0M;$M7Zg1=0jkD5SBn6eJr0sneuf6*ut#u0`A>+PIEC z)qKq`%y7<`%bg2>Kp^1Bx5{>Ve103JK0${C$qn*|IPMW5w?1?{V!khg|I+LD? z<5;xTY)zlgT4Rj)P>E)LSi313bzlED4^EpuzVXb94oqni7XVOz;*k21!ighME zWsDJPEwkB-qA1AooY82+dQ+~4{fdpc7n}Vd(npk13XoQ-1wfJ{0OWZN!0H%o4>n=) zwXUigz&R&Z&vSO~9;%WTMZt2p#9B+c-RAiImBZ~9$|04esrt150TInlKx^Hkl-TzjQc5VLT5l3v0x2bI+Xf;+2w^CNrDyj< zgcu`ADL9T}sFbe-a?T>9bf3@jyzi$bP-_JMc<<+y@R`86uCUh5{{_#|#TftO-p&%e m=348!aMyJSFbu;mo%{f<_&sLK&}nl30000 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_1.png b/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c2cbf1272aca358b48637f81dbcf4621a375a026 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ37#&FArYL(2@4qhus5AKbLPK@ z#K8kDooN%|zCWI?Y1E{|zK8Ss!V^Uk(z;|Aj1rcs>UStf2RvbzI5qmjHi=~umDn42 zBz>6|XC|2N_AF~uoX?h^s&w+pYlHXy6?`(M`UD2@tmf9}WZNXmu(@V&qRz>M?xwub tJW2nW4X*OYm}Z!;xH%_42{t7bhF@WZrzaoIGzGei!PC{xWt~$(69BukLx=zX literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_10.png b/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_10.png new file mode 100644 index 0000000000000000000000000000000000000000..c4335bdd6be29116a9c45d97442e3d9ea0cfd0de GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJx1KJJArYL(2@m18?be&k2GaqndR88nxnN)FF!Mav7uxi5B;NHI$#&7=L*;#y0(OK7driUTN zv+4=X9v9t9x2`|D=l|hFtwD!9xfo}pZn(qvIM`|OQ-*-NjH=%qiOr5YM*|(FF(=ry zO_esVvoyKMw;;@9!dr$cSLU014Xox%FFH(QULnXUV#y%FwV{hgOlip_AUmvea+c<% isxBD@qmD}^3=BIR?Zb1zZPS4sXYh3Ob6Mw<&;$UiB5g1L literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_11.png b/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_11.png new file mode 100644 index 0000000000000000000000000000000000000000..83d067820b79b94600d090abb1691a5c797c0b3e GIT binary patch literal 401 zcmV;C0dD?@P)b;@5JlJNsggF7sgn}r02HBins5MLAw`N@!j%sI6-YFkfO|j*RtgSa{4ITHWyz9v z{u)c!W^8$9{@b0|Svx0;svcRERYC~&pg6;Kez-~@B!J83LK26w1b_hh*#yQsB!H*Y z&MZtv2>?OV8X!op#R=HFen}?)qUIflQGgNvoYewE4AVHLA94etuqg#Gs-FPCHb(mm z7Nx^z;>h_>;t5yRwh-h|`+1x;pYuHLoZt5E`<_4ulPSgm+rBNE7&vM}2oo^Dea?2u zbB*`+mp@0Cq#ksLZ94<=N5h910;ChbUnya}UFn|lbuS;^KicytORJ(NqrtZ4@z#3p4C^?l3$vC?1$;40KKNB}X? vAOT<(c#&~OLahYAD?C)xpDzI*kXi#b;9PyjOsakJ00000NkvXXu0mjf;8vv) literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_12.png b/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_12.png new file mode 100644 index 0000000000000000000000000000000000000000..9590e82dbbec6169448ef3aad6b8e2bc15ee1890 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJa8DP&Q bm4QKax5){PtGOXSD;PXo{an^LB{Ts5_jxkL literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_13.png b/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_13.png new file mode 100644 index 0000000000000000000000000000000000000000..b1a67c53fbbd5171ce91969e2922a7c6bf6a3302 GIT binary patch literal 348 zcmV-i0i*tjP)4&3R-ExCa+1LX=JVUTHF5n3LXO(J(W=t&Ja^`sIJ_4Y z*JJe=J(84R=I}iM5jG@aL*bG^VAQ@Pt_qBwb!VzMs-_sEkS~E+&M}j*A0L)46&v_o uucjEA&kHCfM+c$<(ShhdbRatLYX=@=PlJXgsbSUt0000@Z&cM`Kp`+ZfMC&BBoG7-D9k34TrP$5dIij# z=-zI3cV_2$pp;);0k42pz$@St@Cy7{fgpP=aJWv#LZ!9ZiVa>%HWfWC;Ye`UpLjtO zMcMH15SU%RE*Acvdsj>@OGY1Ve`+YbKY-xBof5>5q?0L11k-|i9LG|RK9l1z7b`c2 z0)3IpT-{VVS%0hn_@dd7@+3(<=IR)Q_U9vU%?-iGcu!n9Y6yPEZrf z^qE)0)`}#VIlLW=n?B=TwU~O-o8hK8oqH(-IGK5`8Mm>e2~c+aqS=5}mdj&sX;@kT zg7O&X+gc|AJO*1(J>Q7{8u5=zZ)&r5B2dK#=tKaMx_$#sFZy|ZBs&H200000NkvXX Hu0mjfbYzoH literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_15.png b/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_15.png new file mode 100644 index 0000000000000000000000000000000000000000..01ce8b4944339900c1ebe0e56759c6a2406988a1 GIT binary patch literal 486 zcmV@P)XexojSRw!ix4Wy@vX?|) zY$$b_7^}Y8tW$Ap9&qH4X4(S}(JMF9Rr+EzYtc z5QjaMEdB90=EXi-_`c9XRC%}phCO?Y}v&)pnNzoL zlX~8318{52#CS;=72elo04Ld`6ZHiMbPb$e0VnwwES9M^WdDEP0^SO@MxSFTdC!Uf zNrZEQXVyKN0EZMOniY5yeWpQimK_0tG7XfiyF`F#u!4sA5&<~khb(kzd6o!_QGgNw c+*GZB4;9nlJy7^e^8f$<07*qoM6N<$f}2##w*UYD literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_2.png b/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_2.png new file mode 100644 index 0000000000000000000000000000000000000000..05a9a89d9a8addc52ee3c065fd2eb3ea5c923d14 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ37#&FArYL(2@Qm4YjxHyLDQp_7B9;s(mPzopr0Kb?*GXMYp literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_3.png b/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_3.png new file mode 100644 index 0000000000000000000000000000000000000000..d2046266b600a76172ced2bddf38c1d565c38cb2 GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJY)==*kOyj-#Va6 O7(8A5T-G@yGywqAU_H11 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_5.png b/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_5.png new file mode 100644 index 0000000000000000000000000000000000000000..bb9da73f71226163ba14ef47ed4564e908d0b125 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ`<^b2ArYL(2@4qhus5AKbLPK@ z#K8kDooN%|zCWI?Y1E{|zK8Ss!V^Uk(z;|Aj1rcs>UStf2RvbzI5qmjHi=~umDn42 zBrlj8;9$9y^-%0<-HPc3$}MO)x@gikrj57GK>k z#~iMcg0~X{KFf!ND_FCoh^Z0{S1h>yI*GMjbM7 V_*Lp%mIu(Q44$rjF6*2UngBoAXD0vv literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_6.png b/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_6.png new file mode 100644 index 0000000000000000000000000000000000000000..0736f7b9a75a848715f715cd0831da10bea4dc7c GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJvz{)FArYL(2@?)$6B}Y;Iv)x|9O@r))=(U zVmYy0VZzLrKkJ(vc_bbi&3~oHuxXE91YgemFE1~z%(K($Z#e2Wt+}Q*TyU*Q`joItxf~Gd1W(__@ukPS3 z8He60{u7xU9Q{3+SY9qa!Fa`^LBx{b3A5K_1_pzN9?@*uOF{l)@O1TaS?83{1OVrx BVO9VD literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_7.png b/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_7.png new file mode 100644 index 0000000000000000000000000000000000000000..c606f14cd85e01f93a0b82086d808ad3b3c0b6c5 GIT binary patch literal 375 zcmV--0f_#IP)KyV8S&CSlIF5j!Yl{*Vz=23ycKFz;4*m&wC*O-SyU+*nmiY zjQq3)8pRs*Z;reK908gJEP$o~3!rJh0u%v~h9CkIg@w!9IgU_UmNRIjX`1UpMkrWO zxI`1psgHy-C}9=e`obzZmB*?PrK##}xj?Z0!R+!whOVC}_k9R4kNkXB4)0nUb= z8p(T*2-v&!@dgX9j^;y-F{=E!Ci4jajsR_^NI;0{M*rE0U-(y36KZ01|CVE Veu#cYQ6~TZ002ovPDHLkV1ffLmmdHC literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_8.png b/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_8.png new file mode 100644 index 0000000000000000000000000000000000000000..d4cfcb35da8609926a27b48a25d9c2ce1bab6a6a GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJDo+>3kO5yrNh6CRsO9GUR8x@uSHm30>dBzPNP#2!TkhAZ!apEGc9)&pI^ N;OXk;vd$@?2>`>3Jc9rL literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_9.png b/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/excable_9.png new file mode 100644 index 0000000000000000000000000000000000000000..49abe322949bfd0e1db431be7bcd29fd072757ee GIT binary patch literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ2c9mDArYL(2@4qhus5AKbLPK@ z#K8kDooN%|zCWI?Y1E{|zK8Ss!V^Uk(z;|Aj1rcs>UStf2RvbzI5qmjHi=~umDn42 z7Mk!Lka05NJ;f-^lcaHqQNjBpA7hq^15n2$pG+o}nT}!=vd?@A8Cf>ZSfjDP?Nz&F zL&_|vqxvVO9WvpW@pOU3@~KaI4DK(ytiYWZxz;a&Psg_QSIL}L7rzRhPG^Z^3F6tz zGwpzx)Ul?s45_A35j@2T$}8;JMVD`=;eEs&6X8^P|B#OCQg`PB6Bai(!4}HFz@V<< VSKRW<#T)2X22WQ%mvv4FO#mQUV$=Wt literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/meta.json b/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/meta.json new file mode 100644 index 0000000000..58fb0e4d29 --- /dev/null +++ b/Resources/Textures/Structures/Power/Cables/ex_cable.rsi/meta.json @@ -0,0 +1,75 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/fcf375d7d9ce6ceed5c7face899725e5655ab640, striping added by IProduceWidgets", + "states": [ + { + "name": "excable_0" + + }, + { + "name": "excable_1" + + }, + { + "name": "excable_2" + + }, + { + "name": "excable_3" + + }, + { + "name": "excable_4" + + }, + { + "name": "excable_5" + + }, + { + "name": "excable_6" + + }, + { + "name": "excable_7" + + }, + { + "name": "excable_8" + + }, + { + "name": "excable_9" + + }, + { + "name": "excable_10" + + }, + { + "name": "excable_11" + + }, + { + "name": "excable_12" + + }, + { + "name": "excable_13" + + }, + { + "name": "excable_14" + + }, + { + "name": "excable_15" + + } + ] +}