]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Localize space villain arcade (#40641)
authorMilenVolf <63782763+MilenVolf@users.noreply.github.com>
Fri, 3 Oct 2025 11:08:36 +0000 (14:08 +0300)
committerGitHub <noreply@github.com>
Fri, 3 Oct 2025 11:08:36 +0000 (11:08 +0000)
Content.Server/Arcade/SpaceVillainGame/SpaceVillainArcadeComponent.cs
Content.Server/Arcade/SpaceVillainGame/SpaceVillainArcadeSystem.cs
Resources/Locale/en-US/datasets/arcade_villain.ftl [new file with mode: 0644]
Resources/Prototypes/Datasets/arcade_villain.yml [new file with mode: 0644]

index 3c8a4de2df8fe4459c825ade696134ec8ec94e4c..35e1f5b89b1eb17d1c17ec78ded774dacc56897a 100644 (file)
@@ -1,4 +1,5 @@
 using Content.Shared.Arcade;
+using Content.Shared.Dataset;
 using Robust.Shared.Audio;
 using Robust.Shared.Prototypes;
 
@@ -23,85 +24,73 @@ public sealed partial class SpaceVillainArcadeComponent : SharedSpaceVillainArca
     /// <summary>
     /// The sound played when a new session of the SpaceVillain game is begun.
     /// </summary>
-    [DataField("newGameSound")]
+    [DataField]
     public SoundSpecifier NewGameSound = new SoundPathSpecifier("/Audio/Effects/Arcade/newgame.ogg");
 
     /// <summary>
     /// The sound played when the player chooses to attack.
     /// </summary>
-    [DataField("playerAttackSound")]
+    [DataField]
     public SoundSpecifier PlayerAttackSound = new SoundPathSpecifier("/Audio/Effects/Arcade/player_attack.ogg");
 
     /// <summary>
     /// The sound played when the player chooses to heal.
     /// </summary>
-    [DataField("playerHealSound")]
+    [DataField]
     public SoundSpecifier PlayerHealSound = new SoundPathSpecifier("/Audio/Effects/Arcade/player_heal.ogg");
 
     /// <summary>
     /// The sound played when the player chooses to regain mana.
     /// </summary>
-    [DataField("playerChargeSound")]
+    [DataField]
     public SoundSpecifier PlayerChargeSound = new SoundPathSpecifier("/Audio/Effects/Arcade/player_charge.ogg");
 
     /// <summary>
     /// The sound played when the player wins.
     /// </summary>
-    [DataField("winSound")]
+    [DataField]
     public SoundSpecifier WinSound = new SoundPathSpecifier("/Audio/Effects/Arcade/win.ogg");
 
     /// <summary>
     /// The sound played when the player loses.
     /// </summary>
-    [DataField("gameOverSound")]
+    [DataField]
     public SoundSpecifier GameOverSound = new SoundPathSpecifier("/Audio/Effects/Arcade/gameover.ogg");
 
     /// <summary>
     /// The prefixes that can be used to create the game name.
     /// </summary>
-    [ViewVariables(VVAccess.ReadWrite)]
-    [DataField("possibleFightVerbs")]
-    public List<string> PossibleFightVerbs = new()
-        {"Defeat", "Annihilate", "Save", "Strike", "Stop", "Destroy", "Robust", "Romance", "Pwn", "Own"};
+    [DataField]
+    public ProtoId<LocalizedDatasetPrototype> PossibleFightVerbs = "SpaceVillainVerbsFight";
 
     /// <summary>
     /// The first names/titles that can be used to construct the name of the villain.
     /// </summary>
-    [ViewVariables(VVAccess.ReadWrite)]
-    [DataField("possibleFirstEnemyNames")]
-    public List<string> PossibleFirstEnemyNames = new(){
-        "the Automatic", "Farmer", "Lord", "Professor", "the Cuban", "the Evil", "the Dread King",
-        "the Space", "Lord", "the Great", "Duke", "General"
-    };
+    [DataField]
+    public ProtoId<LocalizedDatasetPrototype> PossibleFirstEnemyNames = "SpaceVillainNamesEnemyFirst";
 
     /// <summary>
     /// The last names that can be used to construct the name of the villain.
     /// </summary>
-    [ViewVariables(VVAccess.ReadWrite)]
-    [DataField("possibleLastEnemyNames")]
-    public List<string> PossibleLastEnemyNames = new()
-    {
-        "Melonoid", "Murdertron", "Sorcerer", "Ruin", "Jeff", "Ectoplasm", "Crushulon", "Uhangoid",
-        "Vhakoid", "Peteoid", "slime", "Griefer", "ERPer", "Lizard Man", "Unicorn"
-    };
+    [DataField]
+    public ProtoId<LocalizedDatasetPrototype> PossibleLastEnemyNames = "SpaceVillainNamesEnemyLast";
 
     /// <summary>
     /// The prototypes that can be dispensed as a reward for winning the game.
     /// </summary>
-    [ViewVariables(VVAccess.ReadWrite)]
     [DataField]
     public List<EntProtoId> PossibleRewards = new();
 
     /// <summary>
     /// The minimum number of prizes the arcade machine can have.
     /// </summary>
-    [DataField("rewardMinAmount")]
+    [DataField]
     public int RewardMinAmount;
 
     /// <summary>
     /// The maximum number of prizes the arcade machine can have.
     /// </summary>
-    [DataField("rewardMaxAmount")]
+    [DataField]
     public int RewardMaxAmount;
 
     /// <summary>
index bb717c7012e81bc0947c7c09ea0222d091a241ac..021d6f6f1111dd3d58a2df0b46340b6824a0fe8a 100644 (file)
@@ -4,15 +4,18 @@ using Content.Server.Advertise.EntitySystems;
 using Content.Shared.Advertise.Components;
 using Content.Shared.Arcade;
 using Content.Shared.Power;
+using Content.Shared.Random.Helpers;
 using Robust.Server.GameObjects;
 using Robust.Shared.Audio;
 using Robust.Shared.Audio.Systems;
+using Robust.Shared.Prototypes;
 using Robust.Shared.Random;
 
 namespace Content.Server.Arcade.SpaceVillain;
 
 public sealed partial class SpaceVillainArcadeSystem : EntitySystem
 {
+    [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
     [Dependency] private readonly IRobustRandom _random = default!;
     [Dependency] private readonly SharedAudioSystem _audioSystem = default!;
     [Dependency] private readonly UserInterfaceSystem _uiSystem = default!;
@@ -52,7 +55,7 @@ public sealed partial class SpaceVillainArcadeSystem : EntitySystem
     /// <returns>A fight-verb.</returns>
     public string GenerateFightVerb(SpaceVillainArcadeComponent arcade)
     {
-        return _random.Pick(arcade.PossibleFightVerbs);
+        return _random.Pick(_prototypeManager.Index(arcade.PossibleFightVerbs));
     }
 
     /// <summary>
@@ -61,7 +64,10 @@ public sealed partial class SpaceVillainArcadeSystem : EntitySystem
     /// <returns>An enemy-name.</returns>
     public string GenerateEnemyName(SpaceVillainArcadeComponent arcade)
     {
-        return $"{_random.Pick(arcade.PossibleFirstEnemyNames)} {_random.Pick(arcade.PossibleLastEnemyNames)}";
+        var possibleFirstEnemyNames = _prototypeManager.Index(arcade.PossibleFirstEnemyNames);
+        var possibleLastEnemyNames = _prototypeManager.Index(arcade.PossibleLastEnemyNames);
+
+        return $"{_random.Pick(possibleFirstEnemyNames)} {_random.Pick(possibleLastEnemyNames)}";
     }
 
     private void OnComponentInit(EntityUid uid, SpaceVillainArcadeComponent component, ComponentInit args)
diff --git a/Resources/Locale/en-US/datasets/arcade_villain.ftl b/Resources/Locale/en-US/datasets/arcade_villain.ftl
new file mode 100644 (file)
index 0000000..b1cb2d5
--- /dev/null
@@ -0,0 +1,40 @@
+# Verbs
+arcade-villain-verbs-fight-1 = Annihilate
+arcade-villain-verbs-fight-2 = Defeat
+arcade-villain-verbs-fight-3 = Destroy
+arcade-villain-verbs-fight-4 = Own
+arcade-villain-verbs-fight-5 = Pwn
+arcade-villain-verbs-fight-6 = Robust
+arcade-villain-verbs-fight-7 = Romance
+arcade-villain-verbs-fight-8 = Save
+arcade-villain-verbs-fight-9 = Stop
+arcade-villain-verbs-fight-10 = Strike
+
+# Enemy names
+arcade-villain-names-enemy-first-1 = Duke
+arcade-villain-names-enemy-first-2 = Farmer
+arcade-villain-names-enemy-first-3 = General
+arcade-villain-names-enemy-first-4 = Lord
+arcade-villain-names-enemy-first-5 = Professor
+arcade-villain-names-enemy-first-6 = the Automatic
+arcade-villain-names-enemy-first-7 = the Cuban
+arcade-villain-names-enemy-first-8 = the Dread King
+arcade-villain-names-enemy-first-9 = the Evil
+arcade-villain-names-enemy-first-10 = the Great
+arcade-villain-names-enemy-first-11 = the Space
+
+arcade-villain-names-enemy-last-1 = Crushulon
+arcade-villain-names-enemy-last-2 = ERPer
+arcade-villain-names-enemy-last-3 = Ectoplasm
+arcade-villain-names-enemy-last-4 = Griefer
+arcade-villain-names-enemy-last-5 = Jeff
+arcade-villain-names-enemy-last-6 = Lizard Man
+arcade-villain-names-enemy-last-7 = Melonoid
+arcade-villain-names-enemy-last-8 = Murdertron
+arcade-villain-names-enemy-last-9 = Peteoid
+arcade-villain-names-enemy-last-10 = Ruin
+arcade-villain-names-enemy-last-11 = Sorcerer
+arcade-villain-names-enemy-last-12 = Uhangoid
+arcade-villain-names-enemy-last-13 = Unicorn
+arcade-villain-names-enemy-last-14 = Vhakoid
+arcade-villain-names-enemy-last-15 = slime
diff --git a/Resources/Prototypes/Datasets/arcade_villain.yml b/Resources/Prototypes/Datasets/arcade_villain.yml
new file mode 100644 (file)
index 0000000..5e4a517
--- /dev/null
@@ -0,0 +1,17 @@
+- type: localizedDataset
+  id: SpaceVillainVerbsFight
+  values:
+    prefix: arcade-villain-verbs-fight-
+    count: 10
+
+- type: localizedDataset
+  id: SpaceVillainNamesEnemyFirst
+  values:
+    prefix: arcade-villain-names-enemy-first-
+    count: 11
+
+- type: localizedDataset
+  id: SpaceVillainNamesEnemyLast
+  values:
+    prefix: arcade-villain-names-enemy-last-
+    count: 15