using Content.Shared.Arcade; using Robust.Shared.Audio; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List; namespace Content.Server.Arcade.SpaceVillain; [RegisterComponent] public sealed partial class SpaceVillainArcadeComponent : SharedSpaceVillainArcadeComponent { /// /// Unused flag that can be hacked via wires. /// Name suggests that it was intended to either make the health/mana values underflow while playing the game or turn the arcade machine into an infinite prize fountain. /// [ViewVariables] public bool OverflowFlag; /// /// The current session of the SpaceVillain game for this arcade machine. /// [ViewVariables] public SpaceVillainGame? Game = null; /// /// The sound played when a new session of the SpaceVillain game is begun. /// [DataField("newGameSound")] public SoundSpecifier NewGameSound = new SoundPathSpecifier("/Audio/Effects/Arcade/newgame.ogg"); /// /// The sound played when the player chooses to attack. /// [DataField("playerAttackSound")] public SoundSpecifier PlayerAttackSound = new SoundPathSpecifier("/Audio/Effects/Arcade/player_attack.ogg"); /// /// The sound played when the player chooses to heal. /// [DataField("playerHealSound")] public SoundSpecifier PlayerHealSound = new SoundPathSpecifier("/Audio/Effects/Arcade/player_heal.ogg"); /// /// The sound played when the player chooses to regain mana. /// [DataField("playerChargeSound")] public SoundSpecifier PlayerChargeSound = new SoundPathSpecifier("/Audio/Effects/Arcade/player_charge.ogg"); /// /// The sound played when the player wins. /// [DataField("winSound")] public SoundSpecifier WinSound = new SoundPathSpecifier("/Audio/Effects/Arcade/win.ogg"); /// /// The sound played when the player loses. /// [DataField("gameOverSound")] public SoundSpecifier GameOverSound = new SoundPathSpecifier("/Audio/Effects/Arcade/gameover.ogg"); /// /// The prefixes that can be used to create the game name. /// [ViewVariables(VVAccess.ReadWrite)] [DataField("possibleFightVerbs")] public List PossibleFightVerbs = new() {"Defeat", "Annihilate", "Save", "Strike", "Stop", "Destroy", "Robust", "Romance", "Pwn", "Own"}; /// /// The first names/titles that can be used to construct the name of the villain. /// [ViewVariables(VVAccess.ReadWrite)] [DataField("possibleFirstEnemyNames")] public List PossibleFirstEnemyNames = new(){ "the Automatic", "Farmer", "Lord", "Professor", "the Cuban", "the Evil", "the Dread King", "the Space", "Lord", "the Great", "Duke", "General" }; /// /// The last names that can be used to construct the name of the villain. /// [ViewVariables(VVAccess.ReadWrite)] [DataField("possibleLastEnemyNames")] public List PossibleLastEnemyNames = new() { "Melonoid", "Murdertron", "Sorcerer", "Ruin", "Jeff", "Ectoplasm", "Crushulon", "Uhangoid", "Vhakoid", "Peteoid", "slime", "Griefer", "ERPer", "Lizard Man", "Unicorn" }; /// /// The prototypes that can be dispensed as a reward for winning the game. /// [ViewVariables(VVAccess.ReadWrite)] [DataField("possibleRewards", customTypeSerializer: typeof(PrototypeIdListSerializer))] public List PossibleRewards = new(); /// /// The minimum number of prizes the arcade machine can have. /// [DataField("rewardMinAmount")] public int RewardMinAmount; /// /// The maximum number of prizes the arcade machine can have. /// [DataField("rewardMaxAmount")] public int RewardMaxAmount; /// /// The remaining number of prizes the arcade machine can dispense. /// [ViewVariables(VVAccess.ReadWrite)] public int RewardAmount = 0; }