From 3cb1c585c53f694f5ceb9720057bb765673970ec Mon Sep 17 00:00:00 2001 From: "Mr. 27" <45323883+Dutch-VanDerLinde@users.noreply.github.com> Date: Thu, 14 Mar 2024 00:27:08 -0400 Subject: [PATCH] Pipebombs and IED rework (#25705) * inital * 2-9 * add crafting function, rename ied to fire bomb * add firebomb ignition * fikss * change damage values * add note * fix tests i think * ok * good * Review * warning --------- Co-authored-by: metalgearsloth --- .../ExplosionSystem.Processing.cs | 54 ++++++++++----- .../EntitySystems/ExplosionSystem.cs | 4 +- .../Explosion/ExplosionPrototype.cs | 6 ++ .../Locale/en-US/materials/materials.ftl | 1 + .../Entities/Objects/Materials/materials.yml | 19 ++++++ .../Weapons/Bombs/{ied.yml => firebomb.yml} | 30 ++++----- .../Objects/Weapons/Bombs/pipebomb.yml | 62 ++++++++++++++++++ .../Reagents/Materials/materials.yml | 8 +++ .../improvised/{ied.yml => firebomb.yml} | 12 ++-- .../Crafting/Graphs/improvised/pipebomb.yml | 43 ++++++++++++ .../Recipes/Crafting/improvised.yml | 21 ++++-- .../Prototypes/Recipes/Reactions/fun.yml | 15 +++++ .../Prototypes/Stacks/Materials/materials.yml | 8 +++ Resources/Prototypes/explosion.yml | 16 +++++ .../Weapons/Bombs/pipebomb.rsi/base.png | Bin 0 -> 338 bytes .../Weapons/Bombs/pipebomb.rsi/icon.png | Bin 0 -> 350 bytes .../Weapons/Bombs/pipebomb.rsi/meta.json | 31 +++++++++ .../Weapons/Bombs/pipebomb.rsi/primed.png | Bin 0 -> 494 bytes .../Weapons/Bombs/pipebomb.rsi/wires.png | Bin 0 -> 163 bytes Resources/migration.yml | 5 ++ 20 files changed, 291 insertions(+), 44 deletions(-) rename Resources/Prototypes/Entities/Objects/Weapons/Bombs/{ied.yml => firebomb.yml} (83%) create mode 100644 Resources/Prototypes/Entities/Objects/Weapons/Bombs/pipebomb.yml rename Resources/Prototypes/Recipes/Crafting/Graphs/improvised/{ied.yml => firebomb.yml} (90%) create mode 100644 Resources/Prototypes/Recipes/Crafting/Graphs/improvised/pipebomb.yml create mode 100644 Resources/Textures/Objects/Weapons/Bombs/pipebomb.rsi/base.png create mode 100644 Resources/Textures/Objects/Weapons/Bombs/pipebomb.rsi/icon.png create mode 100644 Resources/Textures/Objects/Weapons/Bombs/pipebomb.rsi/meta.json create mode 100644 Resources/Textures/Objects/Weapons/Bombs/pipebomb.rsi/primed.png create mode 100644 Resources/Textures/Objects/Weapons/Bombs/pipebomb.rsi/wires.png diff --git a/Content.Server/Explosion/EntitySystems/ExplosionSystem.Processing.cs b/Content.Server/Explosion/EntitySystems/ExplosionSystem.Processing.cs index 31451c425f..ba937d77ad 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionSystem.Processing.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionSystem.Processing.cs @@ -17,11 +17,15 @@ using Robust.Shared.Random; using Robust.Shared.Timing; using Robust.Shared.Utility; using TimedDespawnComponent = Robust.Shared.Spawners.TimedDespawnComponent; +using Content.Server.Atmos.Components; +using Content.Server.Atmos.EntitySystems; namespace Content.Server.Explosion.EntitySystems; public sealed partial class ExplosionSystem { + [Dependency] private readonly FlammableSystem _flammableSystem = default!; + /// /// Used to limit explosion processing time. See . /// @@ -95,7 +99,7 @@ public sealed partial class ExplosionSystem { // EXPLOSION TODO allow explosion spawning to be interrupted by time limit. In the meantime, ensure that // there is at-least 1ms of time left before creating a new explosion - if (MathF.Max(MaxProcessingTime - 1, 0.1f) < Stopwatch.Elapsed.TotalMilliseconds) + if (MathF.Max(MaxProcessingTime - 1, 0.1f) < Stopwatch.Elapsed.TotalMilliseconds) break; if (!_explosionQueue.TryDequeue(out var spawnNextExplosion)) @@ -130,11 +134,11 @@ public sealed partial class ExplosionSystem try { #endif - var processed = _activeExplosion.Process(tilesRemaining); - tilesRemaining -= processed; + var processed = _activeExplosion.Process(tilesRemaining); + tilesRemaining -= processed; - // has the explosion finished processing? - if (_activeExplosion.FinishedProcessing) + // has the explosion finished processing? + if (_activeExplosion.FinishedProcessing) { var comp = EnsureComp(_activeExplosion.VisualEnt); comp.Lifetime = _cfg.GetCVar(CCVars.ExplosionPersistence); @@ -203,7 +207,8 @@ public sealed partial class ExplosionSystem DamageSpecifier damage, MapCoordinates epicenter, HashSet processed, - string id) + string id, + float? fireStacks) { var size = grid.Comp.TileSize; var gridBox = new Box2(tile * size, (tile + 1) * size); @@ -222,7 +227,7 @@ public sealed partial class ExplosionSystem // process those entities foreach (var (uid, xform) in list) { - ProcessEntity(uid, epicenter, damage, throwForce, id, xform); + ProcessEntity(uid, epicenter, damage, throwForce, id, xform, fireStacks); } // process anchored entities @@ -232,7 +237,7 @@ public sealed partial class ExplosionSystem foreach (var entity in _anchored) { processed.Add(entity); - ProcessEntity(entity, epicenter, damage, throwForce, id, null); + ProcessEntity(entity, epicenter, damage, throwForce, id, null, fireStacks); } // Walls and reinforced walls will break into girders. These girders will also be considered turf-blocking for @@ -268,7 +273,7 @@ public sealed partial class ExplosionSystem { // Here we only throw, no dealing damage. Containers n such might drop their entities after being destroyed, but // they should handle their own damage pass-through, with their own damage reduction calculation. - ProcessEntity(uid, epicenter, null, throwForce, id, xform); + ProcessEntity(uid, epicenter, null, throwForce, id, xform, null); } return !tileBlocked; @@ -303,7 +308,8 @@ public sealed partial class ExplosionSystem DamageSpecifier damage, MapCoordinates epicenter, HashSet processed, - string id) + string id, + float? fireStacks) { var gridBox = Box2.FromDimensions(tile * DefaultTileSize, new Vector2(DefaultTileSize, DefaultTileSize)); var worldBox = spaceMatrix.TransformBox(gridBox); @@ -319,7 +325,7 @@ public sealed partial class ExplosionSystem foreach (var (uid, xform) in state.Item1) { processed.Add(uid); - ProcessEntity(uid, epicenter, damage, throwForce, id, xform); + ProcessEntity(uid, epicenter, damage, throwForce, id, xform, fireStacks); } if (throwForce <= 0) @@ -333,7 +339,7 @@ public sealed partial class ExplosionSystem foreach (var (uid, xform) in list) { - ProcessEntity(uid, epicenter, null, throwForce, id, xform); + ProcessEntity(uid, epicenter, null, throwForce, id, xform, fireStacks); } } @@ -430,7 +436,8 @@ public sealed partial class ExplosionSystem DamageSpecifier? originalDamage, float throwForce, string id, - TransformComponent? xform) + TransformComponent? xform, + float? fireStacksOnIgnite) { if (originalDamage != null) { @@ -439,6 +446,17 @@ public sealed partial class ExplosionSystem { // TODO EXPLOSIONS turn explosions into entities, and pass the the entity in as the damage origin. _damageableSystem.TryChangeDamage(entity, damage, ignoreResistances: true); + + } + } + + // ignite + if (fireStacksOnIgnite != null) + { + if (_flammableQuery.TryGetComponent(uid, out var flammable)) + { + flammable.FireStacks += fireStacksOnIgnite.Value; + _flammableSystem.Ignite(uid, uid, flammable); } } @@ -705,14 +723,14 @@ sealed class Explosion { _currentIntensity = _tileSetIntensity[CurrentIteration]; - #if DEBUG +#if DEBUG if (_expectedDamage != null) { // Check that explosion processing hasn't somehow accidentally mutated the damage set. DebugTools.Assert(_expectedDamage.Equals(_currentDamage)); _expectedDamage = ExplosionType.DamagePerIntensity * _currentIntensity; } - #endif +#endif _currentDamage = ExplosionType.DamagePerIntensity * _currentIntensity; @@ -811,7 +829,8 @@ sealed class Explosion _currentDamage, Epicenter, ProcessedEntities, - ExplosionType.ID); + ExplosionType.ID, + ExplosionType.FireStacks); // If the floor is not blocked by some dense object, damage the floor tiles. if (canDamageFloor) @@ -828,7 +847,8 @@ sealed class Explosion _currentDamage, Epicenter, ProcessedEntities, - ExplosionType.ID); + ExplosionType.ID, + ExplosionType.FireStacks); } if (!MoveNext()) diff --git a/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs b/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs index 1a5a5c4011..24ccf611bd 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs @@ -52,7 +52,7 @@ public sealed partial class ExplosionSystem : EntitySystem [Dependency] private readonly SharedMapSystem _map = default!; private EntityQuery _transformQuery; - private EntityQuery _damageQuery; + private EntityQuery _flammableQuery; private EntityQuery _physicsQuery; private EntityQuery _projectileQuery; @@ -104,7 +104,7 @@ public sealed partial class ExplosionSystem : EntitySystem InitVisuals(); _transformQuery = GetEntityQuery(); - _damageQuery = GetEntityQuery(); + _flammableQuery = GetEntityQuery(); _physicsQuery = GetEntityQuery(); _projectileQuery = GetEntityQuery(); } diff --git a/Content.Shared/Explosion/ExplosionPrototype.cs b/Content.Shared/Explosion/ExplosionPrototype.cs index 1be3e31939..ec9f2efa1e 100644 --- a/Content.Shared/Explosion/ExplosionPrototype.cs +++ b/Content.Shared/Explosion/ExplosionPrototype.cs @@ -25,6 +25,12 @@ public sealed partial class ExplosionPrototype : IPrototype [DataField("damagePerIntensity", required: true)] public DamageSpecifier DamagePerIntensity = default!; + /// + /// Amount of firestacks to apply in addition to igniting. + /// + [DataField] + public float? FireStacks; + /// /// This set of points, together with define a function that maps the /// explosion intensity to a tile break chance via linear interpolation. diff --git a/Resources/Locale/en-US/materials/materials.ftl b/Resources/Locale/en-US/materials/materials.ftl index dca520b5b4..a354423d2b 100644 --- a/Resources/Locale/en-US/materials/materials.ftl +++ b/Resources/Locale/en-US/materials/materials.ftl @@ -25,6 +25,7 @@ materials-meat = meat materials-web = silk materials-bones = bone materials-coal = coal +materials-gunpowder = gunpowder # Ores materials-raw-iron = raw iron diff --git a/Resources/Prototypes/Entities/Objects/Materials/materials.yml b/Resources/Prototypes/Entities/Objects/Materials/materials.yml index e71a163b5d..d11df5d94e 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/materials.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/materials.yml @@ -571,3 +571,22 @@ components: - type: Stack count: 1 + +- type: entity + parent: MaterialBase + id: MaterialGunpowder + name: gunpowder + description: An explosive compound. + components: + - type: Stack + stackType: Gunpowder + count: 1 + - type: Sprite + sprite: Objects/Misc/reagent_fillings.rsi + state: powderpile + color: darkgray + - type: PhysicalComposition + materialComposition: + Gunpowder: 100 + - type: Item + size: Tiny \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/ied.yml b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/firebomb.yml similarity index 83% rename from Resources/Prototypes/Entities/Objects/Weapons/Bombs/ied.yml rename to Resources/Prototypes/Entities/Objects/Weapons/Bombs/firebomb.yml index c4420a43a3..a0e6fe7728 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/ied.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/firebomb.yml @@ -3,8 +3,8 @@ # with that you could make napalm ied instead of welding fuel with no additional complexity - type: entity parent: BaseItem - id: ImprovisedExplosive - name: improvised explosive device + id: FireBomb + name: fire bomb description: A weak, improvised incendiary device. components: - type: Sprite @@ -26,10 +26,10 @@ volume: 1 - type: RandomTimerTrigger min: 0 - max: 60 - - type: Explosive # Weak explosion in a very small radius. Doesn't break underplating. - explosionType: Default - totalIntensity: 20 + max: 15 + - type: Explosive # Weak explosion in a very small radius. Ignites surrounding entities. + explosionType: FireBomb + totalIntensity: 25 intensitySlope: 5 maxIntensity: 3 canCreateVacuum: false @@ -50,14 +50,14 @@ acts: ["Destruction"] - !type:ExplodeBehavior - type: Construction - graph: ImprovisedExplosive - node: ied + graph: FireBomb + node: firebomb # has igniter but no fuel or wires - type: entity parent: DrinkColaCanEmpty - id: ImprovisedExplosiveEmpty - name: improvised explosive device + id: FireBombEmpty + name: fire bomb suffix: empty description: A weak, improvised incendiary device. This one has no fuel. components: @@ -74,17 +74,17 @@ True: {state: "base"} False: {state: "base"} - type: Construction - graph: ImprovisedExplosive + graph: FireBomb node: empty - defaultTarget: ied + defaultTarget: firebomb - type: Tag tags: - Trash # no DrinkCan, prevent using it to make another ied - type: entity - parent: ImprovisedExplosiveEmpty - id: ImprovisedExplosiveFuel + parent: FireBombEmpty + id: FireBombFuel suffix: fuel description: A weak, improvised incendiary device. This one is missing wires. components: @@ -102,6 +102,6 @@ Quantity: 30 - type: Construction node: fuel - defaultTarget: ied + defaultTarget: firebomb - type: Tag tags: [] diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/pipebomb.yml b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/pipebomb.yml new file mode 100644 index 0000000000..5fb6829ac2 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/pipebomb.yml @@ -0,0 +1,62 @@ +- type: entity + parent: GrenadeBase + id: PipeBomb + name: pipe bomb + description: An improvised explosive made from pipes and wire. + components: + - type: Sprite + sprite: Objects/Weapons/Bombs/pipebomb.rsi + layers: + - state: base + map: ["enum.TriggerVisualLayers.Base"] + - state: wires + - type: OnUseTimerTrigger # todo: make it activate through welder/lighter/fire instead + delay: 5 + examinable: false + initialBeepDelay: 0 + beepSound: /Audio/Effects/lightburn.ogg + - type: RandomTimerTrigger + min: 1 + max: 10 + - type: ExplodeOnTrigger + - type: Explosive # Weak explosion in a very small radius. Doesn't break underplating. + explosionType: Default + totalIntensity: 50 + intensitySlope: 5 + maxIntensity: 6 + canCreateVacuum: false + - type: Appearance + - type: TimerTriggerVisuals + - type: Construction + graph: PipeBomb + node: pipebomb + +- type: entity + parent: BaseItem + id: PipeBombGunpowder + name: pipe bomb + description: An improvised explosive made from a pipe. This one has no gunpowder. + suffix: Gunpowder + components: + - type: Sprite + sprite: Objects/Weapons/Bombs/pipebomb.rsi + state: base + - type: Construction + graph: PipeBomb + node: gunpowder + defaultTarget: pipebomb + +- type: entity + parent: BaseItem + id: PipeBombCable + name: pipe bomb + description: An improvised explosive made from a pipe. This one has no cable. + suffix: Cable + components: + - type: Sprite + sprite: Objects/Weapons/Bombs/pipebomb.rsi + state: base + - type: Construction + graph: PipeBomb + node: cable + defaultTarget: pipebomb \ No newline at end of file diff --git a/Resources/Prototypes/Reagents/Materials/materials.yml b/Resources/Prototypes/Reagents/Materials/materials.yml index fa51608a22..9446b9d27f 100644 --- a/Resources/Prototypes/Reagents/Materials/materials.yml +++ b/Resources/Prototypes/Reagents/Materials/materials.yml @@ -116,3 +116,11 @@ icon: { sprite: Objects/Materials/ore.rsi, state: coal } color: "#404040" price: 0 + +- type: material + id: Gunpowder + name: materials-gunpowder + unit: materials-unit-piece + icon: { sprite: Objects/Misc/reagent_fillings.rsi, state: powderpile } + color: "#A9A9A9" + price: 0 \ No newline at end of file diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/ied.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/firebomb.yml similarity index 90% rename from Resources/Prototypes/Recipes/Crafting/Graphs/improvised/ied.yml rename to Resources/Prototypes/Recipes/Crafting/Graphs/improvised/firebomb.yml index bdf06e558f..529585583c 100644 --- a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/ied.yml +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/firebomb.yml @@ -1,5 +1,5 @@ - type: constructionGraph - id: ImprovisedExplosive + id: FireBomb start: start graph: - node: start @@ -19,7 +19,7 @@ state: icon doAfter: 1 - node: empty - entity: ImprovisedExplosiveEmpty + entity: FireBombEmpty edges: - to: start completed: @@ -42,7 +42,7 @@ - tool: Screwing doAfter: 1 - node: fuel - entity: ImprovisedExplosiveFuel + entity: FireBombFuel edges: - to: empty conditions: @@ -51,7 +51,7 @@ steps: - tool: Screwing doAfter: 1 - - to: ied + - to: firebomb conditions: # no dumping out 29u of the fuel then adding wires :) - !type:MinSolution solution: drink @@ -62,8 +62,8 @@ - material: Cable amount: 5 doAfter: 2 - - node: ied - entity: ImprovisedExplosive + - node: firebomb + entity: FireBomb edges: - to: fuel completed: diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/pipebomb.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/pipebomb.yml new file mode 100644 index 0000000000..bc661b47d9 --- /dev/null +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/pipebomb.yml @@ -0,0 +1,43 @@ +- type: constructionGraph + id: PipeBomb + start: start + graph: + - node: start + edges: + - to: gunpowder + steps: + - tag: Pipe + icon: + sprite: Structures/Piping/Atmospherics/pipe.rsi + state: pipeStraight + name: pipe + - material: Steel + amount: 1 + doAfter: 3 + - node: gunpowder + entity: PipeBombGunpowder + edges: + - to: cable + steps: + - material: Gunpowder + amount: 5 + doAfter: 3 + - node: cable + entity: PipeBombCable + edges: + - to: pipebomb + steps: + - material: Cable + amount: 5 + doAfter: 2 + - node: pipebomb + entity: PipeBomb + edges: + - to: cable + completed: + - !type:SpawnPrototype + prototype: CableApcStack1 + amount: 5 + steps: + - tool: Cutting + doAfter: 2 diff --git a/Resources/Prototypes/Recipes/Crafting/improvised.yml b/Resources/Prototypes/Recipes/Crafting/improvised.yml index 23b9eb2c92..7414837592 100644 --- a/Resources/Prototypes/Recipes/Crafting/improvised.yml +++ b/Resources/Prototypes/Recipes/Crafting/improvised.yml @@ -190,11 +190,11 @@ state: icon - type: construction - name: improvised explosive device - id: improvisedexplosive - graph: ImprovisedExplosive + name: fire bomb + id: firebomb + graph: FireBomb startNode: start - targetNode: ied + targetNode: firebomb category: construction-category-weapons objectType: Item description: A weak, improvised incendiary device. @@ -227,3 +227,16 @@ sprite: Clothing/Head/Hats/straw_hat.rsi state: icon objectType: Item + +- type: construction + name: pipe bomb + id: pipebomb + graph: PipeBomb + startNode: start + targetNode: pipebomb + category: construction-category-weapons + objectType: Item + description: An improvised explosive made from pipes and wire. + icon: + sprite: Objects/Weapons/Bombs/pipebomb.rsi + state: icon \ No newline at end of file diff --git a/Resources/Prototypes/Recipes/Reactions/fun.yml b/Resources/Prototypes/Recipes/Reactions/fun.yml index a8ccd5f045..fd1f42f101 100644 --- a/Resources/Prototypes/Recipes/Reactions/fun.yml +++ b/Resources/Prototypes/Recipes/Reactions/fun.yml @@ -171,3 +171,18 @@ products: Laughter: 2 +- type: reaction + id: Gunpowder + impact: Low + quantized: true + minTemp: 374 + reactants: + Potassium: + amount: 6 + Sulfur: + amount: 2 + Charcoal: + amount: 2 + effects: + - !type:CreateEntityReactionEffect + entity: MaterialGunpowder \ No newline at end of file diff --git a/Resources/Prototypes/Stacks/Materials/materials.yml b/Resources/Prototypes/Stacks/Materials/materials.yml index 00153ef23c..d20bb2f347 100644 --- a/Resources/Prototypes/Stacks/Materials/materials.yml +++ b/Resources/Prototypes/Stacks/Materials/materials.yml @@ -85,3 +85,11 @@ spawn: MaterialBones1 maxCount: 30 itemSize: 1 + +- type: stack + id: Gunpowder + name: gunpowder + icon: { sprite: /Textures/Objects/Misc/reagent_fillings.rsi, state: powderpile } + spawn: MaterialGunpowder + maxCount: 60 + itemSize: 1 \ No newline at end of file diff --git a/Resources/Prototypes/explosion.yml b/Resources/Prototypes/explosion.yml index ff0c78d86e..a768dead6d 100644 --- a/Resources/Prototypes/explosion.yml +++ b/Resources/Prototypes/explosion.yml @@ -117,3 +117,19 @@ lightColor: Orange texturePath: /Textures/Effects/fire.rsi fireStates: 6 + +- type: explosion + id: FireBomb + damagePerIntensity: + types: + Heat: 1 + Blunt: 2 + Piercing: 3 + lightColor: Orange + texturePath: /Textures/Effects/fire.rsi + fireStates: 6 + fireStacks: 2 + +# STOP +# BEFORE YOU ADD MORE EXPLOSION TYPES CONSIDER IF AN EXISTING ONE IS SUITABLE +# ADDING NEW ONES IS PROHIBITIVELY EXPENSIVE diff --git a/Resources/Textures/Objects/Weapons/Bombs/pipebomb.rsi/base.png b/Resources/Textures/Objects/Weapons/Bombs/pipebomb.rsi/base.png new file mode 100644 index 0000000000000000000000000000000000000000..14d0ec58705ad336eb9384c7e64e3752c7be1f15 GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCik_0(?ST`T6FJcPPRNc++x?zdotYT4#vnJ6%Dq>E&zxaJA8fqAY&FO3)-xq9hVQPS*3uvT>F$t!wlTh8ieB7H-zyth!Nps>Z^xxe_bSBhQ?-<|jV7N2m)()~d2eg?z1Z_ QfKFlXboFyt=akR{014oQwg3PC literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Bombs/pipebomb.rsi/meta.json b/Resources/Textures/Objects/Weapons/Bombs/pipebomb.rsi/meta.json new file mode 100644 index 0000000000..b7585556c6 --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Bombs/pipebomb.rsi/meta.json @@ -0,0 +1,31 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Pipebomb sprites made by girthquake", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "base" + }, + { + "name": "wires" + }, + { + "name": "primed", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + } + ] +} diff --git a/Resources/Textures/Objects/Weapons/Bombs/pipebomb.rsi/primed.png b/Resources/Textures/Objects/Weapons/Bombs/pipebomb.rsi/primed.png new file mode 100644 index 0000000000000000000000000000000000000000..27a70981fe77d1117ea1bf2c293436c2d89799e7 GIT binary patch literal 494 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~K2Ka=yzF(w%b)xd4S*lWw;{5#la&mIMzP@d3ZLY4a92^`{Qc{tTk?Yp2 z>+I~5mzS58mX3>y+p%LuPfySG?b{_KC3o)J+0f9?+}xa$lytIF5oqex)sy}JDe00R zzu^Bk0fV{;w<%B=XMsm#F#`kNVGw3Kp1&dmDEQyg#W5tp{q3}ed`$`>ZlMCEr?==_ z{$78-cn@@F)=hfFKEI;I& zD4El^U^%~fI+JGWgb?L`JT9-LEkUZiF$sBGDJwtLGo6{aVAbngTpR)CSZ7UOc#XITArYuKqdp}$w?Mki3${r}uS&ZbOHeKxeIcrcy4&gxfRb0}$>RgB{igYzK* zW!1anm;65X?Xu-v{trL%C%t3W|HJ*_kGZ3z@ES$Ve-0aT%5C(TC;T!lvI6;>1s;*b3=Dh+L6~vJ#O${~K?_e8$B+p3x91OXGAQscA9y6xbbH7DfUXBj zi!@H$RsXBXdm}U}@AIDbE|s%(zIpll@MlH_h6CzKR!1JQ9>1JDvkPbjgQu&X%Q~lo FCIAEaHZcGI literal 0 HcmV?d00001 diff --git a/Resources/migration.yml b/Resources/migration.yml index 4d9ab7f1f9..d0f2bb702e 100644 --- a/Resources/migration.yml +++ b/Resources/migration.yml @@ -241,3 +241,8 @@ AirlockShuttleEasyPryLocked: AirlockExternalShuttleLocked ClothingBackpackFilledDetective: ClothingBackpackSecurityFilledDetective ClothingBackpackDuffelFilledDetective: ClothingBackpackDuffelSecurityFilledDetective ClothingBackpackSatchelFilledDetective: ClothingBackpackSatchelSecurityFilledDetective + +# 2024-03-11 +ImprovisedExplosive: FireBomb +ImprovisedExplosiveEmpty: FireBombEmpty +ImprovisedExplosiveFuel: FireBombFuel -- 2.51.2