乱世生存:从设计图纸到AI生产系统 V1.1
核心原则:人定规则,AI填肉。
设计师定义骨架、情绪、节奏;AI负责批量生成、替换、迭代。
设计师的工作是"审核",不是"从零写"。
修订记录
- V1.0:初始版本(2026-06-24)
- V1.1:补全场景模板、常规结局、标记位读写机制、开放世界定义澄清(2026-06-24)
一、骨架:设计图纸
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
- 生成场景前,先读取
story.json → player_state → marks
- 根据已有标记位,决定当前场景的可用选项:
- 若
FIRST_GIFT = "木牍",则在城门口场景中,增加"出示木牍"选项
- 若
MARK_YELLOW_HIDE = true,则在第二阶段郾城场景中,增加"找流民首领"选项
- 若某标记位为
false 或 null,对应选项不出现
- 若某个标记位在当前场景不触发任何选项,忽略即可
2.3 AI 写入标记位的 SOP
- 玩家选择某个选项后,若该选项关联标记位,则更新
player_state → marks
- 更新规则:
"MARK_ID": true — 标记已触发
"MARK_ID": "具体值" — 标记存储具体选择
- 同时更新其他状态字段(如
current_location、local_reputation)
- 更新后,将完整的
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 场景生成流程
输入(设计师提供)
- 选择场景模板(如
template_citygate.md)
- 填入参数:城镇名、阶段、季节、时辰、情绪种子ID
- 选择主角当前携带物(木牍/短刀/残玉)
- 读取主角当前标记位状态(从
story.json → player_state → marks)
AI执行
- 读取场景模板
- 读取季节关键词矩阵,替换环境描写
- 读取情绪种子库,按种子要求调整叙事语气
- 读取主角标记位,生成对应的选项分支
- 生成3-5版场景文本
输出格式
[场景名]:[城镇]·[季节]·[时辰]
[环境描述]:(AI根据季节+情绪生成)
[可交互元素]:(NPC列表、物品、告示等)
[选项]:
1. [选项文本] → 标记位:[MARK_ID]
2. [选项文本] → 标记位:[MARK_ID]
...
[情绪锚点]:(本场景使用的情绪种子,不显示给玩家)
4.2 审核清单
- 环境描写是否匹配季节关键词
- 情绪是否"不点破"——没有直接写"他感到悲伤/想家/绝望"
- 选项是否对应正确的标记位
- NPC对话是否有"留白"——没有把核心观念说尽
- 是否与主角当前阶段、身份、携带物匹配
- 是否有至少一个"种子"——可被后续阶段引用的细节
- 标记位读写是否正确
4.3 迭代流程
设计师审核 → 标注不满意的点 → 喂回给AI
示例反馈:
"第三段环境描写太暖,这个场景情绪种子是TONE_COLD,风应该更硬。"
"第二个选项的文本太直了,不要写'他想回家',改成'他闻到了什么,停下了手'。"
AI根据反馈重新生成 → 设计师再审核 → 通过后写入_build/ → 更新player_state
五、可持续生产的关键规则
| # |
规则 |
| 1 | 设计师只写框架和种子,不写具体文本 |
| 2 | AI生成10版,设计师挑1版,改3处,定稿 |
| 3 | 所有种子只定义"是什么",不定义"为什么" |
| 4 | 每个场景必须留下一个"可被后续引用的细节" |
| 5 | 审核时,先看"有没有点破",再看"有没有振动" |
| 6 | 如果一段文本让设计师犹豫"是不是太直了",那就太直了。改。 |
| 7 | 标记位存储在 story.json → player_state → marks,每次选择后立即更新 |
| 8 | 每个阶段内部自由探索,阶段切换由世界时间触发,不可逆 |
本文件 = 图纸 + 工具箱 + SOP
版本:V1.1
下一步:用本文件,生成第一个场景(城门口·秋·黄昏·TONE_COLD),跑通一次完整流程。