From d750e7b599f5bb3eb53d4890be5e04037b1b0921 Mon Sep 17 00:00:00 2001 From: T-Stalker <43253663+DogZeroX@users.noreply.github.com> Date: Thu, 12 May 2022 20:43:15 -0300 Subject: [PATCH] Lizard name datasets (#7890) Co-authored-by: metalgearsloth --- .../UI/HumanoidProfileEditor.Random.cs | 5 +- Content.Shared/CharacterAppearance/Sex.cs | 45 ++- .../Preferences/HumanoidCharacterProfile.cs | 21 +- Content.Shared/Species/SpeciesPrototype.cs | 20 +- .../Datasets/Names/reptilian_female.yml | 166 +++++++++ .../Datasets/Names/reptilian_male.yml | 331 ++++++++++++++++++ Resources/Prototypes/species.yml | 3 + 7 files changed, 565 insertions(+), 26 deletions(-) create mode 100644 Resources/Prototypes/Datasets/Names/reptilian_female.yml create mode 100644 Resources/Prototypes/Datasets/Names/reptilian_male.yml diff --git a/Content.Client/Preferences/UI/HumanoidProfileEditor.Random.cs b/Content.Client/Preferences/UI/HumanoidProfileEditor.Random.cs index e3ce233a4e..e666db6493 100644 --- a/Content.Client/Preferences/UI/HumanoidProfileEditor.Random.cs +++ b/Content.Client/Preferences/UI/HumanoidProfileEditor.Random.cs @@ -29,9 +29,8 @@ namespace Content.Client.Preferences.UI private void RandomizeName() { if (Profile == null) return; - var firstName = _random.Pick(Profile.Sex.FirstNames(_prototypeManager).Values); - var lastName = _random.Pick(_prototypeManager.Index("names_last")); - SetName($"{firstName} {lastName}"); + var name = Profile.Sex.GetName(Profile.Species, _prototypeManager, _random); + SetName(name); UpdateNameEdit(); } } diff --git a/Content.Shared/CharacterAppearance/Sex.cs b/Content.Shared/CharacterAppearance/Sex.cs index b0ea69f869..1e3116ff12 100644 --- a/Content.Shared/CharacterAppearance/Sex.cs +++ b/Content.Shared/CharacterAppearance/Sex.cs @@ -1,11 +1,13 @@ using System; using Content.Shared.Dataset; +using Content.Shared.Species; using Robust.Shared.IoC; using Robust.Shared.Prototypes; +using Robust.Shared.Random; namespace Content.Shared.CharacterAppearance { - public enum Sex + public enum Sex : byte { Male, Female @@ -13,19 +15,50 @@ namespace Content.Shared.CharacterAppearance public static class SexExtensions { - public static DatasetPrototype FirstNames(this Sex sex, IPrototypeManager? prototypeManager = null) + public static string GetName(this Sex sex, string species, IPrototypeManager? prototypeManager = null, IRobustRandom? random = null) { - prototypeManager ??= IoCManager.Resolve(); + IoCManager.Resolve(ref prototypeManager); + IoCManager.Resolve(ref random); + + // if they have an old species or whatever just fall back to human I guess? + // Some downstream is probably gonna have this eventually but then they can deal with fallbacks. + if (!prototypeManager.TryIndex(species, out SpeciesPrototype? speciesProto)) + { + speciesProto = prototypeManager.Index("Human"); + Logger.Warning($"Unable to find species {species} for name, falling back to Human"); + } + + switch (speciesProto.Naming) + { + case SpeciesNaming.FirstDashFirst: + return $"{GetFirstName(sex, speciesProto, prototypeManager, random)}-{GetFirstName(sex, speciesProto, prototypeManager, random)}"; + case SpeciesNaming.FirstLast: + default: + return $"{GetFirstName(sex, speciesProto, prototypeManager, random)} {GetLastName(sex, speciesProto, prototypeManager, random)}"; + } + } + + public static string GetFirstName(this Sex sex, SpeciesPrototype speciesProto, IPrototypeManager? protoManager = null, IRobustRandom? random = null) + { + IoCManager.Resolve(ref protoManager); + IoCManager.Resolve(ref random); switch (sex) { case Sex.Male: - return prototypeManager.Index("names_first_male"); + return random.Pick(protoManager.Index(speciesProto.MaleFirstNames).Values); case Sex.Female: - return prototypeManager.Index("names_first_female"); + return random.Pick(protoManager.Index(speciesProto.FemaleFirstNames).Values); default: - throw new ArgumentOutOfRangeException(nameof(sex), sex, null); + throw new ArgumentOutOfRangeException(); } } + + public static string GetLastName(this Sex sex, SpeciesPrototype speciesProto, IPrototypeManager? protoManager = null, IRobustRandom? random = null) + { + IoCManager.Resolve(ref protoManager); + IoCManager.Resolve(ref random); + return random.Pick(protoManager.Index(speciesProto.LastNames).Values); + } } } diff --git a/Content.Shared/Preferences/HumanoidCharacterProfile.cs b/Content.Shared/Preferences/HumanoidCharacterProfile.cs index 4c7d2f986a..8782b1652b 100644 --- a/Content.Shared/Preferences/HumanoidCharacterProfile.cs +++ b/Content.Shared/Preferences/HumanoidCharacterProfile.cs @@ -112,17 +112,15 @@ namespace Content.Shared.Preferences public static HumanoidCharacterProfile Random() { + var prototypeManager = IoCManager.Resolve(); var random = IoCManager.Resolve(); - var species = random.Pick(IoCManager.Resolve() + var species = random.Pick(prototypeManager .EnumeratePrototypes().Where(x => x.RoundStart).ToArray()).ID; var sex = random.Prob(0.5f) ? Sex.Male : Sex.Female; var gender = sex == Sex.Male ? Gender.Male : Gender.Female; - var prototypeManager = IoCManager.Resolve(); - var firstName = random.Pick(sex.FirstNames(prototypeManager).Values); - var lastName = random.Pick(prototypeManager.Index("names_last")); - var name = $"{firstName} {lastName}"; + var name = sex.GetName(species, prototypeManager, random); var age = random.Next(MinimumAge, MaximumAge); return new HumanoidCharacterProfile(name, species, age, sex, gender, HumanoidCharacterAppearance.Random(sex), ClothingPreference.Jumpsuit, BackpackPreference.Backpack, @@ -279,7 +277,7 @@ namespace Content.Shared.Preferences string name; if (string.IsNullOrEmpty(Name)) { - name = RandomName(); + name = Sex.GetName(Species); } else if (Name.Length > MaxNameLength) { @@ -299,7 +297,7 @@ namespace Content.Shared.Preferences if (string.IsNullOrEmpty(name)) { - name = RandomName(); + name = Sex.GetName(Species); } var appearance = HumanoidCharacterAppearance.EnsureValid(Appearance, Species); @@ -361,15 +359,6 @@ namespace Content.Shared.Preferences _antagPreferences.Clear(); _antagPreferences.AddRange(antags); - - string RandomName() - { - var random = IoCManager.Resolve(); - var protoMan = IoCManager.Resolve(); - var firstName = random.Pick(Sex.FirstNames(protoMan).Values); - var lastName = random.Pick(protoMan.Index("names_last")); - return $"{firstName} {lastName}"; - } } public override bool Equals(object? obj) diff --git a/Content.Shared/Species/SpeciesPrototype.cs b/Content.Shared/Species/SpeciesPrototype.cs index e4221c75d6..03277bdb76 100644 --- a/Content.Shared/Species/SpeciesPrototype.cs +++ b/Content.Shared/Species/SpeciesPrototype.cs @@ -43,11 +43,29 @@ public sealed class SpeciesPrototype : IPrototype /// [DataField("skinColoration", required: true)] public SpeciesSkinColor SkinColoration { get; } + + [DataField("maleFirstNames")] + public string MaleFirstNames { get; } = "names_first_male"; + + [DataField("femaleFirstNames")] + public string FemaleFirstNames { get; } = "names_first_female"; + + [DataField("lastNames")] + public string LastNames { get; } = "names_last"; + + [DataField("naming")] + public SpeciesNaming Naming { get; } = SpeciesNaming.FirstLast; } -public enum SpeciesSkinColor +public enum SpeciesSkinColor : byte { HumanToned, Hues, TintedHues, //This gives a color tint to a humanoid's skin (10% saturation with full hue range). } + +public enum SpeciesNaming : byte +{ + FirstLast, + FirstDashFirst, +} diff --git a/Resources/Prototypes/Datasets/Names/reptilian_female.yml b/Resources/Prototypes/Datasets/Names/reptilian_female.yml new file mode 100644 index 0000000000..a4247e9e68 --- /dev/null +++ b/Resources/Prototypes/Datasets/Names/reptilian_female.yml @@ -0,0 +1,166 @@ +- type: dataset + id: names_reptilian_female + values: + - Adzi + - Ah + - Ahaht + - Ajim + - Akeenus + - Akish + - Akishan + - Aleeto + - Am + - Amussa + - An + - Anozz + - Asheemar + - Asska + - Awas + - Azala + - Azbai + - Azeez + - Azum + - Banalz + - Bar + - Baseenar + - Beek + - Beekatan + - Beekus + - Beela + - Beelei + - Beem + - Beewos + - Bejeen + - Ber + - Betzi + - Bishalus + - Bokeeus + - Bur + - Bura + - Chalaree + - Chana + - Chanil + - Chee + - Cheesh + - Chimatei + - Chirurgeon + - Cholasistu + - Chuna + - Churasu + - Crath + - Dar + - Deeja + - Deesei + - Deesh + - Deetsan + - Deetwos + - Dooka + - Druja + - Eepa + - Ei + - Eix + - El + - Ereel + - Eutei + - Gai + - Gih + - Gilm + - Gish + - Go + - Hal + - Hul + - Ja + - Jaseen + - Jasuda + - Jeed + - Jeen + - Kajul + - Kal + - Kasa + - Keel + - Keerava + - Kiurz + - Kud + - La + - Lee + - Lei + - Lifts + - Liurz + - Lurasha + - Ma + - Mach + - Marz + - Meedish + - Meeh + - Meema + - Meen + - Meena + - Meenus + - Meerana + - Meesei + - Meeus + - Mei + - Milah + - Mim + - Mota + - Mudeska + - Muz + - Na + - Nakuma + - Nam + - Nassa + - Natoo + - Neesha + - Neetizei + - Neetra + - Neeus + - Niima + - Numeen + - Nuralg + - Nush + - Ocheeva + - Okur + - Olank + - On + - Onasha + - Osheeka + - Pasha + - Ra + - Rana + - Raniur + - Ree + - Reesa + - Rei + - Sa + - Saak + - Sanax + - Seeba + - Seed + - Seen + - Shah + - Shahvee + - Shaleez + - Shatalg + - Sheer + - Shei + - Sigerthe + - Skaleel + - Sudie + - Tail + - Tar + - Tasha + - Tei + - Telixith + - Tumma + - Veek + - Wan + - Wazei + - Weedum + - Weewish + - Witseidutsei + - Wuja + - Wujeeta + - Wusha + - Xil + - Zish + - Zollassa diff --git a/Resources/Prototypes/Datasets/Names/reptilian_male.yml b/Resources/Prototypes/Datasets/Names/reptilian_male.yml new file mode 100644 index 0000000000..8b7fec08ad --- /dev/null +++ b/Resources/Prototypes/Datasets/Names/reptilian_male.yml @@ -0,0 +1,331 @@ +- type: dataset + id: names_reptilian_male + values: + - Abijoo + - Ah + - Ajum + - Am + - Amusei + - An + - Anoo + - Aojee + - Asum + - Az + - Azeel + - Azinar + - Azjai + - Baar + - Banka + - Bar + - Barnaxi + - Batar + - Batuus + - Beem + - Beshnus + - Betu + - Bex + - Bijot + - Bimee + - Binyaar + - Bosekus + - Brand + - Bun + - Bunach + - Bunish + - Busheeus + - Buujhan + - Chakuk + - Chalish + - Chalureel + - Chath + - Chee + - Cheedal + - Chilwir + - Chitakus + - Chiwish + - Chulz + - Chuna + - Da + - Dakee + - Dan + - Dar + - Darasken + - DarJee + - Debameel + - Deed + - Deegeeta + - Deeh + - Deekonus + - Deekum + - Deekus + - Deerkaza + - Deetum + - Demeepa + - Depasa + - Derkeethus + - Deroh + - Dezanu + - Dreet + - Drumarz + - Dum + - Dunaxith + - Effe + - Ei + - Eidu + - Eius + - Eiuus + - Eix + - Eleedal + - Er + - Esqoo + - Etaku + - Gah + - Gajul + - Gam + - Geeh + - Geel + - Geem + - Geh + - Gei + - Gih + - Gin + - Goh + - Gulum + - Haj + - Han + - Haran + - Hareeya + - Hathei + - Heedul + - Heem + - Hei + - Heir + - Hixeeh + - Huleeya + - Huzei + - Ilas + - Im + - Inee + - Itan + - J'Ram + - Ja + - Jah + - Jaraleet + - Jaree + - Jas + - Jasaiin + - Jaseen + - Jat + - Jee + - Jeela + - Jeelius + - Jeelus + - Jeen + - Jeer + - Jeetum + - Jei + - Jilux + - Jin + - Jon + - Jul + - Julan + - Junal + - Jush + - Juunei + - Kai + - Kajin + - Kamax + - Kas + - Keema + - Keer + - Keerasa + - Kepanuu + - Kia + - Kiameed + - Kilaya + - Kiurz + - Kur + - Kuz + - La + - Lah + - Lai + - Lan + - Lara + - Leem + - Lei + - Loh + - Lotash + - Luh + - Lurz + - Luteema + - Maahi + - Madesi + - Maheelius + - Mahei + - Maht + - Malz + - Marz + - Mathei + - Maxath + - Meej + - Meejapa + - Meensuda + - Meer + - Mema + - Mere + - Metaku + - Miharil + - Milos + - Miun + - Mobareed + - Mohimeem + - Mopakuz + - Motuu + - Mujeen + - Muranatepa + - Mush + - Muz + - Na + - Napetui + - Nazuux + - Nebutil + - Neeti + - Neetinei + - Neetrenaza + - Neetzara + - Neeus + - Nema + - Neposh + - Netapatuu + - Nexith + - Nodeeus + - Nomu + - Nosaleeth + - Nowajeem + - Noyei + - Nulaz + - Nur + - Obaxith + - Okan + - Okaw + - Okeeh + - Oleed + - Oleen + - Olik + - Olink + - Onuja + - Onurai + - Opatieel + - Otumeel + - Owai + - Pachat + - Pacheeva + - Pad + - Paduxi + - Pajeen + - Parash + - Peeradeeh + - Pejureel + - Petaxai + - Pideelus + - Pimaxi + - Pojeel + - Ra + - Radithax + - Raj + - Rareel + - Rasha + - Redieeus + - Ree + - Reeh + - Reemukeeus + - Reenum + - Reesa + - Reet + - Reezal + - Resari + - Riker + - Ru + - Rupah + - Sakeepa + - Sakeeus + - Sakka + - Saliith + - Sar + - Schiavas + - Seek + - Seewul + - Sei + - Sejaijilax + - Shakiis + - Shehs + - Shei + - Silm + - Skee + - Skeetul + - Sureeus + - Ta + - Taeed + - Tah + - Taleel + - Talen + - Tan + - Tanaka + - Tanan + - Tee + - Teeba + - Teegla + - Teeka + - Teekeeus + - Teemeeta + - Teeus + - Tehat + - Tei + - Teinaava + - Teineeja + - Terezeeus + - Tikaasi + - Tim + - Topeeth + - Topith + - Tsleeixth + - Tul + - Tulm + - Tun + - Ukatsei + - Ukawei + - Ula + - Ulawa + - Ullis + - Usha + - Usheeja + - Utadeek + - Utamukeeus + - Utatul + - Uxith + - Vara + - Veekas + - Veenaza + - Veezara + - Vistha + - Vudeelal + - Wanan + - Wanum + - Wayiteh + - Weebam + - Weeltul + - Weer + - Wih + - Wud + - Wuleen + - Wulm + - Wumeek + - Xal + - Xemo + - Yinz + - Yinz'r + - Zaw + - Ze + - Zeen + - Zeeus + - Zish diff --git a/Resources/Prototypes/species.yml b/Resources/Prototypes/species.yml index 832a34bd3a..134d6ab556 100644 --- a/Resources/Prototypes/species.yml +++ b/Resources/Prototypes/species.yml @@ -21,6 +21,9 @@ prototype: MobReptilian dollPrototype: MobReptilianDummy skinColoration: Hues + maleFirstNames: names_reptilian_male + femaleFirstNames: names_reptilian_female + naming: FirstDashFirst - type: species id: SlimePerson