這個(gè)程序員瘋了,竟然用寫匯編游戲,狂賺3000萬美元!
誰是歷史上最厲害的游戲開發(fā)人員?
是瑞典程序員Markus Persson嗎?他開發(fā)了《我的世界》,以25億美元的價(jià)格賣給了微軟,成為了億萬富翁。
圖片
是美國程序員Eric Barone嗎?他一個(gè)人干了一個(gè)游戲團(tuán)隊(duì)的活:策劃,設(shè)計(jì),編程,測試、美工、音樂,開發(fā)了《星露谷物語》,賣了2000萬份。
圖片
是美國程序員John Carmack嗎?他開創(chuàng)了第一人稱射擊游戲,開發(fā)了《Doom》《Quake》等經(jīng)典游戲,發(fā)明了眾多革命性技術(shù),如“快速平方根算法”,卡馬克反轉(zhuǎn),表面緩存等。
圖片
不,他們都不是,有史以來,最厲害的游戲開發(fā)者蘇格蘭程序員Chris Sawyer,他開發(fā)了《過山車大亨》。
圖片
為什么他這么厲害呢?
首先,他是一個(gè)獨(dú)立的開發(fā)者,和Eric Barone一樣,獨(dú)自一人開發(fā)了一個(gè)龐大復(fù)雜的游戲,在PC游戲時(shí)代,《過山車大亨》賣了1000萬份,能擊敗它的只有《模擬人生》。
其次,他使用匯編語言開發(fā)了《過山車大亨》,把電腦性能壓榨到了極致,游戲1999年發(fā)布,即使是當(dāng)時(shí)性能最差的電腦,也能運(yùn)行《過山車大亨》。
你沒看錯(cuò),這個(gè)游戲99%的代碼是用匯編寫的,只有少量的 C 代碼用于與 MS Windows 和 DirectX 交互。
很多同學(xué)都在應(yīng)用層用高級(jí)編程語言寫業(yè)務(wù)邏輯,很難體會(huì)到用匯編寫游戲意味著什么。
一個(gè)簡單的hell world , 在Python就一句話 print("Hello World!)
但是在匯編中就變得復(fù)雜無比。
data segment
string db 'Hello,World!$'
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov dx,offset string
mov ah,9
int 21h
mov ah,4ch
int 21h
code ends
end start
你需要操作CPU的各種寄存器來設(shè)置參數(shù),調(diào)用系統(tǒng)中斷來輸出。
直接和硬件打交道,極其底層,極其麻煩。
沒有對(duì)CPU和硬件的精深理解,根本寫不了。
匯編不僅難寫,更是難讀。這里沒有變量名輔助記憶,相比于高級(jí)語言,匯編代碼的復(fù)雜度可以說是呈指數(shù)級(jí)增長。
除非你要學(xué)習(xí)/編寫編譯器、操作系統(tǒng)、嵌入式代碼,否則,盡量不要去碰它。
和很多大牛一樣,Chris Sawyer從小就開始玩計(jì)算機(jī),玩游戲,玩得不過癮就自己寫。
16歲就在Memotech MTX500上用Z80匯編寫游戲,并且主動(dòng)把游戲郵寄給Memotech 公司進(jìn)行發(fā)行,賺了點(diǎn)小錢。
高中畢業(yè)后,Chris上了格拉斯哥斯特拉斯克萊德大學(xué),學(xué)的是計(jì)算機(jī)科學(xué)和微處理器。
80年代,PC時(shí)代正式開啟,MS-DOS一統(tǒng)天下,Chris在一家游戲公司做了很多把Amiga游戲移植到DOS平臺(tái)的工作,對(duì)底層編程,尤其是匯編建立了精深的理解。
用他自己的話來說:“我已經(jīng)在 x86 匯編中編程了很長時(shí)間,我很少需要用手冊(cè)來查找東西。”
1994年,Chris受到《鐵路大亨》的啟發(fā),開發(fā)了《運(yùn)輸大亨》,大獲成功,版稅成為他源源不斷地收入來源。
Chris在歐洲和美國四處旅行時(shí),迷上了過山車。
他去過數(shù)百個(gè)游樂園,玩了700多次過山車!
最瘋狂的時(shí)候,他甚至兩周時(shí)間參觀了美國14個(gè)主題公園,只是為了坐過山車。
正是由于對(duì)過山車的熱愛,他在制作《過山車大亨》時(shí),考慮了各種各樣的細(xì)節(jié),讓玩家身臨其境。
在游戲中,玩家需要扮演游樂園經(jīng)營者角色,目標(biāo)是從頭開始建造一個(gè)主題公園。
玩家需要改造土地,貸款獲取資金,修建游樂設(shè)施,建造各種過山車(從木頭到鋼制的),旋轉(zhuǎn)木馬、卡丁車、摩天輪、鬼屋、迷宮、電影院和各種驚險(xiǎn)游樂設(shè)施。
還需要安排機(jī)械師來修理設(shè)施,清潔工來打掃衛(wèi)生,保安來避免破壞,還需要安排藝人穿著夸張的服裝跳舞,為排長隊(duì)的人們提供娛樂,甚至整個(gè)公園的浴室也必須精心布置。
一切的目的都是讓客人滿意,樂在其中。
圖片
在實(shí)現(xiàn)技術(shù)上,Chris選擇了匯編,因?yàn)樵?998年,電腦的性能還不夠高,《過山車大亨》需要成千上萬的游客在公園中游玩,多個(gè)過山車在不同的軌道行駛,不同的音樂和音效可以相互重疊播放,營造出一種喧囂的氛圍。
圖片
此時(shí)Java已經(jīng)誕生,但是它主要用于服務(wù)器端編程,做這樣的游戲肯定是不行的。
C++應(yīng)該可以,但是對(duì)Chris來說,匯編才是一個(gè)自己做出極致優(yōu)化的編程語言。
2
在蘇格蘭的一個(gè)小村莊里,Chris開始了《過山車大亨》的開發(fā)。
他裝備了兩臺(tái) PC:一臺(tái)快速的用于編碼,另一臺(tái)較慢的用于測試。
后來,游戲的要求是Intel Pentium 90Mhz 和至少 16 MB RAM。
他的辦公室還放著一臺(tái)點(diǎn)陣打印機(jī)、一臺(tái)傳真機(jī)、一本關(guān)于 x86 匯編代碼的袖珍指南,以及500 多頁的參考書,這對(duì)他來說已經(jīng)足夠了。
由于使用匯編語言,Chris并沒有良好的IDE可以使用,微軟的Microsoft Macro Assembler (MASM)中自帶了一個(gè)編輯器,Chris就用它來編程。
圖片
《過山車大亨》是唯一一個(gè)用x86匯編寫的游戲嗎?
絕對(duì)不是,用匯編其實(shí)是90年代中期之前常見的做法,因?yàn)闄C(jī)器性能很差,沒有專用的GPU,用匯編來提高性能是常見的做法,比如《帝國時(shí)代》也使用了大量匯編。
圖片
但是,那些游戲都是由團(tuán)隊(duì)完成的,只有《過山車大亨》,是Chris一個(gè)人用匯編一行行地碼出來的。
兩年的瘋狂編碼,用匯編對(duì)性能極致壓榨,《過山車大亨》于1999年上市發(fā)行。
《過山車大亨》遇上了好時(shí)候,1999年,大約四分之一的美國家庭連上了互聯(lián)網(wǎng)。
人們使用郵件,即時(shí)通訊工具,論壇等新興的互聯(lián)網(wǎng)工具來分享各自玩游戲的體驗(yàn)。
品質(zhì)過硬,速度飛快的《過山車大亨》以前所未有的速度吸引了一批狂熱的追求者。
僅僅在美國,1999年就賣了驚人的70萬份!
最終,Chris從《過山車大亨》等游戲中賺了3000萬美元。
真正的熱愛加上精湛的技術(shù)成就了《過山車大亨》的巨大成功。
他寫的游戲指南長達(dá)60多頁,經(jīng)常引用現(xiàn)實(shí)中的過山車游樂園,他對(duì)游樂園的熱愛甚至體現(xiàn)在那些抱怨食物太貴和需要去洗手間的游客身上。
如果Chris對(duì)過山車不那么熱愛,雖然他也能做出過山車游戲,但是絕對(duì)無法給玩家?guī)頍o與倫比的沉浸感,玩家也就不會(huì)自發(fā)傳播。
而使用匯編則帶來了最優(yōu)異的性能,保證能在幾乎所有電腦上玩得飛起。
有意思的是,兩個(gè)游戲愛好者用C語言開發(fā)了一個(gè)《過山車大亨》的開源實(shí)現(xiàn),修復(fù)了原有的一些問題,添加了一些多人游戲,高清支持,作弊代碼等功能,感興趣的同學(xué)可以去看看:https://openrct2.org/
如需轉(zhuǎn)載,請(qǐng)通過作者微信公眾號(hào)coderising獲取授權(quán)。