summaryrefslogtreecommitdiff
path: root/docs/design/living-village-design.md
blob: 04c8cc0240cbc27125cc890fc23c5d1209f38739 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# 《活着的村庄》设计文档(暂名 Living Village)

日期:2026-09-18 状态:设计已逐节过目确认 开发:OpenCode(模型 ark-plan/glm-5.3-flash) Hermes:需求派发+验收

## 一、定位

NPC 社会涌现沙盘。设计顺序与常规游戏相反:先造模拟,玩法从观察中长出,设计者也不知道会长出什么。

- 核心体验:系统涌现(玩家体验排第二)
- 模拟原子:单个 NPC(完整心智,非统计模拟)
- 玩家角色:化身,扮演村庄 30 人中的一员
- 核心循环:生活流(吃饭、干活、闲逛、串门),无任务无成就
- 规模:约 30 个完整 NPC,彼此全认识
- 时间:连续流,可暂停可加速(1x/2x/5x)
- 失败条件:无。化身不死,纯沙盘
- 终点:完整独立游戏,发 Steam。demo 先验证涌现

商业风险备案:无失败纯沙盘 + 商业发售是独立游戏最难卖组合。对策:NPC 社会历史会积累(老 NPC 死去、新一代长大、村庄形态漂移),"看五十年后的村子"本身是长线理由。demo 阶段不处理。

## 二、模拟器内核

- 纯函数核心:`step : World → TimeStep → World`,World 不可变,持久化数据结构。渲染层只读
- 事件驱动涟漪:NPC 交互产生事件(交易/争吵/闲聊),事件队列按时间戳回放给相关 NPC 更新记忆。谣言、关系、物价全部由事件派生
- 固定步长 60 tick/秒 + 渲染插值;暂停 = 停 step 不停渲染
- 存档 = 序列化 World。未来功能:回放、时光倒流
- 确定性:可播种 RNG,同存档同操作必同结果
- 模拟与渲染完全分离,内核可 headless 运行

## 三、NPC 心智模型

Mind 四层:

- 需求层(驱动):饥饿/精力/社交/金钱,随时间衰减产生目标
- 性格层(滤镜):5 维向量(进取/好斗/外向/诚实/贪婪,0-1)。性格改手段选择权重,不改目标。重大事件可长期漂移
- 记忆层:事件列表(对象、类型、情绪值、时间),带衰减,检索取最近最重
- 决策层:每 tick 评估 需求×行动×性格权重 → 最高分行动。行动是通用原语(去某地/做某事/与某人互动)

**化身对 NPC 透明**:NPC 眼里没有玩家,化身是普通 NPC,干预走完全相同的代码路径。

派生系统(不单独建模):

- 关系网:30×30 矩阵,从记忆加权派生
- 谣言:闲聊传递最新鲜记忆,传播即再叙述
- 经济:无全局物价。价格 = 交易时按需求紧迫度+性格+近期成交记忆现场喊出,物价是统计结果

刻意不做:对话语义生成(闲聊产出抽象事件+气泡图标)、职业/阶层系统(从需求与技能自发生长)、独立情绪状态机。

核心断言:行为 = 需求×性格×记忆,其余一切是副产品。

## 四、玩家交互

- 操控:WASD 移动、E 互动、Tab 需求面板。化身需求与 NPC 同规则衰减
- 唯一信息优势:按 Q 观察,看视野内 NPC 的需求排名与最近记忆摘要
- 对话:选意图不选台词。4-6 个动词(闲聊/求助/交易/玩笑/道歉/挑衅),NPC 回应由心智算出,产出事件进双方记忆
- 生活流支撑:家(可升级)、物品、钱。无任务系统。村庄年鉴自动记录大事(结仇/结亲/死亡/新生/物价剧变)
- 社会学视图:暂停后全村缩放,关系网连线(粗细=强度)、谣言传播路径回放。demo 必须有简版

## 五、渲染与美术

- 2D 俯视瓦片地图,SpriteBatch 直绘,32×32 瓦片
- demo 用 Kenney CC 资产包占位,正式版再定风格
- 镜头跟随化身,滚轮缩放;昼夜季节光照
- UI 五件套:时钟、需求面板、对话转盘、年鉴、社会学视图

## 六、技术栈与里程碑

栈:F# + MonoGame + Mibo(MVU/Elmish 架构,`update : State → Input → State`)。Linux 为第一开发平台。

| 里程碑 | 内容 | 验收 |
|---|---|---|
| M0 | F# 解决方案+游戏循环+瓦片地图+化身移动 | Linux dotnet run,60fps |
| M1 | World+step 纯函数+确定性 RNG,headless | 1000 天内存平稳、无 NaN、同种子逐帧一致 |
| M2 | 单 NPC:需求+决策+日程 | 游戏内活一天,行为可用需求×性格解释 |
| M3 | 30 NPC+事件队列+记忆+关系网+社会学视图 v1 | headless 30 天关系矩阵非均匀分布 |
| M4 | 现场喊价交易+闲聊传记忆 | 物价时间序列有波动;谣言 2-5 天传遍全村且路径可回放 |
| M5 | 玩家操控+对话转盘+Q 观察+年鉴 | 干预涟漪经 3 手绕回,事件链可追溯 |
| M6 | 存档+变速+昼夜+占位美术统一 | 完整玩 2 小时不崩,存档往返一致 |

验收协议:M3 起涌现类验收一律 headless 批量模拟(50 世界×100 天)看统计分布,不靠肉眼。

## 七、开发协议

- 全部编码由 OpenCode 执行(dev.somhairle.bid 会话可见),模型 `ark-plan/glm-5.3-flash`
- Hermes 只做:需求拆解、派发、监控、独立验收(跑 headless 统计、对设计目标核对)
- 每里程碑一次派发,附本节验收标准;验收不过退回重做,不合并