21 天業餘時間創作獨立遊戲:B.O.D.A. — Send the Plant Home

有人說 21 天可以養成一個習慣,但我覺得 21 天還其實可以做一款獨立遊戲!因為之前玩了一下夢幻主機 PICO-8 覺得實在太有趣了,就忍不住拿它來又做了一個新遊戲。

(不知道 PICO-8 在幹嘛可以讀這篇《點燃你的遊戲開發魂:輕量化的 8BIT 遊戲夢幻主機 — PICO-8》)

PICO-8 在網路上的資源可以說是十分豐富,除了官方網站上就提供充足的教學文件以外,論壇內的討論也是很熱烈,再加上 PICO-8 原本的社群特性,幾乎所有的遊戲卡夾大家都是以開放源始碼的方式分享,讓人可以快速找到資料。

因為我是科幻迷,這次打算做一個輕鬆有趣的宇宙解謎遊戲,想想如果以小機器人為當主角也許很有趣,實際上的遊戲玩法也是在製作過程中慢慢發想出來的,可以說是邊創作邊發想。這次想要挑戰完整的遊戲,而我心中所謂的完整,是包括開頭、故事、關卡、挑戰、結尾都具備的完整小品。

廢話不多說,先來看看遊戲本體吧!
遊戲網址:https://weifanchen.itch.io/boda

B.O.D.A. — Send the Plant Home by Wei-Fan Chen
A puzzle adventure of a robot and its plant

B.O.D.A. — Send the Plant Home

在遙遠的未來,人類目送無人太空船升空前往未知的星系。這趟旅程的目的只有一個:帶回人類在數千光年外的遙遠星系中的重大發現— 地球早已遺失許久的— 植物。為了將這顆脆弱的小生物帶回地球,重建被地球人破壞殆盡的生態,無人太空船在寂靜的宇宙飛行了 3,240 年,終於順利地完成了任務。無奈,在返航的時候遭遇了突如其來的隕石雨,而太空船失去了音訊…地球恢復生機的希望,落在了一個剛睡醒的作業機器人 — — B.O.D.A. — — 身上。

B.O.D.A. 是一款引人入勝的解謎遊戲,包含三十個手工打造的有趣關卡,遊戲名稱 B.O.D.A. 以小機器人 — Botanical Observation and Delivery Android — 命名。你的目標是引導這個小小機器人完成它的任務:保護植物,重新啟動太空船的超級引擎,將植物送回地球。

然而,在 B.O.D.A. 和小植物面前的旅程既漫長又艱難,太多未知的威脅隱藏在太空船的黑暗角落。你有辦法幫助 B.O.D.A. 完成它的任務嗎?你能安全把植物送回家拯救地球嗎?這一切都取決於你的明智決定。

Teaser of B.O.D.A. — Send the Plant Home

遊戲玩法

遊戲中包含了 30 個設計師(就是我)手工打造的精心關卡,B.O.D.A. 將面臨許多有趣的謎題與挑戰:來路不明的外星人、奇怪的機器人、無情的雷射等等等。小小機器人 — B.O.D.A. — 將探索這艘神秘的太空船,穿梭在外太空的各種環境中,從氧氣實驗室、倉庫、機房、穿越引擎室、一路到達最終目的地 — — 艦橋。你能保證你會保護這個小小植物,並且在旅程中避免再摧殘這艘搖搖欲墜的太空船了嗎?

小心!小植物是很堅固的!不要把它砸向太空船電腦,但可以拿來砸外星人(笑)
使用方向鍵移動 B.O.D.A
按下(X)來與小植物連線,以方向鍵控制移動

小而巧的遊戲製作三階段

在整個製作過程中,我大約花費了四天的時間建構基本的遊戲概念(Game Concept)與遊戲循環(Game Loop),中間十天在製作各種關卡物件,後面七天設計關卡,最後收尾修 bug,並替遊戲加上背景音樂與音效。嚴格來說,這 21 的開發旅程,是完整的 Fourdesire 開發流程超小縮影:

Fourdesire 的產品生命週期八階段。在《B.O.D.A》中,我只用了前面三個:概念(Concept)、發展與前製(Pre-production)與製作(Production)
  • 概念期(Concept Stage)— —前四天— — 這個時候的重點是發展出遊戲最核心的概念,去尋找遊戲最基礎的互動機制與遊戲循環。在 B.O.D.A. 這款作品中,這個最基礎的概念是透過機器人控制植物,而且植物的移動是會垂直滑到底。在基本的測試後,覺得加上簡單的物理特效很有趣。
概念期:覺得小植物這樣撞來撞去好像挺有趣的?
  • 發展與前製期(Pre-Production Stage)— —中間五天 — — 基本的核心循環確定後,要來準備製作遊戲關卡的素材,來讓後續的關卡設計(Level Design)能夠順利進行。因為 B.O.D.A. 是個解謎遊戲,我想我會需要很多解迷要素(Puzzle Elements),例如「齒輪」、「電腦」和「雷射」等等。有了這些解迷要素,就可以在後面製作的時候用他們排列組合做出有趣的關卡。
把一些腦海中出現的解謎要素(Puzzle Elements)試做出來體驗一下,例如:討人厭的齒輪。
  • 製作期(Production Stage)— —最後十二天— — 終於到了關卡編輯器發揮的時候了,如果是正式的產品開發,開發團隊會需要製作自己的編輯系統,但是 PICO-8 裡有小巧的 Map Editor 剛好可以充當關卡編輯器!設計師們!絞盡腦汁做關卡設計挑戰你的玩家啊啊啊啊!
關卡編輯中,有了良好設計的解謎要素後,設計關卡的時候容易專注在設計謎題。

開發日誌

在一開始尋找資源的時候,馬上找到了 Krystian MajewskiMaking a RoguelikeYouTube 教學、配合上官網提供,由 Dylan Bennett 所撰寫的《Game Development of PICO-8。此外,我的重點是要用 21 天開發出一款完整的遊戲,而且只能用「業餘時間」,也就是下班吃完飯後,到睡覺前的這段間來完成這款作品!(好啦,我是有偷用早餐時間在鋼琴前面寫背景音樂、而且熬了不少夜)所以確實記錄時間是很重要的!

我的 21 天開發日誌:

階段一:概念

Day 1:視窗系統、牆壁碰撞偵測、基本物件互動、基本角色控制
Day 2:角色視線、畫面淡入特效
Day 3:遊戲背景、世界觀與角色故事發想
Day 4:加入跟機器人連線的移動物件「植物與磁浮貨櫃」、擊中角色的損傷特效

階段二:發展與前製

Day 5:製作關卡物件「太空船電腦」、基礎的外星人 Pathfinding 演算法、星空背景與重力影響效果、關卡段落與過關機制判斷
Day 6:試做三個基本關卡、更新到 60fps、植物移動時的粒子特效、戰爭迷霧
Day 7:製作關卡物件「鑰匙與門」
Day 8:關卡場景舊化效果讓太空船生鏽長青苔
Day 9:製作關卡物件「齒輪(機器人跟植物碰到會死掉)」、製作關卡物件「透明地板(植物會落入太空)」

在測試環境中,試做一些新的解謎要素,例如畫面上這個「透明地板」

階段三:製作

Day 10:植物落入太空時的星空背景效果
Day 11:機器人距離植物太遠時的搜尋特效、修正物件移動時的特效、新增三個試做關卡
Day 12:優化外星人 AI(現在他會追到最後看到玩家的位置)、新增六個關卡
Day 13:優化外星人 AI 加入「哨兵模式」—這是為了不要被玩家拖怪,解謎遊戲中的外星人才能堅守崗位。
Day 14:優化程式碼、增加關卡
Day 15:優化 Pathfinding 演算法,增加效能提升 fps
Day 16:製作關卡物件「雷射」—玩家要使用磁浮貨櫃遮擋雷射,否則雷射打到玩家和植物會死亡
Day 17:用「雷射」物件試做三個新關卡
Day 18:六個新關卡、戰爭迷霧演算法調整、第一關加入基本教學、背景音樂製作
Day 19:加入片頭動畫與片尾動畫、背景音樂製作、音效製作
Day 20:音樂與音效製作、修 Bug
Day 21:音樂與音效製作、修 Bug、修 Sprites(Pixel Art 美術圖)、準備發表


美術與音樂

除了遊戲設計以外,因為獨立開發,所以遊戲美術跟音樂都要自己負責(這些都可以寫另外兩篇完整的文章了),所以在概念期也花了很多時間尋找參考資料。美術部分除了參考 Wall-E、也在網路上找了許多科幻相關的美術素材,特別是因為 PICO-8 只能表現 Pixel Art,所以花了很多時間尋找相關的資源來參考與學習。而音樂部分,為了培養音樂製作的氛圍跟提高涉略範圍,我在 Apple Music 上面收集了許多科幻電影與遊戲的原聲帶,當作開發時期的背景音樂(也是滿有氣氛的啦!)

遊戲的舞台希望可以架構在像是 Pixar 的動畫電影《Wall-E》中的 Axiom(公理號)這樣的超~大~太空船上
為了要幫每個關卡命名,了解太空船的名稱也是很重要的。在 Miska Fredman 的官方網站(https://www.miskasmaps.com/)上,可以找到許多有趣的地圖設計

最後我總共繪製了七個角色、一艘太空船、一個主視覺 Logo、一系列場景與相關解謎要素。其實角色們要能表現在 8 x 8 像素的範圍內,還能表現出各自的性格,難度還是滿高的,所以找資料跟繪製都花了一點時間,但結果還是挺滿意的!

另外,我總共為這部作品寫了五首配樂(其中一首是勝利音樂,只有四小節,免強也可以算配樂啦!),配樂全部都上到 Sound Cloud 上面當作原聲帶了!

這五首配樂我最喜歡的是作為主角 B.O.D.A. 的主題音樂《The Robot》,放在這裡跟大家分享!如果喜歡其他配樂的同學,可以直接到 SoundCloud 的 Playlist 上面聽整首原聲帶喔!

我最喜歡的一首曲子《The Robot》,充分展現了 B.O.D.A. 帶點可愛的科幻個性

最後一哩路!打磨成品

在概念階段打造完基本的遊戲循環完成後,在後續的開發過程中我也反覆做幾件事情,來確保作品看起來能夠更漂亮、或是程式碼能夠運作得更有效率。這些事情有點難被歸類在任何一個開發階段中,但我覺得他們既重要,又能夠好好的提高作品的品質,例如:

  • 寫了一個 map_beautifier() 函式,來隨機計算並生成太空船上的青苔與生鏽,讓原本枯燥乏味的太空船多一點點質感。不要小看這幾個像素,他們可是可以大幅增加遊戲的風格的!
數字越大,太空船就越舊的 map_beautifier() 函式
  • 想要寫出漂亮的 B.O.D.A. 搜尋植物特效,讓玩家能夠即時地得到操作回饋。在科幻感滿點的特效中,加一點小機器人無辜的表情,會不會讓這個作品看起來更有深度呢?如果仔細看,你有看到地板上的搜尋紋路還有如海浪一般的起伏嗎?
請仔細看那個地板上的美妙波浪
  • 做了敵人,就要有路徑搜尋(Pathfinding)算法來製作 AI,而我的 Pathfinding 演算法本來打算使用效率比較高的 A* Algorithm,但這個演算法要佔用掉的 Token 太多(簡單說就是要寫太多字,而 PICO-8 有字數限制)。為了節省 Token,我決定犧牲一點效率,換取更多的程式碼撰寫空間讓給更多遊戲關卡(PICO-8 的限制啊),而採用效率比較差的 Dijkstra’s algorithm。雖然 Dijkstra 效率比 A* 差一點,但優化之後還是不會影響 60fps 的算圖效能,不至於影響遊戲體驗,可以接受囉!
優化後的 Dijkstra’s algorithm 路徑搜索演算法—用於外星人 AI — 這樣他才能追著你跑呀!

最後,我用 Splice App 剪了一支預告片!成品就完成啦!Splice App 真的滿好用的,可以很簡單就剪輯出一支有趣的預告片(加上各種特效跟版權音樂),我是購買一週 NT$ 100 的訂閱版本,反正我也只要用幾天而已,很划算!哈哈!

上架與發表

因為是 PICO-8 遊戲,我是先發表到 PICO-8 的論壇,這樣才能夠把這款遊戲作為卡帶發行到官方的遊戲系統 Splore 中。因為我在論壇中也看過有人發表作品,被別人罵到臭頭的狀況,所以上架之後看著論壇總是忐忑不安,直到我收到了這個評論:

I’ve just reached level 15, and I love it! Charming sound, clear and appealing graphics, and the extra puzzle elements are clever and seem to keep coming. The maps are simple but engaging so far — I’ll be curious to see how the difficulty increases from here. (我剛剛達到第 15 關,我喜歡這個作品! 迷人的音效,清晰而吸引人的視覺表現。新增的解謎要素都很聰明,而且似乎還有更多不斷出現在關卡中。 到目前為止,這些地圖雖然簡單但很吸引人 — 我很想知道從後續難度會如何提高。) — mothgram

看到這種留言永遠都會讓開發者感動到不行啊!(我看到的時候真的雞皮疙瘩滿身啊啊啊啊啊!)

還有這篇留言:

I’m playing your game, superb work! Stuck on level 25 sadly(我正在玩你的遊戲,超棒的作品!可惜我卡在第 25 關) —
Bruno Leonardo Neves Machado

哇!第 25 關是真的滿難的,我覺得是小地獄關卡,但是第 29 關才是真正的挑戰。過完總共 30 關,你就會聽到讓人療癒到不行的破關音樂啦!

破關最後還有小彩蛋喔!快點前往 Itch.io 來玩玩看這款遊戲吧!

B.O.D.A. — Send the Plant Home by Wei-Fan Chen
A puzzle adventure of a robot and its plant

如果你喜歡我的文章,歡迎你成為我的 Patreon 訂閱會員。
持續關注我,贊助任何金額,送我一杯咖啡 ☕;我會將最新文章寄送到你的信箱。
成為訂閱會員