YRInc · 2020年10月23日

云芯一号 云游戏服务器 - 叁: 属于红色警戒2与半条命(半衰期)的千禧年

千禧年时候, PC游戏的发展迎来了一波高潮. 第一人称射击, 即时战略等类型的佳作层出不穷. 笔者正是在千禧年时候第一次接触到电脑, 那个时候的各类游戏构成了现在不可磨灭的回忆.

本文是云芯一号云游戏服务器系列作品的第三部, 主要描述了在云芯一号上运行 红色警戒2, 半条命(半衰期)反恐精英 的方法, 并附上千禧年同样流行的开源版 星际争霸, 帝国时代2, 暗黑破坏神2, 仙剑奇侠传3, 极品飞车2, 魔法门英雄无敌3 的项目地址(以及 所有 已知此类开源游戏的地址), 有兴趣的同学可以进一步探索.

cover (1).png

前置要求


  1. 云芯一号显示驱动支持(参见)
  2. 高性能模式(参见)

红色警戒2


跨平台红警2的实现主要依赖于OpenRA这个项目, 该项目致力于重写一个<<命令与征服>>的2D游戏引擎, 使得该系列的所有游戏能够在全平台上运行. 所谓<<命令与征服>>系列, 主要包含<<泰伯利亚黎明>>, <<红色警戒>>, <<沙丘2000>> 和 <<泰伯利亚之日>> 这些即时战略游戏.

该项目的地址为:

https://github.com/OpenRA/OpenRA

下面我们正式开始在云芯一号上编译安装红色警戒2:

1 - 安装依赖库

由于OpenRA是使用基于 .Net 技术的 C#语言 所编写, 因此我们需要首先安装 .Net 的开源实现, 也就是 Mono, 这里我们是使用的基于 Debian 9 的 32 位系统, 使用以下代码安装:

sudo apt install apt-transport-https dirmngr gnupg ca-certificates

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF

echo "deb https://download.mono-project.com/repo/debian stable-stretch main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list

sudo apt update

sudo apt install mono-complete

然后我们安装 Lua5.1, FreeTypexdg-utils, 使用以下命令:

sudo apt install lua5.1 liblua5.1-dev
sudo apt install libfreetype6 libfreetype6-dev
sudo apt install xdg-utils

2 - 下载红色警戒2和游戏引擎的代码包

wget https://github.com/OpenRA/ra2/archive/master.zip

解压然后打开 ra2-master 文件夹后, 在该目录中使用以下命令下载 OpenRA 游戏引擎

wget https://github.com/OpenRA/OpenRA/archive/release-20200202.zip

(注意版本, 我们使用的是 20200202 这个发行版, 后续的新版本将不再支持OpenGL 2.x 导致我们无法运行)

解压该游戏引擎的压缩包, 解压后会多出来一个 OpenRA-release-20200202 的文件夹, \!\!我们将这个文件夹改名称为 engine. 这就是红警2所需要的游戏引擎. (一定要改名)

3 - 配置文件修改

复制 ra2-master/mod.config 中的版本号(类似于”release-20200202”)到 ra2-master/engine/VERSION 文件中以 覆盖VERSION文件 的原内容

创建 ra2-master/user.config 并填充以下内容:

AUTOMATIC_ENGINE_MANAGEMENT="False"

4 - 编译

ra2-master/engine 目录下运行

make dependencies

然后在 ra2-master 目录下运行

make all

(不必理会编译过程中出现的 安装.Net 的提示)

5 - 安装红警2游戏内容文件

由于版权问题, OpenRA 没法提供游戏的内容文件, 这里我们需要将自己电脑上安装的红警2目录下的全部 .mix 文件复制到云芯一号中的

~/.config/openra/Content/ra2/

目录下.

6 - 启动红警2

使用命令行运行 ra2-master 目录下的launch-game.sh即可.

ra2.png

实际游戏时默认是全屏幕分辨率, 实测在1080p下运行起来还是比较有压力的. 我们可以修改设置为 800x600, 也就是千禧年电脑运行红警2的默认分辨率. 此时帧率为20FPS, 也刚好与千禧年电脑的速度相同. 对于即时战略类游戏来说, 这个速率还是可以接受的.

Screenshot at 2020-10-21 14-09-54.png

可以看到, OpenRA 实现的红警2的操作和设置见面与原版稍有不同. 现在的版本仍在继续更新和完善中, 目前支持人机对战和局域网/ 互联网多人对战, 还暂时不支持战役.

Enjoy!

半条命与CS


我们能够在云芯一号上顺利运行<<半条命>>, 离不开其背后的开源<<半条命>>引擎项目xash3d, 项目地址为:

https://github.com/FWGS/xash3d

我们知道CS最初只是<<半条命>>的一个Mod, 因此有了游戏引擎, 理论上我们就可以通过复制 Mod 文件的方法来游玩<<反恐精英>>了.

下面让我们通过 xash3d 这个开源项目, 再次开启戈登弗里曼博士的逃出生天之路.

1 - 编译xash3d游戏引擎(参考自)

git clone --recursive https://github.com/FWGS/xash3d

cd xash3d

git clone https://github.com/ValveSoftware/halflife hlsdk/ 

cd engine

git clone https://github.com/FWGS/nanogl

cd ..

mkdir -p build 

cd build

cmake -DHL_SDK_PATH=../hlsdk/ -DXASH_VGUI=no -DXASH_NANOGL=yes -DXASH_GLES=yes ..

make -j6

2 - 准备<<半条命>>游戏目录

首先为游戏创建一个游戏目录, 比如 HalfLife:

mkdir ~/HalfLife
cd ~/HalfLife

然后将上一步中编译好的 so库 文件和可执行文件拷贝过来:

cp ~/xash3d/build/engine/libxash.so ./
cp ~/xash3d/build/game_launch/xash3d ./
cp ~/xash3d/build/mainui/libxashmenu.so ./

cp ~/hlsdk-xash3d/build/cl_dll/client.so ./
cp ~/hlsdk-xash3d/build/dlls/hl.so ./

3 - 复制游戏内容文件

同样是由于版权问题, 这里的游戏引擎项目无法提供源游戏的内容文件, 因此我们需要在自己的电脑上(非云芯一号)安装好<<半条命>>, 然后将游戏文件里的 valve 文件夹拷贝到我们上一步中新建的游戏目录中 (~/HalfLife).

4 - 修改游戏配置文件(关键!)

我们需要修改拷贝过来的 valve 文件夹内liblist.gam 文件, 具体为添加或修改 gamedll_linux 一行内容为:

gamedll_linux "hl.so"

这里 hl.so 对应于游戏自带的运行在 Windows 下的 hl.dll, 是<<半条命>>游戏负责游戏规则的二进制库. 因为游戏自带的 hl.dll 只能在 x86 且 Windows 下使用, 这里我们通过修改这一配置文件将其替换为上文中编译的 hl.so 这一 Linux二进制库.

5 - 启动<<半条命>>!

cd ~/HalfLife

LD_LIBRARY_PATH=. ./xash3d -dev 5 

Screenshot at 2020-10-21 21-18-44.png

游戏默认全屏幕, 我在 1080P 测试时可以稳定在 30FPS 以上, 部分人物较少的场景可以稳定 60FPS, 可见云芯一号的 GPU 还是比较给力的.

Screenshot at 2020-10-21 21-19-02.png

关于反恐精英:

这里我们使用的 CS 版本为 1.3, 这是因为更高级的CS版本相较于<<半条命>>的关系更为独立, 1.3也是千禧年最为经典的一个版本, 风靡全国网吧, 因此我们选择CS 1.3进行安装.

<<反恐精英>>1.3版本在中文互联网上已实属难找, 这里提供一个外网收集的地址:

https://www.moddb.com/mods/counter-strike/downloads/counter-strike-13

同样我们需要在自己的电脑上安装, 然后拷贝安装好的 cstrike 目录到我们的<<半条命>>游戏目录中.

然后用和半条命同样的方法(关键!)修改cs游戏的配置文件, 这里修改拷贝过来的 cstrike文件夹 下的 liblist.gam 文件, 添加或修改 gamedll_linux 一行内容为:

gamedll_linux "hl.so"

( 其实这里应该修改为 mp.so , 但为什么这里这么做下文再表 )

最后使用如下命令启动<<反恐精英>>!

cd ~/HalfLife

LD_LIBRARY_PATH=. ./xash3d -dev 5 -game cstrike

Screenshot at 2020-10-21 21-21-18.png

Screenshot at 2020-10-21 21-28-49.png

如上图所示虽然我们可以满世界跑图, 也可以加入在线游戏, 但是遗憾的是我们并不能真正的选择角色, 也不能购买枪支弹药, 只能以半条命的主角戈登弗里曼博士的身份在反恐精英地图上跑路.

这是因为我们的<<反恐精英>>游戏规则二进制文件 mp.so 并没有被开源和编译, 游戏自带的二进制规则文件 mp.dll 文件只适用于x86平台. 因为我们在这里使用了半条命的规则文件 hl.so, 所以只能以半条命主角的身份游玩反恐精英. 我们只得期待有一天这个文件被网友们开源编译出跨平台版.

但是这句话也不绝对, 因为已经有一个开源的反恐精英游戏规则二进制库 mp.dllmp.so 的开源实现:

https://github.com/s1lentq/ReGameDLL_CS

此项目可以编译出一个 mp.so 用在 Linux 下面运行CS用. 不过目前来看该项目只适用于x86处理器上的 Linux 平台, arm平台 暂时无法编译(也可能是我的编译姿势不对).

感兴趣的朋友可以继续探索!

b803a8f7903f4c8f98acc9f934e68e2e.jpeg

帝国时代2, 暗黑破坏神2, 仙剑奇侠传3, 极品飞车2, 魔法门英雄无敌3 以及 ...

海量的互联网世界中, 已经有了帝国时代2, 暗黑破坏神2, 仙剑奇侠传3, 极品飞车2, 魔法门英雄无敌等等经典游戏的实现.

在这些项目中, 有的完成度已经非常高, 可以直接游玩. 有的仍在不断继续完善开发中, 值得期待. 在此我一并列出以上游戏的开源项目地址, 感兴趣的朋友可以进一步探索!

星际争霸:

https://github.com/Wargus/stargus

帝国时代2:

https://github.com/SFTtech/openage

暗黑破坏神2:

https://github.com/OpenDiablo2/OpenDiablo2

仙剑奇侠传3:

https://github.com/dontpanic92/OpenPAL3

极品飞车2:

https://github.com/zaps166/NFSIISE

魔法门英雄无敌3:

https://github.com/vcmi/vcmi

最后一点存货分享给大家, 这是一个收录了全部已知的开源游戏项目地址的网站. 以上所有的游戏都收录在这里面, 大家可以打开寻找自己的游戏回忆并在云芯一号上运行起来!

https://osgameclones.com/

截屏2020-10-23 下午12.44.21.png

推荐阅读
关注数
4278
内容数
71
低成本Arm微服务器开发平台“云芯1号”教程及应用,欢迎关注
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息