172 lines
6.9 KiB
Markdown
Executable File
172 lines
6.9 KiB
Markdown
Executable File
# 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 同步**:多人共享同一星图,协作解锁
|