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)"
|
||||
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:
|
||||
- snake1.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]
|
||||
copyright: '"fireball.ogg" by /tg/station'
|
||||
license: CC-BY-SA-3.0
|
||||
@@ -15,4 +20,3 @@
|
||||
copyright: '"ForceWall.ogg", "Knock.ogg", and "blink.ogg" by Citadel Station 13'
|
||||
license: CC-BY-SA-3.0
|
||||
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-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-description = One of Nanotrasen's top internal affairs agents. Await orders from CentComm or an official.
|
||||
|
||||
|
||||
@@ -291,6 +291,18 @@
|
||||
event: !type:ActivateImplantEvent
|
||||
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
|
||||
id: ActionToggleEyes
|
||||
name: Open/Close eyes
|
||||
@@ -302,3 +314,4 @@
|
||||
iconOn: Interface/Actions/eyeclose.png
|
||||
event: !type:ToggleEyesActionEvent
|
||||
useDelay: 1 # so u cant give yourself and observers eyestrain by rapidly spamming the action
|
||||
|
||||
|
||||
@@ -237,6 +237,14 @@
|
||||
Radiation: 0.2
|
||||
Caustic: 0.0
|
||||
|
||||
- type: damageModifierSet
|
||||
id: HellSpawn
|
||||
coefficients:
|
||||
Heat: 0.0
|
||||
Radiation: 0.0
|
||||
Shock: 0.8
|
||||
Bloodloss: 0.4
|
||||
|
||||
- type: damageModifierSet
|
||||
id: Cockroach
|
||||
coefficients:
|
||||
|
||||
@@ -779,6 +779,21 @@
|
||||
prototypes:
|
||||
- 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
|
||||
name: ore crab spawner
|
||||
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/clownspiderstep2.ogg
|
||||
|
||||
- type: soundCollection
|
||||
id: FootstepThud
|
||||
files:
|
||||
- /Audio/Effects/Footsteps/largethud.ogg
|
||||
|
||||
- type: soundCollection
|
||||
id: FootstepSnake
|
||||
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": "firestarter"
|
||||
},
|
||||
{
|
||||
"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