More anomalies (#13766)

This commit is contained in:
Nemanja
2023-02-06 00:03:53 -05:00
committed by GitHub
parent 3656d3cc21
commit f450398df7
41 changed files with 855 additions and 47 deletions

View File

@@ -0,0 +1,40 @@
using Robust.Shared.Audio;
using Robust.Shared.GameStates;
namespace Content.Shared.Anomaly.Effects.Components;
[RegisterComponent, NetworkedComponent]
[Access(typeof(BluespaceAnomalySystem))]
public sealed class BluespaceAnomalyComponent : Component
{
/// <summary>
/// The maximum radius that the shuffle effect will extend for
/// scales with stability
/// </summary>
[DataField("maxShuffleRadius"), ViewVariables(VVAccess.ReadWrite)]
public float MaxShuffleRadius = 10;
/// <summary>
/// The maximum MAX distance the portal this anomaly is tied to can teleport you.
/// </summary>
[DataField("maxPortalRadius"), ViewVariables(VVAccess.ReadWrite)]
public float MaxPortalRadius = 25;
/// <summary>
/// The minimum MAX distance the portal this anomaly is tied to can teleport you.
/// </summary>
[DataField("minPortalRadius"), ViewVariables(VVAccess.ReadWrite)]
public float MinPortalRadius = 10;
/// <summary>
/// How far the supercritical event can teleport you
/// </summary>
[DataField("superCriticalTeleportRadius"), ViewVariables(VVAccess.ReadWrite)]
public float SupercriticalTeleportRadius = 50f;
/// <summary>
/// The sound played after players are shuffled/teleported around
/// </summary>
[DataField("teleportSound"), ViewVariables(VVAccess.ReadWrite)]
public SoundSpecifier TeleportSound = new SoundPathSpecifier("/Audio/Effects/teleport_arrival.ogg");
}

View File

@@ -1,14 +1,41 @@
namespace Content.Shared.Anomaly.Effects.Components;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
namespace Content.Shared.Anomaly.Effects.Components;
[RegisterComponent]
public sealed class ElectricityAnomalyComponent : Component
{
/// <summary>
/// The maximum radius of the passive electrocution effect
/// scales with stability
/// </summary>
[DataField("maxElectrocutionRange"), ViewVariables(VVAccess.ReadWrite)]
public float MaxElectrocuteRange = 6f;
public float MaxElectrocuteRange = 7f;
/// <summary>
/// The maximum amount of damage the electrocution can do
/// scales with severity
/// </summary>
[DataField("maxElectrocuteDamage"), ViewVariables(VVAccess.ReadWrite)]
public float MaxElectrocuteDamage = 20f;
/// <summary>
/// The maximum amount of time the electrocution lasts
/// scales with severity
/// </summary>
[DataField("maxElectrocuteDuration"), ViewVariables(VVAccess.ReadWrite)]
public TimeSpan MaxElectrocuteDuration = TimeSpan.FromSeconds(8);
/// <summary>
/// The maximum chance that each second, when in range of the anomaly, you will be electrocuted.
/// scales with stability
/// </summary>
[DataField("passiveElectrocutionChance"), ViewVariables(VVAccess.ReadWrite)]
public float PassiveElectrocutionChance = 0.05f;
/// <summary>
/// Used for tracking seconds, so that we can shock people in a non-tick-dependent way.
/// </summary>
[DataField("nextSecond", customTypeSerializer: typeof(TimeOffsetSerializer)), ViewVariables(VVAccess.ReadWrite)]
public TimeSpan NextSecond = TimeSpan.Zero;
}

View File

@@ -0,0 +1,43 @@
using Content.Shared.Maps;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;
namespace Content.Shared.Anomaly.Effects.Components;
[RegisterComponent]
public sealed class FleshAnomalyComponent : Component
{
/// <summary>
/// A list of entities that are random picked to be spawned on each pulse
/// </summary>
[DataField("spawns", required: true, customTypeSerializer: typeof(PrototypeIdListSerializer<EntityPrototype>)), ViewVariables(VVAccess.ReadWrite)]
public List<string> Spawns = new();
/// <summary>
/// The maximum number of entities that spawn per pulse
/// scales with severity.
/// </summary>
[DataField("maxSpawnAmount"), ViewVariables(VVAccess.ReadWrite)]
public int MaxSpawnAmount = 8;
/// <summary>
/// The maximum radius the entities will spawn in.
/// Also governs the maximum reach of flesh tiles
/// scales with stability
/// </summary>
[DataField("spawnRange"), ViewVariables(VVAccess.ReadWrite)]
public float SpawnRange = 4f;
/// <summary>
/// The tile that is spawned by the anomaly's effect
/// </summary>
[DataField("fleshTileId", customTypeSerializer: typeof(PrototypeIdSerializer<ContentTileDefinition>)), ViewVariables(VVAccess.ReadWrite)]
public string FleshTileId = "FloorFlesh";
/// <summary>
/// The entity spawned when the anomaly goes supercritical
/// </summary>
[DataField("superCriticalSpawn", customTypeSerializer: typeof(PrototypeIdSerializer<EntityPrototype>)), ViewVariables(VVAccess.ReadWrite)]
public string SupercriticalSpawn = "FleshKudzu";
}

View File

@@ -1,6 +1,8 @@
namespace Content.Shared.Anomaly.Effects.Components;
using Robust.Shared.GameStates;
[RegisterComponent]
namespace Content.Shared.Anomaly.Effects.Components;
[RegisterComponent, NetworkedComponent]
public sealed class GravityAnomalyComponent : Component
{
/// <summary>

View File

@@ -13,7 +13,7 @@ public sealed class PyroclasticAnomalyComponent : Component
/// I have no clue if this is balanced.
/// </remarks>
[DataField("heatPerSecond")]
public float HeatPerSecond = 50;
public float HeatPerSecond = 25;
/// <summary>
/// The maximum distance from which you can be ignited by the anomaly.
@@ -50,5 +50,5 @@ public sealed class PyroclasticAnomalyComponent : Component
/// The amount of gas released when the anomaly goes supercritical
/// </summary>
[DataField("supercriticalMoleAmount")]
public float SupercriticalMoleAmount = 50f;
public float SupercriticalMoleAmount = 75f;
}