using Content.Shared.Chat.Prototypes; using Content.Shared.Chemistry.Reagent; using Content.Shared.Damage; using Content.Shared.FixedPoint; using Content.Shared.Humanoid; using Content.Shared.Roles; using Content.Shared.StatusIcon; using Robust.Shared.Audio; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Shared.Zombies; [RegisterComponent, NetworkedComponent] public sealed partial class ZombieComponent : Component { /// /// The baseline infection chance you have if you have no protective gear /// [ViewVariables(VVAccess.ReadWrite)] public float BaseZombieInfectionChance = 0.75f; /// /// The minimum infection chance possible. This is simply to prevent /// being overly protected by bundling up. /// [ViewVariables(VVAccess.ReadWrite)] public float MinZombieInfectionChance = 0.05f; /// /// How effective each resistance type on a piece of armor is. Using a damage specifier for this seems illegal. /// public DamageSpecifier ResistanceEffectiveness = new() { DamageDict = new () { {"Slash", 0.5}, {"Piercing", 0.3}, {"Blunt", 0.1}, } }; [ViewVariables(VVAccess.ReadWrite)] public float ZombieMovementSpeedDebuff = 0.70f; /// /// The skin color of the zombie /// [DataField("skinColor")] public Color SkinColor = new(0.45f, 0.51f, 0.29f); /// /// The eye color of the zombie /// [DataField("eyeColor")] public Color EyeColor = new(0.96f, 0.13f, 0.24f); /// /// The base layer to apply to any 'external' humanoid layers upon zombification. /// [DataField("baseLayerExternal")] public string BaseLayerExternal = "MobHumanoidMarkingMatchSkin"; /// /// The attack arc of the zombie /// [DataField("attackArc", customTypeSerializer: typeof(PrototypeIdSerializer))] public string AttackAnimation = "WeaponArcBite"; /// /// The role prototype of the zombie antag role /// [DataField("zombieRoleId", customTypeSerializer: typeof(PrototypeIdSerializer))] public string ZombieRoleId = "Zombie"; /// /// The CustomBaseLayers of the humanoid to restore in case of cloning /// [DataField("beforeZombifiedCustomBaseLayers")] public Dictionary BeforeZombifiedCustomBaseLayers = new (); /// /// The skin color of the humanoid to restore in case of cloning /// [DataField("beforeZombifiedSkinColor")] public Color BeforeZombifiedSkinColor; /// /// The eye color of the humanoid to restore in case of cloning /// [DataField("beforeZombifiedEyeColor")] public Color BeforeZombifiedEyeColor; [DataField("emoteId")] public ProtoId? EmoteSoundsId = "Zombie"; [DataField("nextTick", customTypeSerializer:typeof(TimeOffsetSerializer))] public TimeSpan NextTick; [DataField("zombieStatusIcon")] public ProtoId StatusIcon { get; set; } = "ZombieFaction"; /// /// Healing each second /// [DataField("passiveHealing")] public DamageSpecifier PassiveHealing = new() { DamageDict = new () { { "Blunt", -0.4 }, { "Slash", -0.2 }, { "Piercing", -0.2 }, { "Heat", -0.02 }, { "Shock", -0.02 } } }; /// /// A multiplier applied to when the entity is in critical condition. /// [DataField("passiveHealingCritMultiplier")] public float PassiveHealingCritMultiplier = 2f; /// /// Healing given when a zombie bites a living being. /// [DataField("healingOnBite")] public DamageSpecifier HealingOnBite = new() { DamageDict = new() { { "Blunt", -2 }, { "Slash", -2 }, { "Piercing", -2 } } }; /// /// The damage dealt on bite, dehardcoded for your enjoyment /// [DataField] public DamageSpecifier DamageOnBite = new() { DamageDict = new() { { "Slash", 13 }, { "Piercing", 7 }, { "Structural", 10 } } }; /// /// Path to antagonist alert sound. /// [DataField("greetSoundNotification")] public SoundSpecifier GreetSoundNotification = new SoundPathSpecifier("/Audio/Ambience/Antag/zombie_start.ogg"); /// /// Hit sound on zombie bite. /// [DataField] public SoundSpecifier BiteSound = new SoundPathSpecifier("/Audio/Effects/bite.ogg"); /// /// The blood reagent of the humanoid to restore in case of cloning /// [DataField("beforeZombifiedBloodReagent")] public string BeforeZombifiedBloodReagent = string.Empty; /// /// The blood reagent to give the zombie. In case you want zombies that bleed milk, or something. /// [DataField("newBloodReagent", customTypeSerializer: typeof(PrototypeIdSerializer))] public string NewBloodReagent = "ZombieBlood"; }