📄 文书档案 · 乱世生存 驱动层定义

驱动层定义完成 - 2026-06-24 20:30

目标

将项目架构从"整图+热区"升级为"驱动层+图层叠加",支持时间、状态、身份等多维度动态内容。

---

完成的工作

1. 驱动层配置文件

文件: `_build/data/driver_config.json` (8055 字节)

内容:

- 时间参数系统: 阶段、季节、时辰、光效映射

- 角色状态系统: identity/health/hunger/fatigue 阈值规则

- 互助层状态规则: 声望→状态映射,一次性下降

- NPC 规则: 称呼映射、出现条件、状态变体

- 季节滤镜配置: 4 季色调参数、前景效果

关键映射:

health < 50  → 禁用 climb/sneak/fight/run
health < 20  → 触发 dying 事件
hunger < 30  → 对话出现"肚子叫"
hunger < 10  → 场景被 starving_event 覆盖
fatigue ≥ 50 → 对话缩短 30%
fatigue ≥ 80 → 对话缩短 60%

2. 整合数据文件

文件: `_build/data/story_v3.json` (14651 字节)

架构:

player_state
  ├── time (时间参数)
  ├── character (角色状态)
  ├── world (世界状态: 声望/互助层)
  └── marks (标记位)

scenes
  ├── scene_001 ~ scene_008 (8 个场景)
  ├── npc_slots (NPC 插槽配置)
  ├── choices (选项 + condition 字段)
  └── template (场景模板引用)

scene_templates (模板定义)

新增字段:

3. 引擎重写

文件: `_build/js/engine_v3.js` (12886 字节)

核心方法:

| 方法 | 功能 |

|------|------|

| `applyTimeEffects()` | 时间→光效 |

| `applySeasonFilter()` | 季节→滤镜 |

| `filterOptionsByCharacterState()` | 角色状态→选项过滤 |

| `checkHealthLimitation()` | health→移动限制 |

| `getHungerStatus()` | hunger→饥饿状态 |

| `adjustDialogByFatigue()` | fatigue→对话缩短 |

| `getNPCTitle()` | identity→NPC 称呼 |

| `calculateSolidarity()` | 声望→互助层状态 |

| `shouldNPCAppear()` | 综合判断 NPC 是否出现 |

| `generateNPCDialog()` | 根据状态生成 NPC 对话 |

图层叠加渲染:

背景层 (background-layer)
  ↓
+ 时间光效 (CSS filter)
  ↓
+ NPC 热区层 (SVG hotzone-layer)
  ↓
+ 前景层 (foreground-layer)

4. 样式升级

文件: `_build/css/style_v3.css` (7993 字节)

新增:

5. 测试页面

文件: `_build/index_v3.html` (5733 字节)

测试功能:

---

架构变化对比

旧架构 (v2)

story.json (场景驱动)
  ├── scenes[].npcs[] (固定 NPC)
  └── scenes[].choices[] (硬编码选项)

engine.js
  └── 直接渲染场景内容

新架构 (v3)

driver_config.json (规则层)
story_v3.json (数据层)
  ├── player_state (驱动层)
  └── scenes (场景层)

engine_v3.js (引擎层)
  ├── 读取驱动层
  ├── 应用规则
  └── 动态生成内容

---

验证清单

第一层验证:时间参数

第二层验证:角色状态

第三层验证:互助层

第四层验证:NPC 称呼

---

待验证项

1. 图层叠加效果: 需要生成对应的背景图和滤镜素材

2. NPC 称呼插入: 当前仅返回称呼文本,未实际插入对话

3. 饥饿事件覆盖: `starving_event` 场景未定义

4. 健康限制: 选项的 `requires_health` 字段未在 story_v3.json 中定义

---

文件清单

| 文件 | 状态 | 说明 |

|------|------|------|

| `driver_config.json` | ✅ 已写入 | 驱动层配置 |

| `story_v3.json` | ✅ 已写入 | 整合数据文件 |

| `engine_v3.js` | ✅ 已写入 | 状态驱动引擎 |

| `style_v3.css` | ✅ 已写入 | 图层叠加样式 |

| `index_v3.html` | ✅ 已写入 | 测试页面 |

---

下一步

1. 用户测试: 打开 `index_v3.html`,点击测试按钮验证驱动层生效

2. 素材补充: 生成背景图、滤镜图、NPC 图、前景图

3. 坐标定义: 使用现有整图作为参照,标注各元素的坐标区域

4. 对话模板: 实现身份→称呼的实际插入逻辑

---

设计决策记录

为什么 driver_config.json 和 story_v3.json 分离?

原因: 关注点分离

好处:

为什么使用 condition 字段而不是硬编码选项?

原因: 同一场景适配不同身份

好处:

为什么 NPC 使用 appear_rule 而不是固定列表?

原因: NPC 动态出现

好处:

---

完成时间: 2026-06-24 20:30 GMT+8

—— 人与AI协作记录 ——