爱好者如何用 Go 重写了 MUGEN 格斗游戏引擎
如果你在2000年代长大,你可能记得 M.U.G.E.N 现象。这是一个2D格斗游戏制作工具,鸣人可以在真人快打的舞台上与史莱克对战。粉丝社区为它创作了数千个角色和场景,但引擎本身最终成为了古董。闭源代码、x86和Windows依赖、缺乏正经的在线游戏——所有这些都停留在了拨号上网时代。
最终,一群开发者厌倦了这种状况。Ikemen GO 项目由此诞生——一个用 Go 编写的开源引擎,可以拾取旧资源并让它们在现代硬件上运行。
这个项目是什么,名字从何而来
最初,这个项目以 Ikemen 为名开发,由一位日本开发者编写。后来作者放弃了仓库,于是社区创建了一个分支并用 Go 重写了代码。
顺便说一下,这个名字有一个有趣的意义。IKEMEN 是短语 Itsu made mo Kansei shinai Eien ni Mikansei ENgine 的首字母缩写,大致翻译为"永远无法完成的永恒未完成引擎"。纯粹的日本式自嘲幽默。
Ikemen GO 的主要目标很简单:在移除古老技术限制的同时,保持与 M.U.G.E.N 1.1 Beta 资源的100%向后兼容性。
里面有什么,为什么值得关注
引擎无需转换即可加载熟悉的角色文件、场景、字体和声音。但与原作不同,Ikemen GO 为游戏开发者和玩家提供了真正的现代能力。
探索仓库时,以下几点尤为突出:
- 无需变通方案的跨平台支持。得益于 Go,引擎可以编译为 Windows、Linux(包括 ARM64 架构)、macOS(Intel 和 Apple Silicon)的版本,甚至可以通过 Docker 构建为 Android 的 APK。
- 网络代码。在原作 M.U.G.E.N 中,多人游戏要么是缺失的功能,要么需要可疑的第三方软件。而在这里,网络模式已内置于架构中。
- 灵活的调试。如果你想要深入研究引擎内部,只需几分钟就可以在 VS Code 或 GoLand 中以调试模式启动它。
- MIT 许可证。引擎代码完全开放。只有 FFmpeg 库(动态链接)和默认界面图形资源(采用 CC-BY 3 分发)存在一些细微差别。
启动和构建是如何工作的
对于普通用户来说,一切都非常简单。发布页面包含现成的二进制文件。下载压缩包,解压,然后根据你的系统运行 Ikemen_GO.exe 或 Ikemen_GO.command 可执行文件。
如果你计划修改引擎本身或探索代码,过程会稍有不同。
首先,克隆仓库:
git clone https://github.com/ikemen-engine/Ikemen-GO.git
cd Ikemen-GO
对于本地运行,仅构建单个 Go 源文件是不够的——引擎需要基本的界面资源(精灵图、声音、菜单)。这些从相邻的仓库 Ikemen-GO-Screenpack 获取,并直接解压到项目根目录。
之后,你可以通过 IDE 启动调试,或为目标平台构建二进制文件。对于 Android 构建,作者准备了现成的 Docker 容器,省去了本地配置 NDK 的麻烦。
开发者为什么要关注这个代码
使用 Ikemen GO 有两种场景。
第一种是——你喜欢格斗游戏并想制作自己的。从头开始编写碰撞物理、判定框处理、精灵图加载和网络堆栈是一项需要数年才能完成的任务。将 Ikemen GO 作为一个现成的框架要高效得多。你使用引擎,配置 Lua 脚本,绘制角色,就能得到一个成品。
第二种是——学习 Go 中复杂系统的架构。在社区中,Go 通常与微服务、REST API、gRPC 和 CLI 工具相关联。Ikemen GO 展示了语言的完全不同的一面:
- 如何组织游戏循环并以最小延迟处理输入。
- 如何通过 Cgo 和 FFmpeg 与多媒体交互。
- 如何在不使用 Unity 或 Godot 等重型第三方引擎的情况下构建大型游戏项目。
总结
Ikemen GO 是开源如何给被放弃的技术第二次生命的绝佳范例。该项目活跃,接受 PR,仓库中持续有工作在进行。
如果你正在寻找一个不寻常的开源 Go 项目来学习,或者一直想制作你梦想中的格斗游戏而无需自己编写渲染器——请看看这个仓库。开始探索的最佳起点是他们的 Wiki,其中详细介绍了原作 M.U.G.E.N 中从未存在过的所有新功能。
相关项目