21 KiB
21 KiB
回响星核 / Echo Nexus — 开发工作日志
持续性任务的工作交接文档。每个阶段更新,避免进度丢失。
项目当前状态描述 / 判断
- 阶段:v0.5.1 已完成(游戏已上线 Gitea Pages + 新手教程系统 + UI 优化)
- 在线游玩:https://gitea-pages.atdunbg.xyz/Super_Z/echo-nexus/
- 已完成:
- 游戏市场调研(多源交叉验证,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:深空信标(每日挑战 + 本地排行榜 Top20 + 7 标签页 + 编年史历史 BUG 修复)
- v0.5.1:静态部署 Gitea Pages + 新手教程系统(7 步聚光灯引导)+ UI 间距优化
- 当前目标:回复 Issue #1 #28 + UI 进一步优化 + 云存档/云排行榜 + 全 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 存在时脉冲提示)+ 统计面板加星图天赋条目
- 音频:新增
constellationSFX(上升琶音 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 收尾(本轮提交)
- 推送 Gitea:3 个 commit(submodule 文档 + 主仓功能 + 清理)
- 回复 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(去重)resolveCurrentNodeBOSS 战胜利时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 深空信标 · 每日挑战 + 本地排行榜(本轮完成)
- QA 发现并修复编年史历史 BUG:v0.4 之前创建的编年史条目 lore 中显示
tide_ruins等原始键名而非「遗迹共振」(最新条目已修复,旧条目 lore 文本一次性生成未回填)。修复方案:新增regenerateLoreFromEntry(entry),在 ChronicleDialog 显示时从 entry 结构化数据重新生成 lore,保证历史与未来条目命名一致 - 新功能:深空信标系统(
src/lib/game/beacon.ts~290 行 +src/components/game/BeaconPanel.tsx~280 行)- 每日挑战:基于 UTC 日期 key 的 FNV-1a 种子 → mulberry32 PRNG,确定性生成(同一天全球同一挑战)
- 5 种挑战类型:解码协议 / 远征指令 / 脉冲任务 / 猎杀契约 / 洞见采集
- 3 档难度(加权):常规信标 ×1.0(55%) / 异常波动 ×1.6(33%) / 奇点回响 ×2.4(12%)
- 得分公式:完成度 × 1000 × 难度倍率 + 速度奖励 max(0, 500 - 用时秒×0.5)
- 进度追踪:独立 localStorage(
echo-nexus-beacon-prog-v1),不污染 GameState;在 pulse/clickNode/autoDecodeTick/resolveCurrentNode 后调用trackBeacon(type, delta) - 本地排行榜:Top 20,按得分降序,奖牌图标(金/银/铜)+ 难度色点 + 今日记录高亮
- 倒计时:距 UTC 次日 0 点 HH:MM:SS,每秒更新
- Store 接入(
gameStore.ts):- 新增
trackBeacon()模块级辅助函数(按今日挑战类型增量更新) - 新增
grantBeaconReward(insights, contact)action(领取时发放奖励到 GameState) - pulse / clickNode 完成 / autoDecodeTick / resolveCurrentNode(探险结束/BOSS击破/洞见获取)后接入 trackBeacon
- 新增
- UI 接入(
page.tsx):- 第 7 个标签页「信标」(grid-cols-6 → grid-cols-7)
beaconClaimable状态(2s 轮询,可领取时标签页显示绿点)- StatsPanel 新增「信标最高分」行
- 版本号 v0.4 → v0.5
- UI 设计细节:
- 挑战卡片:难度色渐变背景 + 呼吸光动画(beacon-glow keyframes)+ 双层脉冲环动画(beacon-pulse-ring)
- 进度条带难度色填充
- 排行榜行:奖牌图标 + 难度色点 + 类型名 + 完成标记✓ + 用时 + 得分(难度色)
- 难度图例三档横排
- QA 验证(agent-browser + VLM):
- 编年史历史 BUG 修复:第二纪元 lore 现正确显示「遗迹共振、晶体潮、虚空低语、谐振风暴」
- 信标标签页渲染:挑战卡片 + 倒计时 08:47:12 + 难度图例齐全
- 进度追踪:解码 1 颗晶体 → 洞见采集进度 0→12
- 领取流程:完成 → 领取按钮亮 → 点击 → contact +5.1(13.47→18.57)→ 排行榜生成条目「1m30s 1.46K」→ 按钮变「已领取」
- 统计面板「信标最高分」行显示 1.46K
- 可领取时标签页绿点提示
- VLM 视觉评估:高美观度,颜色搭配佳,无重叠 bug
- 全系统回归:探险/解码/星潮/成就/星图/编年史均正常
- lint 零错误;HTTP 200;编译 < 250ms
- 详见 docs/repo/docs/10-深空信标系统-v0.5.md
v0.5.1 静态部署 + 新手教程系统 + UI 优化(本轮完成)
- 里程碑:游戏正式上线 Gitea Pages! 玩家无需下载编译,直接访问 https://gitea-pages.atdunbg.xyz/Super_Z/echo-nexus/ 即可游玩
- 背景:回应 Issue #1 评论 #28(atdunbg 反馈"如何游玩?需要教程?UI 太紧凑遮挡字体")
- 静态导出配置(
next.config.ts):- 环境变量
BUILD_EXPORT=true切换output: export(dev 不受影响) basePath: /Super_Z/echo-nexus+trailingSlash: true适配 Gitea Pages 子路径images.unoptimized: true(静态导出禁用图片优化)- 移除
src/app/api/route.ts(静态导出不支持 API routes) - 新增
bun run build:static脚本 out/.nojekyll防 Jekyll 忽略_next目录
- 环境变量
- Gitea Pages 部署流程:
bun run build:static→cd out && git init -b gh-pages→git push -f origin gh-pages - 新功能:新手教程系统(
src/lib/game/tutorial.ts+src/components/game/TutorialOverlay.tsx)- 7 步引导:欢迎 → 脉冲扫描 → 谐振解码 → 技术树 → 遗迹探险 → 飞升 → 完成
- 聚光灯高亮:4 块 div 挖洞遮罩 + 目标元素呼吸光边框(
tut-pulsekeyframes) - 动作检测:rAF 轮询 store 状态,检测 pulse/decode-start/tech-buy/expedition-start 自动推进
- 提示气泡:紫粉渐变边框 + 顶部三色装饰条 + 步骤进度条(1/7)+ 上一步/跳过/下一步按钮
- 首次自动弹窗:localStorage
echo-nexus-tutorial-v1标记,600ms 延迟等 mount - 设置重看:SettingsDialog 新增"重看教程"按钮,dispatch
echo-nexus-tutorial-restart事件
- UI 优化(基于 VLM 视觉分析):
- ResourceBar 间距:
gap-2 → gap-x-3/4,分隔线改渐变透明→白→透明,shrink-0防图标挤压,whitespace-nowrap防文字断行,tabular-nums数字等宽对齐 - SettingsDialog:新增"在线游玩"gitea-pages 链接(绿色高亮)+ 教程重看卡片
- globals.css:新增
tut-pulse+tut-pop-in动画 keyframes
- ResourceBar 间距:
- data-tut 属性锚点:crystal-orb / decode-panel / tab-expedition / tab-tech / prestige-btn
- QA 验证(agent-browser + VLM,部署站点):
- 静态站点 HTTP 200,HTML 完整,资源路径含 basePath 正确
- 首次访问教程自动弹出(hasWelcome:true, hasNext:true)
- 点击"下一步"→ 步骤 2/7,高亮聚焦框框住中央晶体球(VLM 确认 8/10)
- 点击"跳过"→ 教程关闭,游戏正常加载
- 设置→重看教程→ 弹窗重新打开回 1/7
- VLM 确认弹窗位置合理、遮罩半透明、紫色高亮边框、按钮清晰
- 核心交互(点击晶体 +8)正常
- lint 零错误(修复 2 处 react-hooks/set-state-in-effect,改用 rAF 异步轮询)
- Gitea 推送:2 个 commit(main 源码 + gh-pages 静态资源)
- dev 服务器 Turbopack 缓存不稳定问题:偶发
Unable to open static sorted file+ 进程被杀,需rm -rf .next重启。静态导出构建稳定可靠
进行中
- 持续迭代:云存档+云排行榜(v0.5+)、全5纪元手写叙事节点(v0.5+)、socket 多人同步星潮(后续)
- 回复 Issue #1 #28:告知已上线 Gitea Pages + 教程系统 + UI 优化
未解决问题或风险 / 下一阶段优先事项
- v0.3 星潮为单机版(原计划 socket 全局事件),后续可扩展为多人同步
- v0.5 信标排行榜为本地版(纯 localStorage),后续 v0.5+ 升级为云排行榜需后端 API
- v0.5 每日挑战仅 1 个/天,后续可加入"周挑战"或"信标链"(连续完成 N 天奖励)
- Issue #1 玩家反馈已通过 v0.3 星潮 + v0.3.1 星图 + v0.4 编年史 + v0.5 信标 + v0.5.1 教程+上线 五层回应
- v0.2 探险 BOSS 战胜率较低(基础探索力 10 vs BOSS 难度 5-7,胜率约 25%),需玩家投资探险技术
- 探险能量恢复较慢(45s/点),后续可加技术提升恢复速度
- 编年史上限 50 条,超过自动丢弃最早的;v0.4 之前的飞升无回填(空状态有对应提示)
- 5 纪元叙事内容目前为模板化生成,v0.5+ 将加入手写剧情节点
- dev 服务器 Turbopack 缓存偶发损坏,静态导出构建更稳定
- 下一阶段优先:
- 回复 Issue #1 #28(atdunbg 等待游玩方式答复)
- UI 进一步优化(标签页图标/文字比例、视觉层次强化)
- 云存档+云排行榜(v0.5+)
- 全 5 纪元手写叙事节点(v0.5+)
- socket 多人同步星潮
定时任务
- 已设置:每 15 分钟 webDevReview(自动 QA + 迭代开发,job_id: 227909,fixed_rate 900s)