Patoke/re-plants-vs-zombies
GitHub: Patoke/re-plants-vs-zombies
通过逆向工程完整重建《植物大战僵尸》年度版,并将老旧引擎迁移至现代 C++ 和 GLFW 跨平台渲染架构的开源重制项目。
Stars: 169 | Forks: 33
# re-plants-vs-zombies
一个专注于反编译初代 PvZ 最新功能,并在此基础上扩展该游戏及其引擎的项目
可追溯至 2005 年的 SexyAppFramework 是一款非常古老的游戏引擎,它既不符合现代标准的 C++ 规范,也没有使用现代的渲染器后端
本项目旨在通过引入最新 C++ 标准的特性来使该引擎现代化,同时将老旧的 DirectDraw 和 Direct3D7 渲染器替换为现代的 [GLFW](https://www.glfw.org/) 跨平台封装库;此外,本项目还扩展了由 [Miya aka Kopie](https://github.com/rspforhp) 制作的(现已删除的)PvZ 0.9.9 版本旧反编译项目,旨在为模组开发者和玩家提供尽可能完美的 PvZ 体验
# 免责声明
本项目不支持盗版行为
本项目不包含任何来自 PopCap 的知识产权(其开源游戏引擎除外),本项目的输出仅为反编译后的 PvZ 粉丝版本的执行文件
要使用本项目运行游戏,您需要通过[购买](https://store.steampowered.com/app/3590/Plants_vs_Zombies_GOTY_Edition/)获取原始游戏文件的访问权
## 路线图
#### 当前专注于
- [x] 为基础游戏添加 x64 支持 **(部分完成)**
- [ ] 将旧渲染器后端替换为 GLFW **(进行中)**
- [ ] 将所有 Windows 专属代码替换为跨平台的 GLFW 对应实现 **(进行中)**
#### 待完成事项(当基于 GLFW 的 x64 版本构建可用后)
- [ ] 添加游戏 GOTY 版本的所有功能
- [x] 成就系统 **(部分完成)**
- [ ] Zombatar
#### 未来的可能功能
- [ ] 为游戏创建易于使用的模组 API
- [ ] 从文件中解析僵尸
- [ ] 从文件中解析植物
- [ ] 从文件中解析地图
- [ ] 添加用于自定义序列的脚本功能
## 安装说明
### Visual Studio Community
打开包含 `CMakeSettings.json` 的文件夹,等待缓存生成完毕,然后构建项目
### 其他(Sublime, Visual Studio Code 等)
在包含 `CMakeSettings.json` 文件的目录下运行以下命令(假设您已安装带有 Ninja 的 CMake)
`cmake -G Ninja -B cmake-build`
`cmake --build cmake-build`
如果运行这些命令未能成功构建,请[创建一个 issue](https://github.com/Patoke/re-plants-vs-zombies/issue) 并详细描述您的问题
构建完成后,输出的执行文件应位于 `SexyAppFramework` 内的 `Debug` 或 `Release`(取决于您的构建目标)文件夹中
然后,您需要将该执行文件复制到原始游戏的根目录中(或者将原始游戏文件夹的内容复制到上述文件夹中)
之后,您应该就能直接打开构建好的执行文件,尽情享受 re-pvz 了!
## 参与贡献
参与贡献时,请遵循以下指南:
该框架与许多其他 API 的不同之处在于,某些类属性没有被封装在访问器方法中,而是允许作为公共成员数据直接访问。例如,要设置应用程序的窗口标题,只需在创建应用程序窗口之前,为应用程序对象中的 std::string mTitle 赋值即可。我们认为在许多情况下,这减少了实现一个类所需的代码量。另一个值得注意的是变量使用的前缀表示法:“m”表示类成员,“the”表示传递给方法或函数的参数,“a”表示局部变量。
当您需要留下注释供其他开发者查看时,请遵循以下语法: * 始终包含贡献者的名称,例如: * `@Contributor` * 对于待办事项,需包含 todo 标记,例如: * `@Contributor todo` * 始终添加一个冒号,以表示注释内容从此处开始 * `@Contributor todo: 出现了错误!` * 如果您反编译了一个新函数,并在最新版本的游戏中找到了其地址(或者反编译了某个类成员的偏移量),请按以下格式进行标注: * `@Contributor GOTY: 0xADDRESS`
## 特别感谢
- [@rspforhp](https://www.github.com/octokatherine) 对反编译 PvZ 0.9.9 版本所做的出色工作
- [@ruslan831](https://github.com/ruslan831) 对 [PvZ 0.9.9 反编译项目](https://github.com/ruslan831/PlantsVsZombies-decompilation) 的归档
- GLFW 团队的杰出贡献
- PopCap 创造了出色的 PvZ 系列(并将其游戏引擎开源)
- 所有曾参与或正在积极参与这个了不起的项目的贡献者
SexyAppFramework 编码理念
#### 摘自 SexyAppFramework 文档:该框架与许多其他 API 的不同之处在于,某些类属性没有被封装在访问器方法中,而是允许作为公共成员数据直接访问。例如,要设置应用程序的窗口标题,只需在创建应用程序窗口之前,为应用程序对象中的 std::string mTitle 赋值即可。我们认为在许多情况下,这减少了实现一个类所需的代码量。另一个值得注意的是变量使用的前缀表示法:“m”表示类成员,“the”表示传递给方法或函数的参数,“a”表示局部变量。
贡献者标记
当您需要留下注释供其他开发者查看时,请遵循以下语法: * 始终包含贡献者的名称,例如: * `@Contributor` * 对于待办事项,需包含 todo 标记,例如: * `@Contributor todo` * 始终添加一个冒号,以表示注释内容从此处开始 * `@Contributor todo: 出现了错误!` * 如果您反编译了一个新函数,并在最新版本的游戏中找到了其地址(或者反编译了某个类成员的偏移量),请按以下格式进行标注: * `@Contributor GOTY: 0xADDRESS`
标签:Bash脚本, C++, D3D7, DirectDraw替代, DNS解析, GLFW, URL提取, Windows到跨平台迁移, x64架构, 代码重构, 反编译, 图形渲染, 开源复刻, 开源项目, 数据擦除, 植物大战僵尸, 游戏Mod, 游戏修改, 游戏开发, 游戏引擎, 游戏逆向工程, 现代C++, 跨平台开发, 逆向分析