Files
SectSimulator/doc/design/修炼系统设计.md
T

210 lines
12 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.
# 修炼系统设计(D5:修炼循环 + D9:大境界突破)
> 对应开发计划表 D5(8/7):① 修为随时间增长(资质×灵气)② 境界门槛 ③ 突破判定;D9(8/11)追加大境界突破。
> 交付标准:弟子自动修炼,可突破;练气圆满后玩家手动花费灵石突破大境界。
> 本文档只描述设计,不包含代码。
> 状态:D5 部分已实现(每日结算 → 修为达门槛升层 → 瓶颈掷骰判定,失败扣 20%;13 层圆满封顶;修为进度已在管理界面展示);大境界突破已实现(练气圆满 → 手动花费灵石 → 筑基及以上大境界,失败灵石不返还 + 修为倒退;配置驱动,详见第四章)
---
## 一、核心循环
```
每日推进 → 修为增长(资质×灵根容量×天灵根×灵气浓度)→ 达到层门槛 → 升层/突破判定 → 境界推进
```
- 纯挂机机制:弟子自动修炼,玩家无需操作
- 修炼只在游戏时间推进时进行(TimeSystem.day_passed),暂停/弹窗期间冻结
---
## 二、修炼速度
**每日修为增量 = 基础速度 × 资质倍率 × 灵根容量倍率 × 天灵根加成 × 灵气浓度**
| 因子 | 来源 | 说明 |
|------|------|------|
| 基础速度 | 配置 `base_speed`(默认 10 | 修为/游戏日 |
| 资质倍率 | 配置 `aptitude_speed`[0.6, 1.0, 1.5, 2.0] | 按下品/中品/上品/天骄索引 |
| 灵根容量倍率 | 固定公式 `1 ÷ 根数`(无配置) | 1根=1.0、2根=0.5、3根=1/3、4根=0.25、5根=0.2 |
| 天灵根加成 | 配置 `heavenly_bonus`1.5 | 仅在 is_heavenly 时乘入 |
| 灵气浓度 | 配置 `qi_concentration`(默认 1.0) | D5 固定值;D6 建筑系统接入后动态化 |
> 所有修炼数值统一从 GameConfig 读取(Disciple 不内置倍率常量),避免双份数值漂移。
### 含义
- **资质定天赋上限**:决定倍率主体(0.6~2.0)
- **灵根数量定灵气容量**:容量 = 1 ÷ 灵根数(硬规则,不提供配置)。单灵根 1 单位灵气即充满(×1.0),双灵根只充 1/2(×0.5),三灵根 1/3,四灵根 1/4,五灵根 1/5,根数越多同一单位灵气分摊越薄
- **天灵根是稀缺加成**:强制单根(满容量)+ 额外 ×1.5,三个维度独立掷骰
- **无灵根(体修路线预留)**:容量为 0,无法练气;暂不生成,待体修系统(炼体)接入后另行结算
组合示例(天骄资质 + 五灵根 = 2.0 × 0.2 = 0.4,慢于 上品资质 + 单灵根 = 1.5 × 1.0 = 1.5
修为存储用 float(允许小数积累),显示时取整。
---
## 三、境界门槛(本期:练气 1–13 层)
| 层 | 需求修为(配置 `level_thresholds` | 是否瓶颈 |
|----|----------------------------------|---------|
| 1→2 | 100 | 否 |
| 2→3 | 200 | 否 |
| 3→4 | 350 | **是** |
| 4→5 | 550 | 否 |
| 5→6 | 800 | 否 |
| 6→7 | 1100 | **是** |
| 7→8 | 1500 | 否 |
| 8→9 | 2000 | 否 |
| 9→10 | 2600 | **是** |
| 10→11 | 3300 | 否 |
| 11→12 | 4100 | 否 |
| 12→13 | 5000 | **是** |
- **非瓶颈层**:修为满门槛 → 自动升层(无失败)
- **瓶颈层**3→4 / 6→7 / 9→10 / 12→13):修为满后进入突破判定
- 13 层圆满:修为封顶,显示"练气圆满";**大境界突破见第四章**(玩家手动花费灵石突破至筑基)
> 数值均为示例,正式数值在 D9 平衡调整,只改配置不动代码。
---
## 四、大境界突破(D9 追加:手动花费灵石)
### 4.1 总览
练气圆满(13 层)后,玩家可在**弟子详情面板手动操作**:花费灵石尝试突破至下一大境界(练气→筑基→金丹→元婴→化神)。
```
练气13层圆满 ── 手动花费灵石 + 成功率判定 ──> 筑基初期 ── 小境自动推进 ── 筑基圆满 ──> 金丹初期 …
```
- 与练气期小突破(自动挂机)不同:**大境界突破是玩家主动行为**,消耗灵石、有失败折损
- 大境界序列沿用 `Disciple.REALM_NAMES`(练气/筑基/金丹/元婴/化神),`realm_index` 表示大境界
### 4.2 触发条件
| 条件 | 说明 |
|------|------|
| 修为满 | 练气期:13 层圆满(修为封顶);筑基及以上:修为 ≥ 当前大境界圆满阈值(见 4.3) |
| 灵石足够 | 当前宗门灵石 ≥ 目标大境界花费(配置 `realm_breakthrough_costs` |
| 玩家操作 | 详情面板点击"大境界突破"按钮(满足条件时可用) |
### 4.3 筑基及以上的小境推进
- 筑基/金丹/元婴/化神各有 4 小境(初期/中期/后期/圆满),显示沿用现有 `get_realm_text()`
- 修为每日继续按同一公式增长(不再以 13 层封顶);满小境门槛**自动推进小境**(挂机,无失败)
- 小境门槛统一读配置 `realm_sub_thresholds`(3 项:初期→中期 / 中期→后期 / 后期→圆满),各大大境界通用
- **圆满**:修为达到圆满小境门槛后封顶,解锁"大境界突破"按钮
### 4.4 突破判定(手动)
1. 玩家点击"大境界突破"→ 扣除灵石(一次性,成功失败都不退还)
2. 掷骰:成功率按**目标大境界**读配置 `realm_breakthrough_chances`(升筑基 0.6 / 升金丹 0.5 / 升元婴 0.4 / 升化神 0.3,越往上越难)
3. **成功**`realm_index+1``sub_realm_index=0`(新大境界初期)、修为清零;控制台与信号广播"X 突破至 筑基初期"
4. **失败****修为倒退**(配置 `realm_breakthrough_fail_drop` 步,默认 3):倒退限于当前大境界内——练气期倒推层数(如 13 层圆满 → 10 层),筑基及以上倒推小境(圆满 → 后期 → 中期 → 初期);倒退后修为清零重新积累;控制台提示"X 突破失败,灵石化为乌有,修为倒退至 练气10层"
5. 失败后修为照常继续增长(无冷却;冷却规则后续版本再考虑)
**设计意图**:为灵石提供经营消耗出口(建筑产出 → 突破消耗形成闭环),并保留"攒灵石 → 点突破"的手动决策感与成败反馈;**失败代价是境界倒退**(练气 13 层 → 10 层意味重新冲 3 个瓶颈层),比单纯扣修为更能制造挫折与经营压力。
### 4.5 灵石不足
- 按钮置灰并显示所需灵石("突破(需 500 灵石)"
- 灵石不足不可点击,不弹窗
---
## 五、突破判定(瓶颈层)
1. 修为 ≥ 瓶颈层门槛时,每日结算后自动尝试突破
2. 掷骰:成功概率**按瓶颈层分别配置**(`breakthrough_chances`,与 `bottleneck_levels` 一一对应:升 4 层 0.85 / 升 7 层 0.8 / 升 10 层 0.75 / 升 13 层 0.6,越往上越难)
3. **成功** → 升层,控制台打印"X 突破至 练气4层"
4. **失败** → 修为扣减 20%(冲关损耗),次日再尝试;控制台打印失败信息
5. 失败不连续重试(每天最多判定一次)
**设计意图**:挂机友好(全自动),但瓶颈制造节奏感与"卡关→等积累"的经营反馈;损耗惩罚避免无脑挂到顶。
---
## 六、CultivationManager(新 Autoload
存放位置:`src/Character/CultivationManager.gd`(与 DiscipleManager 同域,注册顺序在 DiscipleManager 之后、声明于 project.godot
| 接口 | 说明 |
|------|------|
| 监听 `TimeSystem.day_passed` | 每日结算全体弟子 |
| 私有 `_gain_exp(d)` | 按公式累计修为(所有大境界通用;练气圆满/大境界圆满封顶) |
| 私有 `_check_breakthrough(d)` | 练气期门槛判定 + 瓶颈掷骰 |
| 私有 `_check_sub_realm(d)` | 筑基及以上小境门槛判定(自动推进,无失败) |
| **公开 `try_realm_breakthrough(d)`** | **大境界突破入口:校验灵石 → 扣费 → 掷骰 → 成功升大境界/失败修为倒退(`realm_breakthrough_fail_drop` 步),返回 bool** |
| 信号 `realm_changed(d)` | 境界变化(详情面板刷新用) |
| 信号 `cultivation_log(text)` | 修炼日志文本(控制台打印/后续日志系统) |
**注意**:只在 `disciples` 名录内结算,候选池不修炼;大境界突破必须从 UI 手动调用(挂机不自动花灵石)。
---
## 七、配置节(game_config.cfg [cultivation]
```ini
[cultivation]
base_speed=10 ; 基础修为/日
qi_concentration=1.0 ; 宗门灵气浓度(D6 动态化)
aptitude_speed=[0.6, 1.0, 1.5, 2.0] ; 资质倍率(下品/中品/上品/天骄)
heavenly_bonus=1.5 ; 天灵根额外倍率
breakthrough_chances=[0.85, 0.8, 0.75, 0.6] ; 各瓶颈层突破成功率(与 bottleneck_levels 一一对应)
level_thresholds=[100, 200, 350, 550, 800, 1100, 1500, 2000, 2600, 3300, 4100, 5000] ; 练气 1→2 到 12→13 各层所需修为
bottleneck_levels=[4, 7, 10, 13] ; 瓶颈目标层(升到这些层需突破判定)
realm_breakthrough_costs=[500, 4000, 12000, 60000] ; 大境界突破灵石花费(索引 0~3 = 升筑基/金丹/元婴/化神)
realm_breakthrough_chances=[0.6, 0.5, 0.4, 0.3] ; 大境界突破成功率(与 costs 一一对应)
realm_breakthrough_fail_drop=3 ; 突破失败倒退步数(练气倒推层数/筑基+倒推小境,默认 3)
realm_sub_thresholds=[6000, 12000, 24000] ; 筑基及以上小境门槛(初期→中期/中期→后期/后期→圆满)
```
- `aptitude_speed`:与资质枚举一一对应,必须 4 项
- `level_thresholds`:练气 1→2 到 12→13 共 12 个门槛值
- `bottleneck_levels`:升到这些层时需要突破判定
- `realm_breakthrough_costs/chances`:索引 0 = 练气圆满→筑基,1 = 筑基圆满→金丹,2 = 金丹圆满→元婴,3 = 元婴圆满→化神;两个数组长度必须一致(4 项)
- `realm_breakthrough_fail_drop`:失败倒退步数,练气期退层数、筑基+退小境,均不跨大境界
- `realm_sub_thresholds`:筑基及以上通用,3 项;修为达到即自动进小境
---
## 八、UI 接入(D4 预留区填充)
- **名录列表**DisciplesPanel):条目追加"修为"列(如 "1234 / 800",当前修为/本层门槛;13 层显示"练气圆满";大境界圆满显示"筑基圆满")
- **详情弹窗**:信息区追加"修为:1234 / 2000"(当前/本层门槛;练气圆满显示"练气圆满")
- 追加"**大境界突破**"按钮:满足触发条件(修为圆满 + 灵石足够)时可点击;按钮文案带花费("大境界突破(500 灵石)");灵石不足置灰
- 点击后直接执行判定(成功/失败均无二次确认),结果通过修炼日志与控制台可见
- 面板打开时暂停时间,进度静态展示;修炼日志:控制台 print(本期不做日志界面)
---
## 九、实现拆解(小步可验证)
1. 配置节追加 3 项 + GameConfig 读取(默认值与 cfg 同步)
2. Disciple 辅助:`is_realm_ready()`(修为圆满判定)、突破花费查询、进度文本支持筑基及以上
3. CultivationManager`_gain_exp` 放开到筑基及以上 + 小境自动推进 `_check_sub_realm`
4. `try_realm_breakthrough(d)`:校验 → 扣灵石 → 掷骰 → 成功/失败结算
5. 详情面板"大境界突破"按钮(可用性 = 条件 + 灵石;文案含花费)
6. 挂机验证(加速时间观察筑基圆满 → 手动突破金丹)+ 提交
---
## 十、验收清单(D5 交付标准 + D9 追加)
- [x] 挂机时弟子修为逐日增长,速度随资质/天灵根不同(下品慢、天骄快)
- [x] 非瓶颈层修为满自动升层,无失败
- [x] 瓶颈层(4/7/10/13 层)需突破判定,控制台有成败日志,失败扣 20% 修为
- [x] 练气 13 层圆满后修为封顶,显示"练气圆满"
- [x] 详情面板显示修为进度,突破后实时刷新
- [x] 修改配置(速度/概率/门槛)重启生效
- [x] 详情面板常驻"大境界突破"按钮:修为圆满 + 灵石足够可点击(文案显示所需灵石),否则置灰(未圆满/灵石不足/已至巅峰)
- [x] 点击突破:扣灵石 → 成功升大境界(realm_index+1,显示"筑基初期")或失败**修为倒退**(练气退层/筑基+退小境,配置 `realm_breakthrough_fail_drop` 步),控制台有日志
- [x] 灵石不足时按钮置灰不可点击
- [x] 筑基及以上:修为继续增长,满 `realm_sub_thresholds` 自动推进小境(初期→中期→后期→圆满),圆满后可再大境界突破
- [x] 修改配置(花费/成功率/小境门槛)重启生效
> 注:修为显示("当前/本层门槛")待详情面板接入(拆解第 6 步)。