# 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 同步**:多人共享同一星图,协作解锁