Anomalous infections (#31876)
* inner anomaly * anomaly pulse action * test anom mine * Update anomalies.yml * fix action cooldown * pyro_eyes * clientsystem * experiments * blya * some telegraphy * shock eyes! * shadow eyes * separate files * frosty eyes * fix * flora eyes * bluespace eyes * flesh eyes * redoing injction * auto add layers * пипяу * new injector component * stupid me * nice marker injectors * anomaly spawn on shutdown * gravity anom * dead anomaly spawning * add VOX states * sprite specific layers support * technology anom infection * auto detach anomalies that have moved away * Update anomaly_injections.yml * anomalyspawner integration * rock anomaly! * Update anomaly_injections.yml * fix crash bug * tag filter * fix anom dublication spawns * Update anomaly.yml * Update InnerBodyAnomalyComponent.cs * Update anomaly_injections.yml * dont spawn anomalies after decay * fix morb sprite, add end message * gravity resprite * admin logging, double injection fix * make flesh and living light mobs friendly to anomaly hosts * popups * severity feedback * sloth review * A * keep organs after gib * punpun host * sloth synchronization * Update arachnid.yml * increase infections spawnrate
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
using System.Numerics;
|
||||
using Content.Shared.Anomaly.Effects;
|
||||
using Content.Shared.Anomaly.Prototypes;
|
||||
using Content.Shared.Damage;
|
||||
using Robust.Shared.Audio;
|
||||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Prototypes;
|
||||
@@ -16,7 +16,7 @@ namespace Content.Shared.Anomaly.Components;
|
||||
/// Anomalies and their related components were designed here: https://hackmd.io/@ss14-design/r1sQbkJOs
|
||||
/// </summary>
|
||||
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState, AutoGenerateComponentPause]
|
||||
[Access(typeof(SharedAnomalySystem))]
|
||||
[Access(typeof(SharedAnomalySystem), typeof(SharedInnerBodyAnomalySystem))]
|
||||
public sealed partial class AnomalyComponent : Component
|
||||
{
|
||||
/// <summary>
|
||||
@@ -184,21 +184,21 @@ public sealed partial class AnomalyComponent : Component
|
||||
/// <summary>
|
||||
/// The minimum amount of research points generated per second
|
||||
/// </summary>
|
||||
[DataField("minPointsPerSecond")]
|
||||
[DataField]
|
||||
public int MinPointsPerSecond = 10;
|
||||
|
||||
/// <summary>
|
||||
/// The maximum amount of research points generated per second
|
||||
/// This doesn't include the point bonus for being unstable.
|
||||
/// </summary>
|
||||
[DataField("maxPointsPerSecond")]
|
||||
[DataField]
|
||||
public int MaxPointsPerSecond = 70;
|
||||
|
||||
/// <summary>
|
||||
/// The multiplier applied to the point value for the
|
||||
/// anomaly being above the <see cref="GrowthThreshold"/>
|
||||
/// </summary>
|
||||
[DataField("growingPointMultiplier")]
|
||||
[DataField]
|
||||
public float GrowingPointMultiplier = 1.5f;
|
||||
#endregion
|
||||
|
||||
@@ -252,10 +252,13 @@ public sealed partial class AnomalyComponent : Component
|
||||
/// </summary>
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField("offset")]
|
||||
public Vector2 FloatingOffset = new(0, 0.15f);
|
||||
public Vector2 FloatingOffset = new(0, 0);
|
||||
|
||||
public readonly string AnimationKey = "anomalyfloat";
|
||||
#endregion
|
||||
|
||||
[DataField]
|
||||
public bool DeleteEntity = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
using Content.Shared.Anomaly.Effects;
|
||||
using Content.Shared.Body.Prototypes;
|
||||
using Robust.Shared.Audio;
|
||||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Utility;
|
||||
|
||||
namespace Content.Shared.Anomaly.Components;
|
||||
|
||||
/// <summary>
|
||||
/// An anomaly within the body of a living being. Controls the ability to return to the standard state.
|
||||
/// </summary>
|
||||
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true), Access(typeof(SharedInnerBodyAnomalySystem))]
|
||||
public sealed partial class InnerBodyAnomalyComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
public bool Injected;
|
||||
|
||||
/// <summary>
|
||||
/// A prototype of an entity whose components will be added to the anomaly host **AND** then removed at the right time
|
||||
/// </summary>
|
||||
[DataField(required: true)]
|
||||
public EntProtoId? InjectionProto;
|
||||
|
||||
/// <summary>
|
||||
/// Duration of stun from the effect of the anomaly
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public float StunDuration = 4f;
|
||||
|
||||
/// <summary>
|
||||
/// A message sent in chat to a player who has become infected by an anomaly
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public LocId? StartMessage = null;
|
||||
|
||||
/// <summary>
|
||||
/// A message sent in chat to a player who has cleared an anomaly
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public LocId? EndMessage = "inner-anomaly-end-message";
|
||||
|
||||
/// <summary>
|
||||
/// Sound, playing on becoming anomaly
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public SoundSpecifier? StartSound = new SoundPathSpecifier("/Audio/Effects/inneranomaly.ogg");
|
||||
|
||||
/// <summary>
|
||||
/// Used to display messages to the player about their level of disease progression
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public float LastSeverityInformed = 0f;
|
||||
|
||||
/// <summary>
|
||||
/// The fallback sprite to be added on the original entity. Allows you to visually identify the feature and type of anomaly to other players
|
||||
/// </summary>
|
||||
[DataField, AutoNetworkedField]
|
||||
public SpriteSpecifier? FallbackSprite = null;
|
||||
|
||||
/// <summary>
|
||||
/// Ability to use unique sprites for different body types
|
||||
/// </summary>
|
||||
[DataField, AutoNetworkedField]
|
||||
public Dictionary<ProtoId<BodyPrototype>, SpriteSpecifier> SpeciesSprites = new();
|
||||
|
||||
/// <summary>
|
||||
/// The key of the entity layer into which the sprite will be inserted
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public string LayerMap = "inner_anomaly_layer";
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
using Content.Shared.Anomaly.Effects;
|
||||
using Content.Shared.Whitelist;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared.Anomaly.Components;
|
||||
|
||||
/// <summary>
|
||||
/// On contact with an entity, if it meets the conditions, it will transfer the specified components to it
|
||||
/// </summary>
|
||||
[RegisterComponent, Access(typeof(SharedInnerBodyAnomalySystem))]
|
||||
public sealed partial class InnerBodyAnomalyInjectorComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
public EntityWhitelist? Whitelist;
|
||||
|
||||
/// <summary>
|
||||
/// components that will be automatically removed after “curing”
|
||||
/// </summary>
|
||||
[DataField(required: true)]
|
||||
public ComponentRegistry InjectionComponents = default!;
|
||||
}
|
||||
Reference in New Issue
Block a user