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:
brainfood1183
2024-01-04 12:53:15 +00:00
committed by GitHub
parent ca529178e2
commit b06d9cb64a
21 changed files with 318 additions and 2 deletions

View 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);
}
}
}

View 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");
}

View File

@@ -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);
}
}

View 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;
}

View File

@@ -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

Binary file not shown.

View File

@@ -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

Binary file not shown.

View File

@@ -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.

View File

@@ -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

View File

@@ -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:

View File

@@ -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

View 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

View File

@@ -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:

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -19,6 +19,9 @@
{
"name": "disarm"
},
{
"name": "firestarter"
},
{
"name": "harm"
},

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View 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"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View 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
}
]
}