【开发者日志】第四篇:声音、顺序与第一局的两句话
#聚光灯gamejam开发者日志
大家好,我们是新人团队 EmbersStudio,第四篇开发者日志来了![[表情_可爱]](https://img-tc.tapimg.com/market/images/86e3f28f5dddd78c532e8c470622c845.png)
先说一件憋了很久的事:
游戏名定了,叫《深渊寻金》,英文名 AbyssRush![[表情_送花]](https://img-tc.tapimg.com/market/images/68b3dc8473df915ad2b85da5efef4f56.png)
本期进展
近几天,我们在做 Plan_4。这一段的目标很直白:把灰盒做成「好看、好懂、好爽」。前几期留下的三段空白,这一期总算补上了:音效、调序、新手引导😋
音效终于接上了
这件事说起来有点丢人:
audio/ 下面躺着 52 个音效和 4 首 BGM,而代码一行都没引用过它们。连锁音从 Day 3 起就是
ui/hud/chain_tone.gd 用代码合成的一段正弦波,注释里写着「正式音效接入后本文件整体删除」。这句话挂了五期,跟祖传 TODO 一样
![[表情_捂脸哭]](https://img-tc.tapimg.com/market/images/83aa452eea88b5c64df710bca367b7e9.png)
现在的结构是:音效名到文件的映射、事件到音效的映射、连锁升调参数,全部写在一张 JSON 表里(31 个音效、10 个事件、3 条音乐轨),播放器是一个 Autoload。要加一个音效不用改代码,往表里加一条、把文件放进 audio/sfx/ 就行。原来的占位音文件连同 HUD 里那个节点一起删掉了
顺手补了三音频总线:Master、Music、SFX。设置界面的音量滑条其实早就画好了,一直拖着没反应,因为那两条总线压根不存在,每次启动还会刷两条「音频总线 Music 不存在」的警告。现在 BGM 通过 Music 总线走,默认比音效低 6dB
有一条细节值得单独说:同一个音效 0.1 秒内不重复。这个限流是用挂钟时间算的,不是用 delta。因为我们给玩家的「倍速」写的是 Engine.time_scale,它只影响 delta;如果限流读的是 delta,×5 倍速下限流窗口会一起缩短 5 倍,连击时就是一片爆音。连锁的冷却与 1 秒超时窗口同理
调序从「伪机制」变成了真机制
我们跑批量仿真,结论是「顺序敏感性为 0」——同一副牌换任何顺序,六项数字连小数都一样。当时的原因很清楚:那三张牌分别监听三个不同事件,而执行顺序只在「同一个事件下挂了多张牌」时才有意义
十张牌进来之后,同一事件下撞车成了常态:「金币弹幕」和「金币治疗」都监听拾取金币。顺序这才真的会改变结果。所以我们补了调序接口,槽位现在可以拖动,也可以点两张牌交换(键盘和触屏没有拖放,留一条兜底路径)。暂停时也能调:以前暂停遮罩会把鼠标吃掉,点不到底下的槽位
第一局多了两句话
第一条在第一次连锁触发时弹:「你没有直接攻击,但规则自己连锁了」
第二条在连锁到 5 段时弹:「规则之间会互相触发,形成 Build」
这里的取舍值得记一笔。规划里同时写了「暂停游戏 0.5 秒」和「不阻塞操作超过 1 秒」,但一句 17 字的提示 0.5 秒是读不完的。设计上是先短暂停一下把玩家的注意力拉过来,然后战斗继续跑、提示慢慢自己消失;想快点跳过就点「知道了」,不想看就点「跳过引导」,从此不再弹(第一局打完也会自动关掉,设置界面里可以重新打开)
收口时补的两个洞
收口的时候我们对着验收清单逐条过,又发现两处漏的:槽位规划里要求显示图标、名称、冷却和触发次数,而我们只做了图标和冷却;暂停界面规划里要求能看规则牌详情、当前连锁、最高连锁、敌人数量和金币,而我们只有一个「继续」按钮
两处都补上了——槽位控件从 64×64 长成 64×88,下面 24 像素放名称和触发次数两行小字;暂停面板加宽,上半屏是本局统计和已装备规则牌的逐行详情
问题与风险
对于三套整局自测,早就红了,但没有被发现
在这几天,主菜单上线了:游戏不再一开机就开打,而是停在主菜单等玩家按一下。问题是
TestMain、
TestRun、
TestFloorManager 这三套用例还按「开局即开打」写。
Main 一进主菜单就把整棵树暂停、把 HUD 藏起来,于是这三套用例后面每一条断言都跑在一场冻结的战斗上。
TestMain 一次报 27 项失败,
TestRun 的「房间序列」直接是空的
![[表情_嫌弃]](https://img-tc.tapimg.com/market/images/3b98294830b76e0c70e2ce54eda41ab0.png)
关键在于:
它们不是被哪一次提交弄红的,是那一次改动之后,没有人再跑过全量。我们自己写的规范里写着「每加一条断言,先确认它真的会失败一次」,但那条规范管的是「新写的断言」,管不了「旧的断言在别人的改动下悄悄失效」
![[表情_冷漠]](https://img-tc.tapimg.com/market/images/e1e1b4338e93daed92ef8caccc555f42.png)
这一期之后我们多了一条:提交前跑全量,不要只跑自己改的那一套
第二条小一点但很烦:
BGM 到现在还是 WAV(4 首,源文件约 39.5 MB)。仓库里自带一个批量转 OGG 的脚本,音效那 52 个就是它转的;但在 BGM 上它会直接崩——往缓冲区写 150 万帧以上的数据会栈溢出,同尺寸的读取是正常的。好在这些 WAV 的导入设置是压缩的(Quite OK Audio),进包大约 1.6 MB 一首,所以它只影响仓库体积,不影响发布,暂时留着
![[表情_可爱]](https://img-tc.tapimg.com/market/images/86e3f28f5dddd78c532e8c470622c845.png)
第三条是这一期新引入的坑:跑一次自测会改掉开发者自己的设置。 三套整局用例会真的打完一局,而主场景在第一局结束时会做一件正确的事——把新手引导的开关落盘关掉。于是我们跑完自测,自己的引导就没了。收尾时改成用例开始时记下原值、跑完还原
最后一条:52 个音效素材我们只用了 31 个。爆炸音已经在表里登记,但还没接上代码——爆炸表现不是从事件总线发的,是表现层直接调的,要接得先挑好挂载位置
![[表情_思考]](https://img-tc.tapimg.com/market/images/b619f76842238d6eb4d2f51733ac8ad3.png)
下期计划
- Plan_5 的元系统:涌现日志(每局结束自动生成,写进存档并在结算界面展示)、Build 自动命名、未预设组合检测
- 本地存档:记录与日志落盘,死亡不丢
- 图鉴:这一段只留接口,不做实现,因为时间可能不够
- 环境叙事碎片:房间墙上、死亡旁白、结算片段
- 平衡:把一局时长往 10 到 15 分钟推
- 动画素材补全后替换现在的静态图
开发过程截图
图 1:底部 6 个槽位。 图标、名称、冷却扇形,以及下面两行小字里的触发次数都齐了。这一帧里三张牌分别触发了 2 / 5 / 14 次,后面三格还空着,等 Boss 奖励开出来的牌填
图 2:调序前后。 左:暴击赏金 / 金币弹幕 / 子弹回响,触发 2 / 5 / 14 次。右:把前两张换了个位置,变成金币弹幕 / 暴击赏金 / 子弹回响,触发 5 / 2 / 14 次。顺序挪了,冷却和触发统计跟着牌走
图 3:暂停详情。 本局统计四项(当前连锁 8、最高连锁 8、场上敌人 1、金币 5),加上已装备规则牌的逐行详情:每张牌的事件 → 动作、冷却、触发次数
视频 4:引导弹出。 第一次连锁触发时弹出的「你没有直接攻击,但规则自己连锁了。」
不过这个引导还是太抽象了,可能后面还会改
![[表情_思考]](https://img-tc.tapimg.com/market/images/b619f76842238d6eb4d2f51733ac8ad3.png)
图 5:「跳过引导」之后设置界面「游戏」页的开关状态。 关玩家想重看可以在这里重新打开,不过我想,可能没人会来打开
![[表情_吃瓜]](https://img-tc.tapimg.com/market/images/d07b262774c8a022a7dddbc39683da6b.png)
图 6:设置界面的音频页。 主音量 / 音乐音量 / 音效音量三条滑条,对应上面说的 Master、Music、SFX 三条总线;BGM 默认压在 −6 dB
杂谈
才发现日志可以发在聚光灯游戏创作挑战的论坛,我把已有的几篇都编辑添加过去了。老实说,这样真的能让更多人看到么?
![[表情_叹气]](https://img-tc.tapimg.com/market/images/9598a6cd4e4eba8470eb1520ed6a885d.png)
我们自己的游戏论坛马上就可以提交审核了。不过是在准备登记游戏的时候才发现,学生团队要交一份证明材料,模板在队长群里——也就是说,我这才知道原来还有队长群
![[表情_死机]](https://img-tc.tapimg.com/market/images/ffe3a048ef7da7deefaa56b91a1be2a8.png)
目前音效感觉还是不错的,但这个受伤音效一声 ”呃~” 还是很难绷的
![[表情_嫌弃]](https://img-tc.tapimg.com/market/images/3b98294830b76e0c70e2ce54eda41ab0.png)