using Content.Shared.Construction.Prototypes; using Content.Shared.DeviceLinking; using Content.Shared.Materials; using Robust.Shared.Audio; using Robust.Shared.Containers; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Shared.Cloning; [RegisterComponent] public sealed partial class CloningPodComponent : Component { [DataField] public ProtoId PodPort = "CloningPodReceiver"; [ViewVariables] public ContainerSlot BodyContainer = default!; /// /// How long the cloning has been going on for. /// [ViewVariables] public float CloningProgress = 0; [ViewVariables] public int UsedBiomass = 70; [ViewVariables] public bool FailedClone = false; /// /// The material that is used to clone entities. /// [DataField] public ProtoId RequiredMaterial = "Biomass"; /// /// The current amount of time it takes to clone a body. /// [DataField] public float CloningTime = 30f; /// /// The mob to spawn on emag. /// [DataField] public EntProtoId MobSpawnId = "MobAbomination"; /// /// The sound played when a mob is spawned from an emagged cloning pod. /// [DataField] public SoundSpecifier ScreamSound = new SoundCollectionSpecifier("ZombieScreams") { Params = AudioParams.Default.WithVolume(4), }; /// /// The machine part that affects how much biomass is needed to clone a body. /// [DataField("partRatingMaterialMultiplier")] public float PartRatingMaterialMultiplier = 0.85f; // Frontier: machine part upgrades /// /// The base multiplier on the body weight, which determines the /// amount of biomass needed to clone, and is affected by part upgrades. /// [DataField, ViewVariables(VVAccess.ReadWrite)] public float BaseBiomassRequirementMultiplier = 1; // Frontier: machine part upgrades /// /// The current multiplier on the body weight, which determines the /// amount of biomass needed to clone. /// [DataField, ViewVariables(VVAccess.ReadWrite)] public float BiomassRequirementMultiplier = 1; /// /// The machine part that decreases the amount of material needed for cloning /// [DataField("machinePartMaterialUse"), ViewVariables(VVAccess.ReadWrite)] public ProtoId MachinePartMaterialUse = "MatterBin"; [ViewVariables(VVAccess.ReadWrite)] public CloningPodStatus Status; [ViewVariables] public EntityUid? ConnectedConsole; // Frontier: macihine upgrades /// /// The base amount of time it takes to clone a body /// [DataField] public float BaseCloningTime = 30f; /// /// The multiplier for cloning duration /// [DataField] public float PartRatingSpeedMultiplier = 0.75f; /// /// The machine part that affects cloning speed /// [DataField] public ProtoId MachinePartCloningSpeed = "Manipulator"; // End Frontier: machine upgrades } [Serializable, NetSerializable] public enum CloningPodVisuals : byte { Status } [Serializable, NetSerializable] public enum CloningPodStatus : byte { Idle, Cloning, Gore, NoMind }