為什麼魂鬥羅隻有128KB,卻可以實現那麼長的劇情?

個人覺得fc最神奇的遊戲還屬超級瑪麗,32個關卡,每關都不同,各種隱藏要素,好像代碼區才10多k,數據區10多k。

為什麼魂鬥羅隻有128KB,卻可以實現那麼長的劇情?

反匯編看完還是不敢相信這點東西能玩一個童年… 現在helloworld的二進制都可能比這大多瞭。

首先128k並不小,主要消耗存儲空間的不是程序。

當然對於128k來說程序大小自然也要考慮,鑒於fc是八位機而且FC采用的是CISC處理器,一條指令就能完成很多事情,所以程序的大小也就現代64位RISC處理器的十幾到幾百分之一。

資源才是大戶(包括圖像、音樂、地圖數據、關卡數據等等)。就拿圖像和音樂來說,圖像在沒有壓縮之前 消耗存儲空間和像素深度和大小有關。

FC上的圖像,像素深度就2bit的索引而已 ,現在廣泛使用的真彩色是24bit,包含alpha的需要32bit,這裡就差瞭12倍到16倍。

圖像大小更是差距巨大,FC普遍一個角色也就是寬高十幾個像素而已,與現在動輒寬高幾千像素圖像資源相比差瞭數萬倍到數百萬倍,所以圖像資源消耗的存儲空間至少差瞭5~7個數量級。

音樂的話,FC采用的是8位midi音樂,而現在普遍用的是PCM音樂。類比到圖像中,就像矢量圖像和位圖的區別。

總之PCM音樂的大小和采樣深度、采樣率、通道數以及長度有關,midi僅僅和譜子的復雜度有關,所以FC實際上對空間的要求和現代遊戲相比至少差瞭5~7個數量級。你把128k放大10w倍到1000w倍,你就不覺得小瞭。

對於什麼64k 3d程序什麼的,這完全是兩碼事,FC程序小隻是因為需求的資源本來就很小而已

而那種64k 3d程序是因為采用Procedural generation方法,簡單的說就是通過數學來描述,而不是通過記錄結果的采樣

Procedural generation不光需要的存儲空間極小,而且可以做到無限精度,缺點是難以描述復雜事物,並且對算力要求高,而不是用瞭什麼外星壓縮法。

總結

  1. 遊戲大量復用圖塊,圖塊還使用調色板索引,好像每個像素才占用2bit
  2. 程序員精心優化各種數據結構,每一bit存儲都不浪費。
  3. 聲音隻存儲發聲通道的調制參數序列,能復用就復用。
  4. 代碼全是匯編寫成,直接操作硬件,基本不存在浪費的指令。

作者:紅白機

來源:https://www.zhihu.com/question/50076174

Published in News by Awesome.

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *