圖像複用、反轉、鏡射:怎麼將遊戲壓縮在 40 KB 以下還同時保持關卡獨特性?
前後端工程師,善用 JavaScript、HTML 5、CSS 3 和 Golang 與 PHP、Node.js 、C#。目前正為台灣的社群網站進行趕工,然而這東西卻趕了很久。
Micro Mages(迷你法師)是款由 Morphcat Games 所製作的遊戲。

在遊戲動輒上百 GB 起跳的現今,有人則做出了能夠符合 NES 家用遊樂主機執行的 40 KB 遊戲。也許有些人會不以為意,如果你是出生在 80 年代的人,那麼你應該對「100 in 1」的超大雜燴遊戲卡匣不陌生,因為那 100 個遊戲幾乎都是相同玩法,只是貼圖材質稍微更換了一下就拿出來騙錢賣人,而我希望你並不在那個受害者名單內。

看似無聊且一般的 8-Bit 像素遊戲卻在開發時暗藏不少玄機。

Micro Mages 最令人感到驚訝的是什麼呢?為了將這款遊戲壓縮在 40 KB 容量以內,開發者重複使用了許多的圖像資源,但你卻不會因此而感到重複性過高。為了保持關卡的獨特性,開發者還特別精心設計了一個「偏移索引」系統,而遊戲中的種種設計都值得令人仔細觀察一番,而這就成為 Micro Mages 對這款遊戲最直接的廣告賣點

縮小主角以換取更大的彈性

早期的家用遊樂主機因為硬體限制的關係,螢幕上的每一行掃描線(Scanline)能夠出現的圖像資源都有一定的限制。為了解決這個問題,開發者常常會透過輪流閃爍不同的圖像資源以確保同一時間螢幕上的圖像資源不會超過使用限制。而人眼因為視覺暫留的原理,而看不出這些圖片正在閃爍。

如果主角過於豐富,那麼每個掃描線同時能夠出現的角色也就更少,閃爍就會變得更加劇烈。

但…如果主角圖像過於豐富,占用的儲存空間也就會更大,而地圖也會因為主角的大小而變得更大而導致使用更多的儲存容量。為了解決這個問題,Morphcat Games 將主角從原先的 32×32 縮小成 8×8 的大小,而單個角色所使用的空間也就從四格變成了一格。

主角變小之後,多出來的空間甚至可以用來擺放較豐富的動畫演繹效果讓遊戲看起來更加地流暢。

當主角變小之後使用的儲存空間是以倍數減少之外,每個螢幕掃描線同時可以呈現的圖像資源也就更多,而地圖也就可以變得更加豐富,可以說是一舉兩得。

將圖像複用、反轉、鏡射發揮得淋漓盡致

遊戲裡總會有 BOSS 級的怪物,而且這個怪物總要看起來很炫砲還要十分兇殘。這個時候怪物的表情還有動畫效果就是不可或缺的領銜主演。但…一個超級大的 BOSS 豈不是會佔用非常巨大的儲存空間嗎?這個時候如果能夠左右腦並用,也許就可以從中看出玄機。

一個 BOSS 級怪物是遊戲不可或缺的存在,但你要怎麼在節省資源的同時保留怪物應有的特色?

Morphcat Games 對此的方案是:先將怪物圖像資源進行切割並保留那些會重複的地方。這聽起來很簡單,但除此之外 Morphcat Games 還想到了一點:「將圖像反轉過來,然後再檢查一次有沒有和現有的圖像資源重複」。

將怪物圖像資源先進行切分,然後找出值得重複利用的地方,最後就能節省許多空間。

當你在設計一個如此輕量級的遊戲時,不免需要將鏡射、反轉同時也納入你的開發考量裡。進行圖像設計時,如果一個角色是近乎左右平衡的時候,那麼它必定可以替你省下不少的儲存使用空間。

鏡射並偏移地圖讓關卡保持獨特性

角色如果左右是平衡設計這應該沒什麼問題,但把這個事情搬到地圖關卡來說就另當別論了。當地圖變得十分豐富且極具遊玩挑戰性時,使用空間就必定會變得更大。那有沒有什麼方法可以節省地圖空間呢?答案就是:鏡射。

左方的地圖透過鏡射節省了一半的空間,但相比右邊而言,左邊的地圖看起來就枯燥乏味且不具讀特性。

但透過鏡射產生的地圖會讓左右看起來太過於平衡,而且你還不一定保證他們有通路可以到你想要到達的位置。這個時候你就需要在地圖中加上一個簡單的「偏移索引」 資料。這讓鏡射地圖的某行某列可以進行向右偏移數格進而達成關卡的獨特性,而且還不容易看出來其實這張地圖是由鏡射所組成的。

一張地圖只使用 4-Bit 保存偏移索引,讓鏡射地圖呈現更多的可玩性,而不僅是單單的左右鏡射。

不得不說在這種情況下 Morphcat Games 提出的「偏移索引」是個很好的解決方案,而且這還能夠延伸出其他的想法,例如:是否可以在遊戲中增加困難程度,稍微將地圖的偏移再修改一點以達到更難的等級?

將可重複利用的資源捆綁成一個更大的資源

在遊戲裡主角大小是 8×8(單格)而一個地圖小區塊則是 16×16(雙格)。地圖的一行可能有好幾格地圖區塊好讓主角可以在上面走上至少十步…然後一個地圖關卡可能至少有十行。但如果每個地圖關卡都要不斷地定義這些區塊,那麼資料用量肯定會是以倍數增長。

節省資源的作法就是事先將地圖的每個區塊定義成更大、更易於複用的區塊。

與其不斷地定義地圖的每個小區塊,不如事先定義好可能會在其他關卡重複使用的大區塊(32×32),然後設計地圖時直接使用已經定義好的大區塊而不是重複定義小區塊而導致過多重複的資料。

如果事先定義好這些可能重複的區塊,使用容量則會以倍數遞減。

Morphcat Games 在這款遊戲中花費了不少心思在保持關卡獨特性、畫面效果上,對於正在設計遊戲的開發者來說,這些資訊想必是不小的收穫。這款遊戲已經在 Steam 上發售且可供購買,要是你有興趣的話也不妨前往商店頁面進行購買