// SPDX-FileCopyrightText: 2025 GoobBot // SPDX-FileCopyrightText: 2025 Solstice // SPDX-FileCopyrightText: 2025 SolsticeOfTheWinter // SPDX-FileCopyrightText: 2025 gus // // SPDX-License-Identifier: AGPL-3.0-or-later using Content.Shared.Damage; using Content.Shared.Damage.Prototypes; using Content.Shared.Dataset; using Content.Shared.FixedPoint; using Content.Shared.Polymorph; using Robust.Shared.Audio; using Robust.Shared.Prototypes; namespace Content.Shared._Goobstation.Devil; [RegisterComponent] public sealed partial class DevilComponent : Component { [DataField] public List BaseDevilActions = new() { "ActionCreateContract", "ActionShadowJaunt", "ActionDevilGrip", }; [DataField] public List? ActionEntities; /// /// The amount of souls or successful contracts the entity has. /// [DataField] public int Souls; [DataField] public ProtoId DevilBranchPrototype = "BaseDevilBranch"; /// /// The true name of the devil. /// This is auto-generated from a list in the system. /// [DataField] public string TrueName = string.Empty; /// /// The current power level of the devil. /// [DataField] public DevilPowerLevel PowerLevel = 0; /// /// Sound effect played when summoning a contract. /// [DataField] public SoundPathSpecifier FwooshPath = new ("/Audio/_Goobstation/Effects/fwoosh.ogg"); /// /// When the true-name stun was last triggered /// [ViewVariables(VVAccess.ReadWrite)] public TimeSpan LastTriggeredTime; /// /// Minimum time between true-name triggers /// [DataField] public TimeSpan CooldownDuration = TimeSpan.FromSeconds(30); [DataField] public ProtoId FirstNameTrue = new("names_devil_first"); [DataField] public ProtoId LastNameTrue = new("names_devil_last"); /// /// How much damage taken when a true name is spoken. Doubled if spoken by the chaplain. /// [DataField] public DamageSpecifier DamageOnTrueName = new() {DamageDict = new Dictionary() {{ "Holy", 15 }}}; /// /// Holy action damage multiplier if done by the chaplain. Also effects stums. /// [DataField] public float BibleUserDamageMultiplier = 2f; /// /// How long the Devil is stunned when their true name is spoken. Doubled if spoken by the chaplain. /// [DataField] public TimeSpan ParalyzeDurationOnTrueName = TimeSpan.FromSeconds(4); [ViewVariables(VVAccess.ReadOnly)] public EntityUid? DevilGrip; // abandom all hope, all ye who enter [DataField] public TimeSpan PossessionDuration = TimeSpan.FromSeconds(30); [DataField] public EntProtoId GripPrototype = "DevilGrip"; [DataField] public EntProtoId ContractPrototype = "PaperDevilContract"; [DataField] public EntProtoId RevivalContractPrototype = "PaperDevilContractRevival"; [DataField] public EntProtoId PentagramEffectProto = "Pentagram"; [DataField] public EntProtoId FireEffectProto = "FireEffect"; [DataField] public EntProtoId JauntAnimationProto = "PolymorphShadowJauntAnimation"; [DataField] public ProtoId JauntEntityProto = "ShadowJaunt"; [DataField] public ProtoId DevilDamageModifierSet = "DevilDealPositive"; }