為什麼魂斗羅只有128KB卻可以實現那麼長的劇情?

2022-05-17 11:26:49 字數 1657 閱讀 5709

現代程式設計師a和2023年代遊戲程式設計師b的對話:

a:為什麼你用128kb能實現這麼多畫面、**、動畫?

b:128kb還不夠麼?其實為了表現力已經相當奢侈了,加了很多不重要的細節。

a:就說你們的**,這個**,我壓到最低位元速率的***,也得至少1mb吧。

b:你怎麼壓的?一首背景**怎麼可能超過1kb。

a:那你實現全屏卷軸,用了多少視訊記憶體?

b:一共就只有2kb視訊記憶體,多了也放不下啊。

a:……

除非是專家,一般人根本無法估算到底多大算大,多小算小。

一般人對「資料量」並沒什麼概念。一篇800字的作文有多少資料量?按照gbk編碼,約1.6kb,按照utf-8編碼,則是2.4kb。

只寫了1個字的作文,按理來說1位元組~3位元組就夠了。但只寫1個字的word文件,有10956位元組【汗】。而由於硬碟格式化要求,再多占用1332位元組【再汗】。

我就寫了乙個字,真的什麼都沒乾

現實中常見的產品、流行的技術,實際上和時代背景密切相關。

當你抱著15寸筆記本還嫌小的時候,2023年代初的家庭,可是一家人圍著14~18寸的球面電視看的。把雪碧拿給古代人喝一口,估計他會齁得要死,必須喝點水壓壓驚。

當物質基礎變得十分豐富的時候,一定會產生無法避免的「浪費」,這種「浪費」會進一步改變人感受的閾值,對度量的估計都變得紊亂了。

由於早期的記憶晶元(rom)非常貴,而且大容量磁碟的技術也不成熟,所以暫且不論硬體計算能力,僅僅是想增加遊戲的總容量也非常困難。所以自然會使用符合當時水平的資料結構。

以紅白機fc為例,它的解析度為256x240。解析度不算低,但卻只有2kb視訊記憶體,而且還要實現全屏卷軸效果。所以在fc設計之初,從硬體上就提供了充分利用視訊記憶體的方法——使用tile(瓦片)。

對每乙個場景來說,使用若干數量的瓦片,場景用有限的瓦片拼接即可。這種「二級」表示方法能極大節約儲存量。具體一些原理講解可以看一些科普,比如這個:

b站指路:

現代**格式往往直接儲存聲道的波形,這種做法保真度高、通用性強,但很顯然占用空間多,一首曲子的容量以千位元組、兆位元組計算。

而八位晶元時代的音訊解決方案,關鍵是一顆專用晶元,例如fc用的理光2a03:

下:理光2a03

**也是類似的。

fc時代的遊戲,沒有所謂的「引擎層」,或者說引擎層就是「硬體層」。任天堂的主機完全是為遊戲而設計的,瓦片、調色盤、**、音效等基本功能已經預先考慮到了,這樣一來就節約了大量底層**。

程式設計師要仔細研究文件,在硬體框架下思考問題,比如如何顯示、如何捲動螢幕等等;而且還要非常熟悉硬體底層和彙編,不要浪費**空間。

一來二去,**也能寫的非常小。

總的來說,128kb的遊戲大作,在30年前稀鬆平常,放到現在簡直就是黑科技。科技的劇烈變革帶來技術指標非線性的變化,讓我們的記憶和直覺徹底落伍 :)

為什麼魂斗羅只有128KB卻可以實現那麼長的劇情?

個人覺得fc最神奇的遊戲還屬超級瑪麗,32個關卡,每關都不同,各種隱藏要素,好像 區才10多k,資料區10多k。反彙編看完還是不敢相信這點東西能玩乙個童年 現在helloworld的二進位制都可能比這大多了。首先128k並不小,主要消耗儲存空間的不是程式。當然對於128k來說程式大小自然也要考慮,鑑...

補碼10000000為什麼可以表示 128?

另外,什麼是補碼?補碼的設計意義是什麼?讓我們忘記公式,來看看作者的回答。很多人並不理解補碼。補碼就是同餘啊。1000000是正128你知道吧,正負128模256是同餘的。加減乘可以直接算也是同餘的定理決定的,而不是湊出來的巧合,哪可能湊出這種東西?8位只能表示256個數,0到255,但我還想表示一...

為什麼byte取值是 128到127

建議你baidu下 補碼 就會比較清楚了,第一位是符號位。00000000 0 11111111 1 10000000 128 01111111 127 負數的補碼 負數的補碼是對其原碼逐位取反,但符號位除外 然後整個數加1。同乙個數字在不同的補碼表示形式裡頭,是不同的。比方說 15的補碼,在8位2...