Ludum Dare 31 心得

我 Ludum Dare 31 的作品
第一次,製作一個算是完整的遊戲
雖然結果不盡理想,但是也瞭解到自己所缺少的東西

前言

很早之前就有聽過 Ludum Dare 這個活動,也知道 Game Jam,但是遲遲沒有去參加,最主要的原因就是覺得自己能力還不夠。
今天暑假的 Ludum Dare 30 本來有打算要參加,不過當時在家裏時間不是那麼好排就跳過,等到這次才正式參加活動。

下面把一些原始製作構想,製作過程,遇到的問題和心得記錄一下,期望能夠讓臺灣對遊戲製作有興趣的人能夠擁有更多資源。
畢竟 Ludum Dare 並不只是一個全球性 Game Jam 而已,你同時可以看到別人是怎樣在做遊戲的,怎麽看待遊戲和如何與別人討論。簡言之,遊戲開發可不是像國內開個伺服器代理韓國遊戲進來而已,它是一門創作,而創作是需要人與人的互動來激盪。

對了,個人拙作放在:
Ludum Dare 31
itch.io
GitHub

如果你覺得還不錯的話,就幫我評個分數吧;-)

初始構想

一開始腦中浮現的是早期 NES 上面一款遊戲,畫面右方是一群小豬坐在籃子裏只能沿着山壁上下移動,用彈弓之類的投擲武器對付從畫面上方搭氣球緩緩墜落的狼(如果我沒記錯的話),加上個人頗喜歡橫向卷軸射擊遊戲,所以產生以下構想:

  • 主角是 STG 裏面最常出現的炮臺雜魚兵
  • 期望玩家發現自己是炮臺而不是戰機時能會心一笑(很可惜,這點徹底失敗)
  • 抓時間差的射擊遊戲
  • 升級要素
    • 類似宇宙巡航艦那種升級系統

開發工具

這次參加多少有想測試看看自己程式能力的心態,所以工具自然就是:

  • 作業系統

    • GNU/Linux
  • 軟體部分

    • Vim
    • GCC
    • GDB
    • Aseprite
      • Pixel art 都是用這個工具,擁有堪用的簡單動畫製作能力
    • Audacity
      • 切切音效
    • Tiled map editor
      • 只是拿來做畫面規劃而已,沒使用到地圖檔案
  • 開發部分

    • C++
    • SDL2
    • SDL2_image
    • OpenAL-soft
    • ALURE

By the power of freedom!!

過程

雖然手上有一些過去累計的 basecode,不過依舊花了 24hr+ 製作。過程中不停遇到我意料之外的問題,士氣大敗啊!

三角函數

最先開始的工作就是寫個炮臺 class,本來以爲一個小時就能搞定,結果光是讓跑孔瞄準滑鼠指標這邊就卡關快兩個小時。因爲沒有把座標系統統一,導致換算一直錯誤。

士氣 -10。

邪惡的成員函式

這發生在我要寫子彈和敵人碰撞的時候,明明就只是判斷兩個 hitbox 有沒有碰到,但是程式就是出錯。用 GDB 下去看發現敵艦的 hitbox 範圍非常奇怪,追了所有會更改該變數的程式碼也沒發現異狀,直到...

我看到我在敵艦的 base class 跟 sub class 都宣告了同一個名稱的變數 posRect_。外面爲了整合不同的敵艦所以使用 base class 指標去指,拿到的自然是 base class 那份 posRect_...

這邊卡了快四小時,士氣 -30。

遊戲狀態切換

這是製作後期(第二天),因爲新功能大概無望所以開始建立完整的遊戲流程,不過遇到過去一直沒解決的狀態轉換問題。就我過去的架構設計,一個 GameState 會持有許多資源(圖像,聲音),但是卻只擁有一套劇本。由於當時快要睡着的關係並沒有從架構上去解決,只是草草用個 enum 跟 switch 去切換不同腳本,現在看起來還真的頗糟糕。

沒有卡很久,但是我看這骯髒的程式碼很不舒服,士氣 -20,睡意 +50。

釋出

大悲劇,我從來沒有打包釋出程式的經驗...

雖然沒打包過,但是還是看過別人怎麽打包。GNU/Linux 這邊沒花太久,稍微看過 dynamic library 尋找路徑等設定後,寫個 shell script 就搞定了,因爲使用 GNU/Linux 開發,編譯無難度。

Windows 部分就真的頗慘,拖到第三天才搞定。個人懶得開 Windows 重新架編譯環境,所以是直接 mingw32-gcc 做 cross compile 後分別用 Wine 32-bits & 64-bits 做測試,接着就爆炸了,DLL 缺東缺西。請朋友幫我測試,一下缺少 SDL2_image.dll,一下又換 alure.dll,本來想編譯 64 位元版本然後又發現 alure 沒有提供 64 位元的 dll 檔案,自己編譯又編不過...。後來就不管到底有沒有用到,丟了一堆 dll 到資料夾裏面,看了好痛苦。

OSX 本來有打算要跟朋友接來編譯,不過他電腦裏套件都沒裝加上不想太麻煩別人,只好打消念頭。

成品

我好難過,請給我評價。

所有構想裏面大概就只有主角是 STG 裏面最常出現的炮臺雜魚兵這點有達到,其他全部失敗。僅僅是一款音效還值得一笑的作品。

結語

這是一次不錯的體驗,從無到有打造了一款軟體(我想它稱不太上遊戲),也正式面對軟體開發和遊戲開發/設計需要注意的各種問題:

  • 開發方向/遊戲功能實作
  • 進度管理
  • 排除困難的方式
  • 打包釋出
  • 品質管理

以前開發一直都是在沒有時間壓力進度壓力的情況下寫寫小東西,從未正視也難以練習這些工程問題,好消息就是我現在必須面對了。Ludum Dare 31 結束後也有許多熱心的開發者分享一些開發的技巧和心得,除了受用之外也感受到別人對於開發的熱情和整個社群的活絡。期望臺灣遊戲開發者社群也能繼續成長。

作爲 2015 年的新年期許,就朝着 indie game dev 和 programer 的方向前進吧。
(2015 4 月的 LD JAM 早點約人參加,看看能不能訂個 pizza 來吃)

抱怨

Unity Player 什麼時候才要支援 GNU/Linux?還有不知道是不是我的錯覺,好幾款 Unity 的作品在我電腦上都有顯示問題,搞啥鬼。

Comments

comments powered by Disqus