Files
xsl 0652c2f0e6 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
2026-09-19 11:06:07 +08:00

366 lines
5.5 KiB
JSON

{
"room": "94FQ",
"seed": 1382428649,
"round": "R2-quick",
"wallStart": 1789746654331,
"roster": [
{
"id": "P02",
"persona": "P02 小鹿",
"slot": 0,
"name": "小鹿",
"bot": false,
"char": "yan",
"sector": [
"N",
"NE"
],
"alive": true
},
{
"id": "P03",
"persona": "P03 通勤客",
"slot": 1,
"name": "通勤客",
"bot": false,
"char": "zheng",
"sector": [
"E",
"SE"
],
"alive": true
},
{
"id": "P04",
"persona": "P04 老赵",
"slot": 2,
"name": "老赵",
"bot": false,
"char": "zhou",
"sector": [
"S",
"SW"
],
"alive": true
},
{
"id": "P05",
"persona": "P05 独狼",
"slot": 3,
"name": "独狼",
"bot": false,
"char": null,
"sector": [
"W",
"NW"
],
"alive": true
}
],
"result": {
"win": true,
"dur": 10,
"grade": "S",
"kills": {
"0": 18,
"1": 0,
"2": 1,
"3": 20
}
},
"waves": [
1,
2,
3,
4,
5
],
"spawnsByWave": {
"1": 4,
"2": 6,
"3": 8,
"4": 9,
"5": 12
},
"breaches": [],
"killsBySlot": {
"0": 18,
"2": 1,
"3": 20
},
"perPlayer": {
"P02": {
"result": {
"win": true,
"dur": 10,
"grade": "S",
"myKills": 18,
"kills": {
"0": 18,
"1": 0,
"2": 1,
"3": 20
},
"wave": 5
},
"summary": {
"attacks": 16,
"attacksCorrectArc": 14,
"attacksWrongArc": 2,
"misses": 0,
"kills": 15,
"breachesTotal": 0,
"callouts": 0,
"skills": 2,
"helpAcksHeard": 0,
"botlinesHeard": 0,
"voiceLinesHeard": 25,
"voiceCuts": 0,
"howlsDropped": 0,
"lapses": 1,
"spamSwipes": 14,
"threatRelisten": 0,
"watchdogIdles": 4,
"brainStats": {
"loopsHeard": 36,
"registered": 38,
"noticeMedianMs": 1127,
"noticeMaskedMedianMs": 1739,
"noticeCleanMedianMs": 1093,
"gestures": 16
}
}
},
"P03": {
"result": {
"win": true,
"dur": 10,
"grade": "S",
"myKills": 0,
"kills": {
"0": 18,
"1": 0,
"2": 1,
"3": 20
},
"wave": 5
},
"summary": {
"attacks": 0,
"attacksCorrectArc": 0,
"attacksWrongArc": 0,
"misses": 0,
"kills": 0,
"breachesTotal": 0,
"callouts": 0,
"skills": 0,
"helpAcksHeard": 0,
"botlinesHeard": 0,
"voiceLinesHeard": 41,
"voiceCuts": 0,
"howlsDropped": 0,
"lapses": 2,
"spamSwipes": 0,
"threatRelisten": 0,
"watchdogIdles": 5,
"brainStats": {
"loopsHeard": 35,
"registered": 11,
"noticeMedianMs": 1408,
"noticeMaskedMedianMs": null,
"noticeCleanMedianMs": 1408,
"gestures": 5
}
}
},
"P04": {
"result": {
"win": true,
"dur": 10,
"grade": "S",
"myKills": 1,
"kills": {
"0": 18,
"1": 0,
"2": 1,
"3": 20
},
"wave": 5
},
"summary": {
"attacks": 2,
"attacksCorrectArc": 1,
"attacksWrongArc": 1,
"misses": 0,
"kills": 1,
"breachesTotal": 0,
"callouts": 0,
"skills": 1,
"helpAcksHeard": 0,
"botlinesHeard": 0,
"voiceLinesHeard": 45,
"voiceCuts": 0,
"howlsDropped": 0,
"lapses": 1,
"spamSwipes": 0,
"threatRelisten": 0,
"watchdogIdles": 6,
"brainStats": {
"loopsHeard": 37,
"registered": 15,
"noticeMedianMs": 1500,
"noticeMaskedMedianMs": null,
"noticeCleanMedianMs": 1500,
"gestures": 7
}
}
},
"P05": {
"result": {
"win": true,
"dur": 10,
"grade": "S",
"myKills": 20,
"kills": {
"0": 18,
"1": 0,
"2": 1,
"3": 20
},
"wave": 5
},
"summary": {
"attacks": 51,
"attacksCorrectArc": 48,
"attacksWrongArc": 3,
"misses": 0,
"kills": 20,
"breachesTotal": 0,
"callouts": 0,
"skills": 0,
"helpAcksHeard": 0,
"botlinesHeard": 0,
"voiceLinesHeard": 48,
"voiceCuts": 0,
"howlsDropped": 0,
"lapses": 0,
"spamSwipes": 26,
"threatRelisten": 0,
"watchdogIdles": 0,
"brainStats": {
"loopsHeard": 39,
"registered": 39,
"noticeMedianMs": 900,
"noticeMaskedMedianMs": 988,
"noticeCleanMedianMs": 663,
"gestures": 56
}
}
}
},
"attackLocalization": {
"P02": {
"total": 16,
"correct": 14,
"mirrorErr": 1,
"otherErr": 1,
"byTrueDir": {
"N": {
"total": 1,
"correct": 1
},
"SE": {
"total": 3,
"correct": 3
},
"S": {
"total": 2,
"correct": 1
},
"NW": {
"total": 3,
"correct": 2
},
"SW": {
"total": 3,
"correct": 3
},
"W": {
"total": 2,
"correct": 2
},
"E": {
"total": 1,
"correct": 1
},
"NE": {
"total": 1,
"correct": 1
}
}
},
"P03": {
"total": 0,
"correct": 0,
"mirrorErr": 0,
"otherErr": 0,
"byTrueDir": {}
},
"P04": {
"total": 2,
"correct": 1,
"mirrorErr": 0,
"otherErr": 1,
"byTrueDir": {
"E": {
"total": 1,
"correct": 1
},
"NW": {
"total": 1,
"correct": 0
}
}
},
"P05": {
"total": 51,
"correct": 48,
"mirrorErr": 3,
"otherErr": 0,
"byTrueDir": {
"N": {
"total": 6,
"correct": 5
},
"SE": {
"total": 6,
"correct": 6
},
"S": {
"total": 5,
"correct": 5
},
"NW": {
"total": 9,
"correct": 9
},
"E": {
"total": 10,
"correct": 10
},
"NE": {
"total": 7,
"correct": 7
},
"SW": {
"total": 4,
"correct": 2
},
"W": {
"total": 4,
"correct": 4
}
}
}
}
}