From ef84aa3151a0042c6db3f161b06238212f1dce1d Mon Sep 17 00:00:00 2001 From: CloudeaSoft Date: Tue, 20 Oct 2026 11:46:24 +0800 Subject: [PATCH 1/5] fix(yggdrasil): localize town crowd names --- .../Modules/Yggdrasil/CrowdActivityTests.cs | 2 +- .../en-US/Mods.Everglow.TownCrowds.hjson | 46 +++++++++++++++++++ .../zh-Hans/Mods.Everglow.TownCrowds.hjson | 46 +++++++++++++++++++ .../TownCrowd/Presentation/CrowdNames.cs | 4 +- 4 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 Sources/Everglow/Localization/en-US/Mods.Everglow.TownCrowds.hjson create mode 100644 Sources/Everglow/Localization/zh-Hans/Mods.Everglow.TownCrowds.hjson 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..5cdbdcaa4 --- /dev/null +++ b/Sources/Everglow/Localization/en-US/Mods.Everglow.TownCrowds.hjson @@ -0,0 +1,46 @@ +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: Chen An + LinYue: Lin Yue + ZhouNing: Zhou Ning + XuQing: Xu Qing + ShenXing: Shen Xing + SuHe: Su He + LinAn: Lin An + ChenMo: Chen Mo + ShenQinghe: Shen Qinghe + XuXingyao: Xu Xingyao + OuyangMingyue: Ouyang Mingyue + SituQingfeng: Situ Qingfeng +} 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..9a0f762d5 --- /dev/null +++ b/Sources/Everglow/Localization/zh-Hans/Mods.Everglow.TownCrowds.hjson @@ -0,0 +1,46 @@ +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: 司徒清风 +} diff --git a/Sources/Modules/Yggdrasil/Mechanics/TownCrowd/Presentation/CrowdNames.cs b/Sources/Modules/Yggdrasil/Mechanics/TownCrowd/Presentation/CrowdNames.cs index d4513da99..620b46f08 100644 --- a/Sources/Modules/Yggdrasil/Mechanics/TownCrowd/Presentation/CrowdNames.cs +++ b/Sources/Modules/Yggdrasil/Mechanics/TownCrowd/Presentation/CrowdNames.cs @@ -9,7 +9,9 @@ public static class CrowdNames "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", ]; - 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]}"; } From 4f9359d2f86774e00f766725b180a7bd2d29077f Mon Sep 17 00:00:00 2001 From: CloudeaSoft Date: Tue, 20 Oct 2026 17:03:51 +0800 Subject: [PATCH 2/5] feat(yggdrasil): expand town crowd names to 200 --- .../en-US/Mods.Everglow.TownCrowds.hjson | 156 ++++++++++++++++++ .../zh-Hans/Mods.Everglow.TownCrowds.hjson | 156 ++++++++++++++++++ .../TownCrowd/Presentation/CrowdNames.cs | 20 +++ 3 files changed, 332 insertions(+) diff --git a/Sources/Everglow/Localization/en-US/Mods.Everglow.TownCrowds.hjson b/Sources/Everglow/Localization/en-US/Mods.Everglow.TownCrowds.hjson index 5cdbdcaa4..21396760c 100644 --- a/Sources/Everglow/Localization/en-US/Mods.Everglow.TownCrowds.hjson +++ b/Sources/Everglow/Localization/en-US/Mods.Everglow.TownCrowds.hjson @@ -43,4 +43,160 @@ Names: { XuXingyao: Xu Xingyao OuyangMingyue: Ouyang Mingyue SituQingfeng: Situ Qingfeng + 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: Zhao Yu + QianSong: Qian Song + SunZhu: Sun Zhu + LiQuan: Li Quan + ZhouLan: Zhou Lan + WuTong: Wu Tong + ZhengChuan: Zheng Chuan + WangXi: Wang Xi + FengNing: Feng Ning + WeiLan: Wei Lan + JiangFeng: Jiang Feng + HanLu: Han Lu + YangFan: Yang Fan + ZhuChen: Zhu Chen + QinLang: Qin Lang + YouXia: You Xia + HeQiu: He Qiu + LyuYan: Lyu Yan + ShiYu: Shi Yu + ZhangHe: Zhang He + KongYue: Kong Yue + CaoXue: Cao Xue + YanShuang: Yan Shuang + HuaXing: Hua Xing + JinHe: Jin He + TaoRan: Tao Ran + JiangLi: Jiang Li + GuZhou: Gu Zhou + BaiRuoxi: Bai Ruoxi + JiangYunshu: Jiang Yunshu + YeTingyu: Ye Tingyu + FangZhiyuan: Fang Zhiyuan + SongWanqing: Song Wanqing + TangShuning: Tang Shuning + WenYian: Wen Yi'an + XieChangfeng: Xie Changfeng + ChengJingming: Cheng Jingming + ShaoQinghe: Shao Qinghe + XiaChuxue: Xia Chuxue + FuXinghe: Fu 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: Gu Nanzhi + MengXingyuan: Meng Xingyuan + ShangguanYunshu: Shangguan Yunshu + ZhugeQinghe: Zhuge Qinghe + SimaXinghe: Sima Xinghe + XiahouMingxuan: Xiahou Mingxuan } diff --git a/Sources/Everglow/Localization/zh-Hans/Mods.Everglow.TownCrowds.hjson b/Sources/Everglow/Localization/zh-Hans/Mods.Everglow.TownCrowds.hjson index 9a0f762d5..b9ea63708 100644 --- a/Sources/Everglow/Localization/zh-Hans/Mods.Everglow.TownCrowds.hjson +++ b/Sources/Everglow/Localization/zh-Hans/Mods.Everglow.TownCrowds.hjson @@ -43,4 +43,160 @@ Names: { 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: 夏侯明轩 } diff --git a/Sources/Modules/Yggdrasil/Mechanics/TownCrowd/Presentation/CrowdNames.cs b/Sources/Modules/Yggdrasil/Mechanics/TownCrowd/Presentation/CrowdNames.cs index 620b46f08..115ee1398 100644 --- a/Sources/Modules/Yggdrasil/Mechanics/TownCrowd/Presentation/CrowdNames.cs +++ b/Sources/Modules/Yggdrasil/Mechanics/TownCrowd/Presentation/CrowdNames.cs @@ -11,6 +11,26 @@ public static class CrowdNames "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", ]; public static string KeyFor(int seed) => $"Mods.Everglow.TownCrowds.Names.{Pool[(uint)seed % Pool.Length]}"; From 007f3d0908d3e1e0e678da7df3897b92bb56f669 Mon Sep 17 00:00:00 2001 From: CloudeaSoft Date: Tue, 20 Oct 2026 17:23:13 +0800 Subject: [PATCH 3/5] feat(yggdrasil): add short international crowd names --- .../en-US/Mods.Everglow.TownCrowds.hjson | 32 +++++++++++++++++++ .../zh-Hans/Mods.Everglow.TownCrowds.hjson | 32 +++++++++++++++++++ .../TownCrowd/Presentation/CrowdNames.cs | 4 +++ 3 files changed, 68 insertions(+) diff --git a/Sources/Everglow/Localization/en-US/Mods.Everglow.TownCrowds.hjson b/Sources/Everglow/Localization/en-US/Mods.Everglow.TownCrowds.hjson index 21396760c..e80107950 100644 --- a/Sources/Everglow/Localization/en-US/Mods.Everglow.TownCrowds.hjson +++ b/Sources/Everglow/Localization/en-US/Mods.Everglow.TownCrowds.hjson @@ -199,4 +199,36 @@ Names: { ZhugeQinghe: Zhuge Qinghe SimaXinghe: Sima Xinghe XiahouMingxuan: Xiahou Mingxuan + 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 } diff --git a/Sources/Everglow/Localization/zh-Hans/Mods.Everglow.TownCrowds.hjson b/Sources/Everglow/Localization/zh-Hans/Mods.Everglow.TownCrowds.hjson index b9ea63708..7d8ad169e 100644 --- a/Sources/Everglow/Localization/zh-Hans/Mods.Everglow.TownCrowds.hjson +++ b/Sources/Everglow/Localization/zh-Hans/Mods.Everglow.TownCrowds.hjson @@ -199,4 +199,36 @@ Names: { 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: 卓娅 } diff --git a/Sources/Modules/Yggdrasil/Mechanics/TownCrowd/Presentation/CrowdNames.cs b/Sources/Modules/Yggdrasil/Mechanics/TownCrowd/Presentation/CrowdNames.cs index 115ee1398..62853efd4 100644 --- a/Sources/Modules/Yggdrasil/Mechanics/TownCrowd/Presentation/CrowdNames.cs +++ b/Sources/Modules/Yggdrasil/Mechanics/TownCrowd/Presentation/CrowdNames.cs @@ -31,6 +31,10 @@ public static class CrowdNames "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", ]; public static string KeyFor(int seed) => $"Mods.Everglow.TownCrowds.Names.{Pool[(uint)seed % Pool.Length]}"; From 039268b03b361997e38460e7d030614e06cf961d Mon Sep 17 00:00:00 2001 From: CloudeaSoft Date: Tue, 20 Oct 2026 17:30:30 +0800 Subject: [PATCH 4/5] feat(yggdrasil): balance crowd name pool by language --- .../en-US/Mods.Everglow.TownCrowds.hjson | 69 +++++++++++++++++++ .../zh-Hans/Mods.Everglow.TownCrowds.hjson | 69 +++++++++++++++++++ .../TownCrowd/Presentation/CrowdNames.cs | 57 +++++++++------ 3 files changed, 173 insertions(+), 22 deletions(-) diff --git a/Sources/Everglow/Localization/en-US/Mods.Everglow.TownCrowds.hjson b/Sources/Everglow/Localization/en-US/Mods.Everglow.TownCrowds.hjson index e80107950..b787941eb 100644 --- a/Sources/Everglow/Localization/en-US/Mods.Everglow.TownCrowds.hjson +++ b/Sources/Everglow/Localization/en-US/Mods.Everglow.TownCrowds.hjson @@ -231,4 +231,73 @@ Names: { 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 index 7d8ad169e..8554caf68 100644 --- a/Sources/Everglow/Localization/zh-Hans/Mods.Everglow.TownCrowds.hjson +++ b/Sources/Everglow/Localization/zh-Hans/Mods.Everglow.TownCrowds.hjson @@ -231,4 +231,73 @@ Names: { 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 62853efd4..2cacb72c5 100644 --- a/Sources/Modules/Yggdrasil/Mechanics/TownCrowd/Presentation/CrowdNames.cs +++ b/Sources/Modules/Yggdrasil/Mechanics/TownCrowd/Presentation/CrowdNames.cs @@ -5,36 +5,49 @@ public static class CrowdNames { private static readonly string[] 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", - "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", + // 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", "XuWangshan", "LinJianlu", "ChenYingyue", "ShenGuizhou", - "LuHuaijin", "SuJinnian", "ZhouTinglan", "QinMobai", "LiuRuyan", "YunZhixia", "GuNanzhi", "MengXingyuan", - "ShangguanYunshu", "ZhugeQinghe", "SimaXinghe", "XiahouMingxuan", + "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", "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.TownCrowds.Names.{Pool[(uint)seed % Pool.Length]}"; From def0edcd4ed9caf731eb5657f0bf725e8867de03 Mon Sep 17 00:00:00 2001 From: CloudeaSoft Date: Tue, 20 Oct 2026 17:34:24 +0800 Subject: [PATCH 5/5] fix(yggdrasil): shorten Chinese crowd display names --- .../en-US/Mods.Everglow.TownCrowds.hjson | 116 +++++++++--------- .../zh-Hans/Mods.Everglow.TownCrowds.hjson | 116 +++++++++--------- 2 files changed, 116 insertions(+), 116 deletions(-) diff --git a/Sources/Everglow/Localization/en-US/Mods.Everglow.TownCrowds.hjson b/Sources/Everglow/Localization/en-US/Mods.Everglow.TownCrowds.hjson index b787941eb..63b59bbaa 100644 --- a/Sources/Everglow/Localization/en-US/Mods.Everglow.TownCrowds.hjson +++ b/Sources/Everglow/Localization/en-US/Mods.Everglow.TownCrowds.hjson @@ -31,18 +31,18 @@ Names: { Tessa: Tessa Eira: Eira Ravi: Ravi - ChenAn: Chen An - LinYue: Lin Yue - ZhouNing: Zhou Ning - XuQing: Xu Qing - ShenXing: Shen Xing - SuHe: Su He - LinAn: Lin An - ChenMo: Chen Mo - ShenQinghe: Shen Qinghe - XuXingyao: Xu Xingyao - OuyangMingyue: Ouyang Mingyue - SituQingfeng: Situ Qingfeng + 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 @@ -143,46 +143,46 @@ Names: { Stella: Stella Violet: Violet Willow: Willow - ZhaoYu: Zhao Yu - QianSong: Qian Song - SunZhu: Sun Zhu - LiQuan: Li Quan - ZhouLan: Zhou Lan - WuTong: Wu Tong - ZhengChuan: Zheng Chuan - WangXi: Wang Xi - FengNing: Feng Ning - WeiLan: Wei Lan - JiangFeng: Jiang Feng - HanLu: Han Lu - YangFan: Yang Fan - ZhuChen: Zhu Chen - QinLang: Qin Lang - YouXia: You Xia - HeQiu: He Qiu - LyuYan: Lyu Yan - ShiYu: Shi Yu - ZhangHe: Zhang He - KongYue: Kong Yue - CaoXue: Cao Xue - YanShuang: Yan Shuang - HuaXing: Hua Xing - JinHe: Jin He - TaoRan: Tao Ran - JiangLi: Jiang Li - GuZhou: Gu Zhou - BaiRuoxi: Bai Ruoxi - JiangYunshu: Jiang Yunshu - YeTingyu: Ye Tingyu - FangZhiyuan: Fang Zhiyuan - SongWanqing: Song Wanqing - TangShuning: Tang Shuning - WenYian: Wen Yi'an - XieChangfeng: Xie Changfeng - ChengJingming: Cheng Jingming - ShaoQinghe: Shao Qinghe - XiaChuxue: Xia Chuxue - FuXinghe: Fu Xinghe + 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 @@ -193,12 +193,12 @@ Names: { QinMobai: Qin Mobai LiuRuyan: Liu Ruyan YunZhixia: Yun Zhixia - GuNanzhi: Gu Nanzhi - MengXingyuan: Meng Xingyuan - ShangguanYunshu: Shangguan Yunshu - ZhugeQinghe: Zhuge Qinghe - SimaXinghe: Sima Xinghe - XiahouMingxuan: Xiahou Mingxuan + GuNanzhi: Nanzhi + MengXingyuan: Yuan + ShangguanYunshu: Ashu + ZhugeQinghe: Xiaohe + SimaXinghe: Aheng + XiahouMingxuan: Axuan Jules: Jules Luc: Luc Louis: Louis diff --git a/Sources/Everglow/Localization/zh-Hans/Mods.Everglow.TownCrowds.hjson b/Sources/Everglow/Localization/zh-Hans/Mods.Everglow.TownCrowds.hjson index 8554caf68..cfa35c847 100644 --- a/Sources/Everglow/Localization/zh-Hans/Mods.Everglow.TownCrowds.hjson +++ b/Sources/Everglow/Localization/zh-Hans/Mods.Everglow.TownCrowds.hjson @@ -31,18 +31,18 @@ Names: { Tessa: 泰莎 Eira: 艾拉 Ravi: 拉维 - ChenAn: 陈安 - LinYue: 林月 - ZhouNing: 周宁 - XuQing: 许清 - ShenXing: 沈星 - SuHe: 苏禾 - LinAn: 林安 - ChenMo: 陈墨 - ShenQinghe: 沈青禾 - XuXingyao: 许星遥 - OuyangMingyue: 欧阳明月 - SituQingfeng: 司徒清风 + ChenAn: 安安 + LinYue: 月月 + ZhouNing: 宁 + XuQing: 阿清 + ShenXing: 星 + SuHe: 禾禾 + LinAn: 安 + ChenMo: 墨 + ShenQinghe: 青禾 + XuXingyao: 遥 + OuyangMingyue: 明 + SituQingfeng: 清 Aaron: 亚伦 Adam: 亚当 Adrian: 阿德里安 @@ -143,46 +143,46 @@ Names: { 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: 傅星河 + 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: 陈映月 @@ -193,12 +193,12 @@ Names: { QinMobai: 秦墨白 LiuRuyan: 柳如烟 YunZhixia: 云知夏 - GuNanzhi: 顾南枝 - MengXingyuan: 孟行远 - ShangguanYunshu: 上官云舒 - ZhugeQinghe: 诸葛清和 - SimaXinghe: 司马星河 - XiahouMingxuan: 夏侯明轩 + GuNanzhi: 南枝 + MengXingyuan: 远 + ShangguanYunshu: 阿舒 + ZhugeQinghe: 小禾 + SimaXinghe: 阿衡 + XiahouMingxuan: 阿轩 Jules: 朱尔 Luc: 吕克 Louis: 路易