沒有源代碼 他用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 年、密密麻麻的更新日志,看著阿晨說的那句“網站的運營就是滿足我自己對紅警的熱愛”,你會明白:
當這個經典游戲在現代系統上越來越難運行,當官方沒有推出適配新系統的版本,總有人會站出來,用自己的方式守護共同的記憶。
他們不圖錢,甚至賠錢。
他們只是想讓每一個突然想起紅警的人,打開瀏覽器,就能回到那個夏天。