Debian 上编译「游戏王」游戏引擎——ygopro
ygopro 是一个开源、跨平台、并带有游戏界面的 YuGiOh! 游戏引擎,支持单机和网络对战。
最初我是在 Windows 虚拟机里玩的 ygopro,非常不流畅。因此决定在宿主机的 Linux 系统里手动编译,捣鼓了两天,把它装在了另外台 Kali Linux 的笔记本上(Debian、Ubuntu 都可以按以下方法),由于网上很少找到玩家在 Linux 下折腾,就随意记录下。
ygopro 只是个游戏引擎,因此它的代码仓库不包含卡片数据库、禁卡列表、卡图和机器人补丁,这些需要我们自己添加。
KoishiPro 就是基于 ygopro 的繁衍项目(对引擎也做了二次开发),并且按 GPLv2 协议开放了源码,官网:https://cli.koishi.pro/。
我比较喜欢 KoishiPro 改进过的引擎,所以这里我们编译 KoishiPro 改进后的引擎(过程其实都一样)。如果仔细看了 KoishiPro 官网,可以发现官方提供了 Linux 平台的二进制包,但为啥我还要自己编译呢?因为官方提供的包用不了啊。不过要完成我下面的组装实验,还是需要下载份 Linux 的二进制包:https://cli.koishi.pro/download/。
1. 编译引擎
编译之前,需要先安装相关的依赖:
sudo apt install -y libfreetype6-dev libevent-dev libsqlite3-dev libgl1-mesa-dev libglu-dev mono-complete premake4 liblua5.2-dev libirrlicht-dev
可以看到安装了 mono,因为机器人补丁是用 C# 开发的。
接下来,从 https://github.com/Smile-DK/ygopro 下载引擎的源码来编译:
$ git clone https://github.com/Smile-DK/ygopro.git $ sudo ln -s /usr/lib/x86_64-linux-gnu/liblua5.2.so /usr/lib/x86_64-linux-gnu/liblua.so $ cd ygopro $ git submodule update --init --recursive $ premake4 gmake $ make -Cbuild
以上编译过程中可能会遇到:
$ make -Cbuild make: 进入目录“/opt/KoishiPro/build” ==== Building lua (release) ==== ==== Building ocgcore (release) ==== ==== Building clzma (release) ==== ==== Building cspmemvfs (release) ==== ==== Building ygopro (release) ==== CGUITTFont.cpp ../gframe/CGUITTFont.cpp:31:10: fatal error: irrlicht.h: 没有那个文件或目录 31 | #include <irrlicht.h> | ^~~~~~~~~~~~ compilation terminated. make[1]: *** [ygopro.make:157:../obj/Release/ygopro/CGUITTFont.o] 错误 1 make: *** [Makefile:33:ygopro] 错误 2 make: 离开目录“/opt/KoishiPro/build”
这里我确定从系统中是能找到 irrlicht.h 的:
$ find /usr/include/ -name 'irrlicht.h' /usr/include/irrlicht/irrlicht.h
不过,因为是编译“ygopro”阶段遇到的问题,因此手动修改下 build/ygopro.make 文件,找到:
INCLUDES += -I../ocgcore -I/usr/include/freetype2 -I../irrlicht_linux/include
并追加 -I /usr/include/irrlicht
,最终如下:
INCLUDES += -I../ocgcore -I/usr/include/freetype2 -I../irrlicht_linux/include -I /usr/include/irrlicht
2. 后续配置
接下来,完成编译后还有一些工作要做:
- 更新卡牌数据库
- 添加卡牌图片
- 安装机器人补丁
前面说了,要下载一份 Linux 的二进制包,因为里面包含了上面列的这些东西。
首先,更新卡牌数据库,将二进制包里的 cards.cdb 复制到源码文件中覆盖。其实卡牌数据库,在 Github 上有人专门维护了仓库: https://github.com/moecube/ygopro-database, 如果要用这个数据,把仓库 clone 下来,并将 locales/zh-CN 目录下的 cards.cdb、strings.conf 复制到源码目录即可。
然后,添加卡牌图片,将二进制包中的 pics 文件夹拷贝到源码目录中覆盖。
最后安装机器人补丁,将二进制包中的 bot、bot.conf 和 windbot 目录复制到源码中就行了。另外,机器人补丁 windbot 是用 C# 开发的,源码在:https://github.com/IceYGO/windbot
最终源码目录的主要结构如下:
├── bin # 编译后的二进制文件 ├── bot # 启动机器人的脚本 ├── bot.conf # 机器人配置文件 ├── cards.cdb # 卡牌数据库 ├── deck # 目录里存放的牌组数据 ├── lflist.conf # 禁卡列表 ├── pics # 卡牌的图片 ├── script # 游戏脚本 ├── system.conf # 配置文件 ├── textures # 游戏界面的图片 └── windbot # 机器人
3. Play
在运行游戏以前,还需要修改下配置文件 system.conf,把字体配置改成以下所示:
textfont = /usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc 14 numfont = /usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc
如果路径错了,游戏是没法运行的。
执行 bin/release/ygopro 即可启动游戏。
但是在 Linux 中没法输中文,在编辑卡组的时候就无法用中文搜索卡片了,不过卡组数据是用纯文本存放在 deck 目录中的,命名规则为:
卡组名.ydk
ydk 的格式如下:
#created by ... #main 每行一个卡片编号 ... #extra !side
最近我自己也开源了一个借助 KoishiPro 数据库的离线查卡器:https://github.com/1u4nx/yugioh_card_query。 当然还可以在 https://www.ourocg.cn/ 检索卡片。
4. 卡片数据更新
卡片数据及卡图更新,去 http://ygocore.ys168.com/ 下载最新的更新包;或者直接下载完整包,解压后把 pics 目录和 cards.cdb 拷贝到目录中覆盖。
如果想尝试一些还未正式发布的先行卡,可以去 https://ygo233.com/pre 下载先行卡数据。
5. 其他资源
- 围绕 ygopro 引擎的一切资源见:http://ygocore.ys168.com/
- 需要参与网络对战,服务器请见:https://ygo233.com/
- 相关论坛:https://ygobbs.com/
- 查卡:https://www.ourocg.cn/
- 离线查卡器(Linux):https://github.com/1u4nx/yugioh_card_query