Files
echo-nexus/worklog.md
T

165 lines
14 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.
# 回响星核 / Echo Nexus — 开发工作日志
> 持续性任务的工作交接文档。每个阶段更新,避免进度丢失。
---
## 项目当前状态描述 / 判断
- **阶段**:v0.4 已完成(回响编年史系统 + 飞升 BUG 修复)
- **已完成**
- 游戏市场调研(多源交叉验证,2024-2026 数据)
- GDD 游戏设计文档(世界观、核心循环、六大系统、MVP 范围)
- 技术架构设计(栈选型、目录结构、状态模型)
- Gitea 仓库 `Super_Z/echo-nexus` 已创建,文档已推送
- v0.1 MVP:放置采矿 + 解码共振谜题 + 技术树 + 记忆图谱 + 飞升 + 统计
- v0.1.1:解码可解性修复(路径构造法生成器)
- v0.2:遗迹探险肉鸽系统(能量/探险力/6 节点/程序化路径/BOSS)
- v0.2.1:程序化音频 + 14 项成就 + 视觉打磨
- v0.3:星潮事件系统(6 种星潮 + 全屏叠层 + 程序化音效)
- v0.3.1:星图天文台元进程(6 类 × 3 = 18 天赋 + 飞升后 3 选 1 draft + Canvas 星图)
- **v0.4:回响编年史**(5 纪元循环命名 + 模板化叙事 + 时间轴 UI + 6 项新成就 + 飞升 BUG 修复)
- **当前目标**:v0.5 云存档+排行榜 + 全 5 纪元手写叙事节点
- **技术栈**Next.js 16 + TypeScript + Tailwind + shadcn/ui + Canvas + Zustand
## 游戏核心概念(一句话)
深空考古放置策略游戏:自治无人机采矿→解码记忆晶体(原创共振谜题)→拼凑碎片叙事→飞升多周目。差异化:解码谜题驱动叙事涌现,全息晶体+深空粒子美学。
## 当前目标 / 已完成的修改 / 验证结果
### 已完成
- 调研报告、GDD、技术架构文档 → 已提交 Gitea
- v0.1 MVP 实现:放置采矿 + 解码共振谜题 + 技术树 + 记忆图谱 + 飞升 + 统计
- 仓库地址:https://git.atdunbg.xyz/Super_Z/echo-nexus
### v0.1.1 解码系统修复(用户反馈「大量无法通过」)
- **根因**generatePuzzle 随机填色未保证有解,产生大量死局
- **修复**:路径构造法生成器(100% 可解率)+ isSolvable 精确检测 + undoStep 撤销 + 卡死提示横幅 + canStartFrom 可行起点高亮 + 旧存档兼容
- **验证**3000/3000 可解;agent-browser T1/T2 端到端通过;死路检测/撤销/可行起点高亮全部准确
- 详见 docs/repo/docs/04-解码系统修复-v0.1.1.md
### v0.2 遗迹探险肉鸽系统(本轮完成)
- **新功能**:能量系统(3/5, 45s恢复) + 探险力/生命 + 6种节点类型(战斗/宝藏/抉择/解谜/休整/BOSS) + 程序化路径(5-7节点) + 实时奖励 + 失败保留 + 主动撤退 + 探险日志
- **配套修复**:HP clamp + 探险奖励绕过仓库上限 + 仓库满仓UX警告 + 闲置产能上限优化
- **UI**:探险标签页(入口态/进行态) + 节点路径图可视化 + 事件卡 + 生命/能量条
- **验证**:全流程通过(出发→探索→前进→BOSS→结束),奖励绕过cap验证(101>50)HP clamp验证
- 详见 docs/repo/docs/05-遗迹探险系统-v0.2.md
### v0.2.1 程序化音频 + 成就系统 + 视觉打磨(本轮完成)
- **QA 结论**:v0.2 全系统稳定,解码/探险/技术树/通知均正常,无 bug,故推进新功能
- **程序化音频系统**`src/lib/game/audio.ts`):Web Audio API 零资源文件,15 种音效(脉冲/解码按色变调/探险/飞升/成就/界面),受 soundOn 开关控制,首次交互后初始化 AudioContext
- **成就系统**`src/lib/game/achievements.ts`):14 项成就,跨周目永久产能/洞见加成,Toast+音效通知,每秒由主循环检测
- `GameState.achievements` 新字段;`recomputeStats` 聚合三层加成(技术+蓝图+成就)
- 旧存档兼容:init() 补全 achievements={}
- UI:5 列标签栏新增「成就」页 + AchievementsPanel + AchievementNotifier
- **视觉打磨**:脉冲粒子爆发(6-12粒子径向发散) + 扩散环 + 浮动数字按连击变色(绿→紫→琥)
- **Gitea 工单**:处理 Issue #1「就一直连连看?」——回复说明 6 大玩法层 + 路线图
- **验证**agent-browser 全流程通过;成就 3/14 解锁;lint 零错误;HTTP 200
- 详见 docs/repo/docs/06-音频与成就系统-v0.2.1.md
### v0.3 星潮事件系统(本轮完成)
- **动机**:回应 Issue #1「玩法单一」反馈,为放置循环注入动态变化
- **6 种星潮**`src/lib/game/starTide.ts`):晶体潮(产能×2)/谐振风暴(解码×1.6)/遗迹共振(探险+5力+30血)/虚空低语(洞见×2)/星核悸动(接触×3脉冲×2)/寂静期(产能×0.5,结束补偿洞见)
- **触发**:首次 30s,常规间隙 40s,持续 75s,权重抽取,飞升重置
- **修饰器应用**:产能/脉冲/解码奖励即时乘;洞见/接触率进 recomputeStats 缓存;探险力/血量即时加
- **UI**`src/components/game/StarTide.tsx`):顶部指示器芯片(图标+名称+倒计时) + 全屏背景叠层(色带+呼吸光) + Toast通知 + Footer联动
- **音效**tideStart(神秘扫频) + tideEnd(柔和消退),程序化合成
- **QA**agent-browser 全流程通过(触发/指示器/叠层/寂静期补偿 50→81 洞见);VLM 视觉确认;lint 零错误
- 详见 docs/repo/docs/07-星潮事件系统-v0.3.md
### v0.3.1 星图天文台 · 元进程天赋系统(本轮完成)
- **动机**:再次回应 Issue #1「就一直连连看?」——加入 Slay the Spire 式飞升后 3 选 1 天赋 draft,跨周目永久生效,增加策略深度 + 视觉变化
- **核心模块**`src/lib/game/constellation.ts`):
- 6 大星座 × 3 颗星 = **18 个天赋**:永动矿脉(翠)/光谱矩阵(玫)/远征星图(琥)/接触回响(紫)/虚空市场(灰)/宇宙回响(金)
- `constellationBonuses()` 聚合 19 项修饰器(产能/上限/脉冲/洞见/解码步数/自动解码周期/探险生命/探险力/能量上限/接触率/飞升门槛/蓝图全属性/离线效率/T2T3概率/星潮间隙/飞升礼包/解码奖励/全局产能)
- `rollPerkChoices()` 智能抽取:保证 3 个来自不同类别
- `getConstellationLayout()` 六边形布局 + `getStarsInCategory()` 三角形排布
- **状态扩展**`types.ts` + `config.ts`):`GameState.constellation: string[]` + `pendingPerkChoices: string[] | null`
- **引擎接入**`engine.ts`):`recomputeStats` 聚合三层加成(技术+蓝图+成就+星图);`performPrestige` 触发天赋选择 + 飞升礼包补偿;新增 `rollCrystalTierWithBonus()`
- **探险系统接入**`expedition.ts`):`computeExpeditionPower` + `computeExpeditionHp` 应用星座修饰器
- **Store 接入**`gameStore.ts`):
- 新增 `chooseConstellationPerk(perkId)` + `rerollPerkChoices()` 动作
- `tickTide` 应用星潮间隙缩减;`autoDecodeTick` 应用周期缩减;`tick` 应用 T2/T3 概率补偿;`clickNode`/`autoDecodeTick` 应用解码奖励倍率
- 旧存档兼容:init() 补全 constellation=[] / pendingPerkChoices=null / energyMax 加成
- **UI 组件**
- `ConstellationPanel.tsx`:Canvas 动态星图(六边形 6 星座 × 3 星点,闪烁/光晕/十字光线/连接线/中心星核呼吸)+ Hover 提示 + 类别图例 + 已解锁列表
- `ConstellationDialog.tsx`:飞升后自动弹出,3 卡片 draft + 重新抽取 + 选中粒子动画
- `PrestigeDialog.tsx`:增加「星图觉醒预告」卡片
- `page.tsx`:6 列标签栏(探险/技术/星图/图谱/成就/统计)+ 顶部「觉醒」按钮(pendingPerkChoices 存在时脉冲提示)+ 统计面板加星图天赋条目
- **音频**:新增 `constellation` SFX(上升琶音 C5→E5→G5→C6 + 高频闪光 2093Hz
- **成就**:新增 2 项 —— `ach_constellation_1`「星图初绘」(+30 洞见·产能+5%) / `ach_constellation_6`「六分星辉」(产能+12%·洞见+12%)
- **QA 验证**agent-browser + VLM):
- 星图标签渲染正确,6 类别图例齐全
- 设置 pendingPerkChoices 后对话框自动弹出,3 卡片显示不同类别
- 点击天赋 → constellation 数组增加,crystalsPerSec 提升,pending 清空,对话框关闭
- 重新抽取 → 3 张新卡片(不同类别)
- 多天赋叠加:c_min_1 + c_con_1 → crystalsPerSec 1.416, contactRateMult 1.2
- 6 类别各 1 天赋 → 自动解锁「六分星辉」成就(Toast 弹出)
- VLM 视觉确认:星图 Canvas 渲染正确,单星点亮(绿色永动矿脉)
- **lint 零错误;HTTP 200;编译 < 200ms**
- 详见 docs/repo/docs/08-星图天文台系统-v0.3.1.md
### v0.3.1 收尾(本轮提交)
- 推送 Gitea3 个 commitsubmodule 文档 + 主仓功能 + 清理)
- 回复 Issue #1:列出 6 大玩法层 + v0.3.1 新增 + 路线图
- 暴露 dev 期 store 调试钩子 `window.__gameStore`(仅 non-production
- 目标提示增加星图天赋引导(飞升后觉醒时显示)
### v0.4 回响编年史 · 跨周目叙事时间轴(本轮完成)
- **QA 发现关键 BUG 并修复**PrestigeDialog 的 `disabled={newBp <= 0 || confirming}` 逻辑错误——`confirming=true` 后按钮被永久禁用,玩家**永远无法完成飞升**!修复为 `disabled={confirming && !canReconfirm}` + 900ms 冷却窗口
- **修复 UX**`newBp=0` 时不再永久禁用飞升按钮(v0.3.1 星图+v0.4 编年史已为飞升提供动机),按钮文字改为「飞升(无新蓝图)」
- **新功能:回响编年史**`src/lib/game/chronicle.ts` + `src/components/game/ChronicleDialog.tsx`
- 每次飞升自动铭刻一条 ChronicleEntry,记录纪元名/持续时间/解码数/技术数/探险数/BOSS 击破/星潮列表/天赋觉醒/里程碑
- 5 纪元循环命名(第一纪元·觉醒之晨 → 第五纪元·起源重述),朝 v0.5 全 5 纪元叙事推进
- 模板化 lore 生成:开场 → 核心活动 → 星潮段落 → 觉醒段落 → 里程碑 → 收尾
- 9 种里程碑检测:首次飞升/首杀 BOSS/单周目解码 10+/30+/技术狂人/星潮亲历者/星图六分/星图十二宫
- RunStartSnapshot 机制:飞升时快照当前累计计数,新周目 delta = 当前 - runStart
- **状态扩展**`types.ts` + `config.ts`):`GameState.chronicle: ChronicleEntry[]` + `runStart: RunStartSnapshot` + `bossKills: number`(累计)+ `starTidesEncountered: string[]`(累计去重)
- **引擎接入**`engine.ts`):`performPrestige` 在重置前构建编年史条目,追加到 chronicle(上限 50),重置 runStart 为新周目快照
- **Store 接入**`gameStore.ts`):
- `init()` 调用 `migrateChronicleFields` 补全旧存档
- `tickTide` 新星潮触发时追加 `tide_${type}` 到 starTidesEncountered(去重)
- `resolveCurrentNode` BOSS 战胜利时 `bossKills++`
- `chooseConstellationPerk` 调用 `withPerks` 回填最近一条 entry 的 perksThisAscension 并重新生成 lore
- **UI 组件**`ChronicleDialog.tsx`):
- 顶部 BookOpen 图标按钮 + badge 显示条目数
- 全屏对话框,深紫黑渐变 + 顶部三色装饰条
- 顶部总览统计:飞升次数/BOSS 击破/星潮亲历
- 垂直时间轴:左侧渐变线 + 5 纪元循环色节点(翠/玫/琥/紫/金)+ 最新条目 ping 动画
- 卡片含:#编号 / 纪元名(textShadow 光晕)/ 时间戳+持续时长 / 衬线叙事文本 / 6 项统计芯片 / 星潮徽章 / 天赋徽章 / 里程碑徽章
- 入场动画:fade-in + slide-up,错峰 80ms
- 空状态:根据 ascensions 是否 > 0 显示不同提示
- **音频**:新增 `chronicle`G3+C4+G4+C5+G5 多层泛音深沉钟声)+ `chronicleOpen`(A4→D5→A5 翻页声);飞升成功延迟 600ms 触发 chronicle sfx
- **成就**:新增 6 项 —— `ach_chronicle_1`「首部编年」(+40洞见·产能+6%) / `ach_chronicle_3`「三纪元回响」(产能+10%·洞见+10%) / `ach_chronicle_5`「五纪元闭环」(产能+15%·洞见+15%) / `ach_boss_1`「首杀维度」(+25洞见·产能+4%) / `ach_boss_5`「维度猎手」(产能+10%·洞见+8%) / `ach_tides_all`「星潮亲历者」(产能+8%·洞见+8%)
- **统计面板**:新增 BOSS 击破/星潮亲历/编年史条目 3 行
- **QA 验证**agent-browser + VLM):
- 飞升 BUG 修复验证:第一次点飞升 → 900ms 冷却 → 第二次点击成功触发,星图觉醒对话框弹出
- 编年史条目创建验证:ascensions 1→2, chronicle 0→1;选天赋后 perksThisAscension=["c_cos_2"] 正确回填
- 多条目验证:第二次飞升后 chronicle 1→2,新条目 lore 正确使用「星核悸动」中文名(修复了 tide_ruins 显示 bug
- 5 纪元循环色正确显示(第二纪元玫色 / 第三纪元紫色)
- VLM 视觉评估 8/10:时间轴清晰、纪元颜色区分明显、信息密度合理、无瑕疵
- 成就解锁:ach_chronicle_1 + ach_prestige_3 自动检测通过
- **lint 零错误;HTTP 200;编译 < 250ms**
- **Gitea 推送**2 个 commit(主仓功能 + submodule 文档)
- 详见 docs/repo/docs/09-回响编年史系统-v0.4.md
### 进行中
- [ ] 持续迭代:云存档+排行榜(v0.5)、全5纪元手写叙事节点(v0.5)、socket 多人同步星潮(后续)
## 未解决问题或风险 / 下一阶段优先事项
- v0.3 星潮为单机版(原计划 socket 全局事件),后续可扩展为多人同步
- Issue #1 玩家反馈已通过 v0.3 星潮 + v0.3.1 星图 + v0.4 编年史三层回应,玩法深度显著提升
- v0.2 探险 BOSS 战胜率较低(基础探索力 10 vs BOSS 难度 5-7,胜率约 25%),需玩家投资探险技术;v0.4 新增「首杀维度」「维度猎手」成就提供动机
- 探险能量恢复较慢(45s/点),后续可加技术提升恢复速度
- 编年史上限 50 条,超过自动丢弃最早的;v0.4 之前的飞升无回填(空状态有对应提示)
- 5 纪元叙事内容目前为模板化生成,v0.5 将加入手写剧情节点
- 需持续关注 Gitea 工单(仓库 Issues)获取额外需求
- 下一阶段优先:云存档+排行榜(v0.5)、全5纪元手写叙事节点(v0.5)、socket 多人同步星潮
## 定时任务
- 已设置:每 15 分钟 webDevReview(自动 QA + 迭代开发,job_id: 227581
---