diff --git a/Sources/Everglow.UnitTests/Modules/Yggdrasil/CrowdActivityTests.cs b/Sources/Everglow.UnitTests/Modules/Yggdrasil/CrowdActivityTests.cs index 1f0a1feea..cc02b1fec 100644 --- a/Sources/Everglow.UnitTests/Modules/Yggdrasil/CrowdActivityTests.cs +++ b/Sources/Everglow.UnitTests/Modules/Yggdrasil/CrowdActivityTests.cs @@ -76,7 +76,7 @@ public void CrowdNamePoolIsVariedAndStableForTheSameIdentity() string Key(int seed) => (string)key.Invoke(null, [seed])!; var keys = Enumerable.Range(0, 256).Select(Key).ToArray(); Assert.IsTrue(keys.Distinct().Count() >= 24); - Assert.IsTrue(keys.All(value => value.StartsWith("Mods.Everglow.Travelers.Names."))); + Assert.IsTrue(keys.All(value => value.StartsWith("Mods.Everglow.TownCrowds.Names."))); Assert.AreEqual(Key(931), Key(931)); Assert.IsFalse(string.IsNullOrWhiteSpace(Key(int.MinValue))); } diff --git a/Sources/Everglow/Localization/en-US/Mods.Everglow.TownCrowds.hjson b/Sources/Everglow/Localization/en-US/Mods.Everglow.TownCrowds.hjson new file mode 100644 index 000000000..63b59bbaa --- /dev/null +++ b/Sources/Everglow/Localization/en-US/Mods.Everglow.TownCrowds.hjson @@ -0,0 +1,303 @@ +Names: { + Alden: Alden + Mira: Mira + Rowan: Rowan + Lyra: Lyra + Orin: Orin + Elara: Elara + Finn: Finn + Nia: Nia + Silas: Silas + Iris: Iris + Theo: Theo + Luna: Luna + Arlo: Arlo + Cora: Cora + Jasper: Jasper + Vera: Vera + Emil: Emil + Faye: Faye + Noel: Noel + Sora: Sora + Ren: Ren + Yuna: Yuna + Lian: Lian + Mei: Mei + Kai: Kai + Asha: Asha + Tarin: Tarin + Selene: Selene + Bram: Bram + Tessa: Tessa + Eira: Eira + Ravi: Ravi + ChenAn: Anan + LinYue: Yueyue + ZhouNing: Ning + XuQing: Aqing + ShenXing: Xing + SuHe: Hehe + LinAn: An + ChenMo: Mo + ShenQinghe: Qinghe + XuXingyao: Yao + OuyangMingyue: Ming + SituQingfeng: Qing + Aaron: Aaron + Adam: Adam + Adrian: Adrian + Aiden: Aiden + Alan: Alan + Albert: Albert + Alex: Alex + Alfred: Alfred + Arthur: Arthur + Asher: Asher + August: August + Austin: Austin + Benjamin: Benjamin + Blake: Blake + Caleb: Caleb + Cedric: Cedric + Charles: Charles + Colin: Colin + Daniel: Daniel + David: David + Dean: Dean + Dorian: Dorian + Edgar: Edgar + Edmund: Edmund + Edward: Edward + Elias: Elias + Elliot: Elliot + Eric: Eric + Ethan: Ethan + Felix: Felix + Gabriel: Gabriel + Gareth: Gareth + George: George + Graham: Graham + Hector: Hector + Henry: Henry + Hugo: Hugo + Isaac: Isaac + Julian: Julian + Leo: Leo + Leon: Leon + Levi: Levi + Liam: Liam + Lucas: Lucas + Marcus: Marcus + Milo: Milo + Nathan: Nathan + Oliver: Oliver + Oscar: Oscar + Owen: Owen + Ada: Ada + Alice: Alice + Amelia: Amelia + Anna: Anna + Aurora: Aurora + Ava: Ava + Beatrice: Beatrice + Bella: Bella + Camille: Camille + Celia: Celia + Clara: Clara + Daisy: Daisy + Daphne: Daphne + Diana: Diana + Eden: Eden + Elise: Elise + Ella: Ella + Elsie: Elsie + Emma: Emma + Estelle: Estelle + Eva: Eva + Evelyn: Evelyn + Flora: Flora + Freya: Freya + Grace: Grace + Hazel: Hazel + Helena: Helena + Holly: Holly + Isabel: Isabel + Ivy: Ivy + Julia: Julia + Lena: Lena + Lily: Lily + Lucia: Lucia + Lucy: Lucy + Maeve: Maeve + Margot: Margot + Maya: Maya + Nora: Nora + Olive: Olive + Opal: Opal + Pearl: Pearl + Phoebe: Phoebe + Rose: Rose + Ruby: Ruby + Sadie: Sadie + Sophie: Sophie + Stella: Stella + Violet: Violet + Willow: Willow + ZhaoYu: Yu + QianSong: Song + SunZhu: Zhu + LiQuan: Quan + ZhouLan: Lan + WuTong: Tong + ZhengChuan: Chuan + WangXi: Xi + FengNing: Aning + WeiLan: Lanlan + JiangFeng: Feng + HanLu: Lu + YangFan: Fan + ZhuChen: Chen + QinLang: Lang + YouXia: Xia + HeQiu: Qiu + LyuYan: Yan + ShiYu: Ayu + ZhangHe: Hemiao + KongYue: Yue + CaoXue: Xue + YanShuang: Shuang + HuaXing: Axing + JinHe: He + TaoRan: Ran + JiangLi: Li + GuZhou: Zhou + BaiRuoxi: Ruoxi + JiangYunshu: Yunshu + YeTingyu: Tingyu + FangZhiyuan: Ayuan + SongWanqing: Wanwan + TangShuning: Shushu + WenYian: Yiyi + XieChangfeng: Afeng + ChengJingming: Jing + ShaoQinghe: Ahe + XiaChuxue: Chuxue + FuXinghe: Xinghe + XuWangshan: Xu Wangshan + LinJianlu: Lin Jianlu + ChenYingyue: Chen Yingyue + ShenGuizhou: Shen Guizhou + LuHuaijin: Lu Huaijin + SuJinnian: Su Jinnian + ZhouTinglan: Zhou Tinglan + QinMobai: Qin Mobai + LiuRuyan: Liu Ruyan + YunZhixia: Yun Zhixia + GuNanzhi: Nanzhi + MengXingyuan: Yuan + ShangguanYunshu: Ashu + ZhugeQinghe: Xiaohe + SimaXinghe: Aheng + XiahouMingxuan: Axuan + Jules: Jules + Luc: Luc + Louis: Louis + Remy: Rémy + Manon: Manon + Ines: Inès + Lise: Lise + Chloe: Chloé + Hans: Hans + Fritz: Fritz + Klaus: Klaus + Kurt: Kurt + Otto: Otto + Greta: Greta + Lotte: Lotte + Frieda: Frieda + Haru: Haru + Yuki: Yuki + Aki: Aki + Rin: Rin + Nao: Nao + Mio: Mio + Yui: Yui + Riku: Riku + Sasha: Sasha + Misha: Misha + Dima: Dima + Vanya: Vanya + Kolya: Kolya + Katya: Katya + Nadya: Nadya + Zoya: Zoya + Jean: Jean + Paul: Paul + Marc: Marc + Yves: Yves + Guy: Guy + Rene: René + Lucie: Lucie + Adele: Adèle + Amelie: Amélie + Aline: Aline + Celine: Céline + Fanny: Fanny + Odile: Odile + Ninon: Ninon + Sylvie: Sylvie + Benoit: Benoît + Karl: Karl + Max: Max + Franz: Franz + Rolf: Rolf + Uwe: Uwe + Jens: Jens + Jorg: Jörg + Gerd: Gerd + Ernst: Ernst + Heinz: Heinz + Inga: Inga + Elke: Elke + Anke: Anke + Ute: Ute + Rudi: Rudi + Hilda: Hilda + Aoi: Aoi + Hana: Hana + Hina: Hina + Kiko: Kiko + Miki: Miki + Nami: Nami + Nana: Nana + Rina: Rina + Risa: Risa + Ryo: Ryo + Rei: Rei + Ken: Ken + Shin: Shin + Jun: Jun + Taro: Taro + Yuto: Yuto + Yuma: Yuma + Saki: Saki + Anya: Anya + Dasha: Dasha + Masha: Masha + Tanya: Tanya + Sonya: Sonya + Olya: Olya + Ira: Ira + Liza: Liza + Nina: Nina + Rita: Rita + Vika: Vika + Yura: Yura + Borya: Borya + Petya: Petya + Pasha: Pasha + Vova: Vova + Kostya: Kostya + Tolya: Tolya + Grisha: Grisha +} diff --git a/Sources/Everglow/Localization/zh-Hans/Mods.Everglow.TownCrowds.hjson b/Sources/Everglow/Localization/zh-Hans/Mods.Everglow.TownCrowds.hjson new file mode 100644 index 000000000..cfa35c847 --- /dev/null +++ b/Sources/Everglow/Localization/zh-Hans/Mods.Everglow.TownCrowds.hjson @@ -0,0 +1,303 @@ +Names: { + Alden: 奥尔登 + Mira: 米拉 + Rowan: 罗温 + Lyra: 莱拉 + Orin: 奥林 + Elara: 埃拉拉 + Finn: 芬恩 + Nia: 妮娅 + Silas: 塞拉斯 + Iris: 艾瑞斯 + Theo: 西奥 + Luna: 露娜 + Arlo: 阿洛 + Cora: 科拉 + Jasper: 贾斯珀 + Vera: 薇拉 + Emil: 埃米尔 + Faye: 菲伊 + Noel: 诺埃尔 + Sora: 索拉 + Ren: 莲 + Yuna: 尤娜 + Lian: 连 + Mei: 梅 + Kai: 凯 + Asha: 阿莎 + Tarin: 塔林 + Selene: 塞勒涅 + Bram: 布拉姆 + Tessa: 泰莎 + Eira: 艾拉 + Ravi: 拉维 + ChenAn: 安安 + LinYue: 月月 + ZhouNing: 宁 + XuQing: 阿清 + ShenXing: 星 + SuHe: 禾禾 + LinAn: 安 + ChenMo: 墨 + ShenQinghe: 青禾 + XuXingyao: 遥 + OuyangMingyue: 明 + SituQingfeng: 清 + Aaron: 亚伦 + Adam: 亚当 + Adrian: 阿德里安 + Aiden: 艾登 + Alan: 艾伦 + Albert: 阿尔伯特 + Alex: 亚历克斯 + Alfred: 阿尔弗雷德 + Arthur: 亚瑟 + Asher: 阿舍 + August: 奥古斯特 + Austin: 奥斯汀 + Benjamin: 本杰明 + Blake: 布莱克 + Caleb: 凯莱布 + Cedric: 塞德里克 + Charles: 查尔斯 + Colin: 科林 + Daniel: 丹尼尔 + David: 大卫 + Dean: 迪恩 + Dorian: 多里安 + Edgar: 埃德加 + Edmund: 埃德蒙 + Edward: 爱德华 + Elias: 伊莱亚斯 + Elliot: 埃利奥特 + Eric: 埃里克 + Ethan: 伊桑 + Felix: 费利克斯 + Gabriel: 加布里埃尔 + Gareth: 加雷思 + George: 乔治 + Graham: 格雷厄姆 + Hector: 赫克托 + Henry: 亨利 + Hugo: 雨果 + Isaac: 艾萨克 + Julian: 朱利安 + Leo: 利奥 + Leon: 里昂 + Levi: 利维 + Liam: 利亚姆 + Lucas: 卢卡斯 + Marcus: 马库斯 + Milo: 米洛 + Nathan: 内森 + Oliver: 奥利弗 + Oscar: 奥斯卡 + Owen: 欧文 + Ada: 艾达 + Alice: 爱丽丝 + Amelia: 阿米莉娅 + Anna: 安娜 + Aurora: 奥罗拉 + Ava: 艾娃 + Beatrice: 比阿特丽斯 + Bella: 贝拉 + Camille: 卡米耶 + Celia: 西莉娅 + Clara: 克拉拉 + Daisy: 黛西 + Daphne: 达芙妮 + Diana: 戴安娜 + Eden: 伊登 + Elise: 埃莉丝 + Ella: 埃拉 + Elsie: 埃尔茜 + Emma: 艾玛 + Estelle: 埃斯特尔 + Eva: 伊娃 + Evelyn: 伊芙琳 + Flora: 芙洛拉 + Freya: 芙蕾雅 + Grace: 格蕾丝 + Hazel: 海泽尔 + Helena: 海伦娜 + Holly: 霍莉 + Isabel: 伊莎贝尔 + Ivy: 艾薇 + Julia: 朱莉娅 + Lena: 莉娜 + Lily: 莉莉 + Lucia: 露西亚 + Lucy: 露西 + Maeve: 梅芙 + Margot: 玛戈 + Maya: 玛雅 + Nora: 诺拉 + Olive: 奥莉芙 + Opal: 欧珀 + Pearl: 珀尔 + Phoebe: 菲比 + Rose: 罗丝 + Ruby: 露比 + Sadie: 赛迪 + Sophie: 索菲 + Stella: 斯特拉 + Violet: 维奥莱特 + Willow: 薇洛 + ZhaoYu: 宇 + QianSong: 松 + SunZhu: 竹 + LiQuan: 泉 + ZhouLan: 岚 + WuTong: 桐 + ZhengChuan: 川 + WangXi: 溪 + FengNing: 阿宁 + WeiLan: 澜澜 + JiangFeng: 枫 + HanLu: 露 + YangFan: 帆 + ZhuChen: 晨 + QinLang: 朗 + YouXia: 夏 + HeQiu: 秋 + LyuYan: 燕 + ShiYu: 阿雨 + ZhangHe: 禾苗 + KongYue: 岳 + CaoXue: 雪 + YanShuang: 霜 + HuaXing: 阿星 + JinHe: 河 + TaoRan: 然 + JiangLi: 黎 + GuZhou: 舟 + BaiRuoxi: 若溪 + JiangYunshu: 云舒 + YeTingyu: 听雨 + FangZhiyuan: 阿远 + SongWanqing: 晚晚 + TangShuning: 书书 + WenYian: 依依 + XieChangfeng: 阿风 + ChengJingming: 景 + ShaoQinghe: 阿和 + XiaChuxue: 初雪 + FuXinghe: 星河 + XuWangshan: 许望山 + LinJianlu: 林见鹿 + ChenYingyue: 陈映月 + ShenGuizhou: 沈归舟 + LuHuaijin: 陆怀瑾 + SuJinnian: 苏锦年 + ZhouTinglan: 周听澜 + QinMobai: 秦墨白 + LiuRuyan: 柳如烟 + YunZhixia: 云知夏 + GuNanzhi: 南枝 + MengXingyuan: 远 + ShangguanYunshu: 阿舒 + ZhugeQinghe: 小禾 + SimaXinghe: 阿衡 + XiahouMingxuan: 阿轩 + Jules: 朱尔 + Luc: 吕克 + Louis: 路易 + Remy: 雷米 + Manon: 玛侬 + Ines: 伊内丝 + Lise: 莉丝 + Chloe: 克洛伊 + Hans: 汉斯 + Fritz: 弗里茨 + Klaus: 克劳斯 + Kurt: 库尔特 + Otto: 奥托 + Greta: 格蕾塔 + Lotte: 洛特 + Frieda: 弗里达 + Haru: 春 + Yuki: 由纪 + Aki: 亚纪 + Rin: 凛 + Nao: 奈绪 + Mio: 澪 + Yui: 结衣 + Riku: 陆 + Sasha: 萨沙 + Misha: 米沙 + Dima: 迪马 + Vanya: 万尼亚 + Kolya: 科利亚 + Katya: 卡佳 + Nadya: 娜佳 + Zoya: 卓娅 + Jean: 让 + Paul: 保罗 + Marc: 马克 + Yves: 伊夫 + Guy: 居伊 + Rene: 勒内 + Lucie: 露茜 + Adele: 阿黛尔 + Amelie: 阿梅莉 + Aline: 阿琳 + Celine: 塞琳 + Fanny: 芳妮 + Odile: 奥迪尔 + Ninon: 妮侬 + Sylvie: 西尔薇 + Benoit: 伯努瓦 + Karl: 卡尔 + Max: 马克斯 + Franz: 弗朗茨 + Rolf: 罗尔夫 + Uwe: 乌韦 + Jens: 延斯 + Jorg: 约尔格 + Gerd: 格尔德 + Ernst: 恩斯特 + Heinz: 海因茨 + Inga: 英格 + Elke: 埃尔克 + Anke: 安克 + Ute: 乌特 + Rudi: 鲁迪 + Hilda: 希尔达 + Aoi: 葵 + Hana: 花 + Hina: 雏 + Kiko: 希子 + Miki: 美纪 + Nami: 奈美 + Nana: 奈奈 + Rina: 莉奈 + Risa: 莉纱 + Ryo: 凉 + Rei: 怜 + Ken: 健 + Shin: 慎 + Jun: 淳 + Taro: 太郎 + Yuto: 悠斗 + Yuma: 悠真 + Saki: 咲 + Anya: 安雅 + Dasha: 达莎 + Masha: 玛莎 + Tanya: 塔妮娅 + Sonya: 索尼娅 + Olya: 奥莉娅 + Ira: 伊拉 + Liza: 丽莎 + Nina: 妮娜 + Rita: 丽塔 + Vika: 维卡 + Yura: 尤拉 + Borya: 博里亚 + Petya: 彼佳 + Pasha: 帕沙 + Vova: 沃瓦 + Kostya: 科斯佳 + Tolya: 托利亚 + Grisha: 格里沙 +} diff --git a/Sources/Modules/Yggdrasil/Mechanics/TownCrowd/Presentation/CrowdNames.cs b/Sources/Modules/Yggdrasil/Mechanics/TownCrowd/Presentation/CrowdNames.cs index d4513da99..2cacb72c5 100644 --- a/Sources/Modules/Yggdrasil/Mechanics/TownCrowd/Presentation/CrowdNames.cs +++ b/Sources/Modules/Yggdrasil/Mechanics/TownCrowd/Presentation/CrowdNames.cs @@ -5,11 +5,50 @@ public static class CrowdNames { private static readonly string[] Pool = [ + // Chinese: 58 names (25% of the pool). + "ChenAn", "LinYue", "ZhouNing", "XuQing", "ShenXing", "SuHe", "LinAn", "ChenMo", + "ShenQinghe", "XuXingyao", "OuyangMingyue", "SituQingfeng", "ZhaoYu", "QianSong", "SunZhu", "LiQuan", + "ZhouLan", "WuTong", "ZhengChuan", "WangXi", "FengNing", "WeiLan", "JiangFeng", "HanLu", + "YangFan", "ZhuChen", "QinLang", "YouXia", "HeQiu", "LyuYan", "ShiYu", "ZhangHe", + "KongYue", "CaoXue", "YanShuang", "HuaXing", "JinHe", "TaoRan", "JiangLi", "GuZhou", + "BaiRuoxi", "JiangYunshu", "YeTingyu", "FangZhiyuan", "SongWanqing", "TangShuning", "WenYian", "XieChangfeng", + "ChengJingming", "ShaoQinghe", "XiaChuxue", "FuXinghe", "GuNanzhi", "MengXingyuan", "ShangguanYunshu", "ZhugeQinghe", + "SimaXinghe", "XiahouMingxuan", + + // English: 58 names (25% of the pool). "Alden", "Mira", "Rowan", "Lyra", "Orin", "Elara", "Finn", "Nia", - "Silas", "Iris", "Theo", "Luna", "Arlo", "Cora", "Jasper", "Vera", - "Emil", "Faye", "Noel", "Sora", "Ren", "Yuna", "Lian", "Mei", + "Silas", "Iris", "Theo", "Luna", "Arlo", "Cora", "Jasper", "Faye", "Kai", "Asha", "Tarin", "Selene", "Bram", "Tessa", "Eira", "Ravi", + "Adam", "Alex", "Arthur", "Asher", "Blake", "Caleb", "Colin", "Daniel", + "David", "Dean", "Edgar", "Elliot", "Eric", "Ethan", "Henry", "Isaac", + "Owen", "Ada", "Alice", "Ava", "Bella", "Daisy", "Eden", "Ella", + "Emma", "Flora", "Grace", "Hazel", "Holly", "Ivy", "Lily", "Lucy", + "Nora", "Ruby", + + // French: 29 names (12.5% of the pool). + "Jules", "Luc", "Louis", "Remy", "Manon", "Ines", "Lise", "Chloe", + "Noel", "Camille", "Elise", "Margot", "Sophie", "Jean", "Paul", "Marc", + "Yves", "Guy", "Rene", "Lucie", "Adele", "Amelie", "Aline", "Celine", + "Fanny", "Odile", "Ninon", "Sylvie", "Benoit", + + // German: 29 names (12.5% of the pool). + "Hans", "Fritz", "Klaus", "Kurt", "Otto", "Greta", "Lotte", "Frieda", + "Emil", "Felix", "Clara", "Lena", "Hugo", "Karl", "Max", "Franz", + "Rolf", "Uwe", "Jens", "Jorg", "Gerd", "Ernst", "Heinz", "Inga", + "Elke", "Anke", "Ute", "Rudi", "Hilda", + + // Japanese: 29 names (12.5% of the pool). + "Haru", "Yuki", "Aki", "Rin", "Nao", "Mio", "Yui", "Riku", + "Sora", "Ren", "Yuna", "Aoi", "Hana", "Hina", "Kiko", "Miki", + "Nami", "Nana", "Rina", "Risa", "Ryo", "Rei", "Ken", "Shin", + "Jun", "Taro", "Yuto", "Yuma", "Saki", + + // Russian: 29 names (12.5% of the pool). + "Sasha", "Misha", "Dima", "Vanya", "Kolya", "Katya", "Nadya", "Zoya", + "Vera", "Anna", "Anya", "Dasha", "Masha", "Tanya", "Sonya", "Olya", + "Ira", "Liza", "Nina", "Rita", "Vika", "Yura", "Borya", "Petya", + "Pasha", "Vova", "Kostya", "Tolya", "Grisha", ]; - public static string KeyFor(int seed) => $"Mods.Everglow.Travelers.Names.{Pool[(uint)seed % Pool.Length]}"; + public static string KeyFor(int seed) => $"Mods.Everglow.TownCrowds.Names.{Pool[(uint)seed % Pool.Length]}"; }