# 轮回录 - 游戏设计文档 ## 一、游戏概述 **类型**: Rogue-lite + Incremental RPG **核心体验**: 在无限轮回中积累经验与记忆,逐步解锁世界真相,最终对抗隐藏的终极威胁。 **目标玩家**: 喜欢长期成长、策略试错、叙事探索的玩家。 **单局时长**: 一局人生 5~15 分钟(加速模式下),完整通关需 50~100+ 世。 --- ## 二、核心循环(Core Loop) ``` 出生(随机出身 + 词条池抽取) ↓ 日常推进(文本事件自动流过 / 选择事件 10秒倒计时) ↓ 积累经验 → 职业晋升 → 解锁能力 ↓ 死亡(自然 / 外敌 / 事件风险) ↓ 结算(元经验 + 新词条解锁 + 历史对比) ↓ 重生(保留元经验 / 记忆 / 词条池,外敌进度部分继承) ↓ (循环) ``` **关键张力**:每世都是不可预测的(随机出身、词条、事件),但跨世成长是确定可感的(元经验压缩前期、词条池扩大、记忆触发新选项)。 --- ## 三、系统详解 ### 3.1 时间系统 | 项目 | 设计 | |---|---| | 最小单位 | 天 | | 显示单位 | 天 / 年 / 年龄 | | 加速档位 | 1x(1天/秒)、10x、100x、MAX(瞬间过完一年) | | 加速时显示 | 文本事件快速滚动(日志流),选择事件暂停等玩家 | | 存档 | 每年自动存档 + 手动存档 | **一天内的流程**: 1. 推进日期 2. 检查固定事件触发 3. 从事件池随机抽取文本事件(概率控制) 4. 检查是否有选择事件触发 5. 推进经验、属性自然增长 6. 推进外敌进度 7. 检查死亡条件 ### 3.2 事件系统 #### 事件类型 | 类型 | 触发方式 | 玩家交互 | 占比 | |---|---|---|---| | **文本事件** | 概率触发 / NPC事件线 | 无,自动流过 | 80% | | **选择事件** | 固定时间点 / 条件触发 | 10秒倒计时,不选默认 | 15% | | **重大事件** | 事件链终点 / 外敌阈值 | 必须选择 | 5% | #### 事件结构 ```javascript { id: 'event_001', title: '山中奇遇', // 触发条件 condition: (state) => state.age >= 5 && state.age <= 10 && !state.worldFlags.met_old_taoist, // 概率权重(同条件事件竞争) weight: 10, // 是否为选择事件 isChoice: true, // 默认选项索引(倒计时结束时自动选) defaultChoice: 0, // 选项 choices: [ { text: '跟随老者', // 硬门槛判定 requirement: (state) => state.stats.wisdom >= 3, // 效果 effect: (state) => { state.worldFlags.met_old_taoist = true; return { unlockCareer: 'cultivation', exp: { cultivation: 100 } }; } }, { text: '转身离开', effect: (state) => ({ exp: { hunter: 20 } }) } ], // 事件链标记 flags: { saw_mountain_path: true }, // 后置事件(本事件触发后,后置事件进入候选池) unlocks: ['event_002', 'event_003'] } ``` #### 标记系统(防逻辑错误) ```javascript worldFlags: { 'npc.zhangsan.alive': true, // NPC生死 'npc.zhangsan.married': false, // NPC婚姻状态 'event.mountain_discovery.happened': true, // 事件已发生 'enemy.north.barbarian_invasion': false, // 外敌入侵状态 } ``` 任何事件在修改标记前必须检查依赖标记。例如:"张三死了"的事件触发后,`npc.zhangsan.alive` 设为 false,后续所有涉及张三的事件必须检查此标记。 ### 3.3 职业系统 #### 职业结构 职业呈**线性晋升链**,无"转换"概念。初始只有少数基础职业,等级达标后解锁后续职业。 **示例职业链**: | 层级 | 职业示例 | 类型 | 晋升条件 | |---|---|---|---| | 基础 | 混混、磨刀学徒、农夫、书童 | 短线 | 无 | | 进阶 | 红棍、打刀下手、猎户、秀才 | 短线 | 基础职业 Lv.5 | | 中阶 | 香主、锻刀师傅、商人、举人 | 中线 | 进阶职业 Lv.10 | | 高阶 | 堂主、炼刀匠人、大儒、进士 | 中线 | 中阶职业 Lv.20 | | 顶级 | 舵主、铸剑师、一代宗师、宰相 | 长线 | 高阶职业 Lv.30 | | 终极 | 帮主、仙匠、圣贤、帝王 | 极长线 | 顶级职业 Lv.50 | **修仙者**不是独立职业,而是多条路线的终极交汇点。例如: - 锻刀师傅 → 炼刀匠人 → 铸剑师 → (悟剑道)→ 剑修 - 大儒 → (悟道)→ 儒仙 - 红棍 → (武道通神)→ 武仙 #### 职业属性 ```javascript { id: 'hoodlum', name: '混混', type: 'short', // short / medium / long / ultimate maxLevel: 10, baseExp: 20, expCurve: 1.15, // 每级经验需求增长 // 自然成长(每天自动获得的经验) dailyExp: 5, // 晋升链 promotesTo: 'red_stick', // Lv.10 解锁 promoteRequirement: { level: 10 }, // 能力解锁(随等级解锁) abilities: [ { level: 3, id: 'street_fight', name: '街头斗殴', effect: '战斗事件成功率+10%' }, { level: 7, id: 'intimidate', name: '威吓', effect: 'NPC事件中威慑选项可用' }, ] } ``` #### 多职业并行 玩家可以同时拥有多个职业,每个职业独立计算等级和经验。例如:白天当农夫(farmer Lv.5),晚上混帮派(hoodlum Lv.3)。 ### 3.4 成长系统 #### 三层成长 | 层级 | 名称 | 跨轮保留 | 作用 | 示例 | |---|---|---|---|---| | **L1** | 元经验 | 是 | 压缩前期成长曲线 | 剑术元经验 500 → 前 50 级 +80% 速度 | | **L2** | 能力 | 是 | 解锁新技能/选项 | 剑术 Lv.30 留下"剑气感悟",下世 Lv.10 即可用剑气 | | **L3** | 词条 | 是 | 重生时的随机特性池 | 解锁"孤儿"词条,重生时可能随机到 | #### 元经验公式 ```javascript // 元经验加成(对数衰减,永不归零) function metaBoost(careerId, currentLevel, metaExp) { return Math.log(1 + metaExp / 100) * Math.exp(-currentLevel / 80); } // 总经验倍率 function totalExpMultiplier(state, careerId) { const career = state.careers[careerId]; const meta = state.metaExp[careerId] || 0; const level = career?.level || 0; let multiplier = 1; // 元经验加成 multiplier += metaBoost(careerId, level, meta); // 天赋加成 for (const t of state.talents) { if (t.effect.target === careerId || t.effect.target === 'all') { multiplier += t.effect.value; } } // 记忆加成 for (const m of state.memories) { if (m.effect?.target === careerId) { multiplier += m.effect.value; } } return multiplier; } ``` #### 能力链 不是"境界"概念,而是**具体技能的解锁**。例如: **剑术能力链**: - Lv.1~9:基础剑法(数值成长) - Lv.10:解锁【剑气】(攻击范围扩大) - Lv.15:解锁【御剑】(移动速度提升) - Lv.25:解锁【万剑归宗】(群体攻击) - Lv.40:解锁【人剑合一】(攻击无视防御) **跨世传承**:某一世把剑术练到 Lv.30,死亡后留下"剑气感悟"记忆。下一世再练剑术时,Lv.10 自动解锁【剑气】(不需要重新练到 Lv.25)。 ### 3.5 词条系统 #### 词条定义 词条是重生时随机抽取的"身份/天赋/携带物",影响整局游戏。 ```javascript { id: 'orphan', name: '孤儿', type: 'identity', // identity / talent / item / curse desc: '无父无母,街头生存经验丰富', effect: { target: 'hoodlum', expRate: 0.3, body: 1 }, // 解锁条件 unlockCondition: (history) => history.some(h => h.family < -1) } ``` #### 词条类型 | 类型 | 示例 | 效果 | |---|---|---| | **身份** | 孤儿、皇室后裔、商贾之子 | 影响出身、初始事件池 | | **天赋** | 剑骨、灵根、过目不忘 | 直接影响某职业成长 | | **携带物** | 祖传玉佩、神秘种子、旧日记 | 触发特定事件链 | | **诅咒** | 短命、招灾、孤星 | 负面效果,但可能解锁隐藏路线 | #### 解锁机制 - **等级解锁**:剑术 Lv.30 → 解锁"剑气"词条 - **事件解锁**:完成"梦中悟道"事件链 → 解锁"悟道"词条 - **条件解锁**:活到 100 岁 → 解锁"长寿"词条;被毒杀 → 解锁"毒物警觉"词条 - **成就解锁**:累计 10 世当混混 → 解锁"江湖中人"词条 #### 重生抽取 每世重生时,从已解锁词条池中随机抽取 3~5 个。词条池越大,组合越丰富。 ### 3.6 NPC系统 #### NPC结构 ```javascript { id: 'zhangsan', name: '张三', // NPC有自己的事件线 eventLine: [ { day: 100, event: 'zhangsan_marriage', condition: (state) => state.worldFlags.npc.zhangsan.alive }, { day: 500, event: 'zhangsan_death', condition: (state) => state.worldFlags.npc.zhangsan.married === false }, ], // 与玩家的关系 relation: { trust: 0, // -100 ~ 100 favor: 0, // -100 ~ 100 }, // NPC可以给玩家东西 gifts: [ { condition: (state) => state.npcs.zhangsan.favor > 50, item: 'old_sword' } ] } ``` #### NPC事件对玩家的影响 | 影响类型 | 示例 | |---|---| | **纯文本** | "张三今天娶了李四"(仅信息) | | **关系影响** | "张三向你求助"(接受+信任,拒绝-信任) | | **赠送物品** | "张三送你一把旧剑"(激活词条或加成) | | **世界事件前置** | "张三发现了秘境入口"(开启新事件链) | | **连锁反应** | "张三死了,他的仇家找上了你" | ### 3.7 外敌系统 #### 三相威胁 | 相 | 名称 | 增长条件 | 对抗方式 | |---|---|---|---| | **军事** | 北方蛮族 | 王朝不稳时加速 | 武道/修仙等级 | | **精神** | 域外天魔 | 修仙者死亡时泄漏 | 悟性/意志力 | | **政治** | 王朝崩坏 | 长期无人治国 | 权势/民心 | #### 三相联动 ``` 王朝崩坏 +10% → 蛮族入侵加速 +20% 蛮族入侵 +10% → 民心下降 → 王朝崩坏加速 +15% 天魔侵蚀 +10% → 修仙者恐慌 → 更多修仙者死亡 → 天魔加速 ``` #### 隐藏的第四相 当三相都稳定(均 < 20%)时,触发"真相浮现"事件链: - 三相只是表象,真正的威胁是"轮回本身" - 玩家的无限轮回正在撕裂世界 - 最终目标:找到终止轮回或拯救世界的方法 #### 跨轮影响 - 某一世成功击退蛮族 → 下一世蛮族起点降低 - 某一世天魔侵蚀严重 → 下一世天魔起点更高 - 三相整体进度跨轮部分继承(如保留 30%) ### 3.8 存档系统 | 类型 | 触发方式 | 保存内容 | |---|---|---| | **自动存档** | 每年年末 | 完整状态 | | **手动存档** | 玩家主动 | 完整状态 | | **死亡存档** | 死亡瞬间 | 本世完整记录(用于历史对比) | #### 存档结构 ```javascript { version: '0.1', slot: 1, timestamp: Date.now(), state: { /* 完整游戏状态 */ }, history: [ /* 往世记录 */ ] } ``` ### 3.9 死亡结算 #### 结算内容 1. **本世回顾** - 活了多久(天/年) - 死因 - 职业成就(各职业最高等级) - 走过的事件链 - 解锁的词条 - 对世界的影响(外敌变化) 2. **历史对比** - 这一世 vs 上一世:多活了几年? - 这一世 vs 历史最佳:职业等级差距? - 累计元经验增长曲线 3. **元经验结算** - 各职业经验 → 元经验(转化率 10%) 4. **新词条解锁提示** - "解锁新词条:短命(被毒杀3次)" --- ## 四、数值设计 ### 4.1 经验曲线 ```javascript // 升级所需经验 function expToNextLevel(careerConfig, currentLevel) { return Math.floor(careerConfig.baseExp * Math.pow(careerConfig.expCurve, currentLevel)); } // 示例:混混(baseExp=20, curve=1.15) // Lv.1 → 2: 23 // Lv.5 → 6: 40 // Lv.9 → 10: 71 // 示例:修仙者(baseExp=100, curve=1.25) // Lv.1 → 2: 125 // Lv.10 → 11: 931 // Lv.50 → 51: 约 60万 // Lv.99 → 100: 约 3万亿 ``` ### 4.2 元经验成长预期 | 轮回 | 单世主要成就 | 累计元经验(剑术) | 前30级加成 | |---|---|---|---| | 1 | 剑术 Lv.15 | 150 | +50% | | 2 | 剑术 Lv.25 | 500 | +90% | | 3 | 剑术 Lv.35 | 1200 | +120% | | 5 | 剑术 Lv.50 | 4000 | +160% | | 10 | 剑术 Lv.80 | 20000 | +200% | | 20 | 剑术 Lv.100 | 80000 | +240% | 注:加成是"速度倍率",不是"直接加等级"。元经验让前期飞快,但瓶颈期(高等级)仍然需要多轮积累。 ### 4.3 死亡概率 | 年龄 | 自然死亡概率/年 | 备注 | |---|---|---| | 0~50 | 0% | | | 51~60 | 2% | | | 61~70 | 8% | | | 71~80 | 20% | | | 81~90 | 45% | | | 91~100 | 80% | | | 100+ | 100% | 必然死亡 | 外敌死亡:三相任一达到 100% 时,每年 40% 概率直接死亡。 ### 4.4 事件密度 | 年龄段 | 文本事件/年 | 选择事件 | 重大事件 | |---|---|---|---| | 幼年(0~6) | 20~30 | 2~3 | 0 | | 少年(7~15) | 10~15 | 3~5 | 1 | | 青年(16~25) | 5~8 | 2~3 | 1 | | 壮年(26~40) | 3~5 | 2~3 | 1 | | 中年(41~60) | 2~4 | 1~2 | 1 | | 老年(61+) | 5~10 | 2~3 | 1 | --- ## 五、架构设计 ### 5.1 模块结构 ``` src/ engine/ state.js # 游戏状态管理 time.js # 时间推进、加速控制 eventEngine.js # 事件调度器(条件匹配 → 加权随机 → 执行) expSystem.js # 经验计算、升级、能力解锁 death.js # 死亡判定、轮回结算 saveSystem.js # 存档/读档 flagSystem.js # 世界标记管理 content/ events/ index.js # 事件注册中心 child.js # 幼年事件 youth.js # 少年事件 adult.js # 成年事件 common.js # 通用日常事件 chains/ # 事件链定义 careers/ index.js # 职业注册中心 short/ # 短线职业 medium/ # 中线职业 long/ # 长线职业 ultimate/ # 终极职业 talents/ index.js # 词条注册中心 npcs/ index.js # NPC注册中心 ui/ renderer.js # 渲染器 eventPanel.js # 事件面板 logStream.js # 日志流 careerPanel.js # 职业面板 deathScreen.js # 死亡结算界面 main.js # 入口 ``` ### 5.2 数据流 ``` 用户交互(点击/加速/选择) ↓ UI Layer → 调用 Engine API ↓ Time.tick() / EventEngine.trigger() / ExpSystem.gain() ↓ 修改 State ↓ State 变更通知 UI ↓ UI 重新渲染 ``` ### 5.3 事件引擎核心逻辑 ```javascript class EventEngine { constructor() { this.eventPool = []; // 所有注册的事件 this.activeChains = []; // 当前活跃的事件链 } // 注册事件 register(eventDef) { this.eventPool.push(eventDef); } // 每tick调用 tick(state) { // 1. 筛选满足条件的事件 const candidates = this.eventPool.filter(e => e.condition(state) && !state.triggeredEvents.has(e.id) && this.checkPrerequisites(e, state) ); // 2. 按权重随机选择 const event = this.weightedRandom(candidates); if (!event) return null; // 3. 标记已触发 state.triggeredEvents.add(event.id); // 4. 解锁后置事件 if (event.unlocks) { event.unlocks.forEach(id => this.activateChain(id)); } return event; } checkPrerequisites(event, state) { if (!event.prerequisites) return true; return event.prerequisites.every(flag => { const negate = flag.startsWith('!'); const key = negate ? flag.slice(1) : flag; const value = this.getFlag(state, key); return negate ? !value : !!value; }); } } ``` --- ## 六、UI设计 ### 6.1 主界面布局 ``` ┌─────────────────────────────────────────────────────┐ │ [世数] 第42世 │ [时间] 第15年 第128天 │ [年龄] 15岁 │ ├─────────────────────────────────────────────────────┤ │ 加速: [1x] [10x] [100x] [MAX] │ [暂停] [存档] │ ├─────────────────────────────────────────────────────┤ │ │ │ 【事件面板】 │ │ (选择事件时显示倒计时) │ │ │ ├─────────────────────────────────────────────────────┤ │ 【日志流】(文本事件滚动显示) │ │ [128天] 张三今天娶了李四 │ │ [129天] 你在街头遇到了一个老乞丐... │ │ [130天] 【选择事件】山中奇遇(倒计时: 7秒) │ │ │ ├─────────────────────────────────────────────────────┤ │ 词条: [孤儿] [剑骨] [神秘种子] │ ├─────────────────────────────────────────────────────┤ │ 属性: 体质12 悟性8 魅力5 气运7 │ ├─────────────────────────────────────────────────────┤ │ 职业: │ │ 混混 Lv.7 [=====> ] 红棍(解锁条件: Lv.10) │ │ 磨刀学徒 Lv.3 [==> ] │ ├─────────────────────────────────────────────────────┤ │ 外敌: 蛮族35% │ 天魔22% │ 崩坏18% │ ├─────────────────────────────────────────────────────┤ │ 记忆: [剑气感悟] [毒物警觉] │ │ 元经验: 剑术+3200 混混+800 │ └─────────────────────────────────────────────────────┘ ``` ### 6.2 死亡结算界面 ``` ┌─────────────────────────────────────────────────────┐ │ 【身死道消】 │ │ │ │ 你活了 67 年 128 天 │ │ 死因:寿终正寝 │ │ │ │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │ │ 本世成就: │ │ • 混混 Lv.10 → 红棍(晋升!) │ │ • 剑术 Lv.35 │ │ • 走过事件链:山中奇遇 → 老者传道 → 宗门测试 │ │ • 解锁词条:剑气、江湖中人 │ │ │ │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │ │ 历史对比: │ │ 本世 vs 上世:多活了 12 年 ✓ │ │ 本世 vs 最佳:剑术差距 -15 级 │ │ 累计元经验:剑术 3200 (+800 本世) │ │ │ │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │ │ 新解锁词条:长寿(活到80岁解锁) │ │ │ │ [进入轮回] │ └─────────────────────────────────────────────────────┘ ``` --- ## 七、内容规划(MVP阶段) ### 7.1 MVP职业(10个) **基础职业(4个)**: - 混混(短线,10级) - 磨刀学徒(短线,10级) - 农夫(短线,10级) - 书童(短线,10级) **进阶职业(4个)**: - 红棍(混混 Lv.10 解锁,短线,15级) - 打刀下手(磨刀学徒 Lv.10 解锁,短线,15级) - 猎户(农夫 Lv.10 解锁,短线,15级) - 秀才(书童 Lv.10 解锁,中线,30级) **高阶职业(2个)**: - 香主(红棍 Lv.15 解锁,中线,30级) - 剑修(打刀下手 Lv.15 解锁,长线,50级) ### 7.2 MVP事件(30个) - 幼年事件:5个 - 少年事件:5个 - 成年事件:10个 - 通用日常事件:10个 ### 7.3 MVP词条(20个) - 身份词条:5个 - 天赋词条:8个 - 携带物词条:4个 - 诅咒词条:3个 ### 7.4 MVP NPC(5个) - 老乞丐(触发侠客路线) - 道士(触发修仙路线) - 张三(普通村民,有完整事件线) - 李四(商人,可交易/赠送) - 王五(敌对NPC,可能追杀玩家) --- ## 八、后续扩展方向 1. **多人/异步交互**:可以看到其他玩家的轮回记录,学习他们的选择 2. **MOD系统**:允许玩家自定义事件、职业、词条 3. **成就系统**:Steam/平台成就集成 4. **可视化家族树**:显示多世的血缘/师承关系 5. **AI生成事件**:用LLM根据玩家历史生成个性化事件