我正在阅读由一群人为了好玩而反编译的 GTA Vice City 代码(可在github.com/halpz/re3上公开获取)。添加最少的代码只是为了修复错误,因此它确实是真实的。代码库非常庞大,漫步其中也很有趣。
我将通过询问有关每一集主题的问题并以不需要阅读整个代码的方式提供答案来分享我对代码库的设计和架构分析。
这是关于代码中与音频相关的内容。如果您还有其他问题,请告诉我,我稍后会附上答案!
1- 某个声音资产在游戏逻辑中是如何处理的?
有巨大的枚举,其中包含所有使用的声音的逻辑名称,其中涉及 SFX、音乐、对话、任务音频(按顺序)等。即使对于玩家的心情,也有一个枚举指示相应的音效。
随机有趣的事实:例如,玩家的情绪会影响枪支的声音效果。
2-如何加载声音资源文件?
文字 WAV 声音文件的地址是硬编码的。有一个名为 Sample Manager 的类,其中包含存储为静态字符数组(称为“名称表”)的地址(因此它基本上是一个 char[MAX_STR_SIZE] 数组,用于文件地址的字符串。
)前面提到过与名称表中的文件进行一对一匹配。当提示播放声音时,枚举项被转换为 int,并用于访问名称表项。给定的文件地址被馈送到声音播放器函数调用(例如 AIL_open_stream())
3- 声音实际上是如何提示播放的?
基本上使用了整个游戏的中央命令总线。对于每种类型的声音,都会发送某些命令,其中包含指示声音类型项的有效负载。