下载 App
10/20
#聚光灯gamejam开发者日志06
《灰烬回响》
· 机制扩容与收尾:让残留"活起来",让游戏"能交付"
昨日遗留
Day 5 Boss 战闭环了,但核心机制还有四个明显短板:残留是静态的(玩家只能"等反应")、反应只有伤害型、单局没有分支、升级卡之间没有协同。另外 Boss 技能音效还欠着(脉冲爆发只有视觉没有声音),暂停和音量控制也都没做。这一篇把设计稿落地,再把收尾的体验层补齐。
完成内容
1. 残留生命周期三阶段
残留不再是一个"生下来就一样"的圆,它开始有自己的生命曲线:
| 阶段 | 时间 | 表现 |
|---|---|---|
| 新生 | 0 ~ 2s(按残留寿命缩放) | 体积 50%、不造成伤害、不参与任何反应 |
| 稳定 | 2 ~ 6s | 正常大小、正常伤害 |
| 衰变 | 最后 2s | 体积 75%、伤害减半、颜色变暗 |
- 新生残留不参与配对是刻意设计:刚死的敌人留下的残留不能立刻被旁边的残留吃出反应,于是玩家多出了"把它挪开、等它长熟"的时间窗
- 顺手补了一张「速生残留」卡(成熟速度 ×1.8)——3 秒的等待对割草节奏来说太长,得给一条缩短它的路
2. 残留可以被搬动了(4 种手段)
以前残留是钉在地上的,玩家只能"挑位置站桩等它们撞"。现在有四条路把它当棋子推:
| 手段 | 触发方式 | 效果 |
|---|---|---|
| 风残留推残留 | 自动 | 风残留每帧推动周围的非固定残留漂移 |
| 拖曳冲刺 | 升级解锁 | 冲刺穿过的残留挂到身后,1.5s 后释放 |
| 回响脉冲 | 技能 | 240px 内的残留先被拉向玩家,再贪心配对引爆 |
| 连锁踢击 | 升级解锁 | 击杀点在残留范围内时,把残留朝击杀方向踢出去 |
- 四条路全都寄生在既有操作上:冲刺本来就有、脉冲本来就有、击杀本来就有。没有新增任何需要玩家记的按键
3. 残留浓度 1 ~ 3 级
同一位置反复生成会叠加浓度,让"往一个点上砸残留"变成一种能被规划的 payoff:
- 1 级:正常
- 2 级:效果 ×1.5、反应伤害 ×1.3、光晕变亮
- 3 级:效果 ×2、反应伤害 ×1.6、脉冲闪烁;持续 3 秒后熔断
4. 地形改造类反应 ×3(同元素高浓度触发)
- 熔岩地表(火+火,5s):敌人经过 3/s,玩家经过回血
- 冰墙(冰+冰,2s):实体阻挡敌人,可被击碎
- 毒沼(毒+毒,6s):敌人减速 50% + 每秒叠毒
5. 敌人改造类反应 ×2
- 点燃:火+冰的蒸汽作用于敌人时,敌人燃烧 3s,死亡时必留火残留
- 腐蚀标记:毒+雷的腐蚀电场命中敌人时标记 6s,该敌人死亡时生成双倍残留
这两条把反应从"打伤害"升级成"改敌人"——反应的结果可以被计划进下一波。
6. 玩家增益类反应 ×2
- 回响护盾:雷+光在玩家 2.5 格内触发 → +1 护盾
- 疾行:风+光在玩家附近触发 → 移速 +30% 持续 3s
7. 流派标签 + 被动(Build 协同)
25 张老卡全部打上流派标签,再补 9 张同源卡:
| 流派 | 集齐 3 张的被动 |
|---|---|
| 引爆流 | 反应伤 +20%、浓度上限 +1 |
| 搬运流 | 残留移速 +50%、脉冲 CD -6s |
| 寄生流 | 敌死亡残留概率 +30%、击杀回血 +5 |
- 升级抽取改成「1 核心 + 2 填充」:第一张必定与已选流派相关,后两张随机;还没定流派时回退到前几级的 A 类兜底
8. 禁忌升级 ×3(高收益换高风险)
- 燃尽:反应伤 +60%,生命上限 -30%
- 孤注:攻击 +50%,再也无法获得护盾
- 毒瘾:中毒对敌伤害 ×2,自己也吃双倍中毒
9. 新敌人 ×3 + 元素护甲
- 引燃者(火):主动走向最近的非火残留并引爆它
- 净化体:缓慢走向残留,把它抹除
- 共鸣体:死亡时复制周围残留的元素类型
- 敌人元素护甲:火甲受火伤减半、受冰伤 ×1.5——"先杀谁"第一次变成战术问题
10. 地图:固定地形 + 可破坏物
- 固定残留地形 4 处(开局生成,永不消失,不参与浓度叠加)
- 可破坏物 3 种:木桶 → 火残留、石柱 → 冰、罐子 → 毒
11. 两种新模式
- 连锁挑战(3 分钟):场上预置 64 个残留、完全不刷怪。考的是"用最少的攻击打出最多的反应",结算会显示单次最大连锁、总反应数、总击杀
- 残局生存(5 分钟):开局即 8 分钟难度(难度曲线直接 +420 秒),自带 3 次免费升级
12. 音效全量补齐(Day 5 欠的债,连本带利还)
之前只有 6 条反应的独立音色,战斗里大量事件是静音的。一口气补了 10 条,全部用 WebAudio 现场合成,零资源文件:
| 音效 | 触发场景 | 合成思路 |
|---|---|---|
| shield | 获得护盾 | 方波短促上扫 + 低通,金属感 |
| shieldBlock | 护盾挡下伤害 | 噪声爆点 + 高通,"叮"的脆响 |
| freeze | 冰反应冻结 | 正弦波下滑 + 混响尾巴,冰冷感 |
| bossSpawn | Boss 出现 | 低频正弦持续 1.2 秒渐强,压迫感 |
| bossRage | Boss 狂暴 | 失真方波三连击,警告意味 |
| death | 玩家死亡 | 噪声爆点 → 低通衰减 2 秒,下坠感 |
| explode | 回响脉冲引爆 | noiseBurst() 白噪声 0.4 秒 + 带通滤波 |
| heal | 回复生命 | 两个正弦波叠加(根音+五度),温暖 |
| uiClick | 按钮点击 | 极短方波 80ms,不打扰 |
| gameStart | 开局点燃 | 正弦上扫 + 噪声尾,仪式感 |
- 新增 noiseBurst(dur, freq, q) 辅助函数:生成带通滤波白噪声,爆炸类音效全靠它,比手动拼振荡器省一半代码
- Boss 出现现在有声音了——Day 5 那个"只有视觉没有声音"的脉冲爆发终于闭环
13. 主音量控制
- 新增 masterVol 全局变量,所有 beep() 和 noiseBurst() 走统一增益节点
- 主菜单、暂停、结算、升级四个界面都加了音量滑块,拖到 0 就是静音
- 持久化到 localStorage.ash_masterVol,下次打开记住上次的音量
- 这是被试玩者抱怨最多的一条——"音效太响/太轻"现在玩家自己说了算
14. 暂停功能
- 新增 #pauseScreen 覆盖层,Esc 或暂停按钮呼出,游戏主循环冻结
- 两个按钮:继续游戏 / 退出到主菜单
- 暂停时恢复系统光标;继续时切回游戏内准星
- 暂停覆盖层复用了升级弹窗的遮罩样式,视觉一致
15. 最终平衡收尾
| 改动 | 原值 | 新值 | 理由 |
|---|---|---|---|
| 投射物命中残留概率 | 20% | 35% | 前期残留铺得太慢,提升后玩家更主动射击 |
| 电涌移速 | 3.0 | 2.7 | 电涌太快,冲刺都躲不开,降一点给反应窗 |
| 冲刺倍率 | 2.4 | 2.1 | 冲刺倍率过高导致位移不可控,2.1 更跟手 |
- 这三个数是最后一轮试玩定下来的,改完后三模式都能稳定通关,不会出现"某模式根本打不过"的情况
设计笔记
- 浓度 3 的"熔断二选一"是最纠结的一处。设计稿里"浓度 3 自爆"和"同元素高浓度 → 地形反应"是两条并列规则,但它们在同一时刻争夺同一个残留的结局。最后的处理:有对应因果律就转成地形,没有就自爆。这样一来,"解锁反应"从"多一个伤害来源"变成了"改变残留的结局",Rules 层的选择第一次有了世界观的分量
- "新生残留不参与反应"把"等反应"变成了"造反应"。Day 1 时残留一落地就和邻居炸了,玩家是观众;现在有 2 秒窗口期,配合拖曳冲刺和连锁踢击,玩家第一次可以主动布局——把新生残留搬到远处养熟,再把熟透的残留踢进人堆
- 搬运手段全都寄生在既有操作上,一个按键都没加。这是 Day 5 做 Boss 反制时得到的经验:好的新机制应该是"你玩到这里时已经会的东西"
- 音效是最后一块拼图,但拼上之后体感完全不同。静默核心出现时有低频压迫音、玩家死亡有下坠噪声——同一个 Boss 战,有声音和没声音是两个游戏
- 收尾阶段的工作量远大于预期。核心机制写完只占 60%,剩下 40% 全是"让别人也能舒服地玩":音量、暂停、音效。这些东西一行核心玩法都没加,但没有它们游戏就不完整
踩坑
- 固定地形必须排除出所有"清理"和"推动"路径:日常残留数量上限裁剪原本会把它一起裁掉;风推、脉冲拉拽、连锁踢击、拖曳冲刺也都会把它推走。四处都补了 !z.fixed 判断,zoneStage(fixed) 直接返回"稳定"。这类"新增了一种特殊对象,却没回头把旧逻辑里的遍历都过一遍"的坑,和 Day 4 的 Boss 被裁掉是同一个病
- 浓度提示刷屏:第一版只要发生合并就弹 toast,同一个点上叠三级会连弹三条。改成记录合并前的等级,只在"首次升到 3 级"弹一次并启动熔断计时
- 残局生存的难度曲线:模式复用主线的刷怪函数,只要把"本局已运行时间"抬到 420 秒就能整段跳过前期——不用改任何敌人数值,一个变量搞定
- 连锁挑战"不刷怪"得加守卫:spawnWave 不知道模式,得加 if(game.mode !== 'chain') 才刷常规敌人,否则 3 分钟挑战瞬间变回普通局
- 音量滑块要在四个界面都放:一开始只在主菜单放了,结果进游戏后想调音量只能退回去。暂停界面、升级界面、结算界面各放一个,任何时候都能调
- 暂停时必须恢复系统光标:游戏中 cursor:none 用自绘准星,暂停时如果不恢复,连"继续游戏"按钮都点不到
- 反噬状态字段和普通敌人状态冲突:Boss 复用了普通敌人的 lit(光残留易伤)字段,反噬光残留时直接改它会被每帧的残留判定覆盖。新增了独立的 burnT / chill / litT / exposed 计时器字段,普通敌人逻辑和 Boss 反噬互不干扰
数字一览
- 升级卡:25 → 34(+3 地形因果律、+速生、+拖曳冲刺、+连锁踢击、+3 禁忌)
- 反应:12 → 16(+疾行、+熔岩地表、+冰墙、+毒沼)
- 敌人:6 → 9(+引燃者、+净化体、+共鸣体)+ 6 种元素护甲
- 残留:生命周期 3 阶段 · 浓度 1 ~ 3 级 · 搬运 4 手段 · 地形产物 3 种 · 固定地形 4 处 · 可破坏物 3 种
- 模式:1 → 3(主线 / 连锁挑战 / 残局生存)
- 音效:6 → 16 条(+10)· noiseBurst() 辅助函数
- 新增:主音量控制(4 个界面滑块)· 暂停功能
- 平衡:投射物残留 20%→35% · 电涌移速 3.0→2.7 · 冲刺倍率 2.4→2.1
- 代码量:约 2200 行(单文件)
- 三模式浏览器实测:无运行时错误,HUD、击杀计数、升级三选一均正常
写在最后
从 Day 1 的"让战场自己燃烧"到今天,这个单文件原型走了六天。核心机制(残留反应)从第一天就在,后面所有内容都是围着它长出来的——生存层是为了让玩家敢靠近残留、Boss 反噬是为了让残留反过来咬 Boss、搬运手段是为了让玩家主动布局残留。一个好的核心机制值得反复围绕它做文章,而不是不停往游戏里塞新系统。
设计稿里还有构筑挑战、BossRush、地图事件三块没做,但这个版本已经足够完整——三种模式、完整 Boss 战、34 张升级卡、16 条反应、16 条音效。能玩、能停、能调音量。
灰烬回响,到此为止。













