Skip to content

Commit

Permalink
Polymorph Artifact Effect (space-wizards#20660)
Browse files Browse the repository at this point in the history
Co-authored-by: Nemanja <[email protected]>
  • Loading branch information
brainfood1183 and EmoGarbage404 committed Oct 9, 2023
1 parent e7a453e commit ad17adf
Show file tree
Hide file tree
Showing 5 changed files with 122 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -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");
}
Original file line number Diff line number Diff line change
@@ -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);
}
}
}
}
1 change: 1 addition & 0 deletions Resources/Locale/en-US/xenoarchaeology/artifact-hints.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
34 changes: 34 additions & 0 deletions Resources/Prototypes/Polymorphs/polymorph.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
17 changes: 16 additions & 1 deletion Resources/Prototypes/XenoArch/Effects/normal_effects.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
- type: artifactEffect
- type: artifactEffect
id: EffectBadFeeling
targetDepth: 0
effectHint: artifact-effect-hint-mental
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit ad17adf

Please sign in to comment.