Polymorph Artifact Effect (#20660)
Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
This commit is contained in:
@@ -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-communication = Long-distance communication
|
||||||
artifact-effect-hint-phasing = Structural phasing
|
artifact-effect-hint-phasing = Structural phasing
|
||||||
artifact-effect-hint-sentience = Neurological activity
|
artifact-effect-hint-sentience = Neurological activity
|
||||||
|
artifact-effect-hint-polymorph = Transmogrificational activity
|
||||||
|
|
||||||
# the triggers should be more obvious than the effects
|
# 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")
|
# gives people an idea of what to do: don't be too specific (i.e. no "welders")
|
||||||
|
|||||||
@@ -102,3 +102,37 @@
|
|||||||
transferName: true
|
transferName: true
|
||||||
revertOnDeath: 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
|
id: EffectBadFeeling
|
||||||
targetDepth: 0
|
targetDepth: 0
|
||||||
effectHint: artifact-effect-hint-mental
|
effectHint: artifact-effect-hint-mental
|
||||||
@@ -405,6 +405,21 @@
|
|||||||
components:
|
components:
|
||||||
- type: EmpArtifact
|
- 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
|
- type: artifactEffect
|
||||||
id: EffectHealAll
|
id: EffectHealAll
|
||||||
targetDepth: 3
|
targetDepth: 3
|
||||||
|
|||||||
Reference in New Issue
Block a user