无尽太空(Endless Sky):2D 沙盒太空探索与贸易战斗游戏
Endless Sky 是一款 C++ 编写的 2D 沙盒式太空探索游戏,玩法接近 Elite、Esc...
green-mahjong · danbeck/green-mahjong
Green Mahjong 是一款基于 HTML5 的纸牌麻将接龙(Solitaire Mahjong)游戏,代码以 GPLv3 开源,主体为 HTML/CSS/JavaScript,可直接在浏览器中运行。README 称其包含 3 套主题、6 种布局,支持主流桌面与移动浏览器,并可用 Cordova/Ca...
Abyss Engine(深渊引擎)是一个用 C 语言从零编写的《暗黑破坏神2》(Diablo 2)洁净室重实现项目。它的目标不是简单地复制一款游戏,而是重建原作背后的游戏引擎,并把这份引擎放到一个可移植、易扩展、方便模组制作的平台上。项目在 README 中把边界写得很清楚:它不属于逆向工程项目,代码库中不包含任何来自原作的代码;开发者依据公开信息独立实现引擎逻辑,因此也不会去兼容原版游戏的存档格式与多人联机体系。换句话说,这是一个“用现代方式重造老引擎”的工程实践,而不是把原版游戏打包分发的整合包。
这一点决定了它的使用方式与常见的开源游戏不同。引擎本身不携带任何游戏素材,运行时必须加载玩家自备的《暗黑破坏神2》及《毁灭之王》(LOD)MPQ 资源包。README 明确建议通过购买实体版或 battle.net 等数字发行渠道合法获取这些文件;同时提醒网络上流传的盗版版本大多被改动过,引擎并不支持这类被修改的资源,用盗版提交问题只会浪费开发者的精力。项目对盗版持明确的反对态度。因此,想要真正跑起来,用户需要同时具备两样东西:一份合法的原作资源,以及一份正确填写的引擎配置文件。
在平台策略上,Abyss Engine 强调可移植性。官方列出并支持的平台包括 Windows 10 及以上(x64 与 Arm64)、macOS(Arm64)以及 Linux(x64 与 Arm64)。README 也坦率说明,其他平台也许能够编译运行,但并不在官方支持范围内,遇到问题不保证能得到解决。对于一个用纯 C 编写、需要自己处理窗口、输入、渲染与资源加载的引擎来说,这种“明确列出支持矩阵”的做法,反而比笼统宣称“跨平台”更有参考价值。
构建流程相对标准,适合当作 C 语言跨平台工程的样板来读。前置依赖只有两项:CMake 3.20 或更高版本,以及一个符合 C99 标准的编译器(GCC、Clang 或 MSVC 均可)。克隆仓库时必须递归拉取子模块,否则依赖缺失会导致构建失败。命令行构建只需创建 build 目录、执行 cmake 并指定 Release 构建类型;使用 Visual Studio 2022、CLion 或带 CMake Tools 扩展的 VSCode 时,直接打开根目录并构建即可;Xcode 用户则先用 cmake 的 Xcode 生成器产出工程文件,再加载编译。
运行前的配置是这个项目最容易被忽略的一环。引擎需要读取 abyss.ini 配置文件,模板放在源码仓库的 content/abyss.ini 位置,用户需要把它复制到对应平台的本地设置目录:Windows 是 %APPDATA%/abyss/abyss.ini,Linux 是 ~/.config/abyss/abyss.ini,macOS 是 ~/Library/Application Support/abyss/abyss.ini,并按自己的系统情况修改内容。构建完成后,Linux 与 Windows 上直接执行构建目录里的 abyss 可执行文件即可启动;macOS 上则需要运行构建目录中的 Abyss Engine.app 应用包。
日志方面,从命令行启动时引擎会把日志输出到控制台;在 macOS 上由于是应用包形式,需要直接在命令行执行包内的二进制(AbyssEngine.app/Contents/MacOS/AbyssEngine)才能看到输出,这对排查配置错误与资源加载失败很有帮助。社区沟通渠道是 irc.libera.chat 上的 #AbyssEngine 频道,README 特别声明项目已不再维护 Discord 存在,任何打着该项目名义的 Discord 服务器都与官方无关,这一点在寻找帮助时需要留意。
从学习角度看,这个仓库的价值集中在几个方面:一是在 C99 约束下组织一个规模可观的引擎工程,包括目录结构、子模块管理与构建脚本;二是跨平台抽象,同一套代码要在 Windows、macOS、Linux 三种系统与 x64/Arm64 两种架构上工作;三是自研引擎的架构设计,包括渲染、音频、UI、动画等子系统的分层;四是“洁净室重实现”这一工程方法本身——在没有原作代码的前提下,如何定义引擎的边界、如何设计便于模组扩展的接口。需要注意的是,项目仍在持续开发,功能完成度与稳定性应以仓库当前状态为准;同时它依赖用户自备的原版资源,缺少 MPQ 文件时引擎无法正常进入游戏内容。
Endless Sky 是一款 C++ 编写的 2D 沙盒式太空探索游戏,玩法接近 Elite、Esc...
jfduke3d 是 JonoF 对 3D Realms《Duke Nukem 3D》的源码移植,基于其 Build...