關於星際爭霸中的Bug——小狗變飛龍,國內大神帶你來深度剖析!

這篇文章是知乎上一個大神研究出來的,小編看後大呼過癮,簡直絕了!

By:知乎大神 Thinkraft

小狗變飛龍是bug嗎?

顯然是,而且相當嚴重。1.05版的補丁文件裡明確提到修復了這個bug:

Fixed the bug that incorrectly allowed 'morph to lurker' commands to be issued to units that weren't hydralisks.

翻譯成中文,就是:

修復了允許刺蛇以外的東西“變形到潛伏”錯誤命令的Bug。

關於星際爭霸中的Bug——小狗變飛龍,國內大神帶你來深度剖析!

這裡我要強調幾點:

1.小狗變飛龍是BW1.04版獨有的bug,只有這個版本有。1.03版的時候還沒BW,沒法變;1.05版以後已經修復。

2.小狗變飛龍的bug的正確表述如補丁文件所言,是「刺蛇以外的東西能變地刺」。實際表現是單位可以通過bug操作變成「孵地刺的飛龍蛋」,不取消就會變成地刺,取消就會變成飛龍並全額退款(相當於免費變飛龍)。不只是小狗,遊戲中絕大多數單位都可以用相同操作bug變蛋、繼而變飛龍,包括其它種族的單位,甚至建築。

3.這個bug以小狗變飛龍的形式出名也是有原因的。為什麼是小狗,是因為小狗作為消耗品最便宜(變成飛龍後原單位會永久消失),而且用狗變出的飛龍性能很強,只佔1.5人口、繼承狗的跑速、攻速升級(想想升級了狂爪和狗速的飛龍那該有多恐怖!),性價比遠超用其它單位變。至於為什麼是飛龍,因為免費啊,要是不取消押金就沒了啊。

4.小狗變飛龍觸發bug變蛋的充分必要操作是,選刺蛇命令它變身的瞬間選到其它單位,不需要像網傳那樣按著Alt瘋狂121212。Alt鍵這裡的作用只是加快GUI的反應,能在變身圖標發白的時候更早一點切換編隊,但其實時機正確的話是不需要按Alt的,手法好的話一次可以成功。

那麼問題來了,為什麼會出現這個bug?

因為1.04版的資料片升級,蟲族新增了地刺(Lurker)這個單位,遊戲給刺蛇增加了”變身成地刺”這個指令,卻沒有嚴格檢查“執行指令的單位是不是刺蛇”。

正常來講這確實沒啥問題——只要玩家選擇的單位不是刺蛇,哪怕是其它單位和刺蛇混選,命令菜單裡也是沒有變身這個操作的。

關於星際爭霸中的Bug——小狗變飛龍,國內大神帶你來深度剖析!

但是,很快就有玩家在激烈對戰中開發出了一個飄逸操作:先單獨選擇刺蛇,命令它執行變身的一瞬間選擇其它單位,就相當於讓後來選中的單位執行了變身成地刺」的命令。

更詭異的是,這些冒名頂替的單位竟然不是像刺蛇那樣變成普通的蛋蛋,而是變成了漂在空中的飛龍蛋(飛龍變螃蟹/大蝦時的蛋,如下圖),而且孵的內容是地刺。

關於星際爭霸中的Bug——小狗變飛龍,國內大神帶你來深度剖析!

如果變身成功結束,它們就會變成地刺。但如果玩家這時取消變身,這些單位會變成飛龍。

關於星際爭霸中的Bug——小狗變飛龍,國內大神帶你來深度剖析!

注意屏幕頂端的錢和人口,錢全退到變之前的狀態了,一整隊飛龍只佔了18人口。用人口1以上的單位變出的飛龍是正常的2人口,但狗變出來的只佔1.5人口。

第二個問題,為什麼會變成飛龍而不是其他單位?

我手上當然沒有星際爭霸的源代碼,說什麼都是瞎猜,死無對證。但是作為程序員,從程序角度上分析,最有可能的原因是這樣的:

原版SC中,蟲族只有兩種單位可以變身,一個是基地爬出來的那種幼蟲(Larva),可以變成各種單位;另一個就是飛龍,可以變成螃蟹。

於是,開發團隊在熬夜嚴重、頭腦不清醒的狀態下,代碼大概會寫成這種邏輯:

如果原單位是幼蟲,就變普通蛋;否則變飛龍蛋。

再然後遊戲發售,大受歡迎,老闆龍顏大悅:搞資料片,加新單位!

於是就有了醫療兵、瓦基裡、地刺、大蝦、隱刀、海盜船這些BW單位。

但是問題來了,地刺是刺蛇變的對不對?

這樣原來的代碼就不能用了,怎麼辦,只好打個補丁上去:

如果原單位是幼蟲或刺蛇,就變普通蛋;否則變飛龍蛋。

本來這樣能行,問題是刺蛇變身那邊的代碼寫漏了,忘了檢測原單位是不是刺蛇,於是當小狗、農民、基地……反正除了刺蛇和幼蟲之外的一切東西,只要執行進去了,程序一看,哦哦不是幼蟲也不是刺蛇,那就變成飛龍蛋吧。

然後”取消變身”的代碼,我估計是這種邏輯:

飛龍蛋(或者說:普通蛋以外的蛋)取消,就給飛龍。

於是,你取消了這個蛋,它就變成飛龍了,哪怕它原本只是條狗,這就是我推測的的前因後果。

關於星際爭霸中的Bug——小狗變飛龍,國內大神帶你來深度剖析!

最後附上一些論據,雖然我前面說是瞎猜,但也不是空口無憑。如果你考慮到以下事實,應該會覺得我的猜測還是很靠譜的。

1.刺蛇不能變飛龍,即使用了bug變蛋操作也只能變成普通的「孵地刺的蛋」,然後和正常一樣,取消就變回刺蛇、不取消就變成地刺。

2.幼蟲也不能變飛龍,但用bug變蛋手法可以變成「直接孵地刺的蛋」(跳過了造刺蛇的消耗),如果取消變身,會直接死掉。

3.其它各種單位用bug變蛋手法變「孵地刺的飛龍蛋」如出一轍,只是最後孵出的飛龍性能不同而已(會繼承原單位的某些升級和被動技能)。

關於星際爭霸中的Bug——小狗變飛龍,國內大神帶你來深度剖析!

上圖是用蟲族基地變的飛龍,之前留下的幼蟲會像鴨子一樣一直跟著這隻飛龍走!

關於星際爭霸中的Bug——小狗變飛龍,國內大神帶你來深度剖析!

上圖是神族仲裁變的飛龍可以使附近單位隱形,之所以自己也隱形了,是因為仲裁的被動原理是使半徑內除仲裁以外的單位隱形,飛龍不屬於仲裁這個單位,所以自己也隱形了!

以上就是小狗變飛龍的全部原理,大為震撼!

當年我們知道這回事,現在我們知道怎麼有的這回事!

相關推薦

推薦中...