Polymorph Artifact Effect (#20660)
Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
This commit is contained in:
parent
13c864b5a3
commit
9f7baed5d4
|
|
@ -0,0 +1,30 @@
|
|||
using Robust.Shared.Audio;
|
||||
using Content.Shared.Polymorph;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Components;
|
||||
|
||||
/// <summary>
|
||||
/// Artifact polymorphs surrounding entities when triggered.
|
||||
/// </summary>
|
||||
[RegisterComponent]
|
||||
public sealed partial class PolyArtifactComponent : Component
|
||||
{
|
||||
/// <summary>
|
||||
/// The polymorph effect to trigger.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public ProtoId<PolymorphPrototype> PolymorphPrototypeName = "ArtifactMonkey";
|
||||
|
||||
/// <summary>
|
||||
/// range of the effect.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public float Range = 2f;
|
||||
|
||||
/// <summary>
|
||||
/// Sound to play on polymorph.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public SoundSpecifier PolySound = new SoundPathSpecifier("/Audio/Weapons/Guns/Gunshots/Magic/staff_animation.ogg");
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
using Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Components;
|
||||
using Content.Server.Xenoarchaeology.XenoArtifacts.Events;
|
||||
using Content.Shared.Humanoid;
|
||||
using Content.Server.Polymorph.Systems;
|
||||
using Content.Shared.Mobs.Systems;
|
||||
using Content.Shared.Polymorph;
|
||||
|
||||
namespace Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Systems;
|
||||
|
||||
public sealed class PolyArtifactSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly EntityLookupSystem _lookup = default!;
|
||||
[Dependency] private readonly MobStateSystem _mob = default!;
|
||||
[Dependency] private readonly PolymorphSystem _poly = default!;
|
||||
[Dependency] private readonly SharedAudioSystem _audio = default!;
|
||||
|
||||
/// <summary>
|
||||
/// On effect trigger polymorphs targets in range.
|
||||
/// </summary>
|
||||
public override void Initialize()
|
||||
{
|
||||
SubscribeLocalEvent<PolyArtifactComponent, ArtifactActivatedEvent>(OnActivate);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Provided target is alive and is not a zombie, polymorphs the target.
|
||||
/// </summary>
|
||||
private void OnActivate(EntityUid uid, PolyArtifactComponent component, ArtifactActivatedEvent args)
|
||||
{
|
||||
var xform = Transform(uid);
|
||||
foreach (var comp in _lookup.GetComponentsInRange<HumanoidAppearanceComponent>(xform.Coordinates, component.Range))
|
||||
{
|
||||
var target = comp.Owner;
|
||||
if (_mob.IsAlive(target))
|
||||
{
|
||||
_poly.PolymorphEntity(target, component.PolymorphPrototypeName);
|
||||
_audio.PlayPvs(component.PolySound, uid);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -18,6 +18,7 @@ artifact-effect-hint-soap = Lubricated surface
|
|||
artifact-effect-hint-communication = Long-distance communication
|
||||
artifact-effect-hint-phasing = Structural phasing
|
||||
artifact-effect-hint-sentience = Neurological activity
|
||||
artifact-effect-hint-polymorph = Transmogrificational activity
|
||||
|
||||
# the triggers should be more obvious than the effects
|
||||
# gives people an idea of what to do: don't be too specific (i.e. no "welders")
|
||||
|
|
|
|||
|
|
@ -102,3 +102,37 @@
|
|||
transferName: true
|
||||
revertOnDeath: true
|
||||
|
||||
|
||||
# this is the monkey polymorph for artifact.
|
||||
- type: polymorph
|
||||
id: ArtifactMonkey
|
||||
entity: MobMonkey
|
||||
forced: true
|
||||
transferName: true
|
||||
allowRepeatedMorphs: true
|
||||
inventory: Transfer
|
||||
revertOnCrit: true
|
||||
revertOnDeath: true
|
||||
duration: 20
|
||||
|
||||
- type: polymorph
|
||||
id: ArtifactCluwne
|
||||
entity: MobCluwne
|
||||
forced: true
|
||||
transferName: true
|
||||
transferHumanoidAppearance: true
|
||||
inventory: None
|
||||
revertOnDeath: true
|
||||
revertOnCrit: true
|
||||
duration: 30
|
||||
|
||||
- type: polymorph
|
||||
id: ArtifactLizard
|
||||
entity: MobLizard
|
||||
forced: true
|
||||
transferName: true
|
||||
transferHumanoidAppearance: true
|
||||
inventory: None
|
||||
revertOnDeath: true
|
||||
revertOnCrit: true
|
||||
duration: 20
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
- type: artifactEffect
|
||||
- type: artifactEffect
|
||||
id: EffectBadFeeling
|
||||
targetDepth: 0
|
||||
effectHint: artifact-effect-hint-mental
|
||||
|
|
@ -405,6 +405,21 @@
|
|||
components:
|
||||
- type: EmpArtifact
|
||||
|
||||
- type: artifactEffect
|
||||
id: EffectPolyMonkey
|
||||
targetDepth: 2
|
||||
effectHint: artifact-effect-hint-polymorph
|
||||
components:
|
||||
- type: PolyArtifact
|
||||
|
||||
- type: artifactEffect
|
||||
id: EffectPolyLizard
|
||||
targetDepth: 2
|
||||
effectHint: artifact-effect-hint-polymorph
|
||||
components:
|
||||
- type: PolyArtifact
|
||||
polymorphPrototypeName: ArtifactLizard
|
||||
|
||||
- type: artifactEffect
|
||||
id: EffectHealAll
|
||||
targetDepth: 3
|
||||
|
|
|
|||
Loading…
Reference in New Issue