Red Alert 2 on Win10

0. 背景

昨天女友跟我说很久没玩红警了很想玩一玩,这或许是她玩过的为数不多的电脑游戏之一吧,不过想玩归想玩,没有带上自己的笔记本,也不能用老爸的电脑,网吧环境不好也不能去网吧所以其实是没法玩的。虽然觉得遗憾,但又回想起以前最开始我们住一起的时候也是千方百计才玩到红警,这款有将近二十年历史的古董游戏在现在的电脑上跑起来并不是那么容易,为了防止以后换电脑搞忘记,我在这里把以前尝试的方法记录下来。

1. 在 win10 中运行红警2

我们的游戏是从朋友那里拷贝过来的,据说原来是从红警之家里下载,版本号1.001。回想一下这里安装也踩过坑,由于拷贝到的是一个自解压文件,我习惯性地用解压程序来解压,会造成自解压文件释放完毕后的安装脚本不执行,如果是这样需要手动运行里面的 SetupReg.exe 完成注册表修改,现在想来毕竟是盗版游戏这种安装 key 的方式也常见应该放行才对,所以直接执行自解压可以免去这步手动操作。

这个时候已经可以打开游戏,但是进入后会发现分辨率很糟糕,不能满足我们的需求,于是查找资料以后发现有人整理过一个用来恢复正常分辨率的补丁,按照 README.md 的提示即可:

补丁使用方法:

1.本补丁在windows 8和windows 8.1中也可以用,不仅仅局限于windows 10.
2.系统的缩放必须是:100%。设置方法:①点击开始按钮②进入设置功能③选择系统选项④选择显示选项⑤,在缩放与布局中找到更改文本、应用等项目的大小,将其选择为100%,然后注销重启你的电脑。
3.现在打开你的游戏目录,如果你之前改动了文件或者其他,最好可以重新下载。
4.复制补丁中的所有文件到你的游戏目录,他可能会提示被覆盖,请选择
5.如果你使用的是origin客户端,在你下载之后它会为你自动设置Ra2.exeRA2MD.exeYURI.exe兼容性选项,请在文件属性兼容性中取消它们的任何兼容性选项。
6.如果你的分辨率不是1920*1080,请在ra2.inira2md.ini中更改。

7.现在打开你的游戏,去享受它吧。

……

https://github.com/873578156/Command-and-Conquer-Red-Alert-II-win10-patch/blob/master/README.md

需要格外留意的是2、5、6,在高分辨率的小屏幕上 系统缩放 可能会被经销商改成120%,而就算没有使用 origin 客户端玩正版红警,在红警之家下载的自解压安装程序也会自作聪明地修改 Ra2.exe, RA2MD.exe 以及 YURI.exe 的兼容性设置,需要取消兼容性选项(而女友的电脑后来被我装成 win7 的系统,这里取消选择反而不能用)。补丁装上之后再打开游戏便可大部分以正常分辨率显示,除了某些界面,像开房间之后的地图缩略图会有变形。

2. 联机玩红警2

经过上一步之后其实已经可以在局域网里联机游戏了,但是我们玩了一阵之后也想跟在广州的朋友一起玩,于是便查找能互联网联机的方法。现在回想找到并尝试过的有3种方法。

2.1 浩方平台联机

最开始想到这种方式,跟朋友们整了一晚上就打成了一局,果断纷纷卸载,浩方的缺点显露无疑:玩家太多无法自主控制房间成员,服务器连接质量不好,老是断线无法重连等等。关键是广告还多,注册还贼麻烦,要先经过重重障碍进入平台房间再进游戏房间,太复杂了。

2.2 pvpgn-server

这种方式其实是我最想推广的,这是一个可以利用红警2自带的 Westwood Online 协议进行广域网联机对战的服务端,需要部署在有公网 ip 的服务器上,正好我手里有一个广州地区的阿里云 ecs 便兴冲冲部署了上去。

阿里云 ecs 运行的是 linux ,于是找到安装指引:

Installation on Linux (Debian 8/9)
1) Install required dependencies
sudo apt-get -y install build-essential clang libc++-dev git cmake zlib1g-dev liblua5.1-0-dev libmysql++-dev
2) Download the latest source code and unpack archive
wget https://github.com/pvpgn/pvpgn-server/archive/master.tar.gz
tar xf master.tar.gz
3) Switch to the directory with source and create a new directory “build”
cd pvpgn-server-master
mkdir build
cd build
4) Configure and compile
cmake -D WITH_MYSQL=true -D WITH_LUA=true ../
make && make install
5) Run
/usr/local/sbin/bnetd

https://pvpgn.pro/pvpgn_installation.html

其实按照这个向导所说,本来不用配置就能直接开始运行,不过这里还是有坑:阿里云 ecs 网卡上绑定的不是一个公网 ip,而是一个内网地址,是由分配到的公网地址转发的。找了很久才发现对于这种情况需要额外配置 address_translation.conf.

Hosting on LAN or VPS with private IP address
Some VPS providers do not assign your server a direct public IP. If that is the case or you host at home behind NAT you need to setup the route translation in address_translation.conf. The public address is pushed as the route server address to game clients when seeking games. Failure to push the correct address to game clients results in players not being able to match and join games (long game search and error).

If your network interface is directly bound to public IP, PvPGN can figure it out on it’s own and this step is not necessary.

https://github.com/pvpgn/pvpgn-server/blob/master/README.md#hosting-on-lan-or-vps-with-private-ip-address

在 address_translation.conf 这个文件最末尾添加如下一行即可(根据实际地址调整,其中 192.168.1.4 是网卡绑定的地址,123.123.123.123 是公网地址):

192.168.1.4:4005 123.123.123.123:4005 192.168.1.0/24 ANY

如此一来服务端便可以开始运行,为了保证稳定性我多做了一步用 supervisorctl 来管理 bnet 进程,这需要 bnet 以非 daemonize 方式运行,用 -f 参数即可。

接下来是配置本地,将 Westwood Online 的域名解析到阿里云,最简单的方式是直接修改 hosts 文件,相对快捷定位到 hosts 文件的方式是:Windows键+r > drivers > etc > hosts,可以用记事本打开在文件末添加如下几行(123.123.123.123 替换为阿里云公网地址):

123.123.123.123 irc.westwood.com
123.123.123.123 gameres.westwood.com
123.123.123.123 servserv.westwood.com
123.123.123.123 apireg.westwood.com
123.123.123.123 battleclans.westwood.com
123.123.123.123 westwood.ea.com
123.123.123.123 games2.westwood.com

(在这里由于有两台电脑要改我觉得比较麻烦,便直接在路由器里改 dns 效果也一样)

至此之后可以打开尤里的复仇,在游戏里直接选择 網際網絡 便可以登陆 Westwood Online 开始游戏了。

然而发现有个致命的缺点,就是进入游戏后会发现前面费了好大劲搞的分辨率设置一下就不管用了…跟朋友第二次尝试便这样失败,现在想到可能是 ddraw 的问题,下一次重装的时候试试把补丁里的 ddraw 换成 ts-ddraw 或者 cnc-ddraw

2.3 VPN 联机

最后向现实屈服,选择了这种方式。简单暴力,既然支持局域网游戏那我只要通过 VPN 就可以连到一个虚拟的局域网,想必浩方平台也是类似这种方式,不过自建 VPN 的好处还是很明显,至少稳定性会有保障。关于 VPN 选择,考察了一大圈最终选了 SoftEther VPN,在 Windows 上的图形化操作很强大,与其他 VPN 相比配置很简单,甚至可以生成自定义安装包装完即用,真正的零配置适合分享给朋友用。(注: 后来跟老弟用这种方式玩红警3时候发现比较吃力,不知是不是阿里云只有1兆带宽的问题,然后用的 Hamachi VPN 可以用 p2p 的方式建立 VPN,然而也只是打完就删,卸载的时候也有坑,Hamachi 会修改网卡配置需要自己还原。综上,仅仅是红警2更建议 SoftEther VPN)

再写 SoftEther VPN 搭建过程会有很大篇幅,这里略过,大概就是在阿里云上安装服务端之后新建一个 Hub,创建4个用户(其实一个也就够了)。

在本地电脑上,只需要安装上客户端连上 SoftEther VPN 就可以打开游戏开始局域网联机模式了。由于连上 VPN 之后四台电脑的所有互联网流量都路由到 1mbps 的阿里云上会有点吃不消,好在我们当时四人联机用手机微信开语音,不会碰到拥塞问题。现在想来其实还可以再优化一步, 如果本机主路由不变,指定红警2联机的网卡到虚拟网卡便可以只让游戏流量通过VPN。

要指定红警2联机网卡的话,由于红警2局域网联机采用 ipx 协议,在 win10 上早已没有这个组件,所以需要用到 ipxwrapper(用 udp 协议封装模拟 ipx 协议),这个是临时查到,要是我会再帮好友装红警2的话应该会用到。

总结一下,能玩到红警2确实还是花费了一番功夫的结果,希望能跟女友能早点再来到自由玩红警的日子…还有温故知新也不假,回顾一下能想出更好的解决方案。

我的谷歌翻译不可能这么弱

平时上外文网站最依赖的就是 Google Translate,碰到不懂的单词或句子都是 Ctrl+T 新开个 标签页紧接着敲入 tra 按下回车就好,Chrome 根据历史记录自动就补全了 URL.

然而今天却有异常,起因是默认的翻译语言总是由 Detect language 到 English,前几次忍了也就算了没注意,但是慢慢的却发现…Google 今天居然笨到连个语言翻译习惯都记不住,而且还有的翻译成中文就一行字连个多义词都没有!

很快又觉察出其他不对,网页最上方居然多出了蓝色带下划线的超链接文字,没错是带下划线的蓝色,是比百度还难看的蓝色的置顶超链接…再看地址栏居然没有绿色小锁标志,看到 url 立刻真相大白:http://translate.google.cn,居然还不是 ssl…Orz

好吧既然如此大不了回到正轨,我手动在地址栏输入 translate.google.com,然而…神奇的事情出现了,居然眼睁睁的看着 .com 被重定向到 .cn. url 劫持就这么轻易出现了。

罢了,反正我是看到没有绿色小锁就不爽,我的 Chrome 不能就这样记住这个 cn 域名,一字一键的敲入完整的 https 连接后打开新标签页输入 tra 还是会优先跳出 http://translate.google.cn,那接着清除了这条历史 URL 就好了,以前没这种需求于是求助 google 得之.

具体这样操作,为免遗忘就记录一下:

  • 键入 tra 不用敲完就会出现补全
  • 按方向键把移动到要删除的那条 URL 使之高亮
  • 最后按下组合键 Shift+Del 便可从中删之

接下来自动补全出来的终于又能看到舒服的绿色小锁了.