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


1.遊戲大量復用圖塊,圖塊還使用調色板索引,好像每個像素才佔用2bit。

2.程序員精心優化各種數據結構,每一bit存儲都不浪費。

3.聲音只存儲發聲通道的調製參數序列,能復用就復用。

4.代碼全是彙編寫成,直接操作硬體,基本不存在浪費的指令。

個人覺得fc最神奇的遊戲還屬超級瑪麗,32個關卡,每關都不同,各種隱藏要素,好像代碼區才10多k,數據區10多k。反彙編看完還是不敢相信這點東西能玩一個童年…現在helloworld的二進位都可能比這大多了。


下文摘錄自於春的《電腦遊戲機硬體與編程特技》p.267-277,侵刪。

5.4.4 優化查表法

《魂斗羅》遊戲已為廣大朋友所熟悉、所喜愛。該遊戲的編程中有許多優化的方法可供我們學習和借鑒。茲特列兩例供參考。

①武器選項畫面的繪製

壓縮版的《魂斗羅》遊戲開始有一個武器選項畫面(見圖5-9)。在該畫面,遊戲者可通過選擇鍵(SELECT)在四種武器中任選其一。該畫面的繪製程序見 No.5-25。

No.5-25《魂斗羅》武器選項畫面的繪製程序

F80D A94E LDA #$4E
F80F 8500 STA $00
F811 A9F8 LDA #$F8
F813 8501 STA $01 ;置繪圖數據區首址於 $00、$01 單元
F815 A000 LDY #$00
F817 B100 LDA ($00),Y
F819 8D0620 STA $2006 ;置 PPU 地址高位
F81C C8 INY
F81D B100 LDA ($00),Y
F81F 8D0620 STA $2006 ;置 PPU 地址低位
F822 C8 INY
F823 B100 LDA ($00),Y
F825 AA TAX
F826 3011 BMI $F839 ;判斷送數指南,若大於 H7F 則
F828 C8 INY ;轉 $F839
F829 B100 LDA ($00),Y ;送數指南小於 H80 的送數處理,
F82B 8D0720 STA $2007 ;將其後的 N 個數送入 PPU。
F82E CA DEX
F82F D0F7 BNE $F828
F831 C8 INY
F832 B100 LDA ($00),Y
F834 C980 CMP #$80
F836 D0DF BNE $F817 ;不是 H80 則改變 PPU 地址,繼續送數
F838 60 RTS ;如是 H80 則結束送數
F839 8A TXA
F83A 297F AND #$7F
F83C AA TAX ;以該數的 D6~D0 位為計數器,將其後
F83D C8 INY ;的一數連送 N 次。
F83E B100 LDA ($00),Y
F840 8D0720 STA $2007
F843 CA DEX
F844 D0FA BNE $F840
F846 F0E9 BEQ $F831

數據區如下:

F84E 3F 00
PPU 配
F850 08 0F 20 20 20 0F 27 27 27 3F 10 04 0F 05 0F 17
色,送 $3F00~$3F07。 送 PPU $3F10~$3F13
F860 23 d0 88 50 20 E4 17 20 20 20 20 20 20 20 20 20
背景零頁配色,$23D0~$23D7
F870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 2A
F880 0B 47 41 4D 45 00 53 45 4C 45 43 54 21 66 93 3F
G A M E S E L E C T
F890 21 AA 0B 41 40 00 43 4F 4E 54 52 41 00 31 21 EA
A . C O N T R A 1
F8A0 0B 42 40 00 43 4F 4E 54 52 41 00 32 22 2A 0B 43
B . C O N T R A 2 C
F8B0 40 00 43 4F 4E 54 52 41 00 33 22 6A 0B 44 40 00
. C O N T R A 3 D .
F8C0 43 4F 4E 54 52 41 00 34 00 00
C O N T R A 4

圖 5-9 的數據區僅僅使用了 124 個單元就完成了 PPU 配色、背景頁配色和畫面顯示,雖然四行都是相同的內容(CONTRA),但數據區中已留出了相應的空間,即使送顯其它內容,數據區也不會增加。

程序 No.5-25 的結構比較簡單,讀者可自己完成程序的轉換,不多贅述。

②《魂斗羅》標題畫面的繪製

我們知道,《魂斗羅》的標題畫面是由畫寫的「CONTRA」和兩個主人翁的上身組成的。畫面既簡單又富有力的感召,是正義和美的有機結合與升華。《魂斗羅》僅憑一幅標題畫面就勾起了人們的無限遐思與嚮往,這怎能不令人欽佩和驚嘆呢!現在讓我們看看這一標題畫面是如何繪製的。

標題畫面的繪製程序在 $C9CF~$CA60,其數據區在第二體的 $9097~$9251,現抄錄如下,見程序 No.5-26

N0.5-26《魂斗羅》標題畫面繪製程序

C9CF A001 LDY #$01 ;該子程序調用前已向 $00、$01 單元
C9D1 B100 LDA ($00),Y ;置入數據區首址 $9097
C9D3 8D0620 STA $2006 ;置 PPU 地址高位
C9D6 88 DEY
C9D7 B100 LDA ($00),Y
C9D9 8D0620 STA $2006 ;置 PPU 地址低位
C9DC A902 LDA #$02
C9DE A604 LDX $04
C9E0 1001 BPL $C9E3
C9E2 0A ASL ;若 $04&>H7F 則 A=4
C9E3 A200 LDX #$00
C9E5 2092C8 JSR $C892 ;調整取數地址。
C9E8 A000 LDY #$00
C9EA B100 LDA ($00),Y
C9EC C9FF CMP #$FF ;若 A==HFF 則結束送數
C9EE F06B BEQ $CA5B
C9F0 C97F CMP #$7F ;若 A==H7F 則改變 PPU 地址
C9F2 F05D BEQ $CA51
C9F4 A8 TAY
C9F5 1026 BPL $CA1D
C9F7 297F AND #$7F
C9F9 8502 STA $02 ;若取數指南小於 H7F 則以 $02 為計數器,
C9FB A001 LDY #$01 ;送後面的 N 個數。
C9FD B100 LDA ($00),Y
C9FF A604 LDX $04
CA01 1003 BPL $CA06
CA03 2036CA JSR $CA36 ;若 $04&>H7F 則延時送數
CA06 8D0720 STA $2007
CA09 C402 CPY $02
CA0B F003 BEQ $CA10 ;送到送數數量則轉 $CA10 調整地址
CA0D C8 INY
CA0E D0ED BNE $C9FD ;未達到送數數量則轉 $C9FD 繼續送數
CA10 A901 LDA #$01
CA12 18 CLC
CA13 6502 ADC $02
CA15 A200 LDX #$00
CA17 2092C8 JSR $C892 ;調整取數地址
CA1A 4CE8C9 JMP $C9E8
CA1D A001 LDY #$01 ;當取數指南 &>H7F 時,把後面的一個數據
CA1F 8502 STA $02 ;連送 N 次的處理。
CA21 B100 LDA ($00),Y
CA23 A402 LDY $02
CA25 A604 LDX $04
CA27 1003 BPL $CA2C
CA29 2036CA JSR $CA36
CA2C 8D0720 STA $2007
CA2F 88 DEY
CA30 D0FA BNE $CA2C
CA32 A902 LDA #$02
CA34 DODF BNE $CA15 ;一次送數結束後,調整取數地址
CA36 8503 STA $03 ;以下是延時子程序
CA38 0603 ASL $03
CA3A 6A ROR
CA3B 0603 ASL $03
CA3D 6A ROR
CA3E 0603 ASL $03
CA40 6A ROR
CA41 0603 ASL $03
CA43 6A ROR
CA44 0603 ASL $03
CA46 6A ROR
CA47 0603 ASL $03
CA49 6A ROR
CA4A 0603 ASL $03
CA4C 6A ROR
CA4D 0603 ASL $03
CA4F 6A ROR
CA50 60 RTS
CA51 A901 LDA #$01
CA53 A200 LDX #$00
CA55 2092C8 JSR $C892 ;調整取數地址
CA58 4CCFC9 JMP $C9CF
CA5B 60 RTS ;結束送數

調整取數地址子程序

C892 18 CLC
C893 7500 ADC $00,X
C895 9500 STA $00,X
C897 9002 BCC $C89B
C899 F601 INC $01,X
C89B 60 RTS

繪圖數據

9097 00 20 4B 00 8B 00 00 00 00
PPU $2000 先送 H4B 個 00、又送 H0B 個 00
90A0 00 00 00 00 00 00 00 14 00 8C 00 00 00 00 00 00
送 H14 個 00,送 H0C 個 00(下同,不再注釋)
90B0 00 00 00 00 00 00 14 00 82 00 00 3A 00 86 02 03
90C0 04 05 06 07 19 00 89 11 12 13 14 15 16 17 18 19
90D0 16 00 8A 20 21 22 23 24 25 26 27 28 29 16 00 83
90E0 60 61 62 04 00 82 08 09 17 00 96 70 71 72 00 00
90F0 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 0A 0B 0C
9100 0D 0A 00 97 80 81 82 00 00 73 74 75 76 77 78 79
9110 7A 7B 7C 7D 7E 7F 1A 1B 1C 1D 1E 09 00 98 90 91
9120 92 00 00 83 84 85 86 87 88 89 8A 00 8C 8D 8E 8F
9130 2A 2B 2C 2D 2E 2F 08 00 98 A0 A1 A2 A3 00 93 94
9140 95 96 97 98 99 9A 00 9C 9D 9E 9F 3A 3B 3C 3D 3E
9150 3F 09 00 8B B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB 17
9160 00 86 A4 A5 A6 A7 A8 A9 27 00 85 C4 00 D0 D1 D2
9170 1A 00 87 D3 D4 D5 E0 E1 E2 E3 0B 00 8B 50 4C 41
P L A
9180 59 00 53 45 4C 45 43 54 04 00 85 E4 E5 F0 F1 F2
Y S E L E C T
9190 1A 00 88 F3 F4 F5 C5 C6 C7 C8 C9 0C 00 88 31 00
91A0 50 4C 41 59 45 52 03 00 85 CA CB CC CD CE 03 00
P L A Y E R
91B0 82 EF D6 15 00 86 D9 DA DB DC DD DE 04 00 81 E6
91C0 0B 00 90 32 00 50 4C 41 59 45 52 53 00 E9 EA EB
2 P L A Y E R S
91D0 EC ED EE 01 00 81 F6 17 00 84 D7 D8 E7 E8 13 00
91EO 8D 00 00 00 00 00 00 00 00 00 00 00 00 00 0E 00
91F0 97 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
9200 00 00 00 00 00 00 00 00 10 00 8B 00 00 00 00 00
9210 00 00 00 00 00 00 0E 00 97 00 00 00 00 00 00 00
9220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (以下為配色數據)
9230 4D 00 83 A0 A0 20 06 00 82 58 52 03 50 83 00 00
9240 20 05 05 05 00 83 CC FF F3 05 00 83 FF FF CC 11
9250 00 FF

圖5-10《魂斗羅》標題畫面的圖形代碼坐標圖

注——數據區中,凡下面劃雙線的數據為取數指南【註:輸入的時候省略掉了】。

程序 No.5-26 使用了 442 個數據完成了標題畫面的繪製。實際上單對標題畫面而言,數據量還可以壓縮。如在清屏以後繪圖時,數據區中的 $9097~$90BC 和 $91E0~$922F 這 118 個置零(清屏)的數據可以刪除【註:這 118 個 00 其實是廠商 LOGO 顯示的數據,被盜版廠商直接置零不顯示】,那麼數據區將減少到 326 個單元。可見,程序 No.5-26 是較優化的繪圖程序。

標題畫面的圖形代碼排列見圖 5-10。

【註:省略一段於春修改的程序代碼】

5.4.5 間接分段繪圖法(《魂斗羅》遊戲畫面的基本繪製方法)

《魂斗羅》中的遊戲畫面都是採取間接分段繪圖法繪製的。這種繪圖方法的特點是:整幅畫面分散繪製,一般一次中斷或隔幾次中斷繪製一列或一行,橫向捲動的畫面每次繪一列,縱向滾動的畫面每次繪一行;以七頁為間接繪圖數據緩衝區,由當前中斷把繪圖數據送入七頁,在下一次中斷再把七頁的數據送入 PPU。這種繪圖方法可保證多幅畫面連續繪製,產生連綿不絕的效果。如第一關開始時的遊戲畫面猶如幕布從左向右拉開,而第二關又如幕布由下向上提起。隨著遊戲的進程,畫面一幕幕的位移,使人絲毫感覺不到畫面的間斷,整關遊戲畫面好像是一幅長捲圖畫,左卷右放,盡頭方休。下面僅列出源繪圖程序並加以簡要說明,以供學習、參考。源程序見 No.5-28。

程序 No.5-28 共分兩段:第一段為 $CB60~$CBC5,完成把 PPU 地址、繪圖數據從數據區讀出,按照一定的格式送入七頁;第二段為 $CC3F~$CC7E,完成把七頁的繪圖數據送入 PPU,繪製遊戲畫面。

N0.5-28《魂斗羅》遊戲畫面繪製源程序

從數據區取數送入七頁子程序

CB60 48 PHA ;保存調該程序時的 A 值,
CB61 A902 LDA #$02 ;該值決定繪圖的種類
CB63 8503 STA $03
CB65 A901 LDA #$01
CB67 20BDCB JSR $CBBD ;令 $700=1、$21=1
CB6A 68 PLA ;彈出繪圖類型數據
CB6B 8502 STA $02
CB6D 0A ASL
CB6E AA TAX ;以繪圖類型數據為地址偏移量
CB6F BD62B2 LDA $B262,X
CB72 8500 STA $00
CB74 BD63B2 LDA $B263,X
CB77 8501 STA $01 ;讀出繪圖數據區首址存入
CB79 A621 LDX $21 ;$00、$01 單元
CB7B A000 LDY #$00
CB7D B100 LDA ($00),Y ;讀第一個數據
CB7F C8 INY
CB80 C9FF CMP #$FF
CB82 F03F BEQ $CBC3 ;若 A==HFF 則結束讀數
CB84 C9FE CMP #$FE
CB86 F019 BEQ $CBA1 ;若 A==HFE 則令 $700+X==HFF、
CB88 C9FD CMP #$FD ;x+1→$21,結束取數
CB8A F019 BEQ $CBA5 ;若 A=HFD 則令 $700+X=HFF,
CB8C 9D0007 STA $0700,X ;進行第二次送數,把數據送入七頁
CB8F A502 LDA $02
CB91 100B BPL $CB9E
CB93 A503 LDA $03 ;七頁的數據格式為:
CB95 D005 BNE $CB9C ;$700 表示送數方式;
CB97 9D0007 STA $0700,X ;$701 表示一組送入 PPU 的數據個數
CB9A F002 BEQ $CB9E ;$702 表示送入 PPU 數據的組數
CB9C C603 DEC $03 ;$703 表示 PPU 地址高位
CB9E E8 INX ;$704 表示 PPU 地址低位
CB9F D0DC BNE $CB7D ;$705……為繪圖數據
CBA1 A9FF LDA #$FF ;當一次送多組數據時,每一組數據
CBA3 D01A BNE $CBBF ;傳送完畢後的下兩個數據,即為下一組
CBA5 A9FF LDA #$FF ;繪圖數據的 PPU 地址。
CBA7 20BFCB JSR $CBBF
CBAA A902 LDA #$02
CBAC 8503 STA $03
CBAE A901 LDA #$01
CBB0 20BFCB JSR $CBBF
CBB3 D0C8 BNE $CB7D
CBB5 A9FF LDA #$FF
CBB7 D004 BNE $CBBD
CBB9 A900 LDA #$00
CBBB F000 BEQ $CBBD
CBBD A621 LDX $21
CBBF 9D0007 STA $0700,X
CBC2 E8 INX
CBC3 8621 STX $21
CBC5 60 RTS

取七頁數據送入 PPU 子程序

CC3F A200 LDX #$00
CC41 A5FF LDA $FF
CC43 2918 AND #$18
CC45 8502 STA $02
CC47 BC0007 LDY $0700,X
CC4A F0D0 BEQ $CC1C ;$700==0 不送數
CC4C A502 LDA $02
CC4E 19C5CB ORA $CBC5,Y
CC51 8D0020 STA $2000 ;設置送數方式
CC54 E8 INX
CC55 BD0007 LDA $0700,X
CC58 8500 STA $00 ;以 $00 為一組送數的個數計數器
CC5A E8 INX
CC5B BD0007 LDA $0700,X
CC5E 8501 STA $01 ;以 $01 為本次送數的組數計數器
CC60 A400 LDY $00
CC62 E8 INX
CC63 BD0007 LDA $0700,X
CC66 8D0620 STA $2006 ;置 PPU 地址高位
CC69 E8 INX
CC6A BD0007 LDA $0700,X
CC6D 8D0620 STA $2006 ;置 PPU 地址低位
CC70 E8 INX
CC71 BD0007 LDA $0700,X
CC74 8D0720 STA $2007 ;取數送入 PPU
CC77 88 DEY
CC78 D0F6 BNE $CC70 ;若本組未送完則轉 $CC70 繼續
CC7A C601 DEC $01 ;若本組已送完則令組數計數器減一
CC7C D0E2 BNE $CC60 ;若還有數據組則轉 $CC60 繼續送數
CC7E 60 RTS ;若數據組計數器為零則結束送數

程序 No.5-28 通俗易懂,留給讀者練習編寫用於電腦遊戲機的實用程序。


首先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 不光需要的存儲空間極小

而且可以做到無限精度

缺點是難以描述複雜事物

並且對算力要求高

而不是用了什麼外星壓縮法


你如果注意觀察,會發現fc遊戲背景畫面是重複的,只需製作一個貼圖塊,程序運行時,隨著玩家拖動捲軸,機器會調用這些重複圖塊,是一種實時渲染,這些2d主機遊戲的設計理念很先進的。

你可以錄製一段遊戲視頻看看容量有多大,這些信息量都產生於玩家玩遊戲的過程中,你玩魂斗羅遊戲當然覺得很開心。


我做過電視遊戲,雖然不知道魂斗羅為什麼那麼小,估計原理都是相同的。

1 代碼,用彙編寫,不會先用很多東西的,而且電視遊戲機的編譯器會把一些const屬性的東西放到norflash中,不用放ram,實際遊戲機裡面的ram更小

2 遊戲的rom大頭是圖片和聲音。電視的遊戲的圖片都是由小圖片疊加出來的,而且以前的crt對於顏色的解析度不高,小圖片很多都是單一顏色,這種小圖片存儲的時候占的空間很小,比如一個8*8的黑色方塊,好像數據裡面存的是很小,用幾個bit存大小和圖片屬性,然後存個顏色值就行了,遊戲就是靠把這些小圖片拼接成一個大圖片,利用幾個圖層疊加就是遊戲的畫面。

3 聲音,聲音數據存的都是midi 占空間很小的。

實際上遊戲rom小,很大程度是靠遊戲晶元對於圖片和聲音的處理換來的,當時維護的遊戲晶元,也是號稱三核。一個邏輯CPU 一個處理圖片輸出,一個處理聲音輸出


1998年上下接觸「學習機(遊戲機)」,小霸王學習機上還有Q-BASIC,F-BASIC,買機器時說明書上有比較詳細的教程和實例,那時還在能上面寫些小程序。後來在一個書店裡看到passcal,有很多遊戲實例代碼,後來做的職業與這些無關,就沒再深入了。

親自經歷過從大規模集成電器到cob掩膜集成電路的卡帶時代。那時的學習機CPU估計只有幾十MHz吧,比較貴的遊戲卡容量才幾百K到2M不到。後者已經是天價的遊戲卡了。

2009年網上看到一代4K大小的明文彙編代碼,實現了3D動畫,還配有聲音,有興趣的可以試試,把代碼存為a.txt,在cmd下運行debug &< a.txt

代碼詳見:97年Mekka 4K彙編3D作品

2010年無聊時找了當年玩的遊戲,這個算比較大的了,共有十關左右,每關都非常長,畫質很好,故事情節不重複,畫面每關里有少量重複,場景和變化真的讓我無比驚嘆,到現在也是,我想以後可能不會遇到有如此好的程序了。見圖:

想想早期的諾基亞QD手機,16M RAM可以運行10多M左右的皇拳97,早期的QQ2007,飛信,UC瀏覽器,視頻播放器這些程序才幾百KB,後來升級到1M多些,現在安桌上動不動就是幾十M,電腦版的QQ裝完都差不多幾百M了,不得不說硬體逼著人精進編程技術!現在的硬體太便宜,各種遊戲動耴上G,完全感受不到以前那種精益求精的味道。由此延生出來的驅動,在Linux下一個驅動小則幾K,大的幾M,超過10M的驅動是比較少的,但在windows下一個顯卡驅動可以超過300M甚至更大,真不懂設計者的用意,是編程水平低下還是另有意圖?


從前,寫程序是一項神聖的工作,程序員上知設計模式,下懂電路原理。

後來隨著生產力發展,碼農階層出現,寫程序淪為爛大街的技能,程序質量不可同日而語。


時之笛和馬64的容量小更的讓人害怕,總覺得光bgm加起來都不止那麼點。。


從音樂的角度來說,當時應該製作的是MIDI音樂,本身只是一些音符數據,而通過遊戲機播放出來,不像錄音WAV或MP3文件那麼大,而且每一關的音樂並不長,總是循環播放,我彈奏的錄音就截取了所有的部分,其他都是循環。

視頻封面《魂斗羅》鋼琴版_騰訊視頻v.qq.com視頻【音樂欣賞】80、90後那些年難以忘懷的遊戲BGM - 知乎專欄


只有我想起了當年用諾基亞2610的時候一個99kb的遊戲能玩一個星期嗎,而且畫質什麼的並不輸FC……


以前看過一個微信推送,介紹了一個200多k的電影(感受被程序員支配的恐懼吧(òωó?)!),附鏈接https://mp.weixin.qq.com/s/l4cwjcueJRB4yfmVBsSVsg


記得網上有64k最小至4k大小的程序,打開是一段3D視頻。當然了,是不是用了槓桿沒研究,但是總是要遵循資訊理論的。根據題目,無論怎麼複雜,也就是魂斗羅中真正的信息熵定要小於128k。


說一個我知道的技巧,兩張圖通過一個顏色演算法放到一張圖裡,要不同的圖就用不同的顏色異或。我也不懂這叫什麼,請懂的補充。


為什麼無人深空才幾個G就有永遠探索不完的宇宙?


雖然不是業內人士,但也玩了近20年,算是可以叨叨兩句。

個人認為其實是因為遊戲的高難度造成所謂的「流程長」的假象。

其實魂斗羅的劇情並不長,每個關卡有一個自己的背景,主線就是消滅外星心臟拯救地球,比起現在很多動作遊戲來說,或者就拿《阿卡姆》系列來說,光是一條支線就要比這個劇情線要長了。

而當時遊戲的開發周期也並不比現在的遊戲開發周期短,所以當時普遍的思路就是增加遊戲難度以增加玩家在遊戲中的遊戲時間從而延長遊戲的壽命。所以從玩家的角度來看這款遊戲就顯得好漫長。

關於技術方面的別的答主都回答的很詳盡了,就不贅言了。

同理《超期馬里奧》的流程原則上比魂斗羅初代還要長,3代同樣也只有128k。

不過隨著技術發展,而且運行遊戲的媒介也在發展(卡帶-光碟-互聯網)可以裝載的內容也越來越多,但玩家群的遊戲時間隨著生活節奏的變快也在減少,所以降低遊戲難度是一個必然的過程。現如今的大部分遊戲的流程大約都在8小時左右(雖然有很多號稱可以晚上幾十上百小時的遊戲,但實際上大部分都是世界探索和刷刷刷的成分,實際上比較充實的內容還是8小時左右)。但也不是沒有例如《血緣》《黑魂》這種劍走偏鋒的遊戲,但比起魂斗羅來說還是要簡單了,《魂系列》你打不過去可以刷刷等級,總會能過去,但是魂斗羅你技術不夠,是根本過不去的...


你可以去玩玩kkrieger


以前的遊戲跟現在的比有點像七巧板和樂高的感覺。


128K已經是相當大的容量了,而且使用的是低級語言更有體積優勢。對於圖形遊戲而言,劇情腳本其實佔用空間很小的,佔用空間的大部分是圖像、音頻等多媒體資源,魂斗羅在圖形音頻方面的表現是正常的。


640K足夠了,是蓋茨說的,當時的指揮官64系統還是什麼系統確實有這個壓縮能力的,美國最早出的是阿塔里電視遊戲機系統,和PC那樣隨意開發,他崩潰才輪到任天堂日本控制遊戲平台制度的興起


以前有一種64K的動畫,很長,還有較壯觀的立體動畫,還有聲音。我估計進行了壓縮,並調用了大量系統里的內容。雖然文件小,但運行起來很占內存。


推薦閱讀:

精靈寶可夢還有什麼能夠實現突破的地方?
從商業角度上看,任天堂是否有可能讓掌機上的IP登陸Switch?
為什麼任天堂的名號和遊戲在國內這麼小眾?
任天堂的發展歷程是怎麼樣的?
你捕捉過的最難的精靈是哪個?

TAG:任天堂Nintendo | 魂斗羅Contra | 紅白機FamilyComputer,FC | KONAMI |