Files
echo-nexus/docs/08-星图天文台系统-v0.3.1.md

172 lines
6.9 KiB
Markdown
Executable File
Raw Permalink 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.
# v0.3.1 · 星图天文台(Constellation Observatory)元进程天赋系统
> 第二次回应 Issue #1「就一直连连看?」——为飞升循环加入 Slay the Spire 式 3 选 1 天赋 draft
> 跨周目永久生效,配合 Canvas 动态星图可视化,提供长期成长目标与策略选择。
## 一、设计动机
v0.3 星潮事件已为放置循环注入动态变化,但玩家仍缺长期 meta-progression 目标。本系统在飞升后触发:
- **策略选择**:3 选 1 的 draft 让每次飞升都有差异化构建方向
- **永久成长**:天赋跨周目保留,配合蓝图/成就形成三层加成
- **视觉反馈**:Canvas 动态星图,每解锁一个天赋就在对应星座点亮一颗星
- **目标驱动**:18 个天赋 + 2 个专属成就,给玩家清晰的中长期目标
## 二、系统架构
### 2.1 数据层(`src/lib/game/constellation.ts`
```typescript
// 6 大星座 × 3 颗星 = 18 个天赋
type ConstellationCategory =
| "mining" | "decoding" | "expedition"
| "contact" | "economy" | "cosmic";
interface ConstellationPerk {
id: string; // c_min_1, c_dec_2, ...
category: ConstellationCategory;
name: string;
desc: string;
order: 1 | 2 | 3; // 星座内位置
}
```
### 2.2 18 个天赋一览
| 类别 | #1 | #2 | #3 |
|------|-----|-----|-----|
| 翠·永动矿脉 | 永动钻头(产能+20%) | 深井网络(上限+50%) | 谐振熔炉(脉冲+50% |
| 玫·光谱矩阵 | 光谱记忆(洞见+15%) | 步幅延展(步数+1) | 自动校准(自解-3s) |
| 琥·远征星图 | 维生护盾(生命+25%) | 信标矩阵(探险力+20%) | 能量共振(能量上限+1) |
| 紫·接触回响 | 接触共鸣(接触率+20%) | 飞升加速(门槛-10) | 蓝图回响(每蓝图+2%全属性) |
| 灰·虚空市场 | 离线缓存(离线+15%) | 晶体富集(T2/T3+8% | 星潮引导(间隙-10s |
| 金·宇宙回响 | 飞升礼包(+30晶体/+5洞见) | 二周目经验(解码+10%) | 全息共振(全产能+8%) |
### 2.3 修饰器聚合
`constellationBonuses(perks: string[]): ConstellationModifiers` 返回 **19 项修饰器**
`recomputeStats()` / `tickTide()` / `tick()` / `clickNode()` / `autoDecodeTick()` / `computeExpeditionPower()` / `computeExpeditionHp()` 等所有相关用点处应用。
### 2.4 状态扩展
```typescript
// types.ts
interface GameState {
// ... 既有字段
constellation: string[]; // 已解锁天赋 ID
pendingPerkChoices: string[] | null; // 飞升后待选 3 个
}
// config.ts INITIAL_STATE
constellation: [],
pendingPerkChoices: null,
```
### 2.5 飞升流程
```
performPrestige(state)
├─ 计算 newBp(蓝图数)
├─ rollPerkChoices(constellation) → 3 个不同类别的可选天赋
├─ 应用「飞升礼包」补偿(+30 晶体 / +5 洞见,若已解锁)
├─ 重置资源/技术/接触进度
└─ 保留:fragments / totalDecoded / blueprints / achievements / constellation
```
飞升后 `pendingPerkChoices` 不为空 → `ConstellationDialog` 自动弹出 → 玩家选 1 → `chooseConstellationPerk(perkId)` 写入 constellation 并清空 pending。
## 三、UI 组件
### 3.1 ConstellationPanel(星图标签内容)
**Canvas 动态渲染**requestAnimationFrame 60fps):
- 六边形布局 6 个星座中心点
- 每星座内 3 颗星(三角形排布:order 1 顶部,2/3 底部)
- **未解锁星**:暗灰小点 + 弱光晕
- **已解锁星**:类别色填充 + 强光晕 + 4 道十字光线 + 闪烁动画
- **同星座已解锁星之间**:连接线(类别色 60% 透明度)
- **星座 → 中心星核**:虚线(已解锁 ≥1 时显示,呼吸效果)
- **中心星核**:紫红色径向渐变,半径随时间正弦呼吸
- **Hover**:星点 14px 范围内显示 tooltip(天赋名/描述/类别/序号)
**底部信息区**
- 6 类别图例条(彩色圆点 + 名称 + 已解锁/总数)
- 已解锁天赋列表(彩色边框 + 名称 + 描述 + 类别标签)
- 空状态:虚线边框卡片 + 引导文案
### 3.2 ConstellationDialog(飞升后 draft 模态)
- 自动 open`pendingPerkChoices` 非空时
- 3 张卡片:左侧类别色条 + 圆形首字图标 + 天赋名 + 类别徽章 + 描述
- 选中动画:8 个粒子 ping + 卡片缩放 + 类别色发光
- 「重新抽取」按钮:rerollPerkChoices(依然保证 3 不同类别)
- 底部说明:「选择后永久保留,跨周目生效」
### 3.3 顶部「觉醒」按钮
`pendingPerkChoices` 存在时显示,fuchsia 边框 + animate-pulse,点击打开 ConstellationDialog。
## 四、平衡设计
### 4.1 单天赋强度
- 每个天赋加成约 +15%~+25% 单项,避免数值膨胀
- 「飞升礼包」给前期起飞资源(30 晶体 + 5 洞见)
- 「全息共振」给全局 +8%,作为终极通用天赋
### 4.2 跨周目叠加
- 18 个天赋全解锁 ≈ 总加成 200%~300%(与 6 蓝图、14 成就叠加后约 5x~8x)
- 配合飞升次数加成(每次 +15% 探险力、+10 生命),后期探险胜率显著提升
### 4.3 类别多样性
- `rollPerkChoices` 第一轮强制不同类别,避免 3 选全是同类
- 玩家可在 6 类别间自由构建:采矿流/解码流/探险流/速飞升流/经济流/全能流
## 五、QA 验证记录
| 测试项 | 结果 |
|--------|------|
| 星图标签页渲染 | ✅ 6 类别图例 + Canvas + 空状态 |
| 对话框自动弹出 | ✅ pendingPerkChoices 设置后立即开 |
| 3 卡片显示 | ✅ 来自 3 不同类别 |
| 点击天赋 | ✅ constellation 添加,crystalsPerSec 提升,pending 清空 |
| 重新抽取 | ✅ 3 张新卡片(依然不同类别) |
| 多天赋叠加 | ✅ c_min_1+c_con_1 → 产能 1.416 / 接触率 1.2 |
| 6 类别成就触发 | ✅ 六分星辉 Toast 弹出 |
| VLM 视觉确认 | ✅ 单星点亮(绿色永动矿脉) |
| lint | ✅ 零错误 |
| 编译 | ✅ < 200ms |
## 六、与既有系统的协同
```
飞升(Prestige)
┌─────────┼─────────┐
▼ ▼ ▼
蓝图+ 星图天赋+ 成就+
(5%/3%/4%) (各天赋) (各成就)
│ │ │
└─────────┴─────────┘
recomputeStats()
┌─────────┼─────────┐
▼ ▼ ▼
产能 解码奖励 探险力/生命
星潮修饰(即时乘)
实际游戏体验
```
## 七、后续扩展方向
- **天赋觉醒动画**:选择天赋时全屏闪光 + 星图缩放
- **天赋重置**:消耗稀有资源重置 constellation,重新选择
- **隐藏天赋**:达成特殊条件解锁(如「飞升 10 次自选 1 天赋」)
- **天赋树依赖**order 2 需要 order 1 解锁(增加构建深度)
- **socket 同步**:多人共享同一星图,协作解锁