Files
rebirthlife/DESIGN.md
T
congsh 3f741b4f0a feat: add age-based event gating, event timer, and UI polish
- Add minAge/maxAge to events so infants can't go treasure hunting
- Cache event panel DOM to prevent high-speed button destruction
- Add 10s auto-select countdown for choice events
- Fix event title/text field mapping (name/description → title/text)
- Add rotating clock icon for time flow feedback
- Fix speed/pause button active states
- Fix shop affordability check (disable + show insufficient money)
- Add red styling for unmet choice requirements
- Fix log re-rendering on every tick
2026-05-13 09:09:42 +00:00

664 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 轮回录 - 游戏设计文档
## 一、游戏概述
**类型** Rogue-lite + Incremental RPG
**核心体验**: 在无限轮回中积累经验与记忆,逐步解锁世界真相,最终对抗隐藏的终极威胁。
**目标玩家**: 喜欢长期成长、策略试错、叙事探索的玩家。
**单局时长**: 一局人生 5~15 分钟(加速模式下),完整通关需 50~100+ 世。
---
## 二、核心循环(Core Loop
```
出生(随机出身 + 词条池抽取)
日常推进(文本事件自动流过 / 选择事件 10秒倒计时)
积累经验 → 职业晋升 → 解锁能力
死亡(自然 / 外敌 / 事件风险)
结算(元经验 + 新词条解锁 + 历史对比)
重生(保留元经验 / 记忆 / 词条池,外敌进度部分继承)
(循环)
```
**关键张力**:每世都是不可预测的(随机出身、词条、事件),但跨世成长是确定可感的(元经验压缩前期、词条池扩大、记忆触发新选项)。
---
## 三、系统详解
### 3.1 时间系统
| 项目 | 设计 |
|---|---|
| 最小单位 | 天 |
| 显示单位 | 天 / 年 / 年龄 |
| 加速档位 | 1x1天/秒)、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 NPC5个)
- 老乞丐(触发侠客路线)
- 道士(触发修仙路线)
- 张三(普通村民,有完整事件线)
- 李四(商人,可交易/赠送)
- 王五(敌对NPC,可能追杀玩家)
---
## 八、后续扩展方向
1. **多人/异步交互**:可以看到其他玩家的轮回记录,学习他们的选择
2. **MOD系统**:允许玩家自定义事件、职业、词条
3. **成就系统**Steam/平台成就集成
4. **可视化家族树**:显示多世的血缘/师承关系
5. **AI生成事件**:用LLM根据玩家历史生成个性化事件