植物大战僵尸复刻开发日志

使用 Godot 引擎复刻开发植物大战僵尸过程中遇到的问题以及开发日志

总述

前言 最近植物大战僵尸非常火热,这个发布于 2009 的老游戏再次焕发了生机。 我想正好和学习 Godot 引擎一起制作植物大战僵尸复刻开源版。 开发过程中将尽最大可能仅使用开源软件。 项目 Neo PVZ(游戏): https://github.com/mcxufly/neopvz Neo PVZ Blog(开发日志): https://github.com/mcxufly/neopvzblog Neo PVZ Helper(开发工具): https://github.com/mcxufly/neopvzhelper 使用到的项目 所有开发过程中使用到的工具和项目都会记录在此 引擎 Godot Mono: https://godotengine.org 图像处理 GIMP: https://gimp.org Krita: https://krita.org 音频处理 OpenMPT: https://openmpt.org/ FFmpeg: https://ffmpeg.org/ 原版游戏相关 PVZ 百科: https://wiki.pvz1.com 植僵工具箱: https://pvz.tools/ PvZ Tool Kit: https://pvz.tools/toolkit/ PopStudio: https://github.com/YingFengTingYu/PopStudio_Old

2025-04-26 · XuFly

Reanim 动画文件详解

本文需要一定数学基础 本文相关项目: https://github.com/mcxufly/neopvzhelper 前言 Reanim 动画文件是由 Adobe Flash 动画导出的,所以其实可以找到原版游戏的.fla动画文件(我确实找到了)然后使用 Adobe Animate 软件打开然后做编辑等操作。但是 Adobe Animate 是一个商业软件而且是 Windows 软件,同时.fla动画文件标准目前为止也尚未公开,而我使用的操作系统是 Arch Linux,所以我决定不使用 Adobe Animate 软件在 Godot 中使用原版游戏提取的Reanim 动画文件数据重置原版游戏的动画。 提取原版 Reanim 动画文件 使用任意原版游戏 PAK 文件解包工具解包main.pak文件,compiled/reanim目录下是压缩过的reanim.compiled文件,需要解压缩,可以使用工具转换,如 PopStudio。 reanim.compiled文件 根据 PopStudio 项目的 YFTYLib/Reanim/PC.cs,reanim.compiled文件有 32 位文件头DEADFED4(-559022380),后 32 位int有符号整形树为原二进制数据字节数,后为 ZLib 压缩数据标志头9C78,后为压缩数据,解压后获得原二进制数据流。reanim 数据具体解析参见 LoadFromCompiled,在此不做过多赘述。 Reanim 动画数据 解压解析后的 Reanim 动画数据具有以下结构(以 JSON 格式为例) { "fps": 12, "tracks": [ // track { "name": "track_name", "transforms": [ // transform { "f": -1, "i": "IMAGE_", "a": 1, "x": 0, "y": 0, "sx": 1, "sy": 1, "kx": 0, "ky": 0, "font": "FONT", "text": "TEXT" }, ... ] }, ... ] } fps: 不用多说是动画帧率 tracks: 轨道列表 track: 轨道 name: 轨道名称,anim 开头为控制轨道,其他为普通轨道 transforms: 帧数据/变换数据列表 transform: 帧数据/变换数据 f: 帧类型,-1 为空白帧,0为关键帧 i: 显示的图片 a: 透明度 x, y: XY 坐标,原点位于左上角 sx, sy: XY 缩放 kx, ky: XY 旋转 font: 字体 text: 文字 需要注意的是,如果某一帧的某一参数和上一帧的一样那么就不会重复存储相同的数据。例如: ...

2025-04-29 · XuFly

原版游戏的音乐音效

提取游戏音频文件 使用任意原版游戏 PAK 文件解包工具解包main.pak文件,在sounds目录下是游戏所有的音频文件,包括所有音效和音乐。 以1.2.0.1065 EN版本为例,sounds目录下共有 170 个文件,绝大多数是 Ogg 音频文件,还有几个不太一样: diamond.au tapglass.au mainmusic.mo3 mainmusic_hihats.mo3 ULAW (Sun) .au 音频文件 维基百科关于 Au 音频文件的页面: https://en.wikipedia.org/wiki/Au_file_format 简单来说 Au 音频文件就是一种比较古早简单的音频文件,直接使用 FFmpeg 转换成 Ogg 文件就可以了。 不知道宝开出于什么原因只在两个音频使用了这种格式。 MO3 .mo3 音频文件 维基百科关于 MO3 文件的页面: https://en.wikipedia.org/wiki/MO3 简单来说 MO3 文件是一种模块(Module)文件,可以类比 midi 文件,包含了音色、轨道等信息,体积极小。例如mainmusic.mo3仅 2.1MB 但是却包含了游戏中所有的音乐,除了 ZombiesOnYourLawn 猜测是因为这首歌包含人声演唱部分,可以想到宝开应该是在原版游戏集成了一个 MO3 文件播放器,根据我的观察这项功能很可能与原版游戏的bass.dll文件有关。所以替换音效非常容易但是替换背景音乐就非常困难了。 但是我在复刻开发过程中不想再实现或者给游戏添加 MO3 文件播放功能,通过维基百科关于 MO3 文件的页面可知 OpenMPT 可以打开和编辑(但是不能保存)MO3 文件,使用 OpenMPT 可以导出轨道到 Ogg 文件,这样就可以将背景音乐全部导出为 Ogg 音频文件,同时 OpenMPT 也能查看 bpm 和循环开始位置,这样就可以在 Godot 引擎中导入音频时设置循环播放了。所有音乐文件的大小可比原 MO3 文件大了不止几百倍……不过这在存储空间相当充裕的现在应该不算什么问题吧。 以上就是关于原版游戏的音乐音效的相关信息,希望对你有所帮助。

2025-04-27 · XuFly