乱世生存:从设计图纸到AI生产系统 V1.1

核心原则:人定规则,AI填肉。
设计师定义骨架、情绪、节奏;AI负责批量生成、替换、迭代。
设计师的工作是"审核",不是"从零写"。
修订记录

一、骨架:设计图纸

1.1 项目文件结构

project_root/
├── _build/                   ← 施工区(日常工作)
│   ├── story.json            ← 主数据文件(含 player_state)
│   ├── index.html
│   └── images/
│
├── _deploy/                  ← 发布区(只读)
│   ├── story.json
│   ├── index.html
│   └── images/
│
├── _specs/                   ← 设计图纸(本文件所在目录)
│   ├── world_framework.md    ← 世界观与阶段框架
│   ├── season_keywords.md    ← 季节关键词矩阵
│   ├── tone_seeds.md         ← 情绪种子库
│   ├── scene_templates/      ← 场景框架模板
│   │   ├── template_citygate.md
│   │   ├── template_market.md
│   │   ├── template_wild.md
│   │   └── template_tent.md
│   └── sop_generation.md     ← AI生成SOP
│
├── _seeds/                   ← 剧本种子(从设计讨论中提取)
│   └── core_ideas.md
│
└── deploy_manifest.json

1.2 阶段框架速查表

阶段 时间 核心命题 开放范围 可解锁模式 切换条件
184年(黄巾) 活着 中原3城(许县/长社/郾城),自由探索 个体生存 黄巾主力溃败(184年秋)
190-192年 站队 扩展至6城,原3城状态更新 领主/部曲/出仕/独立 曹操迎天子(196年)
196-200年 博弈 城市内景为主,许都为核心 路径叠加分叉 官渡之战结束(200年)
200年后 时间与土地的极限 战线地图,前线+后方 苟活/变量/边军 北伐开始(自动触发)
更后 循环 边境屯田 成为那堵墙 玩家死亡或选择终老

1.3 开放世界定义

本游戏是"阶段式开放世界"。

每个阶段内部是开放的:玩家可以在当前阶段的地图上自由探索所有已解锁的城镇,触发随机事件,选择是否推进主线。阶段内部没有强制的时间限制(但世界时间仍在流逝,历史事件按时发生)。

阶段切换由世界时间触发:当历史事件发生(如黄巾主力溃败、曹操迎天子、官渡之战),当前阶段自动结束,进入下一阶段。阶段切换不可逆。

阶段之间的"开放"体现在变量继承:玩家在上一阶段的所有选择(标记位),决定了下一阶段的可选路径。不同玩家在第一阶段做了不同的事,第二阶段面对的世界就不同。这不是"多主线",而是"同一主线因变量不同而分叉"。

一句话:不是"想去哪就去哪"的开放世界。是"在历史洪流里,你的每一步都在投票,决定你还能选什么"的开放世界。

1.4 结局表

常规结局

阶段 结局名 达成条件
第一阶段 活下来了 未死亡,进入第二阶段。无特殊条件。
第二阶段 站住了 选择了任一势力/路径,获得稳定身份(领主/部曲/出仕/独立均可)。
第三阶段 成局中人 成为某方主官/独立势力首领/某势力的核心幕僚。不再是"流民"或"无名之辈"。
第四阶段 熬过去了 北伐结束(无论胜负),主角还活着,且有地可种、有家可回。
第五阶段 成为那堵墙 在边境屯田,成为边军,阻止外侵。不是胜利,是持续存在。

隐藏结局

区分:常规结局是"使用"道具一步步从流民变成边军;隐藏结局是"不兑付"某件道具,在第四阶段触发特殊路径。

1.5 变量追踪表(标记位)

标记位ID 含义 设置阶段 后续触发
FIRST_GIFT 初始携带物(木牍/短刀/残玉) 贯穿全阶段
FIRST_ENTRY 进城方式(合法/隐匿/技能/观察) 影响初始身份标签
MARK_XU_BOOK 造假账 二:被认出 / 三:被追查
MARK_YELLOW_HIDE 藏过黄巾溃兵 二:可投靠流民首领
MARK_CAO_SERVE 加入曹操军 三、四:军旅线
MARK_LORD_PATH 领主路径选择 三:成为一方势力
MARK_UNUSED_GIFT 从未兑付的携带物 四:隐藏结局指向

二、标记位读写机制

2.1 存储位置

标记位存储在 _build/story.json 内的 player_state 对象中。

{
  "player_state": {
    "current_phase": 1,
    "current_location": "许县城门外",
    "current_season": "秋",
    "inventory": ["木牍"],
    "marks": {
      "FIRST_GIFT": "木牍",
      "FIRST_ENTRY": null,
      "MARK_XU_BOOK": false,
      "MARK_YELLOW_HIDE": false
    },
    "local_reputation": {
      "许县": 0,
      "郾城": 0,
      "长社": 0
    }
  }
}

2.2 AI 读取标记位的 SOP

  1. 生成场景前,先读取 story.jsonplayer_statemarks
  2. 根据已有标记位,决定当前场景的可用选项:
    • FIRST_GIFT = "木牍",则在城门口场景中,增加"出示木牍"选项
    • MARK_YELLOW_HIDE = true,则在第二阶段郾城场景中,增加"找流民首领"选项
    • 若某标记位为 falsenull,对应选项不出现
  3. 若某个标记位在当前场景不触发任何选项,忽略即可

2.3 AI 写入标记位的 SOP

  1. 玩家选择某个选项后,若该选项关联标记位,则更新 player_statemarks
  2. 更新规则:
    • "MARK_ID": true — 标记已触发
    • "MARK_ID": "具体值" — 标记存储具体选择
  3. 同时更新其他状态字段(如 current_locationlocal_reputation
  4. 更新后,将完整的 story.json 写回 _build/

2.4 标记位互斥规则

标记位组合 规则
FIRST_GIFT = "木牍" 且 FIRST_ENTRY = "隐匿入城" 允许。木牍携带者也可以绕城。但后续可能被质疑"有身份证明为何不走正门"。
MARK_CAO_SERVE = true 且 MARK_YELLOW_HIDE = true 允许但触发特殊事件:曹操军中有人举报你"通黄巾",你需要自证。
MARK_LORD_PATH = "中原坞堡" 且 拥有 MARK_YUAN_SPY 触发危机:袁绍方认为你是曹操的暗子,曹操方认为你是袁绍的暗子。

三、工具箱:参数化生成系统

3.1 季节关键词矩阵

季节 视觉 气味 体感 情绪 典型意象
桃瓣、嫩绿、融雪、新坟纸钱 湿土、草腥、硝烟 料峭、潮 躁动、不安、希望 桃花落在募兵告示上
烈日、尘土、浓荫、腐尸 汗水、焦麦、血 闷热、黏 焦灼、等待、爆发 麦田无人收,穗子垂地
黄叶、枯草、高云、雁阵 桂、秸秆焚、马汗 凉、干 收敛、清醒、离愁 梧桐叶盖住半张残榜
冻土、枯枝、白气、薄冰 冰、炭火、腐草 刺骨、僵 隐忍、绝望、蛰伏 井口冒白气,井绳冻硬

3.2 情绪种子库

种子ID 种子名 定义 表现形式 禁用写法
TONE_COLD 冷意 自愿成为那堵墙的自觉 环境冷、动作慢、对话少、动词选"站/看/弯腰" ❌ 不写"他感到悲凉"
TONE_HOME 家来了 身体先于大脑想起家 气味触发、舌尖味道、手指无意识动作 ❌ 不写"他想家了"
TONE_NOPLAN 选择丧失 连计划都无从开启 沉默、重复动作(磨刀/数粮)、回答简短 ❌ 不写"他决定放弃"
TONE_CYCLE 循环 认出"他是我,我是他" 年轻人和老人做同样动作、相似对话跨阶段重复 ❌ 不直接点破循环
TONE_PEACE 安静的结局 不是功成,是停下 日常动作(打水/锄地/补衣)、环境安静、无BGM式描写 ❌ 不写"终于安宁了"
TONE_GATHER 聚散 到时间了,该回了 收到信/听到消息/看到雁南飞,然后开始收拾东西 ❌ 不写"他决定回家"

3.3 场景框架模板

场景模板:城门口

基础框架

  • 位置:[城镇名]城门
  • 时间:[阶段] [季节] [时辰]
  • 天气:[从季节关键词取]
  • 城门状态:开/半掩/紧闭
  • 守卫状态:严格盘查/松散/无人

固定元素

  • 城门本身(木门/铁门/残破)
  • 城墙(完整/有缺口/贴告示)
  • 排队的人(流民/商队/无人)
  • 至少一个可交互NPC(老妇/县吏/铁匠/流民)

季节叠加

  • 春:桃花瓣飘进排队人的衣领
  • 夏:城门洞的阴凉处挤满了人
  • 秋:梧桐叶盖住半张告示
  • 冬:排队的人跺脚,白气从口鼻涌出

情绪叠加

  • 若种子=TONE_COLD:风灌进城门洞,没人说话
  • 若种子=TONE_HOME:某个气味让主角停了一瞬
  • 若种子=TONE_CYCLE:守卫换岗,新来的和昨天走的那位,动作一模一样

可用选项模板

  • 排队入城(守序)
  • 绕过城门(隐匿)
  • 帮NPC做事换入城(交易/技能)
  • 先不进城,在城外活动(生存/探索)
场景模板:市集

基础框架

  • 位置:[城镇名]市集
  • 时间:[阶段] [季节] [时辰]
  • 繁荣度:热闹/萧条/空无一人
  • 主要商品类型:[粮食/铁器/布匹/药材/奢侈品/无]

固定元素

  • 摊位(至少3个不同类型)
  • 讨价还价的声音(或寂静)
  • 至少一个可交互NPC(商贩/乞丐/巡逻兵/掮客)
  • 地面状态(干洁/泥泞/有血迹)

季节叠加

  • 春:野菜、新布上市,人多但货少
  • 夏:苍蝇多,肉类发臭,摊贩打盹
  • 秋:粮食上市,最热闹,但粮价可能暴跌
  • 冬:市集半空,只有卖炭和卖干菜的还在

可用选项模板

  • 购买物资(消耗铜钱/银两/以物易物)
  • 卖东西(可能被压价)
  • 接任务(掮客介绍活计:搬运/保镖/送信)
  • 打听消息(可能有假)
场景模板:荒野/道路

基础框架

  • 位置:[起点]至[终点]的路上,距[起点]约[X]天路程
  • 时间:[阶段] [季节] [时辰]
  • 道路状态:官道(相对安全)/小路(风险中)/野径(高风险)
  • 天气:[从季节关键词取]

固定元素

  • 路的状态(平整/坑洼/被水冲毁/有车辙/有马蹄印)
  • 路边事物(荒村废墟/孤树/界碑/坟冢/无)
  • 远处可见物(城墙轮廓/炊烟/烽火/无)
  • 可能遭遇(流民/商队/溃兵/野兽/无)

季节叠加

  • 春:路边野菜可采,但可能有毒
  • 夏:树荫处有休息的流民,可能分享消息或传染病
  • 秋:路边果树有落果,但可能有人守株待兔
  • 冬:路冻硬了,好走,但夜里可能冻死

可用选项模板

  • 继续走(消耗天数,触发风险结算)
  • 绕路(增加天数,降低风险)
  • 在路边休息(恢复体力,但可能被袭击)
  • 探查路边事物(可能发现物资/陷阱/隐藏路径)
场景模板:军帐/室内

基础框架

  • 位置:[势力名]军营·[帐幕类型] 或 [城镇名]·[建筑类型]
  • 时间:[阶段] [季节] [时辰]
  • 帐内人物:[主位人物] + [次要人物列表]
  • 帐内光源:烛火/油灯/火盆/日光从缝隙射入/无光

固定元素

  • 坐具(席/案/无)
  • 墙上/案上物品(地图/文书/武器/酒具/无)
  • 帐外声音(操练声/风声/远处战鼓/寂静)
  • 至少一个关键物品(可被主角注意到,成为后续引用的种子)

季节叠加

  • 春:帐帘掀开时,飘进桃花瓣或雨丝
  • 夏:帐内闷热,烛火不晃,所有人都在出汗
  • 秋:帐外风大,帐布鼓动如帆,烛火摇晃不定
  • 冬:火盆在中间,所有人的脸一半亮一半暗

可用选项模板

  • 接受任务/命令
  • 拒绝/拖延
  • 提出条件
  • 观察帐内细节(发现隐藏信息/种子)

四、SOP:AI生成标准操作流程

4.1 场景生成流程

输入(设计师提供)
  1. 选择场景模板(如 template_citygate.md
  2. 填入参数:城镇名、阶段、季节、时辰、情绪种子ID
  3. 选择主角当前携带物(木牍/短刀/残玉)
  4. 读取主角当前标记位状态(从 story.jsonplayer_statemarks
AI执行
  1. 读取场景模板
  2. 读取季节关键词矩阵,替换环境描写
  3. 读取情绪种子库,按种子要求调整叙事语气
  4. 读取主角标记位,生成对应的选项分支
  5. 生成3-5版场景文本
输出格式
[场景名]:[城镇]·[季节]·[时辰]
[环境描述]:(AI根据季节+情绪生成)
[可交互元素]:(NPC列表、物品、告示等)
[选项]:
  1. [选项文本] → 标记位:[MARK_ID]
  2. [选项文本] → 标记位:[MARK_ID]
  ...
[情绪锚点]:(本场景使用的情绪种子,不显示给玩家)
  

4.2 审核清单

4.3 迭代流程

设计师审核 → 标注不满意的点 → 喂回给AI

示例反馈:
  "第三段环境描写太暖,这个场景情绪种子是TONE_COLD,风应该更硬。"
  "第二个选项的文本太直了,不要写'他想回家',改成'他闻到了什么,停下了手'。"

AI根据反馈重新生成 → 设计师再审核 → 通过后写入_build/ → 更新player_state

五、可持续生产的关键规则

# 规则
1设计师只写框架和种子,不写具体文本
2AI生成10版,设计师挑1版,改3处,定稿
3所有种子只定义"是什么",不定义"为什么"
4每个场景必须留下一个"可被后续引用的细节"
5审核时,先看"有没有点破",再看"有没有振动"
6如果一段文本让设计师犹豫"是不是太直了",那就太直了。改。
7标记位存储在 story.json → player_state → marks,每次选择后立即更新
8每个阶段内部自由探索,阶段切换由世界时间触发,不可逆
本文件 = 图纸 + 工具箱 + SOP
版本:V1.1
下一步:用本文件,生成第一个场景(城门口·秋·黄昏·TONE_COLD),跑通一次完整流程。