Cluster grenade refactor and contra markings (#31108)

* Cluster grenade refactor

* oopsies on the name

* Solve client-side errors

* reviews addressed

* filling scattering grenades is now predicted

* reviews addressed
This commit is contained in:
Plykiya
2024-12-16 04:08:07 -08:00
committed by GitHub
parent 1266b05b02
commit a4d6f09a4f
14 changed files with 757 additions and 558 deletions

View File

@@ -1,264 +0,0 @@
- type: entity
parent: [BaseItem, BaseRestrictedContraband]
id: ClusterBang
name: clusterbang
description: Can be used only with flashbangs. Explodes several times.
components:
- type: Sprite
sprite: Objects/Weapons/Grenades/clusterbang.rsi
state: base-0
- type: Appearance
- type: ClusterGrenadeVisuals
state: base
- type: ClusterGrenade
- type: OnUseTimerTrigger
delay: 3.5
- type: ContainerContainer
containers:
cluster-payload: !type:Container
- type: entity
parent: GrenadeBase
id: ClusterBangFull
name: clusterbang
description: Launches three flashbangs after the timer runs out.
suffix: Full
components:
- type: Sprite
sprite: Objects/Weapons/Grenades/clusterbang.rsi
layers:
- state: icon
map: ["enum.TriggerVisualLayers.Base"]
- type: ClusterGrenade
fillPrototype: GrenadeFlashBang
distance: 7
velocity: 7
- type: TimerTriggerVisuals
primingSound:
path: /Audio/Effects/countdown.ogg
- type: GenericVisualizer
visuals:
enum.Trigger.TriggerVisuals.VisualState:
enum.ConstructionVisuals.Layer:
Primed: { state: primed }
Unprimed: { state: icon }
- type: EmitSoundOnTrigger
sound:
path: "/Audio/Machines/door_lock_off.ogg"
- type: ContainerContainer
containers:
cluster-payload: !type:Container
- type: entity
parent: [GrenadeBase, BaseSyndicateContraband]
id: ClusterGrenade
name: clustergrenade
description: Why use one grenade when you can use three at once!
components:
- type: Sprite
sprite: Objects/Weapons/Grenades/clusterbomb.rsi
layers:
- state: icon
map: ["enum.TriggerVisualLayers.Base"]
- type: ClusterGrenade
fillPrototype: ExGrenade
velocity: 3.5
distance: 5
- type: OnUseTimerTrigger
beepSound:
path: "/Audio/Effects/beep1.ogg"
params:
volume: 5
initialBeepDelay: 0
beepInterval: 0.5
- type: EmitSoundOnTrigger
sound:
path: "/Audio/Machines/door_lock_off.ogg"
- type: ContainerContainer
containers:
cluster-payload: !type:Container
- type: entity
parent: [BaseItem, BaseSyndicateContraband]
id: ClusterBananaPeel
name: cluster banana peel
description: Splits into 6 explosive banana peels after throwing, guaranteed fun!
components:
- type: Sprite
sprite: Objects/Specific/Hydroponics/banana.rsi
state: produce
- type: Appearance
- type: ClusterGrenade
fillPrototype: TrashBananaPeelExplosive
maxGrenadesCount: 6
baseTriggerDelay: 20
- type: DamageOnLand
damage:
types:
Blunt: 10
- type: LandAtCursor
- type: Damageable
damageContainer: Inorganic
- type: EmitSoundOnTrigger
sound:
path: "/Audio/Items/bikehorn.ogg"
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 10
behaviors:
- !type:TriggerBehavior
- !type:DoActsBehavior
acts: ["Destruction"]
- type: ContainerContainer
containers:
cluster-payload: !type:Container
- type: entity
parent: [GrenadeBase, BaseSecurityContraband]
id: GrenadeStinger
name: stinger grenade
description: Nothing to see here, please disperse.
components:
- type: Sprite
sprite: Objects/Weapons/Grenades/stingergrenade.rsi
layers:
- state: icon
map: ["enum.TriggerVisualLayers.Base"]
- type: ClusterGrenade
fillPrototype: PelletClusterRubber
maxGrenadesCount: 30
grenadeType: enum.GrenadeType.Shoot
- type: FlashOnTrigger
range: 7
- type: EmitSoundOnTrigger
sound:
path: "/Audio/Effects/flash_bang.ogg"
- type: SpawnOnTrigger
proto: GrenadeFlashEffect
- type: TimerTriggerVisuals
primingSound:
path: /Audio/Effects/countdown.ogg
- type: ContainerContainer
containers:
cluster-payload: !type:Container
- type: entity
parent: [GrenadeBase, BaseSyndicateContraband]
id: GrenadeIncendiary
name: incendiary grenade
description: Guaranteed to light up the mood.
components:
- type: Sprite
sprite: Objects/Weapons/Grenades/pyrogrenade.rsi
layers:
- state: icon
map: ["enum.TriggerVisualLayers.Base"]
- type: ClusterGrenade
fillPrototype: PelletClusterIncendiary
maxGrenadesCount: 30
grenadeType: enum.GrenadeType.Shoot
- type: OnUseTimerTrigger
beepSound:
path: "/Audio/Effects/beep1.ogg"
params:
volume: 5
initialBeepDelay: 0
beepInterval: 2
- type: EmitSoundOnTrigger
sound:
path: "/Audio/Weapons/Guns/Gunshots/batrifle.ogg"
- type: ContainerContainer
containers:
cluster-payload: !type:Container
- type: entity
parent: [GrenadeBase, BaseSyndicateContraband]
id: GrenadeShrapnel
name: shrapnel grenade
description: Releases a deadly spray of shrapnel that causes severe bleeding.
components:
- type: Sprite
sprite: Objects/Weapons/Grenades/shrapnelgrenade.rsi
layers:
- state: icon
map: ["enum.TriggerVisualLayers.Base"]
- type: ClusterGrenade
fillPrototype: PelletClusterLethal
maxGrenadesCount: 30
grenadeType: enum.GrenadeType.Shoot
- type: OnUseTimerTrigger
beepSound:
path: "/Audio/Effects/beep1.ogg"
params:
volume: 5
initialBeepDelay: 0
beepInterval: 2
- type: EmitSoundOnTrigger
sound:
path: "/Audio/Weapons/Guns/Gunshots/batrifle.ogg"
- type: ContainerContainer
containers:
cluster-payload: !type:Container
- type: entity
parent: SoapSyndie
id: SlipocalypseClusterSoap
name: slipocalypse clustersoap
description: Spreads small pieces of syndicate soap over an area upon landing on the floor.
components:
- type: Sprite
sprite: Objects/Specific/Janitorial/soap.rsi
layers:
- state: syndie-4
- type: Appearance
- type: ClusterGrenade
fillPrototype: SoapletSyndie
maxGrenadesCount: 30
grenadeTriggerIntervalMax: 0
grenadeTriggerIntervalMin: 0
baseTriggerDelay: 60
randomSpread: true
velocity: 3
- type: DamageOnLand
damage:
types:
Blunt: 10
- type: LandAtCursor
- type: EmitSoundOnTrigger
sound:
path: "/Audio/Effects/flash_bang.ogg"
- type: Damageable
damageContainer: Inorganic
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 10
behaviors:
- !type:TriggerBehavior
- !type:DoActsBehavior
acts: ["Destruction"]
- type: ContainerContainer
containers:
cluster-payload: !type:Container
- type: entity
parent: GrenadeShrapnel
id: GrenadeFoamDart
name: foam dart grenade
description: Releases a bothersome spray of foam darts that cause severe welching.
components:
- type: Sprite
sprite: Objects/Weapons/Grenades/foamdart.rsi
layers:
- state: icon
map: ["Base"]
- state: primed
map: ["enum.TriggerVisualLayers.Base"]
- type: ClusterGrenade
fillPrototype: BulletFoam
maxGrenadesCount: 30
grenadeType: enum.GrenadeType.Throw
velocity: 70

View File

@@ -81,6 +81,9 @@
guides:
- Security
- Antagonists
- type: Tag
tags:
- GrenadeFlashBang
- type: entity
id: GrenadeFlashEffect

View File

@@ -0,0 +1,105 @@
- type: entity
abstract: true
parent: BaseItem
id: ProjectileGrenadeBase
components:
- type: Appearance
- type: Damageable
damageContainer: Inorganic
- type: DeleteOnTrigger
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 10
behaviors:
- !type:TriggerBehavior
- type: ContainerContainer
containers:
cluster-payload: !type:Container
- type: ProjectileGrenade
- type: entity
parent: [ProjectileGrenadeBase, BaseRestrictedContraband]
id: GrenadeStinger
name: stinger grenade
description: Nothing to see here, please disperse.
components:
- type: Sprite
sprite: Objects/Weapons/Grenades/stingergrenade.rsi
layers:
- state: icon
map: ["enum.TriggerVisualLayers.Base"]
- type: ProjectileGrenade
fillPrototype: PelletClusterRubber
capacity: 30
- type: FlashOnTrigger
range: 7
- type: EmitSoundOnTrigger
sound:
path: "/Audio/Effects/flash_bang.ogg"
- type: SpawnOnTrigger
proto: GrenadeFlashEffect
- type: OnUseTimerTrigger
beepSound:
path: "/Audio/Effects/beep1.ogg"
params:
volume: 5
initialBeepDelay: 0
beepInterval: 2
delay: 3.5
- type: TimerTriggerVisuals
primingSound:
path: /Audio/Effects/countdown.ogg
- type: entity
parent: [ProjectileGrenadeBase, BaseSyndicateContraband]
id: GrenadeIncendiary
name: incendiary grenade
description: Guaranteed to light up the mood.
components:
- type: Sprite
sprite: Objects/Weapons/Grenades/pyrogrenade.rsi
layers:
- state: icon
map: ["enum.TriggerVisualLayers.Base"]
- type: ProjectileGrenade
fillPrototype: PelletClusterIncendiary
capacity: 30
- type: OnUseTimerTrigger
beepSound:
path: "/Audio/Effects/beep1.ogg"
params:
volume: 5
initialBeepDelay: 0
beepInterval: 2
delay: 3.5
- type: EmitSoundOnTrigger
sound:
path: "/Audio/Weapons/Guns/Gunshots/batrifle.ogg"
- type: entity
parent: [ProjectileGrenadeBase, BaseSyndicateContraband]
id: GrenadeShrapnel
name: shrapnel grenade
description: Releases a deadly spray of shrapnel that causes severe bleeding.
components:
- type: Sprite
sprite: Objects/Weapons/Grenades/shrapnelgrenade.rsi
layers:
- state: icon
map: ["enum.TriggerVisualLayers.Base"]
- type: ProjectileGrenade
fillPrototype: PelletClusterLethal
capacity: 30
- type: OnUseTimerTrigger
beepSound:
path: "/Audio/Effects/beep1.ogg"
params:
volume: 5
initialBeepDelay: 0
beepInterval: 2
delay: 3.5
- type: EmitSoundOnTrigger
sound:
path: "/Audio/Weapons/Guns/Gunshots/batrifle.ogg"

View File

@@ -0,0 +1,174 @@
# ScatteringGrenade is intended for grenades that spawn entities, especially those with timers
- type: entity
abstract: true
parent: BaseItem
id: ScatteringGrenadeBase
components:
- type: Appearance
- type: ContainerContainer
containers:
cluster-payload: !type:Container
- type: Damageable
damageContainer: Inorganic
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 10
behaviors:
- !type:TriggerBehavior
- type: ScatteringGrenade
- type: entity
parent: [ScatteringGrenadeBase, BaseRestrictedContraband]
id: ClusterBang
name: clusterbang
description: Can be used only with flashbangs. Explodes several times.
components:
- type: ScatteringGrenade
whitelist:
tags:
- GrenadeFlashBang
distance: 6
velocity: 6
- type: ClusterGrenadeVisuals
state: base
- type: Sprite
sprite: Objects/Weapons/Grenades/clusterbang.rsi
state: base-0
- type: OnUseTimerTrigger
delay: 3.5
- type: entity
parent: ClusterBang
id: ClusterBangFull
name: ClusterBang
description: Launches three flashbangs after the timer runs out.
suffix: Full
components:
- type: Sprite
sprite: Objects/Weapons/Grenades/clusterbang.rsi
layers:
- state: icon
map: ["enum.TriggerVisualLayers.Base"]
- type: ScatteringGrenade
whitelist:
tags:
- GrenadeFlashBang
fillPrototype: GrenadeFlashBang
distance: 6
velocity: 6
- type: TimerTriggerVisuals
primingSound:
path: /Audio/Effects/countdown.ogg
- type: GenericVisualizer
visuals:
enum.Trigger.TriggerVisuals.VisualState:
enum.ConstructionVisuals.Layer:
Primed: { state: primed }
Unprimed: { state: icon }
- type: EmitSoundOnTrigger
sound:
path: "/Audio/Machines/door_lock_off.ogg"
- type: entity
parent: [ScatteringGrenadeBase, BaseSyndicateContraband]
id: ClusterGrenade
name: clustergrenade
description: Why use one grenade when you can use three at once!
components:
- type: Sprite
sprite: Objects/Weapons/Grenades/clusterbomb.rsi
layers:
- state: icon
map: ["enum.TriggerVisualLayers.Base"]
- type: ScatteringGrenade
fillPrototype: ExGrenade
distance: 4
- type: OnUseTimerTrigger
beepSound:
path: "/Audio/Effects/beep1.ogg"
params:
volume: 5
initialBeepDelay: 0
beepInterval: 0.5
delay: 3.5
- type: EmitSoundOnTrigger
sound:
path: "/Audio/Machines/door_lock_off.ogg"
- type: entity
parent: [ScatteringGrenadeBase, BaseSyndicateContraband]
id: ClusterBananaPeel
name: cluster banana peel
description: Splits into 6 explosive banana peels after throwing, guaranteed fun!
components:
- type: Sprite
sprite: Objects/Specific/Hydroponics/banana.rsi
state: produce
- type: ScatteringGrenade
fillPrototype: TrashBananaPeelExplosive
capacity: 6
delayBeforeTriggerContents: 20
- type: LandAtCursor
- type: DamageOnLand
damage:
types:
Blunt: 10
- type: EmitSoundOnTrigger
sound:
path: "/Audio/Items/bikehorn.ogg"
- type: entity
parent: [SoapSyndie, ScatteringGrenadeBase, BaseSyndicateContraband]
id: SlipocalypseClusterSoap
name: slipocalypse clustersoap
description: Spreads small pieces of syndicate soap over an area upon landing on the floor.
components:
- type: Sprite
sprite: Objects/Specific/Janitorial/soap.rsi
layers:
- state: syndie-4
- type: ScatteringGrenade
fillPrototype: SoapletSyndie
capacity: 30
delayBeforeTriggerContents: 60
randomDistance: true
randomThrowDistanceMax: 3
- type: LandAtCursor
- type: DamageOnLand
damage:
types:
Blunt: 10
- type: EmitSoundOnTrigger
sound:
path: "/Audio/Effects/flash_bang.ogg"
- type: entity
parent: ScatteringGrenadeBase
id: GrenadeFoamDart
name: foam dart grenade
description: Releases a bothersome spray of foam darts that cause severe welching.
components:
- type: Sprite
sprite: Objects/Weapons/Grenades/foamdart.rsi
layers:
- state: icon
map: ["Base"]
- state: primed
map: ["enum.TriggerVisualLayers.Base"]
- type: ScatteringGrenade
fillPrototype: BulletFoam
capacity: 30
velocity: 30
- type: OnUseTimerTrigger
beepSound:
path: "/Audio/Effects/beep1.ogg"
params:
volume: 5
initialBeepDelay: 0
beepInterval: 2
delay: 3.5
- type: EmitSoundOnTrigger
sound:
path: "/Audio/Weapons/Guns/Gunshots/batrifle.ogg"

View File

@@ -611,6 +611,9 @@
- type: Tag
id: Grenade
- type: Tag
id: GrenadeFlashBang
- type: Tag
id: HudMedical