Adds Hellspawn (Nar'Sie demon mob) (#20291)
* HellSpawn Mob * added spawner * summary for the namespace * larger collider, cannot enter single tile corridors. * fix * remove duplicate from yml, fix attributions. * moved action to shared, moved comp to shared, networked comp, separated heal, fixed attributions * removed flammable from hellspawn removed the healing effect from firestarter ability (healing can be separate ability). * Update attributions.yml fix attributions * fix * fix
This commit is contained in:
61
Content.Server/Abilities/Firestarter/FirestarterSystem.cs
Normal file
61
Content.Server/Abilities/Firestarter/FirestarterSystem.cs
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
using Content.Shared.Actions.Events;
|
||||||
|
using Robust.Shared.Containers;
|
||||||
|
using Robust.Shared.Map;
|
||||||
|
using Content.Server.Atmos.Components;
|
||||||
|
using Content.Server.Atmos.EntitySystems;
|
||||||
|
using Robust.Shared.Audio.Systems;
|
||||||
|
using Content.Shared.Abilities.Firestarter;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adds an action ability that will cause all flammable targets in a radius to ignite, also heals the owner
|
||||||
|
/// of the component when used.
|
||||||
|
/// </summary>
|
||||||
|
namespace Content.Server.Abilities.Firestarter;
|
||||||
|
|
||||||
|
public sealed class FirestarterSystem : EntitySystem
|
||||||
|
{
|
||||||
|
[Dependency] private readonly EntityLookupSystem _lookup = default!;
|
||||||
|
[Dependency] private readonly FlammableSystem _flammable = default!;
|
||||||
|
[Dependency] private readonly SharedAudioSystem _audio = default!;
|
||||||
|
[Dependency] private readonly SharedContainerSystem _container = default!;
|
||||||
|
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
base.Initialize();
|
||||||
|
SubscribeLocalEvent<FirestarterComponent, FireStarterActionEvent>(OnStartFire);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks Radius for igniting nearby flammable objects .
|
||||||
|
/// </summary>
|
||||||
|
private void OnStartFire(EntityUid uid, FirestarterComponent component, FireStarterActionEvent args)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (_container.IsEntityOrParentInContainer(uid))
|
||||||
|
return;
|
||||||
|
|
||||||
|
var xform = Transform(uid);
|
||||||
|
var ignitionRadius = component.IgnitionRadius;
|
||||||
|
IgniteNearby(uid, xform.Coordinates, args.Severity, ignitionRadius);
|
||||||
|
_audio.PlayPvs(component.IgniteSound, uid);
|
||||||
|
|
||||||
|
args.Handled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Ignites flammable objects within range.
|
||||||
|
/// </summary>
|
||||||
|
public void IgniteNearby(EntityUid uid, EntityCoordinates coordinates, float severity, float radius)
|
||||||
|
{
|
||||||
|
var flammables = new HashSet<Entity<FlammableComponent>>();
|
||||||
|
_lookup.GetEntitiesInRange(coordinates, radius, flammables);
|
||||||
|
|
||||||
|
foreach (var flammable in flammables)
|
||||||
|
{
|
||||||
|
var ent = flammable.Owner;
|
||||||
|
var stackAmount = 2 + (int) (severity / 0.15f);
|
||||||
|
_flammable.AdjustFireStacks(ent, stackAmount, flammable);
|
||||||
|
_flammable.Ignite(ent, uid, flammable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
34
Content.Shared/Abilities/Firestarter/FirestarterComponent.cs
Normal file
34
Content.Shared/Abilities/Firestarter/FirestarterComponent.cs
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
using Robust.Shared.Prototypes;
|
||||||
|
using Robust.Shared.Audio;
|
||||||
|
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
|
||||||
|
using Robust.Shared.GameStates;
|
||||||
|
|
||||||
|
namespace Content.Shared.Abilities.Firestarter;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Lets its owner entity ignite flammables around it and also heal some damage.
|
||||||
|
/// </summary>
|
||||||
|
[RegisterComponent, NetworkedComponent, Access(typeof(SharedFirestarterSystem))]
|
||||||
|
public sealed partial class FirestarterComponent : Component
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Radius of objects that will be ignited if flammable.
|
||||||
|
/// </summary>
|
||||||
|
[DataField("ignitionRadius")]
|
||||||
|
public float IgnitionRadius = 4f;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The action entity.
|
||||||
|
/// </summary>
|
||||||
|
[DataField("fireStarterAction", customTypeSerializer: typeof(PrototypeIdSerializer<EntityPrototype>))]
|
||||||
|
public string? FireStarterAction = "ActionFireStarter";
|
||||||
|
|
||||||
|
[DataField("fireStarterActionEntity")] public EntityUid? FireStarterActionEntity;
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Radius of objects that will be ignited if flammable.
|
||||||
|
/// </summary>
|
||||||
|
[DataField("igniteSound")]
|
||||||
|
public SoundSpecifier IgniteSound = new SoundPathSpecifier("/Audio/Magic/rumble.ogg");
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
using Content.Shared.Actions;
|
||||||
|
|
||||||
|
namespace Content.Shared.Abilities.Firestarter;
|
||||||
|
|
||||||
|
public sealed class SharedFirestarterSystem : EntitySystem
|
||||||
|
{
|
||||||
|
[Dependency] private readonly SharedActionsSystem _actionsSystem = default!;
|
||||||
|
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
base.Initialize();
|
||||||
|
SubscribeLocalEvent<FirestarterComponent, ComponentInit>(OnComponentInit);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adds the firestarter action.
|
||||||
|
/// </summary>
|
||||||
|
private void OnComponentInit(EntityUid uid, FirestarterComponent component, ComponentInit args)
|
||||||
|
{
|
||||||
|
_actionsSystem.AddAction(uid, ref component.FireStarterActionEntity, component.FireStarterAction, uid);
|
||||||
|
}
|
||||||
|
}
|
||||||
10
Content.Shared/Actions/Events/FireStarterActionEvent.cs
Normal file
10
Content.Shared/Actions/Events/FireStarterActionEvent.cs
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
namespace Content.Shared.Actions.Events;
|
||||||
|
|
||||||
|
public sealed partial class FireStarterActionEvent : InstantActionEvent
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Increases the number of fire stacks when a flammable object is ignited.
|
||||||
|
/// </summary>
|
||||||
|
[ViewVariables(VVAccess.ReadWrite)]
|
||||||
|
public float Severity = 0.3f;
|
||||||
|
}
|
||||||
@@ -33,6 +33,12 @@
|
|||||||
copyright: "Taken and modified from tgstation (clownstep 1 and 2) by brainfood1183 (github)"
|
copyright: "Taken and modified from tgstation (clownstep 1 and 2) by brainfood1183 (github)"
|
||||||
source: "https://github.com/tgstation/tgstation/tree/f8ee37afc00bce1ad421615eaa0e4cbddd5eea90/sound/effects"
|
source: "https://github.com/tgstation/tgstation/tree/f8ee37afc00bce1ad421615eaa0e4cbddd5eea90/sound/effects"
|
||||||
|
|
||||||
|
- files:
|
||||||
|
- largethud.ogg
|
||||||
|
license: "CC0-1.0"
|
||||||
|
copyright: "Made by philRacoIndie freesound.org, modified by brainfood1183 (github)"
|
||||||
|
source: "https://freesound.org/people/philRacoIndie/sounds/512483/"
|
||||||
|
|
||||||
- files:
|
- files:
|
||||||
- snake1.ogg
|
- snake1.ogg
|
||||||
- snake2.ogg
|
- snake2.ogg
|
||||||
|
|||||||
BIN
Resources/Audio/Effects/Footsteps/largethud.ogg
Normal file
BIN
Resources/Audio/Effects/Footsteps/largethud.ogg
Normal file
Binary file not shown.
@@ -1,3 +1,8 @@
|
|||||||
|
- files: [rumble.ogg]
|
||||||
|
copyright: "Made by Uzbazur freesound.org, modified by brainfood1183 (github)"
|
||||||
|
license: "CC-BY-4.0"
|
||||||
|
source: "https://freesound.org/people/Uzbazur/sounds/221872/"
|
||||||
|
|
||||||
- files: [fireball.ogg]
|
- files: [fireball.ogg]
|
||||||
copyright: '"fireball.ogg" by /tg/station'
|
copyright: '"fireball.ogg" by /tg/station'
|
||||||
license: CC-BY-SA-3.0
|
license: CC-BY-SA-3.0
|
||||||
@@ -15,4 +20,3 @@
|
|||||||
copyright: '"ForceWall.ogg", "Knock.ogg", and "blink.ogg" by Citadel Station 13'
|
copyright: '"ForceWall.ogg", "Knock.ogg", and "blink.ogg" by Citadel Station 13'
|
||||||
license: CC-BY-SA-3.0
|
license: CC-BY-SA-3.0
|
||||||
source: https://github.com/Citadel-Station-13/Citadel-Station-13/commit/35a1723e98a60f375df590ca572cc90f1bb80bd5
|
source: https://github.com/Citadel-Station-13/Citadel-Station-13/commit/35a1723e98a60f375df590ca572cc90f1bb80bd5
|
||||||
|
|
||||||
|
|||||||
BIN
Resources/Audio/Magic/rumble.ogg
Normal file
BIN
Resources/Audio/Magic/rumble.ogg
Normal file
Binary file not shown.
@@ -188,6 +188,10 @@ ghost-role-information-loneop-rules = You are a syndicate operative tasked with
|
|||||||
ghost-role-information-behonker-name = Behonker
|
ghost-role-information-behonker-name = Behonker
|
||||||
ghost-role-information-behonker-description = You are an antagonist, bring death and honks to those who do not follow the honkmother.
|
ghost-role-information-behonker-description = You are an antagonist, bring death and honks to those who do not follow the honkmother.
|
||||||
|
|
||||||
|
|
||||||
|
ghost-role-information-hellspawn-name = Hellspawn
|
||||||
|
ghost-role-information-hellspawn-description = You are an antagonist, bring death to those who do not follow the great god Nar'Sie.
|
||||||
|
|
||||||
ghost-role-information-Death-Squad-name = Death Squad Operative
|
ghost-role-information-Death-Squad-name = Death Squad Operative
|
||||||
ghost-role-information-Death-Squad-description = One of Nanotrasen's top internal affairs agents. Await orders from CentComm or an official.
|
ghost-role-information-Death-Squad-description = One of Nanotrasen's top internal affairs agents. Await orders from CentComm or an official.
|
||||||
|
|
||||||
|
|||||||
@@ -291,6 +291,18 @@
|
|||||||
event: !type:ActivateImplantEvent
|
event: !type:ActivateImplantEvent
|
||||||
useDelay: 1
|
useDelay: 1
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
id: ActionFireStarter
|
||||||
|
name: Ignite
|
||||||
|
description: Ignites enemies in a radius around you.
|
||||||
|
noSpawn: true
|
||||||
|
components:
|
||||||
|
- type: InstantAction
|
||||||
|
priority: -1
|
||||||
|
useDelay: 30
|
||||||
|
icon: Interface/Actions/firestarter.png
|
||||||
|
event: !type:FireStarterActionEvent
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: ActionToggleEyes
|
id: ActionToggleEyes
|
||||||
name: Open/Close eyes
|
name: Open/Close eyes
|
||||||
@@ -302,3 +314,4 @@
|
|||||||
iconOn: Interface/Actions/eyeclose.png
|
iconOn: Interface/Actions/eyeclose.png
|
||||||
event: !type:ToggleEyesActionEvent
|
event: !type:ToggleEyesActionEvent
|
||||||
useDelay: 1 # so u cant give yourself and observers eyestrain by rapidly spamming the action
|
useDelay: 1 # so u cant give yourself and observers eyestrain by rapidly spamming the action
|
||||||
|
|
||||||
|
|||||||
@@ -237,6 +237,14 @@
|
|||||||
Radiation: 0.2
|
Radiation: 0.2
|
||||||
Caustic: 0.0
|
Caustic: 0.0
|
||||||
|
|
||||||
|
- type: damageModifierSet
|
||||||
|
id: HellSpawn
|
||||||
|
coefficients:
|
||||||
|
Heat: 0.0
|
||||||
|
Radiation: 0.0
|
||||||
|
Shock: 0.8
|
||||||
|
Bloodloss: 0.4
|
||||||
|
|
||||||
- type: damageModifierSet
|
- type: damageModifierSet
|
||||||
id: Cockroach
|
id: Cockroach
|
||||||
coefficients:
|
coefficients:
|
||||||
|
|||||||
@@ -778,7 +778,22 @@
|
|||||||
- type: ConditionalSpawner
|
- type: ConditionalSpawner
|
||||||
prototypes:
|
prototypes:
|
||||||
- MobPenguin
|
- MobPenguin
|
||||||
|
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
name: Hellspawn Spawner
|
||||||
|
id: SpawnMobHellspawn
|
||||||
|
parent: MarkerBase
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
layers:
|
||||||
|
- state: green
|
||||||
|
- state: hellspawn
|
||||||
|
sprite: Markers/mobs.rsi
|
||||||
|
- type: ConditionalSpawner
|
||||||
|
prototypes:
|
||||||
|
- MobHellspawn
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: ore crab spawner
|
name: ore crab spawner
|
||||||
id: SpawnMobOreCrab
|
id: SpawnMobOreCrab
|
||||||
|
|||||||
99
Resources/Prototypes/Entities/Mobs/NPCs/hellspawn.yml
Normal file
99
Resources/Prototypes/Entities/Mobs/NPCs/hellspawn.yml
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
- type: entity
|
||||||
|
name: hellspawn
|
||||||
|
parent:
|
||||||
|
- BaseSimpleMob
|
||||||
|
- MobCombat
|
||||||
|
- MobBloodstream
|
||||||
|
id: MobHellspawn
|
||||||
|
description: An unstoppable force of carnage.
|
||||||
|
components:
|
||||||
|
- type: GhostRole
|
||||||
|
allowMovement: true
|
||||||
|
makeSentient: true
|
||||||
|
name: ghost-role-information-hellspawn-name
|
||||||
|
description: ghost-role-information-hellspawn-description
|
||||||
|
- type: RotationVisuals
|
||||||
|
defaultRotation: 90
|
||||||
|
horizontalRotation: 90
|
||||||
|
- type: GhostTakeoverAvailable
|
||||||
|
- type: HTN
|
||||||
|
rootTask:
|
||||||
|
task: SimpleHostileCompound
|
||||||
|
- type: NpcFactionMember
|
||||||
|
factions:
|
||||||
|
- SimpleHostile
|
||||||
|
- type: Body
|
||||||
|
prototype: Animal
|
||||||
|
- type: Damageable
|
||||||
|
damageContainer: Biological
|
||||||
|
damageModifierSet: HellSpawn
|
||||||
|
- type: MovementSpeedModifier
|
||||||
|
baseWalkSpeed: 2
|
||||||
|
baseSprintSpeed: 3
|
||||||
|
- type: Sprite
|
||||||
|
sprite: Mobs/Demons/hellspawn.rsi
|
||||||
|
layers:
|
||||||
|
- map: [ "enum.DamageStateVisualLayers.Base" ]
|
||||||
|
state: alive
|
||||||
|
- type: DamageStateVisuals
|
||||||
|
states:
|
||||||
|
Alive:
|
||||||
|
Base: alive
|
||||||
|
Dead:
|
||||||
|
Base: dead
|
||||||
|
- type: Firestarter
|
||||||
|
- type: NameIdentifier
|
||||||
|
group: GenericNumber
|
||||||
|
- type: SlowOnDamage
|
||||||
|
speedModifierThresholds:
|
||||||
|
60: 0.7
|
||||||
|
80: 0.5
|
||||||
|
- type: MobPrice
|
||||||
|
price: 1000 # Living critters are valuable in space.
|
||||||
|
- type: Perishable
|
||||||
|
- type: Reflect
|
||||||
|
reflectProb: 0.7
|
||||||
|
reflects:
|
||||||
|
- Energy
|
||||||
|
- type: Fixtures
|
||||||
|
fixtures:
|
||||||
|
fix1:
|
||||||
|
shape:
|
||||||
|
!type:PhysShapeCircle
|
||||||
|
radius: 0.9
|
||||||
|
density: 300
|
||||||
|
mask:
|
||||||
|
- MobMask
|
||||||
|
layer:
|
||||||
|
- MobLayer
|
||||||
|
- type: MobState
|
||||||
|
- type: Tag
|
||||||
|
tags:
|
||||||
|
- CannotSuicide
|
||||||
|
- DoorBumpOpener
|
||||||
|
- FootstepSound
|
||||||
|
- type: MobThresholds
|
||||||
|
thresholds:
|
||||||
|
0: Alive
|
||||||
|
450: Dead
|
||||||
|
- type: Butcherable
|
||||||
|
spawned:
|
||||||
|
- id: ArtifactFragment
|
||||||
|
amount: 4
|
||||||
|
- type: MeleeWeapon
|
||||||
|
attackRate: 0.6
|
||||||
|
hidden: true
|
||||||
|
soundHit:
|
||||||
|
path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg
|
||||||
|
damage:
|
||||||
|
types:
|
||||||
|
Blunt: 150
|
||||||
|
Structural: 70
|
||||||
|
- type: FootstepModifier
|
||||||
|
footstepSoundCollection:
|
||||||
|
collection: FootstepThud
|
||||||
|
- type: PointLight
|
||||||
|
radius: 2
|
||||||
|
energy: 4.5
|
||||||
|
color: "#ff4242"
|
||||||
|
castShadows: false
|
||||||
@@ -159,6 +159,11 @@
|
|||||||
- /Audio/Effects/Footsteps/clownspiderstep1.ogg
|
- /Audio/Effects/Footsteps/clownspiderstep1.ogg
|
||||||
- /Audio/Effects/Footsteps/clownspiderstep2.ogg
|
- /Audio/Effects/Footsteps/clownspiderstep2.ogg
|
||||||
|
|
||||||
|
- type: soundCollection
|
||||||
|
id: FootstepThud
|
||||||
|
files:
|
||||||
|
- /Audio/Effects/Footsteps/largethud.ogg
|
||||||
|
|
||||||
- type: soundCollection
|
- type: soundCollection
|
||||||
id: FootstepSnake
|
id: FootstepSnake
|
||||||
files:
|
files:
|
||||||
|
|||||||
BIN
Resources/Textures/Interface/Actions/firestarter.png
Normal file
BIN
Resources/Textures/Interface/Actions/firestarter.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
@@ -19,6 +19,9 @@
|
|||||||
{
|
{
|
||||||
"name": "disarm"
|
"name": "disarm"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "firestarter"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "harm"
|
"name": "harm"
|
||||||
},
|
},
|
||||||
|
|||||||
BIN
Resources/Textures/Markers/mobs.rsi/hellspawn.png
Normal file
BIN
Resources/Textures/Markers/mobs.rsi/hellspawn.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 23 KiB |
14
Resources/Textures/Markers/mobs.rsi/meta.json
Normal file
14
Resources/Textures/Markers/mobs.rsi/meta.json
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "hellspawn made by rainfood1183 (github)",
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "hellspawn"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
BIN
Resources/Textures/Mobs/Demons/hellspawn.rsi/alive.png
Normal file
BIN
Resources/Textures/Mobs/Demons/hellspawn.rsi/alive.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 34 KiB |
BIN
Resources/Textures/Mobs/Demons/hellspawn.rsi/dead.png
Normal file
BIN
Resources/Textures/Mobs/Demons/hellspawn.rsi/dead.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 26 KiB |
18
Resources/Textures/Mobs/Demons/hellspawn.rsi/meta.json
Normal file
18
Resources/Textures/Mobs/Demons/hellspawn.rsi/meta.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"size": {
|
||||||
|
"x": 64,
|
||||||
|
"y": 64
|
||||||
|
},
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Made by brainfood1183 (github) for ss14",
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "dead"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "alive",
|
||||||
|
"directions": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user