▲ Yahtzee Croshaw, "JAM", Dark Horse, 2012
中文活動概要 (台北會場報名網頁):http://registrano.com/events/fgj2013-taipei
台北會場‧Team E Wiki頁面:http://fgj.igda.jp/dokuwiki/doku.php?id=team:taipeiiii_e
老實說,為了要不要參加這次的Game Jam,我著實地糾結了一個星期。
第一次知道有Game Jam這種活動,應該是去年差不多時間、看到半路前輩發的心得文之後的事吧?那時候一直以為Game Jam是一種競技性質很重的活動,所以今年的報名消息出來之後,我一直猶豫自己到底夠不夠資格參加?我會不會拖累隊友?我寫code的速度夠不夠快?會不會開天窗?種種懷疑的情緒占滿了腦袋,久久不散。
一週後,抱著「會不會已經額滿了?」的心情,我點下了報名頁的【現在就報名】按鈕。而那個按鈕,就跟紅白機手把上小小的那顆【START】一樣,有著把玩家帶往一個全新世界的魔力,帶往一個超越想像的世界的魔力。
經過兩天的的參與,才發現原來Game Jam與我想像的完全不同:精彩,刺激,而且毫無冷場!
接下來這篇名為《通關報告》的文章,將以我個人的視角,為這個活動作一個平鋪直敘的記錄,並試著以我言不及義的拙劣言辭加上一些注腳,還請諸位看倌不要太苛責。
Day 1
1000 ~ 1030 開幕式與分組
第一次衝擊:Game Jam並不是一項賽事。之所以用了「Jam」這個字,意表這個活動就像是爵士樂的即興演出一般,隨機組隊,任憑組員相互激盪,創作出一款有趣的遊戲,並沒有什麼輸贏之分。
也因為這個關鍵字,使得在分組組員在自我介紹時,我腦袋一直浮現出沈鴻元 (《台北爵士夜》節目主持人) 配音的旁白 (爆)
老實說,現場的氣氛比我想像的輕鬆很多。在經過簡單的開場致詞後,馬上就是題目及本次「成就」的發表,緊接著就開始分組了。我們這組的組員有:
Hayato @ 資深企劃
旻睿 @ 程式:C++、影片/影像處理專長
小剛 @ 程式:Unity / Javascript專長
阿賢 @ 程式:Unity / C#、粒子特效專長
路里閻 @ 企劃 + 美術
人狂 @ 程式:Unity / Javascript專長
各位觀眾,四程式兩企劃!還來不及擔心害怕,團隊已急急忙忙地衝進了Phase 1。
1030 ~ 1400 發想階段 ~ 企劃發表
第一階段幾乎是Hayato的主場──參加過數次Game Jam的他完全知曉怎麼帶各位組員進入狀況──他要求每個人對這次的主題「Jump」作任意的聯想,不論是一個完整的遊戲、或是只有隻字片語、概念的片段,一概平等歡迎,寫在便條紙上貼出來即可。
不消十分鐘,組員們的想法就貼滿了兩大張A3白報紙。
我們一張接著一張,各個解釋每張便條的內容,然後把相似的點子歸類在一起;這個過程中,很自然地,組員們越喜歡的主題會獲得越多的討論,甚至不用投票表決,我們神速地決定了這次的主題:
「上廁所」(炸)
之後的熱烈討論包括了使用的製作工具、遊戲的呈現方式、實際遊戲玩法、以及遊戲玩法是否能夠正確表達核心概念的模擬驗證;討論一直持續到我們吃了午餐回來,開始進入製作階段為止。在這個時間點,基本上所有人心中都有了相同的遊戲雛型。
最終討論出的遊戲主題與架構在wiki頁面有,請恕我不再此贅述。
開發工具的決定就沒辦法那麼Free了,需以多數人熟悉的工具為主;我們只剩一個唯一的選擇──Unity──使得旻睿未能夠發揮長才,必須支援貼圖、素材的製作。反過來說,如果早一年前來參加,很有可能因為多數人熟悉的工具是Adobe Flash,當天支援素材製作的就是天生與ActionScript犯沖的我了。
至於我一直擔心的程式分工問題則由有「台灣Game Jam活動全勤獎」稱號的小剛搞定──他把遊戲的基礎架構切成三大塊:角色控制、計量條動作、關卡障礙物動作──這三大塊剛好可以相互獨立,僅由一個狀態參數連結起來。我們一人認領一塊,便構成了一個十分可行的分工架構。
▲ 發想階段結束的遺跡 (Hayato攝)
兩點還沒到,阿賢已經完成了計量條的基本動作;靠著一週前weekend project惡補,我的角色控制也大致完工了。我們兩人花了一些時間在想辦法讓Javascript可以抓C# code中的變數數值,意外發現這比想像中困難許多,但也順利解決了。
第二次的工作分配:我繼續研究如何使場景能夠隨計量條的數值扭曲變形,而阿賢負責濾鏡效果的撰寫。
在這個時間點,我碰到了第一次的卡關。
原本的計畫是:我用3ds max做一個100個影格的型變動畫,再匯到Unity中,如此一來我便能讓計量條對應到相對的扭曲程度,而不必另外在寫code動態改模型vertex位置。
這個如意算盤的第一項難關便是:我要如何把用FFD modifier做的動畫Bake成逐格的頂點動畫呢?我花了將近一個半小時,才勉強撈到可以做到這件事的maxscript。但又要如何將頂點動畫匯進Unity呢?又花了半小時,得到了「官方不支援,但可以靠插件(Mega-Fiers)硬吃進來」的結論。
第一次停損:停用FFD modifier,改用骨骼動畫;此舉雖然確定可以匯入Unity,但是每段走廊在變型之後的X軸距離會變,所以無縫銜接要另外補一個code、算好縮放距離才行。這個方法看來可行多了,但還是栽在奇怪的物理碰撞效果上。
第二次停損:停用動畫,思考是否有其他的方式表現地形扭曲的效果?這邊非常感謝小剛很有耐心地聽我碎念、讓我能夠釐清思緒。在一邊聊一邊想的過程中,我們決定使用類似火車車廂的手法,讓每節「車廂」可以略為錯開,造成預定的效果。
等到模型建好、貼上由旻睿在一小時前做好的貼圖時,已經五點多了,還要匯入由里閻早在兩點多就繪製好的主要腳色圖,以及阿賢的濾鏡效果......真是一刻都不能閒啊!
弄好之後剛好小剛把關卡障礙物動作的code拿了過來,兩邊開始第一次合併。
Pair Programming!!
自從高中之後就沒幹過這麼熱血的事了啊!!
我把主計量表的變數monitor一份過去小剛的code裡,然後兩人換位置,讓他把script套到demo用的白cube上!
過不到半小時,我們正式趕在發表前完成alpha版製作!
1930 ~ 凌晨 Day1尾聲
Hayato真不愧是業界人士,我們的alpha版發表有板有眼,不、應該說是「有歡笑有讚賞」吧?另外一項令人印象深刻的事就是Live demo時,最後終點線我忘了綁碰撞器,害得我們那位尿急的主角直接往無盡虛無掉落,與廁所再無緣份這件事意外在會場裡造成了不小笑聲.......
Any way,發表會順利地結束了。
會後八點半用餐。一直到十點多為止,這段時間大夥很開心地討論要如何讓遊戲更進一步,不管是遊戲性也好、看起來的華麗程度也好、或是表現效果也好,討論一直沒有停過。膀胱尿液等等十八禁話題漫天飛舞,髒髒!(笑)
實際上的過程也滿有趣的:想出來的新功能一受到認可,我們馬上就會有個人跳出來打包帶回家,根本不用另外分配工作!
最後的討論結果如下:我希望能夠在晚上的時間把標題頁、教學頁、過關及失敗畫面弄好,如此一來遊戲的完成度就會大幅提高;阿賢開始用粒子特效製作物件特效,如此一來遊戲畫面會顯得更生動一些;Hayato希望能夠在主計量表中加入一段「無法回復」的區段,藉此提高遊戲的難度,而這個Request被阿賢瞬間解掉;小剛則希望能夠加強記量表以及幻覺的視覺效果,並專攻這兩塊的code。
在十一點、大樓門禁前,我們匆忙收拾起意猶未竟的討論,帶起傢私,回到自己休息的地方。
▲ 冒著被喊變態風險,拼死拍的會場女廁
0830 ~ 1100 Beta版製作
早上八點半來到會場,看到的是夜宿會場的小剛已經開工了,阿賢的電腦正在開機。我依樣坐下,等著許久沒動用的某牌雙倍咖啡因罐頭發揮它該有的效力。
經過一晚的奮戰,我替場景加上天花板的貼圖,管理遊戲階段的主狀態機也已完成、並套好Hayato在半夜0130傳來的圖檔,障礙物的桌子椅子也找到可以用的model了;只剩下障礙物小鬼、活動門沒著落。小剛則是動用shader,刻了一個無敵精美的計量表,而且差一點點就完工了!
不過很可惜的是,由於關卡設計幾乎等於零,我們還是沒能夠達成「九點上傳主會場開放試玩並取得回饋」的成就。這讓我還滿自責的──要是我前一天一開始就放棄華而不實的做法,直接用火車車廂,我們就能夠省下兩小時、趕上這次的上傳了啊!
不管怎麼樣,製作仍如火如荼地進行著。
我請了旻睿幫忙,把前一天組員們的美勞作業上傳、並剪貼好做成一個個的人偶貼圖,準備放到場景中。我則開始撰寫「從地心竄出」、阻礙我們主角通往廁所之路的妖魔鬼怪用的script。
不過這時也發生了一件讓我們繞遠路的憾事:阿賢拿到了一個瀑布的場景,把它改成水管漏水的特效。特效很棒!但是卻因為我沒有特別強調尺度,使得這個漏水的水管在我們的場景裡足足有七、八層樓那麼高!而且粒子特效的Scale還不是調一個參數就可以解決掉的事情!
教訓:基本場景要盡早完成,如此才能夠跟組員確認尺度,才不會做白工。
十一點的Beta發表是與日本會場連線的,不過幾乎是主持人以日文獨撐全場,沒有硬性要求Live Demo,所以台下各組也是盡可能的趕工中。本人也正埋頭苦幹。沒什麼時間去管其他事情算是Game Jam活動滿大、但不可避免的缺點吧?
1100 ~ 1700 最後衝刺階段
十一點剛過,大夥負責的素材陸陸續續完工:里闇重新繪製了失敗的場景,旻睿開始挑背景音樂,Hayato更新了標題畫面及處理好音效,阿賢也差不多完成了可樂噴泉與謎之液體噴濺的粒子特效。
整合的工作量一次拉很高啊!
1300,整合的工作差不多完成;組員吃飯還沒回來,趁這個時候來研究如何上傳!
1330,首次上傳ok,開始關卡設計。我負責試作前20m的靜態區、最後20m的妖魔鬼怪區;剛吃飯回來的阿賢則負責設計我們的重頭戲──中段30m的動態關卡區。
進度十分不錯呢!兩點多,我們是唯一還有笑聲的組別,只是......誰也沒有想到,擋在我們面前的考驗竟是如此艱鉅......
1400,小剛的筆電因為受不了兩天的連續操練,打出死亡藍幕試圖結束這個回合。勉強開機把東西搶救到旻睿的電腦上繼續作業。
1515,小剛把他那邊的東西打包過來,準備做最終的合併。
我犯的第一個錯誤:合併前沒有備份。第二個錯誤:在不熟Unity custom package運作原理的情況下,貿然告知所有東西一起打包丟過來不會有問題。第三個錯誤:匯入package時,沒有先檢查是否有重複項目。
滿滿的Error message啊!!立flag也不是這樣立的!!
匯入package的進度條默默跑著,我卻渾然不知,這正是死亡倒數的進度條!
【The Open Scene has been modified externally. Ignore? Reload?】
我錯過了point of no return。
隨之而來的結果是:所有名稱有重複的asset、場景物件,全部倒回到alpha版的狀態!主要腳色控制、音樂音效控制、場景模型、幾個沒有另存成Prefab的臨時物件包括門、可樂瓶,全部灰飛煙滅!
死定了。
我跟小剛兩個人幾乎是瞬間垮下來,累積兩天的疲勞一次爆發。
「就算用還原軟體應該也救不回來了吧?」我私下尋思,但還是請小剛一起找找看有什麼能夠補救的方法,我則出門走了一圈,平靜一下、清醒一下。
那是我第一次、也是唯一的一次動用coding BGM。
澳洲電音團Pendulum《Witchcraft》一曲的重低音狠狠打進耳膜、驅趕疲累;早先在會場外投的現磨咖啡整杯催下,毫不保留。Main state machine還在、基礎腳色控制還在、車廂移動腳本還在、小鬼還在、記量條連結OK。在腳色控制端補上一些遺失的code後,Main state machine上線,這樣遊戲就有個型了。現在的問題是:要優先修復聲音效果,還是先把關卡搞定?
只剩一個小時多一點了,先把關卡弄出來吧!
因為阿賢那邊的Unity是舊版,沒辦法開我們的專案,只好請他繼續完成結局動畫;Hayato與旻睿全力製作待會發表要用的投影片以及更新wiki,以防最後修復效果不佳,我們就會要靠超強的嘴砲功力把黑的說成白的。我、小剛、里闇三人各複製了一份專案檔,一人負責20~30m的關卡設計;這時候車廂設計發揮了它的威力──我們把每個車廂/關卡存成prefab,直接靠prefab做最後整合!
時間一分一秒過去。如果這時候有氣場照相機進來會場,應該會被我們散發的歐拉直接燒毀吧!
五點整,倒數機歸零、然後溢位。
「現在放棄的話,比賽就結束了啊!」
「時間已經結束了啊!!」
在千鈞一髮之際,我們的作品正式上傳至官方wiki,上台報告。
尾聲
發表會就在疲累、緊張、驕傲、歡笑交織的氣氛中結束了。
「日本那邊說有人做小褲褲game,我說沒什麼,我們這邊有人做尿game哩。哥倫比亞那邊聽了就說,那我們來找一組人做cult game好了。」主持人浮士德大哥如此說。
會後的餐會,雖然每個人都是拖著身體參加,但是一個話題接著一個話題,從遊戲設計系所現況、兩天的製作過程、一直聊到Game Jam活動秘辛,好像永遠聊不完似的從七點聊到將近九點半,最後,我們才帶著滿載的收穫互道再見,離去。
心得
1. 遊戲發想以貼近生活為佳。在有限的討論時間內,越具體、越容易與現實經驗結合的點子很容易能夠吸引組員以及其他人的注意。如果能夠帶一點超現實的幽默感更棒!
2. 在Game Jam的場子中,Unity由於其簡單易用、完全不懂程式也能參與開發,以及強大的Asset store等特性,已與Flash的使用者比例呈現黃金交叉;本屆福島Game Jam台北場六組全數使用Unity做為開發工具。
3. 同上。如果你是程式人員,Unity應該還會佔上風一陣子,但是Javascript與C# style的code都要會(可以專精一種,但另一種要讀得懂)。這兩種style的code暫時處於一種水火不容的狀態,不易互用,需要多注意。(有時候我會覺得Unity為什麼不乾脆限制大家用Boo script就好了......)
4. 不要鐵齒。就算全隊只有你一個人會用Git / CVS / Mercury,也要開起來用,commit一次花不了幾秒鐘,如果你是負責整合程式的那位更應該如此。一可以防止檔案覆蓋的悲劇,二則在會後寫製作過程時、亦可以自由存取各個階段的成果。
5. 由於製作時間緊迫,成品的風格整合往往會是一大弱項;我們這一組沒有所謂專職的美術人員,所有功能均是基於該功能負責人的美感而成,沒辦法統一。希望之後能夠遇到專業美術,看看這一塊有沒有什麼好做法。
6. 同上。製作時間緊迫的關係,基本上你沒辦法太關心會場裡發生了什麼事;與主會場語言不通,也會造成沒辦法去關心對方做了什麼遊戲出來,這是比較可惜的一點。
7. 備用網路方案很重要。參加者人手一台筆電,會場wifi吃得滿滿滿,後來還多加開一台AP才有辦法支援所有人連上網路;據說有幾次在學校場地,無線網路甚至被鎖。我個人有3G網路支援,所以比較沒關係,但是檔案分享就麻煩了,也不一定每個人都有dropbox帳號,最後我們是用三隻隨身碟+一顆行動硬碟才解決。或許之後帶一台NAS會是一個好方法?
8. 會後聚餐時,大家聊了很多遊戲設計系所的八卦。我很羨慕他們有組隊到遊戲公司實習的管道,但我也認為,如果要寫遊戲,讀資工還是比較好的選擇 (Unity / Virtool?自修就會的東西上課教,多沒意思阿?),你的視野會寬廣很多,演算法、資料結構的訓練也會比較扎實。
這次的福島Game Jam就這樣落幕了,Hayato、旻睿、小剛、阿賢、路里闇,感謝你們這些可愛的隊友讓我們的團隊無懈可擊;尤其像我這種單打獨鬥慣了、合作開發沒啥經驗的孤僻老頭,更要謝謝你們的包容,讓我能夠知道一個隊伍應該有的樣貌。
隨機湊起的團隊,使人屏棄既有的成見,讓之前沒有交集、天差地遠的生活經驗擦出創意;亦使人放開心胸、平等交流,忘卻平常所屬單位的磨擦,重拾創作的熱情。我想這就是Game Jam活動的真諦吧?這兩天累歸累,但是收穫無窮,如果以後還有機會 (希望開始工作後體力負荷得住六日這樣操......),我應該還是會參加的!
謝謝各位的收看~
不要鐵齒讓我笑了﹍竟然有這種活動真希望以後也能參加就是XD
回覆刪除大鳥你如果有興趣可以follow IGDA Taiwan (http://igda.tw/),
刪除或IGDShare (https://igdshare.org/),
基本上台灣Game Jam活動他們那邊都會有消息。
什麼時候要衝要揪一下嘿 XD"
哇、我還不敢自己亂衝咧,
刪除頂多只是想看如果有個基本人數去吸趴而已(被巴