Debian 上编译「游戏王」游戏引擎——ygopro

Table of Contents

游戏王的规则和卡片更新太快了,为了适应当前主流规则和卡牌,我趁最近受冠状病毒影响,在家没上班的时间重新按最新规则组了一套牌组,然后在 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 后续配置

接下来,完成编译后还有一些工作要做:

  1. 更新卡牌数据库
  2. 添加卡牌图片
  3. 安装机器人补丁

前面说了,要下载一份 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/ 检索卡片。

KoishiPro.png

4 其他资源