using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Array; namespace Content.Shared.Disease { /// /// Diseases encompass everything from viruses to cancers to heart disease. /// It's not just a virology thing. /// [Prototype("disease")] [DataDefinition] public sealed class DiseasePrototype : IPrototype, IInheritingPrototype { [ViewVariables] [IdDataField] public string ID { get; } = default!; [DataField("name")] public string Name { get; private set; } = string.Empty; [ParentDataFieldAttribute(typeof(AbstractPrototypeIdArraySerializer))] public string[]? Parents { get; private set; } [NeverPushInheritance] [AbstractDataFieldAttribute] public bool Abstract { get; private set; } /// /// Controls how often a disease ticks. /// [ViewVariables] public float TickTime = 1f; /// /// Since disease isn't mapped to metabolism or anything, /// it needs something to control its tickrate /// public float Accumulator = 0f; /// /// Since accumulator is reset with TickTime, this just tracks /// the total amount of time a disease has been present. /// public float TotalAccumulator = 0f; /// /// Stores all the separate stages of the disease plus the time /// thresholds for their activation /// int: the disease stage (0 for baseline, 1, 2, etc.) /// float: the time it takes for the stage to begin. /// [DataField("stages", serverOnly: true)] public readonly List Stages = new() { 0f }; /// /// List of effects the disease has that will /// run every second (by default anyway) /// [DataField("effects", serverOnly: true)] public readonly List Effects = new(0); /// /// List of SPECIFIC CURES the disease has that will /// be checked every second. /// Stuff like spaceacillin operates outside this. /// [DataField("cures", serverOnly: true)] public readonly List Cures = new(0); /// /// This flatly reduces the probabilty disease medicine /// has to cure it every tick. Although, since spaceacillin is /// used as a reference and it has 0.15 chance, this is /// a base 33% reduction in cure chance /// [DataField("cureResist", serverOnly: true)] public float CureResist = 0.05f; /// /// Whether the disease can infect other people. /// Since this isn't just a virology thing, this /// primary determines what sort of disease it is. /// This also affects things like the vaccine machine. /// You can't print a cancer vaccine /// [DataField("infectious", serverOnly: true)] public bool Infectious = true; } }