没有源代码,有人竟然用5年重写《红警2》?
【来源:虎嗅网】
差友们,我要说一个离谱的事。
有这么一款游戏,过了二十多年,还有一堆人像磕了药一样天天玩。
它就是红警 2。
你别不信。
咱们编辑部就有好几个老哥,每天中午不看小姐姐也不刷差评君,就逮着红警视频下饭,完了周末还上对战平台 PK。
在各大媒体平台,也有很多专门制作红警视频的 UP 主,粉丝高达几十万甚至百万。
看到这,可能有差友回忆被勾起来了,脑子里已经框好几十辆光棱坦克准备 All in。
但问题来了,当你突然想来一把红警,回味下童年时——抱歉,你一定会被劝退。
你网上搜到的那些红警安装包,虽然能玩,但很容易遇到问题。你要调好兼容性,解决一个个报错弹窗,才能勉强进入游戏。
你可能想问,有没有电脑小白能玩上的版本?
有是有。
一些红警玩家会和你说,去下一个对战平台,再注册一个账号,接下验证码,完事了去大厅里加入或创建对局。
还是有点麻烦,有官方正版吗?
也有。
但即便在 Steam 上买了 EA 官方的红警 2,大概率也是花钱找罪受,黑屏、卡顿、报错的问题非常多,很多人表示体验还不如盗版。
以上,还是针对 Windows 用户而言。
至于 Mac 用户?哥们建议直接放弃治疗。
所以世超就想问了:
在这个地球上,到底还有没有简单粗暴点的方法,让咱们这种普通玩家想回味童年时,马上就能来一把红警呢?
别搞什么兼容性,什么报错,什么对战平台,系统要求,最好那啥,也别让我找资源,下载安装包……
有吗,有嘛?
其实算有的。
最近世超摸鱼时,找到一个网页版红警 Chrono Divide(时空分裂)。
注意,重点是:网页版,免费。
不管你是 PC、Mac、手机、平板还是小天才电话手表、冰箱门的显示器——只要有浏览器,点开就能玩。
其实一开始啊,世超对它没抱太大期望。毕竟网页性能摆在这,估摸着是个青春版,体验体验得了。
直到我打开它……
卧槽!单机、联机对战有了,天梯排位有了,甚至还支持打 mod。
游玩成本几乎没有,进入网页点 download,它会自己下载并解压游戏包。
10 秒后,你就能看到下面的画面了。
只能说,世超一下就回到了当年的暑假……
别急,再进入游戏操作两下。
光棱坦克、蜘蛛机器人、V3 火箭、基洛夫飞艇,你童年记忆里的一切,全都回来了。
就连更高阶点的操作,按住 Ctrl 强制攻击,工程师修复建筑,这些也都完美支持。
真要说美中不足,就是巡逻功能无法循环,粒子效果没有复现。
但各位,这可是一个网页啊!
更离谱的事情还在后面。
我本以为这是某种移植、封装、模拟器技术,把原版红警塞进网页里,但通过一周的努力联系上作者 Alexandru Ciucă,一个有 15 年编程经验的罗马利亚程序员,他告诉我——
哦,我用 TypeScript(JavaScript)重写了红警。
不是?重写游戏?
兄弟们,你要知道:
红警 2 源代码,官方都弄丢了!
所以 Alexandru 要重写游戏,就要通过黑盒逆向工程,分析红警 2 所有的行为逻辑。
有点难以理解?
想象一下,你要复刻一道菜,但没有菜谱。你只能观看别人吃这道菜的视频,通过筷子动作、咀嚼节奏,来猜测食材的软硬、口感。
Alexandru 就是这样复刻红警的。
除了官方的美术素材,rule.ini 配置文件(写着每个单位的攻击力、血量、成本)可以直接引用——
整个游戏逻辑核心引擎,都是 Alexandru 靠着录屏、慢放、逐帧分析、修改 rules.ini 文件、一遍遍测试、试错,推导出游戏逻辑的。
火箭飞行兵起飞时的动画是怎样的?在空中时那种一上一下的飞行状态如何复刻?建筑摧毁后四散碎片是怎么飞溅的?
这些都需要反复斟酌,反复模拟的。
这个工程量到底有多大,没人知道。
但看到官网的更新日志密密麻麻记录了整整 5 年,咱心里也差不多有数了。
不过,有意思的来了。
世超在日志中翻到了几个版本,说修复了红警 2 原版 bug。
比如 0.64 版本,修复防空步兵对防空炮的伤害(原版《红警2》bug)。
0.18版本,建筑工厂不再能够同时被打包/移动和出售(红戒2及尤里复仇 bug );防止免费工程师被刷出。
嘶,是不是不太对?
按理说,游戏引擎和代码都是自己重写的,为啥会有原版 Bug?
对于这个问题,Alexandru 的回答很让人震惊。
我给大伙总结下,网页红警 bug 有 3 种。
第一种属于逻辑 bug。
Alexandru 写了一些基础规则后,一些复杂的游戏机制就可以在这个规则基础上直接形成,同样也会带来 bug。好比你用乐高按照别人的设计堆房子,别人的房子有 bug 不太稳,你的也一样。
第二种属于数据 bug。
Rules.ini 配置文件,里面记录着所有单位的攻击力、血量、建造成本这些参数。当官方自己写错了参数值,那 Alexandru 导入这个配置文件时,也会出错。
第三种属于故意的 bug。
众所周知,有些 bug 存在久了,反而会成为游戏特色和文化,比如 CF 鬼跳,街霸 2 的取消技,文明的核弹狂魔甘地。
红警也是如此。
现在很多对战平台会评估红警 bug:不影响平衡性的就保留,成为游戏特色;严重破坏公平的才打补丁修复。
所以到这你也明白了:
Alexandru 为了完美还原红警 2 的手感,把某些原版 bug 也复刻了出来。
什么叫真正的原汁原味啊……
但这,还不算复刻红警最困难的部分,最让 Alexandru 头疼的是在 3D 引擎里渲染 2D 的素材。
原版红警用的是画家算法(一种图形渲染技术)。
它把 2D 图像一层层叠在平面上,靠着先后排序(比如让士兵盖在草地上面),达到一种立体效果。
但网页版红警用了真正的 3D 引擎来显示这些贴图后,反而出问题了。
坦克该压着草地还是草地该露出来,建筑该挡住士兵多少,这些细节会很难和原版对得上。
“ 这种底层决定一旦做了就改不了,我在这些细节上花的时间简直荒谬 ”,这是 Alexandru 原话。
所以,这么一个方便你游玩红警的网页项目,背后真下了很大的功夫。
目前 GitHub 上有个叫 redalert2 的仓库,里面反编译了 Chrono Divide 的代码并开源,大家有兴趣的或者也想重制一个网页红警,可以逛一逛。
写到这,世超发现 Chrono Divide 虽然牛逼,但对国内玩家还是有门槛:
英文界面得慢慢适应,第一次进入要等待下载美术资源,国内联机时延迟也比较高,平板上操作也很费劲。
原本世超还打算写一点使用教程,但发现有人已经把事情办了。
北京一个前端程序员阿晨,做了一个中文镜像网站 ra2web。
https://www.ra2web.com/
这哥们不光把界面全部汉化,还用付费 CDN 加速,优化玩家网络体验。
最关键的是,他花了两周时间逆向 JS 代码,给移动端加上了快捷面板——编队、强攻、回基地,这意味着你即便用手机、平板,也能爽玩红警了。
后来 Alexandru 知道后,还专门为中文站开发了一套 API,也把中文站写进了致谢名单。
阿晨做 ra2web 原因很简单,他的经历和各位一样。
2021 年他在 Win10 上玩红警,调试兼容性调到崩溃。后来偶然接触到 Chronodivide 项目,想到国内一堆玩家还在买模拟器玩红警,于是注册了 ra2web 做中文站。
时至如今,ra2web 联机用户数已经超过 10 万,备受粉丝欢迎。
但阿晨为这个用爱发电的项目,也付出不少代价。
可能因为影响了商业平台和商家的利益,他的网站被攻击过,域名被 DNS 劫持过,还遭过一些人身攻击,也因为自掏腰包得不到家人理解……
阿晨和我说,他的网页红警账号之前莫名其妙上了次热门,原因是一堆人@网警时,把他也艾特上了。
时代确实变了,已经有很多人不知道红警是啥了。
但看着 Alexandru 那份持续 5 年、密密麻麻的更新日志,看着阿晨说的那句“网站的运营就是满足我自己对红警的热爱”,你会明白:
当这个经典游戏在现代系统上越来越难运行,当官方没有推出适配新系统的版本,总有人会站出来,用自己的方式守护共同的记忆。
他们不图钱,甚至赔钱。他们只是想让每一个突然想起红警的人,打开浏览器,就能回到那个夏天。
图片、资料来源:
网页红警:https://chronodivide.com/
网页红警中文站:https://www.ra2web.com/
GitHub – huangkaoya/redalert2
本文来自微信公众号:差评X.PIN,作者:刺猬,编辑:莽山烙铁头