FC遊戲常見【BUG】背後的原理和真相


FC遊戲常見【BUG】背後的原理和真相


如果你的童年有過FC的陪伴,那你對以下的兩個情況肯定不會陌生:

1:閃爍 2:花屏


FC遊戲常見【BUG】背後的原理和真相

典型的花屏場景


在信息的交流和獲取都非常落後的年代,大部分小夥伴都不清楚導致這種情況的原因。很多時候會以為自己的主機或者卡帶出了問題,進而研究出了“吹氣修復法”等秘技。甚至,這些常見的現象,和某些信息混雜在一起,組合成了新的“傳說”,最典型的莫過於魂鬥羅的“水下八關”——傳說在魂鬥羅1代第六關的關底,刷新一個向右跑動的雜兵,然後跟著他跑,在進入BOSS戰後小兵會花屏,這時候跳到他身上就能開啟水下八關。這條傳聞已經被多次證實是子虛烏有的流言,在這裡我就不展開了。回到花屏的問題,為什麼這個雜兵跑到這個位置就會花屏呢?

是主機的問題?還是卡帶的問題?或者是程序的問題?

其實,這並不是什麼BUG,也不是什麼問題,只是FC的顯示方式導致的正常現象。要想弄清楚這個問題,我們先來簡單瞭解一下FC的顯示原理。相信大部分玩家都知道,我們在顯示屏上看到的畫面都是由一個一個的像素點組成的。比如今天主流的1080P顯示器,就包含1920x1080總共約207萬個像素點。在這207萬像素的範圍內,每個像素點按需要顯示不同的顏色,最終組合呈現出一幅具體的畫面。

但是早期的遊戲機,比如今天要講的紅白機FC他其實並不具備按像素來控制和顯示畫面的能力。FC能顯示的基本單位是一個8*8像素的貼圖(字符塊),這些貼圖都是事先繪製好存儲在卡帶裡面。使用的時候 根據程序的控制 就像拼積木一樣,用這些貼圖來拼合成最終的圖像。但是這個合成的過程並不是直接從卡帶裡提取素材然後顯示到電視上。FC的程序會先把當前畫面需要使用的貼圖提取到類似FC顯存的一個存儲空間中。這個空間非常的小,總共只有8K,而且其中一半隻能用於角色、敵人等會運動的元素的貼圖存儲。另一半則只能運用於背景貼圖的存儲,所以一個關卡用到的全部貼圖是沒辦法全部都放進來的,只能隨著關卡的進行不停的更換其中的內容。這些貼圖放到FC的顯存後,程序會去開發者指定的地址調取圖片來組合想要的畫面


FC遊戲常見【BUG】背後的原理和真相

右上方的就是FC當前畫面的圖形素材(貼圖)


為了大家直觀的理解上面說的這段內容,我在下面的EXCEL裡面簡單的畫了一副像素畫,最右邊的兩列代表FC卡帶中存儲的貼圖內容,中間一列代表FC顯存中當前存儲的內容,最左邊表示顯示的結果。首先FC接收到程序的指令,需要調用顯存裡的這幾個區域的圖片,然後根據程序指令,在FC顯存的對應位置找到圖片,最後根據程序的指令拼合輸出最終的畫面,這就是一個完整FC畫面輸出流程。但是根據之前所說,由於FC的顯存裡的內容會根據遊戲的需要進行更換。如果因為某些特殊原因,出現了本來不應該存在當前場景的物體,那麼由於該物體原本需要的貼圖已經被更換了,所以該物體便無法正常顯示。以實例來看的話,比如魂鬥羅第六關關底,當我們和小兵一起移動到BOSS區域後,程序切換了顯存裡的貼圖素材,所以小兵之前正確的貼圖就被替換掉了,導致本不應該出現在這裡的小兵無法正確的顯示出來,也就是會出現所謂的花屏或者貼圖錯誤了。包括很多FC邪道速通的錄像中,都能發現這種花屏的現象,其實都是因為讓場景裡出現了原本不應該存在的物體導致的。請注意,這種情況在程序執行的層面,其實並沒有什麼問題,所以並不是什麼BUG。只要在切換區域時,加入一串消滅當前所有雜兵的指令就可以規避這一情況,所以這頂多只算是一個程序優化的問題。

至於另外一個經常遇到的【問題】:閃爍 就更不是什麼BUG了,FC在內的早期遊戲機,顯示的圖像都分為精靈(可動塊)和背景兩類。雖然他們在卡帶的內部,都是一塊塊由8x8像素點繪製成的貼圖,但是每一種圖形的顯示規則是不一樣的。背景類的圖形可以鋪滿整個屏幕。而精靈類的圖形,在FC遊戲裡只能顯示同屏最多64個 同一行最多8個。如果超出了這一限制,FC就會輪流來顯示這些貼圖但是因為人眼的視覺暫留現象,所以在我們看來,就變成了圖像的閃爍,超過這一限制的數量越多,閃爍得也就越厲害。在發生閃爍的場景中按下暫停鍵 可以明顯的看到部分圖形是沒有被顯示的。FC幾乎所有的遊戲都存在閃爍現象。


FC遊戲常見【BUG】背後的原理和真相

FC遊戲畫面閃爍的真相


而且除此之外,FC的畫面顯示還有其他很多很多的限制規則,但是早期的開發者們巧妙的利用各種方式打破了機能的限制。為我們呈現了一幕幕精彩難忘的畫面。如果你對這些內容感興趣,可以去看看我的《FC擴展芯片介紹》視頻,希望有更多的玩家,能夠體會到早期遊戲設計的精妙之處。


分享到:


相關文章: