research(hunt-sim): 10 人并发在线模拟×多 agent 设计迭代——研究设施与全套档案

研究命题(00-plan):验证并打磨《围猎》联机纯音频体验——不是逻辑能跑通,
而是真人玩起来是什么体验、愿不愿意再来一局。

设施 web/harness/hunt-sim/(可复用,零依赖):
- arena.mjs 编排器:起真实服务器(随机端口+临时数据目录隔离),10 个拟人客户端
  经真实 WS 同时在线,错峰组队、真实时长对局、局间状态跨轮维护
- sim-client.mjs:game.js 行为移植(协议+手势路由+R1-R8 音频调度逐字节对齐),
  产出「玩家耳朵听到什么」的感知时间线(语音全文/loop 方位音量档/喊话/震动)
- brain.mjs:人设大脑——察觉延迟/前后判读(以真值为条件的正确率模型)/掩蔽放大/
  冷却乱滑/技能囤积/呼喊倾向/分心断网,全部随机判定用按实体 id 哈希的独立抽签
  (mulberry32 流会被刷怪座位轮转结构带偏,实测造成系统性镜像反转,已证伪)
- recorder.mjs:每人每局 events.jsonl 全量 + percept.md 感知转写 + 对局速览

研究档案 research/hunt-sim/:
- players/:10 人配置(LLM 亲笔)+策略自述+逐局去留决策+人设终评+退游者重访
- rounds/:v1 三轮(R0 教学+R1/R2 真人快速)+ v2 复测两轮,共 48 局全记录
- analysis/01-04:数值曲线/音频信息设计/协作社交/上手留存四视角报告
- synthesis.md(S1-S9 裁定)、metrics.md/metrics-v2.md(两版对比总账)、report.md(总报告)

v1 核心发现:10 人 3 轮 28 局 100% 胜率 26S/营地零损耗;击杀垄断(专家单人 30/39);
呼喊 3 次/28 局应答 0;N/S 前后判读仅 63/69% 可命中;四种退游死因
(失衡/社交真空/交互摩擦/观光无聊)→ 详见 report.md
This commit is contained in:
xsl
2026-09-19 11:06:07 +08:00
parent 963dfa1cc8
commit 0652c2f0e6
224 changed files with 78576 additions and 0 deletions
+272
View File
@@ -0,0 +1,272 @@
{
"durations": {
"bgm/hunt": 90,
"bgm/menu": 90,
"sfx/atk_swish": 0.3,
"sfx/atk_whoosh": 0.3,
"sfx/breach_thud": 0.6,
"sfx/call_whistle": 0.6,
"sfx/horn_wave": 0.9,
"sfx/howl_bear": 1,
"sfx/howl_wolf": 0.8,
"sfx/join_chime": 0.4,
"sfx/kill_bear": 0.699977,
"sfx/kill_wolf": 0.5,
"sfx/loop_bear": 4,
"sfx/loop_wolf": 4,
"sfx/npc_yan_breach": 2.16,
"sfx/npc_yan_cover": 1.68,
"sfx/npc_yan_greet": 2.24,
"sfx/npc_yan_help_ack": 1.84,
"sfx/npc_yan_help_call": 2.8,
"sfx/npc_yan_kill": 0.88,
"sfx/npc_yan_skill": 3.52,
"sfx/npc_yan_wave": 2.08,
"sfx/npc_zheng_breach": 1.2,
"sfx/npc_zheng_cover": 0.8,
"sfx/npc_zheng_greet": 1.44,
"sfx/npc_zheng_help_ack": 1.12,
"sfx/npc_zheng_help_call": 2.32,
"sfx/npc_zheng_kill": 0.4,
"sfx/npc_zheng_skill": 0.88,
"sfx/npc_zheng_wave": 1.76,
"sfx/npc_zhou_breach": 2.4,
"sfx/npc_zhou_cover": 1.44,
"sfx/npc_zhou_greet": 2.72,
"sfx/npc_zhou_help_ack": 1.6,
"sfx/npc_zhou_help_call": 2.8,
"sfx/npc_zhou_kill": 2.16,
"sfx/npc_zhou_skill": 1.92,
"sfx/npc_zhou_wave": 1.36,
"sfx/skill_spin": 0.8,
"voice/female/breach": 1.2,
"voice/female/breach_heavy": 1.92,
"voice/female/danger_low": 2.32,
"voice/female/end_again": 2.16,
"voice/female/end_lose": 1.68,
"voice/female/end_rank": 2.16,
"voice/female/end_win": 1.68,
"voice/female/gd_idle": 1.92,
"voice/female/gd_invalid": 1.52,
"voice/female/grade_a": 2.32,
"voice/female/grade_b": 2.96,
"voice/female/grade_c": 2.64,
"voice/female/grade_s": 3.28,
"voice/female/help_main": 14.24,
"voice/female/hp_band1": 1.92,
"voice/female/hp_band2": 1.28,
"voice/female/hp_band3": 1.12,
"voice/female/hp_band4": 1.12,
"voice/female/intro_1": 3.28,
"voice/female/intro_2": 2.72,
"voice/female/key/end_again": 1.84,
"voice/female/key/gd_idle": 2.4,
"voice/female/key/help_main": 12.92,
"voice/female/key/room_wait": 3.76,
"voice/female/key/sys_menu": 3.52,
"voice/female/key/tut_attack": 5.2,
"voice/female/key/tut_callout": 3.36,
"voice/female/key/tut_rule": 4.64,
"voice/female/key/tut_skill": 3.04,
"voice/female/key/tut_skill_cd": 4.96,
"voice/female/key/tut_status": 4.96,
"voice/female/kill_band0": 0.96,
"voice/female/kill_band1": 1.36,
"voice/female/kill_band2": 2.56,
"voice/female/net_back": 1.76,
"voice/female/net_gone": 3.2,
"voice/female/net_lost": 2,
"voice/female/net_to_bot": 2.4,
"voice/female/room_start": 2.56,
"voice/female/room_wait": 4.16,
"voice/female/settings_hint": 1.44,
"voice/female/skill_ready": 1.6,
"voice/female/st_wave_a": 0.96,
"voice/female/st_wave_b": 1.04,
"voice/female/st_wave_c": 0.96,
"voice/female/sys_menu": 3.12,
"voice/female/sys_menu_help": 1.2,
"voice/female/sys_menu_home": 1.44,
"voice/female/sys_menu_resume": 1.2,
"voice/female/team_3": 1.28,
"voice/female/team_4": 1.28,
"voice/female/threat_few": 1.68,
"voice/female/threat_many": 2.16,
"voice/female/threat_none": 1.76,
"voice/female/tut_attack": 4.72,
"voice/female/tut_breach": 4.24,
"voice/female/tut_callout": 3.52,
"voice/female/tut_callout_ok": 2,
"voice/female/tut_done": 3.6,
"voice/female/tut_kill_ok": 2.88,
"voice/female/tut_rule": 4,
"voice/female/tut_skill": 3.68,
"voice/female/tut_skill_cd": 4.56,
"voice/female/tut_skip": 1.2,
"voice/female/tut_status": 3.68,
"voice/female/wave_band1": 1.2,
"voice/female/wave_band2": 1.36,
"voice/female/wave_band3": 2.56,
"voice/female/wave_band4": 2.4,
"voice/female/wave_band5": 1.76,
"voice/female/wave_clear": 1.36,
"voice/male/breach": 2.4,
"voice/male/breach_heavy": 2.72,
"voice/male/danger_low": 3.28,
"voice/male/end_again": 2,
"voice/male/end_lose": 2.08,
"voice/male/end_rank": 2.4,
"voice/male/end_win": 2.64,
"voice/male/gd_idle": 2.64,
"voice/male/gd_invalid": 2.72,
"voice/male/grade_a": 3.12,
"voice/male/grade_b": 2.56,
"voice/male/grade_c": 2.64,
"voice/male/grade_s": 3.44,
"voice/male/help_main": 9.36,
"voice/male/hp_band1": 2.4,
"voice/male/hp_band2": 2.16,
"voice/male/hp_band3": 1.84,
"voice/male/hp_band4": 1.84,
"voice/male/intro_1": 3.6,
"voice/male/intro_2": 4,
"voice/male/key/end_again": 2.32,
"voice/male/key/gd_idle": 3.92,
"voice/male/key/help_main": 13,
"voice/male/key/room_wait": 4.96,
"voice/male/key/sys_menu": 3.6,
"voice/male/key/tut_attack": 5.12,
"voice/male/key/tut_callout": 3.68,
"voice/male/key/tut_rule": 6.56,
"voice/male/key/tut_skill": 3.92,
"voice/male/key/tut_skill_cd": 6.48,
"voice/male/key/tut_status": 7.84,
"voice/male/kill_band0": 1.52,
"voice/male/kill_band1": 1.76,
"voice/male/kill_band2": 1.44,
"voice/male/net_back": 2.32,
"voice/male/net_gone": 2.96,
"voice/male/net_lost": 3.2,
"voice/male/net_to_bot": 2.88,
"voice/male/room_start": 3.12,
"voice/male/room_wait": 5.36,
"voice/male/settings_hint": 1.6,
"voice/male/skill_ready": 1.6,
"voice/male/st_wave_a": 1.76,
"voice/male/st_wave_b": 1.2,
"voice/male/st_wave_c": 1.36,
"voice/male/sys_menu": 3.76,
"voice/male/sys_menu_help": 1.44,
"voice/male/sys_menu_home": 2.24,
"voice/male/sys_menu_resume": 1.28,
"voice/male/team_3": 1.76,
"voice/male/team_4": 1.44,
"voice/male/threat_few": 2.72,
"voice/male/threat_many": 2.56,
"voice/male/threat_none": 2.08,
"voice/male/tut_attack": 6.48,
"voice/male/tut_breach": 5.12,
"voice/male/tut_callout": 5.04,
"voice/male/tut_callout_ok": 3.12,
"voice/male/tut_done": 4.72,
"voice/male/tut_kill_ok": 3.36,
"voice/male/tut_rule": 5.2,
"voice/male/tut_skill": 4.48,
"voice/male/tut_skill_cd": 6.08,
"voice/male/tut_skip": 2.64,
"voice/male/tut_status": 5.92,
"voice/male/wave_band1": 2,
"voice/male/wave_band2": 2.8,
"voice/male/wave_band3": 3.6,
"voice/male/wave_band4": 2.8,
"voice/male/wave_band5": 2.32,
"voice/male/wave_clear": 1.76
},
"voiceText": {
"intro_1": "夜幕降临,野兽在山林里游荡。",
"intro_2": "你们是守夜的猎人,营地就在身后。",
"room_wait": "房间已开好,等同伴到齐。单击,立即开局。",
"room_start": "狩猎开始,先听声音的方向。",
"tut_rule": "野兽会从八个方向围上来。声音在哪边,就往哪边滑。",
"tut_attack": "听,有狼在靠近。朝声音的方向,滑一下。",
"tut_kill_ok": "好,杀掉了。就是这样。",
"tut_callout": "单击一下,呼喊支援,队友会来帮你。",
"tut_callout_ok": "听到没,同伴回应你了。",
"tut_skill": "双击,旋风斩,清掉身边一圈。",
"tut_skill_cd": "旋风斩有八秒冷却。冷却中双击,重新听威胁。",
"tut_status": "上滑,听营地状态。下滑,打开菜单。",
"tut_breach": "野兽冲进营地,营地就会受损。撑过五波就赢。",
"tut_done": "教学完了。真正的围猎,现在开始。",
"tut_skip": "已跳过教学,开打。",
"wave_band1": "第一波来了,别慌。",
"wave_band2": "第二波,比刚才多。",
"wave_band3": "第三波,有大家伙混在里面。",
"wave_band4": "第四波,更快,更多。",
"wave_band5": "最后一波,全来了!",
"wave_clear": "这一波,守住了。",
"hp_band1": "营地固若金汤。",
"hp_band2": "营地受了些损伤。",
"hp_band3": "营地损毁过半。",
"hp_band4": "营地快守不住了。",
"st_wave_a": "还在头几波。",
"st_wave_b": "打到中段了。",
"st_wave_c": "最后一波了。",
"team_3": "三名猎人在守。",
"team_4": "四名猎人全在。",
"kill_band0": "你还没开张。",
"kill_band1": "你小有斩获。",
"kill_band2": "你战果累累。",
"threat_none": "近处暂时没有野兽。",
"threat_few": "有野兽贴近了,听方向出手。",
"threat_many": "四周全是动静,快出手!",
"breach": "有野兽冲进营地了!",
"breach_heavy": "巨兽撞进营地,损伤很重!",
"danger_low": "营地危险了,一只都不能再漏!",
"skill_ready": "旋风斩准备好了。",
"end_win": "天亮了,营地还在。",
"end_lose": "营地守不住了,撤退!",
"grade_s": "评级,S!完美的围猎。",
"grade_a": "评级,A。漂亮。",
"grade_b": "评级,B。守得还行。",
"grade_c": "评级,C。险胜。",
"end_rank": "成绩已记入猎手榜。",
"end_again": "单击,再猎一局。",
"net_lost": "与营地断了联系,正在重连。",
"net_back": "联系恢复了,接着打。",
"net_to_bot": "有猎人离队,老猎手顶上。",
"net_gone": "回不去那场围猎了,回大厅。",
"sys_menu": "菜单。单击切换,双击确认。",
"sys_menu_resume": "回到猎场。",
"sys_menu_help": "重新听帮助。",
"sys_menu_home": "退出房间,回大厅。",
"help_main": "朝声音的方向滑,就是出击。单击呼喊支援,双击旋风斩。上滑状态,下滑菜单。",
"settings_hint": "音色、语速、背景音乐,请回大厅修改。",
"gd_invalid": "这个操作现在用不上。",
"gd_idle": "听声音的方向,滑过去。",
"npc_yan_greet": "我来了,这边有我。",
"npc_yan_help_call": "我这侧吃紧,来个人搭把手!",
"npc_yan_help_ack": "撑住,我来了。",
"npc_yan_cover": "这边交给我。",
"npc_yan_kill": "拿下!",
"npc_yan_breach": "漏了一个,都小心。",
"npc_yan_skill": "都闪开,看我的!",
"npc_yan_wave": "新一波,稳住。",
"npc_zheng_greet": "小筝到位,开工啦。",
"npc_zheng_help_call": "这边太多了,谁来帮一下!",
"npc_zheng_help_ack": "别慌,我来了!",
"npc_zheng_cover": "这边我罩着。",
"npc_zheng_kill": "搞定!",
"npc_zheng_breach": "哎呀,漏了一个!",
"npc_zheng_skill": "看我清场!",
"npc_zheng_wave": "又来一波,打起精神。",
"npc_zhou_greet": "老周我守着,放心。",
"npc_zhou_help_call": "我这边压不住了,来人。",
"npc_zhou_help_ack": "听见了,这就到。",
"npc_zhou_cover": "这边交给我吧。",
"npc_zhou_kill": "嗯,解决了。",
"npc_zhou_breach": "啧,溜进去一只。",
"npc_zhou_skill": "让让,老骨头活动活动。",
"npc_zhou_wave": "听,又来了。"
},
"at": "2026-09-18T14:36:19.423Z"
}