没有源代码 他用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:
这哥们不光把界面全部汉化,还用付费 CDN 加速,优化玩家网络体验。
最关键的是,他花了两周时间逆向 JS 代码,给移动端加上了快捷面板——编队、强攻、回基地,这意味着你即便用手机、平板,也能爽玩红警了。
后来 Alexandru 知道后,还专门为中文站开发了一套 API,也把中文站写进了致谢名单。
阿晨做 ra2web 原因很简单,他的经历和各位一样。
2021 年他在 Win10 上玩红警,调试兼容性调到崩溃。后来偶然接触到 Chronodivide 项目,想到国内一堆玩家还在买模拟器玩红警,于是注册了 ra2web 做中文站。
时至如今,ra2web 联机用户数已经超过 10 万,备受粉丝欢迎。
但阿晨为这个用爱发电的项目,也付出不少代价。
可能因为影响了商业平台和商家的利益,他的网站被攻击过,域名被 DNS 劫持过,还遭过一些人身攻击,也因为自掏腰包得不到家人理解。。。
阿晨和我说,他的网页红警账号之前莫名其妙上了次热门,原因是一堆人@网警时,把他也艾特上了。
时代确实变了,已经有很多人不知道红警是啥了。
但看着 Alexandru 那份持续 5 年、密密麻麻的更新日志,看着阿晨说的那句“网站的运营就是满足我自己对红警的热爱”,你会明白:
当这个经典游戏在现代系统上越来越难运行,当官方没有推出适配新系统的版本,总有人会站出来,用自己的方式守护共同的记忆。
他们不图钱,甚至赔钱。
他们只是想让每一个突然想起红警的人,打开浏览器,就能回到那个夏天。
责任编辑:落木
(来源:新浪科技)