]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
More Resilient Grenades (#34499)
authorNox <nebulousnox38@gmail.com>
Tue, 11 Nov 2025 18:49:25 +0000 (10:49 -0800)
committerGitHub <noreply@github.com>
Tue, 11 Nov 2025 18:49:25 +0000 (18:49 +0000)
* Inital commit

* Balanced damage to explode instantly

* Rebalanced based on suggestions

* matched all grenade instant thresholds to 45 damage.

Signed-off-by: Nox38 <nebulousnox38@gmail.com>
* Redid files and values

Signed-off-by: Nox38 <nebulousnox38@gmail.com>
* Minor spelling mistake

Signed-off-by: Nox38 <nebulousnox38@gmail.com>
* Moved abstracts and fixed typo in comments

Signed-off-by: Nox38 <nebulousnox38@gmail.com>
---------

Signed-off-by: Nox38 <nebulousnox38@gmail.com>
Resources/Prototypes/Entities/Objects/Weapons/Throwable/base_grenades.yml [new file with mode: 0644]
Resources/Prototypes/Entities/Objects/Weapons/Throwable/canister_grenades.yml [new file with mode: 0644]
Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml
Resources/Prototypes/Entities/Objects/Weapons/Throwable/projectile_grenades.yml
Resources/Prototypes/Entities/Objects/Weapons/Throwable/scattering_grenades.yml

diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/base_grenades.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/base_grenades.yml
new file mode 100644 (file)
index 0000000..8f2f754
--- /dev/null
@@ -0,0 +1,87 @@
+- type: entity # Starts fuse after taking 10 damage.
+  parent: BaseItem
+  abstract: true
+  id: GrenadeBase
+  components:
+  - type: Sprite
+    sprite: Objects/Weapons/Grenades/grenade.rsi
+    layers:
+    - state: icon
+      map: ["enum.TriggerVisualLayers.Base"]
+  - type: Item
+    size: Small
+  - type: Clothing
+    quickEquip: false
+    slots:
+    - Belt
+  - type: TriggerOnUse
+  - type: TimerTrigger
+    delay: 3
+  - type: Damageable
+    damageContainer: Inorganic
+  - type: Destructible
+    thresholds:
+    - trigger: # Start fuse
+        !type:DamageTrigger
+        damage: 10
+      behaviors:
+      - !type:TimerStartBehavior
+  - type: Appearance
+  - type: AnimationPlayer
+  - type: GenericVisualizer
+    visuals:
+      enum.Trigger.TriggerVisuals.VisualState:
+        enum.ConstructionVisuals.Layer:
+          Primed: { state: primed }
+          Unprimed: { state: icon }
+  - type: Tag
+    tags:
+    - HandGrenade
+  - type: Fixtures
+    fixtures:
+      fix1:
+        shape: !type:PhysShapeCircle
+          radius: 0.2
+        density: 20 # derived from base_item
+        mask:
+        - ItemMask
+        restitution: 0.3
+        friction: 0.2
+
+- type: entity # Starts fuse after taking 10 damage, instantly detonates/activates after taking 45 damage.
+  abstract: true
+  id: VolatileGrenadeBase
+  components:
+  - type: Destructible
+    thresholds:
+    - trigger:
+        !type:DamageTrigger
+        damage: 10
+      behaviors:
+      - !type:TimerStartBehavior
+    - trigger: # immediately explode
+        !type:DamageTrigger
+        damage: 45
+      behaviors:
+      - !type:TriggerBehavior
+        keyOut: timer
+      - !type:DoActsBehavior
+        acts: ["Destruction"]
+
+- type: entity # Starts fuse after taking 10 damage, is destroyed without activating/detonating after taking 45 damage.
+  abstract: true
+  id: FragileGrenadeBase
+  components:
+  - type: Destructible
+    thresholds:
+    - trigger:
+        !type:DamageTrigger
+        damage: 10
+      behaviors:
+      - !type:TimerStartBehavior
+    - trigger: # Disappear
+        !type:DamageTrigger
+        damage: 45
+      behaviors:
+      - !type:DoActsBehavior
+        acts: ["Destruction"]
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/canister_grenades.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/canister_grenades.yml
new file mode 100644 (file)
index 0000000..31cb00f
--- /dev/null
@@ -0,0 +1,117 @@
+- type: entity
+  parent: [VolatileGrenadeBase, GrenadeBase, BaseSecurityContraband ]
+  id: SmokeGrenade
+  name: smoke grenade
+  description: A tactical grenade that releases a large, long-lasting cloud of smoke when used.
+  components:
+  - type: Sprite
+    sprite: Objects/Weapons/Grenades/smoke.rsi
+  - type: SmokeOnTrigger
+    keysIn:
+    - timer
+    duration: 30
+    spreadAmount: 50
+  - type: EmitSoundOnTrigger
+    keysIn:
+    - timer
+    sound: /Audio/Items/smoke_grenade_smoke.ogg
+    positional: true
+  - type: DeleteOnTrigger
+    keysIn:
+    - timer
+  - type: TimerTriggerVisuals
+    primingSound:
+      path: /Audio/Items/smoke_grenade_prime.ogg
+
+- type: entity
+  parent: [ BaseCivilianContraband, SmokeGrenade ]
+  id: CleanerGrenade
+  name: cleanade
+  description: Special grenade for janitors, releasing large cloud of space cleaner foam.
+  components:
+  - type: Sprite
+    sprite: Objects/Weapons/Grenades/janitor.rsi
+  - type: SmokeOnTrigger
+    keysIn:
+    - timer
+    duration: 15
+    spreadAmount: 50
+    smokePrototype: Foam
+    solution:
+      reagents:
+      - ReagentId: SpaceCleaner
+        Quantity: 30
+
+- type: entity
+  parent: SmokeGrenade
+  id: TearGasGrenade
+  name: tear gas grenade
+  description: A riot control tear gas grenade. Causes irritation, pain and makes you cry your eyes out.
+  components:
+  - type: Sprite
+    sprite: Objects/Weapons/Grenades/tear_gas.rsi
+  - type: SmokeOnTrigger
+    keysIn:
+    - timer
+    duration: 10
+    spreadAmount: 30
+    smokePrototype: TearGasSmokeWhite
+    solution:
+      reagents:
+      - ReagentId: TearGas
+        Quantity: 20
+
+- type: entity
+  parent: [ BaseEngineeringContraband, SmokeGrenade ]
+  id: MetalFoamGrenade
+  name: metal foam grenade
+  description: An emergency tool used for patching hull breaches with special quick-set metal foam. Almost as good as real floors!
+  components:
+  - type: Sprite
+    sprite: Objects/Weapons/Grenades/metalfoam.rsi
+  - type: TimerTrigger
+    delay: 5
+  - type: SmokeOnTrigger
+    keysIn:
+    - timer
+    duration: 10
+    spreadAmount: 20
+    smokePrototype: AluminiumMetalFoam
+  - type: StaticPrice
+    price: 350
+
+- type: entity
+  parent: [ BaseEngineeringContraband, VolatileGrenadeBase, GrenadeBase ] # Prevent inheriting DeleteOnTrigger from SmokeGrenade
+  id: AirGrenade
+  name: air grenade
+  description: A special solid state chemical grenade used for quickly releasing standard air into a spaced area. Fills up to 30 tiles!
+  components:
+  - type: Sprite
+    sprite: Objects/Weapons/Grenades/airboom.rsi
+  - type: EmitSoundOnTrigger
+    keysIn:
+    - timer
+    sound: /Audio/Items/smoke_grenade_smoke.ogg
+  - type: TimerTriggerVisuals
+    primingSound:
+      path: /Audio/Items/smoke_grenade_prime.ogg
+  - type: TimerTrigger
+    delay: 3
+  - type: ReleaseGasOnTrigger
+    keysIn:
+    - timer
+    removeFraction: 0.25
+    air:
+      volume: 1000
+      moles: # Target is 3117.84 mols total for filling 30 tiles (goal is 101.325 kPa @ 20C)
+        Oxygen: 654.7464 # oxygen
+        Nitrogen: 2463.0936 # nitrogen
+      temperature: 293.15
+  - type: StaticPrice
+    price: 350
+  - type: GenericVisualizer
+    visuals:
+      enum.ReleaseGasOnTriggerVisuals.Key:
+        enabled:
+          True: { state: active }
+          False: { state: spent }
index a4c0d43b9e795c6587b631dc72a370cd698f7a8e..6fb94e1f0aac019bfad3f5fe36cfa17113254165 100644 (file)
@@ -1,60 +1,7 @@
-- type: entity
-  abstract: true
-  parent: BaseItem
-  id: GrenadeBase
-  components:
-  - type: Sprite
-    sprite: Objects/Weapons/Grenades/grenade.rsi
-    layers:
-    - state: icon
-      map: ["enum.TriggerVisualLayers.Base"]
-  - type: Item
-    size: Small
-  - type: Clothing
-    quickEquip: false
-    slots:
-    - Belt
-  - type: TriggerOnUse
-  - type: TimerTrigger
-    delay: 3
-  - type: Damageable
-    damageContainer: Inorganic
-  - type: Destructible
-    thresholds:
-    - trigger:
-        !type:DamageTrigger
-        damage: 10
-      behaviors:
-      - !type:TriggerBehavior
-        keyOut: timer # explode immediately
-      - !type:DoActsBehavior
-        acts: ["Destruction"]
-  - type: Appearance
-  - type: AnimationPlayer
-  - type: GenericVisualizer
-    visuals:
-      enum.Trigger.TriggerVisuals.VisualState:
-        enum.ConstructionVisuals.Layer:
-          Primed: { state: primed }
-          Unprimed: { state: icon }
-  - type: Tag
-    tags:
-    - HandGrenade
-  - type: Fixtures
-    fixtures:
-      fix1:
-        shape: !type:PhysShapeCircle
-          radius: 0.2
-        density: 20 # derived from base_item
-        mask:
-        - ItemMask
-        restitution: 0.3
-        friction: 0.2
-
 - type: entity
   name: explosive grenade
   description: Grenade that creates a small but devastating explosion.
-  parent: [GrenadeBase, BaseSyndicateContraband]
+  parent: [VolatileGrenadeBase, GrenadeBase, BaseSyndicateContraband]
   id: ExGrenade
   components:
   - type: ExplodeOnTrigger
@@ -77,7 +24,7 @@
 - type: entity
   name: flashbang
   description: Eeeeeeeeeeeeeeeeeeeeee.
-  parent: [ GrenadeBase, BaseSecurityContraband ]
+  parent: [ FragileGrenadeBase, GrenadeBase, BaseSecurityContraband ]
   id: GrenadeFlashBang
   components:
   - type: Sprite
 - type: entity
   name: syndicate minibomb
   description: A syndicate-manufactured explosive used to stow destruction and cause chaos.
-  parent: [GrenadeBase, BaseSyndicateContraband]
+  parent: [VolatileGrenadeBase, GrenadeBase, BaseSyndicateContraband]
   id: SyndieMiniBomb
   components:
   - type: Sprite
     sprite: Objects/Weapons/Grenades/syndgrenade.rsi
   - type: ExplosionResistance
     damageCoefficient: 0.1
-  - type: Destructible
-    thresholds:
-    - trigger:
-        !type:DamageTrigger
-        damage: 10
-      behaviors:
-      - !type:TimerStartBehavior
-    - trigger:
-        !type:DamageTrigger
-        damage: 45
-      behaviors:
-      - !type:TriggerBehavior
-        keyOut: timer # immediately explode
-      - !type:DoActsBehavior
-        acts: ["Destruction"]
   - type: TimerTrigger
     delay: 5
   - type: ExplodeOnTrigger
 
 
 - type: entity
-  parent: [ GrenadeBase, BaseSyndicateContraband ]
+  parent: [ FragileGrenadeBase, GrenadeBase, BaseSyndicateContraband ]
   id: SingularityGrenade
   name: singularity grenade
   description: Grenade that simulates the power of a singularity, pulling things in a heap.
 - type: entity
   name: EMP grenade
   description: A grenade designed to wreak havoc on electronic systems.
-  parent: [GrenadeBase, BaseSyndicateContraband]
+  parent: [FragileGrenadeBase, GrenadeBase, BaseSyndicateContraband]
   id: EmpGrenade
   components:
   - type: Sprite
   - type: StaticPrice
     price: 10000
 
-- type: entity
-  parent: [ GrenadeBase, BaseSecurityContraband ]
-  id: SmokeGrenade
-  name: smoke grenade
-  description: A tactical grenade that releases a large, long-lasting cloud of smoke when used.
-  components:
-  - type: Sprite
-    sprite: Objects/Weapons/Grenades/smoke.rsi
-  - type: SmokeOnTrigger
-    keysIn:
-    - timer
-    duration: 30
-    spreadAmount: 50
-  - type: EmitSoundOnTrigger
-    keysIn:
-    - timer
-    sound: /Audio/Items/smoke_grenade_smoke.ogg
-    positional: true
-  - type: DeleteOnTrigger
-    keysIn:
-    - timer
-  - type: TimerTriggerVisuals
-    primingSound:
-      path: /Audio/Items/smoke_grenade_prime.ogg
-
-- type: entity
-  parent: [ BaseCivilianContraband, SmokeGrenade ]
-  id: CleanerGrenade
-  name: cleanade
-  description: Special grenade for janitors, releasing large cloud of space cleaner foam.
-  components:
-  - type: Sprite
-    sprite: Objects/Weapons/Grenades/janitor.rsi
-  - type: SmokeOnTrigger
-    keysIn:
-    - timer
-    duration: 15
-    spreadAmount: 50
-    smokePrototype: Foam
-    solution:
-      reagents:
-      - ReagentId: SpaceCleaner
-        Quantity: 30
-
-- type: entity
-  parent: SmokeGrenade
-  id: TearGasGrenade
-  name: tear gas grenade
-  description: A riot control tear gas grenade. Causes irritation, pain and makes you cry your eyes out.
-  components:
-  - type: Sprite
-    sprite: Objects/Weapons/Grenades/tear_gas.rsi
-  - type: SmokeOnTrigger
-    keysIn:
-    - timer
-    duration: 10
-    spreadAmount: 30
-    smokePrototype: TearGasSmokeWhite
-    solution:
-      reagents:
-      - ReagentId: TearGas
-        Quantity: 20
-
-- type: entity
-  parent: [ BaseEngineeringContraband, SmokeGrenade ]
-  id: MetalFoamGrenade
-  name: metal foam grenade
-  description: An emergency tool used for patching hull breaches with special quick-set metal foam. Almost as good as real floors!
-  components:
-  - type: Sprite
-    sprite: Objects/Weapons/Grenades/metalfoam.rsi
-  - type: TimerTrigger
-    delay: 5
-  - type: SmokeOnTrigger
-    keysIn:
-    - timer
-    duration: 10
-    spreadAmount: 20
-    smokePrototype: AluminiumMetalFoam
-  - type: StaticPrice
-    price: 350
-
-- type: entity
-  parent: [ BaseEngineeringContraband, GrenadeBase ] # Prevent inheriting DeleteOnTrigger from SmokeGrenade
-  id: AirGrenade
-  name: air grenade
-  description: A special solid state chemical grenade used for quickly releasing standard air into a spaced area. Fills up to 30 tiles!
-  components:
-  - type: Sprite
-    sprite: Objects/Weapons/Grenades/airboom.rsi
-  - type: EmitSoundOnTrigger
-    keysIn:
-    - timer
-    sound: /Audio/Items/smoke_grenade_smoke.ogg
-  - type: TimerTriggerVisuals
-    primingSound:
-      path: /Audio/Items/smoke_grenade_prime.ogg
-  - type: TimerTrigger
-    delay: 3
-  - type: ReleaseGasOnTrigger
-    keysIn:
-    - timer
-    removeFraction: 0.25
-    air:
-      volume: 1000
-      moles: # Target is 3117.84 mols total for filling 30 tiles (goal is 101.325 kPa @ 20C)
-        Oxygen: 654.7464 # oxygen
-        Nitrogen: 2463.0936 # nitrogen
-      temperature: 293.15
-  - type: StaticPrice
-    price: 350
-  - type: GenericVisualizer
-    visuals:
-      enum.ReleaseGasOnTriggerVisuals.Key:
-        enabled:
-          True: { state: active }
-          False: { state: spent }
-
 # Non-explosive "dummy" grenades to use as a distraction.
 
 - type: entity
index 0e8b758a13edc3e98b64eab7e8ea561c0993e0c4..5a3cedb901483b287536cd1c948ec7ad6e837881 100644 (file)
@@ -43,7 +43,7 @@
         friction: 0.2
 
 - type: entity
-  parent: [ProjectileGrenadeBase, BaseSecurityContraband]
+  parent: [FragileGrenadeBase, ProjectileGrenadeBase, BaseSecurityContraband]
   id: GrenadeStinger
   name: stinger grenade
   description: Nothing to see here, please disperse.
@@ -77,7 +77,7 @@
       path: /Audio/Effects/countdown.ogg
 
 - type: entity
-  parent: [ProjectileGrenadeBase, BaseSyndicateContraband]
+  parent: [FragileGrenadeBase, ProjectileGrenadeBase, BaseSyndicateContraband]
   id: GrenadeIncendiary
   name: incendiary grenade
   description: Guaranteed to light up the mood.
     price: 1500
 
 - type: entity
-  parent: [ProjectileGrenadeBase, BaseSyndicateContraband]
+  parent: [FragileGrenadeBase, ProjectileGrenadeBase, BaseSyndicateContraband]
   id: GrenadeShrapnel
   name: shrapnel grenade
   description: Releases a deadly spray of shrapnel that causes severe bleeding.
index ba2bdd230e5790f2ed348df810e98fbf47683a82..43ec57e068b70ef6f0e33b2e742ae24ce9c87472 100644 (file)
       cluster-payload: !type:Container
   - type: Damageable
     damageContainer: Inorganic
-  - type: Destructible
-    thresholds:
-    - trigger:
-        !type:DamageTrigger
-        damage: 10
-      behaviors:
-      - !type:TriggerBehavior
-        keyOut: timer # explode immediately
   - type: ScatteringGrenade
   - type: TriggerOnUse
   - type: TimerTrigger
@@ -37,7 +29,7 @@
         friction: 0.2
 
 - type: entity
-  parent: [ScatteringGrenadeBase, BaseSecurityContraband]
+  parent: [FragileGrenadeBase, ScatteringGrenadeBase, BaseSecurityContraband]
   id: ClusterBang
   name: clusterbang
   description: Can be used only with flashbangs. Explodes several times.
@@ -90,7 +82,7 @@
     positional: true
 
 - type: entity
-  parent: [ScatteringGrenadeBase, BaseSyndicateContraband]
+  parent: [VolatileGrenadeBase, ScatteringGrenadeBase, BaseSyndicateContraband]
   id: ClusterGrenade
   name: clustergrenade
   description: Why use one grenade when you can use three at once!
     price: 2500
 
 - type: entity
-  parent: [ScatteringGrenadeBase, BaseSyndicateContraband]
+  parent: [FragileGrenadeBase, ScatteringGrenadeBase, BaseSyndicateContraband]
   id: ClusterBananaPeel
   name: cluster banana peel
   description: Splits into 6 explosive banana peels after throwing, guaranteed fun!
     price: 1000
 
 - type: entity
-  parent: ScatteringGrenadeBase
+  parent: [FragileGrenadeBase, ScatteringGrenadeBase]
   id: GrenadeFoamDart
   name: foam dart grenade
   description: Releases a bothersome spray of foam darts that cause severe welching.