using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; 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] [IdDataFieldAttribute] public string ID { get; } = default!; [DataField("name")] public string Name { get; } = string.Empty; [ParentDataFieldAttribute(typeof(AbstractPrototypeIdSerializer))] public string? Parent { get; private set; } [NeverPushInheritance] [AbstractDataFieldAttribute] public bool Abstract { get; private set; } /// /// Controls how often a disease ticks. /// public float TickTime = 1f; /// /// Since disease isn't mapped to metabolism or anything, /// it needs something to control its tickrate /// public float Accumulator = 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; } }