同人玩家開發全新紅白機遊戲Micro Mages,挑戰將遊戲容量壓縮至40KB
講到40KB的任天堂Famicom遊戲,許多資深玩家第一個想到的一定是《超級馬力兄弟》,筆者先前也曾撰文介紹關於遊戲容量演進。在《超級馬力兄弟》上市的35年之後,由2位玩家組成的Morphcat團隊宣布推出全新遊戲Micro Mages,不但具有極高的完成度,更厲害的是容量一樣只有40KB。
支援4人同時遊玩
《Micro Mages》(迷你法師)是款以Famicom為平台的全新製作2D動作遊戲,其玩法與《洛克人》相當接近,不過本作的移動是以縱向為主,而非常見的橫向,玩家需要從舞台下方開始不斷往上爬,一面避開陷阱,一面擊退敵人,並找到能開啟門鎖的鑰匙。
遊戲具有8個世界,並具簡單、困難模式共26個關卡,以及多種敵人與頭目等著玩家挑戰。
《Micro Mages》最特別的地方,是它不但具有單人與雙人模式,搭配手把擴充器之後,最多還能讓4人同時遊玩,相當適讓懷舊遊戲同好們一起合作破關。
遊戲會推出可以透過Famicom模擬器遊玩的Rom檔,以及能在Nintendo Entertainment System(即北美版Famicom)執行的實體卡匣,但是目前並無計劃推出Famicom主機適用的實體卡匣。
《Micro Mages》預計於2019年4月上市,包含Rom檔與PDF格式說明書的數位版價格為歐元8元(約合新台幣292元),數位版加實體卡匣的價格則為歐元40元(約合新台幣1,460元)。
▲ 《Micro Mages》除了發行數位版外,還會推出實體卡匣。
▲ 遊戲內容是傳統風格的2D動作遊戲。
▲ 玩家要克服關卡中的陷阱與機關不斷向上爬。
▲ 遊戲最多支援4人同時遊玩。
▲ 畫面的呈現不因為遊戲容量只有40KB而受影響,圖像仍十分細致。
40KB的大挑戰
Morphcat團隊表示由於現在Rom晶片的價格便宜許多,所以不少新的Famicom同人遊戲容量都從512KB起跳,但是他們為了挑戰極限,所以將遊戲的容量縮減至40KB,其中的一大挑戰,就是要將圖像資料壓縮在8KB以內。
在介紹Morphcat的解決方式前,筆者先說明一下Famicom的圖像運作原理。所有圖像可以分為會動的「活動角色」(Sprite)與不會動的「背景」(Backgroung)等資料,並以解析度為8 x 8像素的點陣圖儲存,遊戲進行中程式會將這些資料組合成完整的畫面。
一般Famicom遊戲中的人物是由4組活動角色組成,然而受限於硬體限制,當超過8組活動角色出現在同一橫行時,就會發生閃爍的情況。《Micro Mages》的人物直接由1組活動角色顯示,如此一來不但節省空間,還能發揮避免閃爍,並讓場景看起來更遼闊。
▲ 《Micro Mages》採用6502組合語言撰寫,圖像資料為8KB,程式與其他資料共占32KB。(圖片來源:Morphcat Games YouTube頻道,下同)
▲ 8KB的圖像分成活動角色與背境等2組資料,每組資料能儲存256個8 x 8的點陣圖資料。
▲ 圖中人物的圖像是由4組8 x 8的活動角色拼合而成。
▲ 人物更換色盤後就能變成不同的圖像。
▲ Famicom的硬體限制讓同一橫行上最多只能顯示8組活動角色。如圖中出現10組活動角色,就會發生閃爍的情況。
▲ 《Micro Mages》的人物只用1組活動角色,不但可以節省空間,還能在同一橫行顯示更多人物。
(下頁還有更深入的節省空間方式說明)
刪去重複圖像省空間
與筆者在先前文章中介紹《超級馬力兄弟》的情況一樣,《Micro Mages》也利用了許多更改顏色、刪去重複圖像、鏡射的方式節省空間。
比如某頭目人物的不同表情、姿態總共有15種不同的圖案,不經處理就儲存這些圖案的話容量就會超過限制,於是作者就將人物的所有圖案細分成許多區塊,如此一來計就能將重複的圖像刪除,詳細請參考下列圖文說明。
▲ 舉例來說,這個頭目總共有15種不同的圖案。
▲ 如果將15種圖像直接存起來的話,空間根本不夠使用。
▲ 圖像被拆成3大塊後先處理頂部的4組圖像,最左邊這塊活動角色都相同所以只需保留1組。
▲ 其次依序處理其他可以省略的活動角色。
▲ 最左邊與最右邊的活動角色為對稱圖案,所以也可以省略。
▲ 中間這大組圖像用一樣的概念省略重複的部分。
▲ 底部大組圖還能透過對稱圖案進一步省略更多資料。
▲ 處理過後可以大幅降低圖像容量。
背景動用乾坤大挪移
至於遊戲的場景則由背景圖像資料拼合而成,如果直接使用8 x 8圖像拼滿整個畫面的話,占用的容量將高達960B,但若改以32 x 32的圖像則只需60B,所以作者便將4組8 x 8的背景圖像拼合成巨區塊,再用4組巨區塊拼出的巨巨區塊,最後用這些巨巨區塊拼出遊戲場景。
然而作者覺得60B的資料仍然太占空間,於是便將場景從中一刀劃開,把右半部刪掉,並將左半部鏡射過去,如此一來每個畫面至需30B空間。但這樣又會引發另一個問題,就是遊戲會因為場景單調而變得乏味。
於是作者將腦筋動到巨巨區塊的閒置空間上,每個的巨巨區塊容量為1Byte,但是其中只有7個Bit用於儲存,開頭的1個Bit是閒置的。而由8個巨巨區塊組成的橫行中有4個是鏡射產生,因此共有4個閒置Bit可以使用,作者利用這4個Bit來記錄巨巨區塊橫移資訊。
最後神奇的事發生了,當程式執行時,會先將左半部的場景繪製出來,然後鏡射成對稱的畫面,並搭配橫移資訊,將巨巨區塊的排列左右移動一下,就會變成完全不一樣的情況了。
▲ 如果用8 x 8、16 x 16、32 x 32的圖像拼湊遊戲場景的話,分別占用960B~60 B。
▲ 遊戲的場景部分則是透過組合方式,把4組8 x 8的點陣圖組合成16 x 16的巨區塊,並再次組合出32 x 32的巨巨區塊。
▲ 然而這樣下來,單一畫面中的場景還是占用60B,仍然太大。
▲ 用鏡射方式處理場景,會讓遊戲變得索然無味,所以還需要動些手腳,讓畫面從左半變成右半的樣子。
▲ 巨巨區塊的容量為1Byte,但實際使用7個Bit,開頭的1個Bit是閒置的。
▲ 鏡射後的場景中每橫行有4組閒置Bit,可以拿這些Bit寫入巨巨區塊橫移資訊。
▲ 把巨巨區塊橫移之後,遊戲場景就不再一成不變。
▲ 此外困難模式只要小改一下場景並套用不同色盤,只需消耗一點容量就能創造出更多變化。
從這些開發的技巧可以看出,《Micro Mages》真的是款很用心製作的遊戲,作者也提到表示希望大家能享受這款遊戲,就像他們很享受開發過程一樣,有興趣的讀者可以到募資網站,訂購數位或實體版的遊戲。