snakencircle制作の記録

 

f:id:yosuke-m:20120201140405p:plain

 1月28日、僕は福岡工業大学短期大学部を訪れた。Global Game Jam、通称GGJに参加するためだ。

 Global Game Jamとは、寄せ集めのチームが2日かけてゲームを作るイベントである。1月末に世界中で同時に開催されている。

 30分ほど遅刻して教室にはいると、そこでは、100人以上の開発者たちが、ゲームデザインに関する講義に耳を傾けていた。

 福岡会場の主催である金子さんから、名札が配られた。名札の裏にはばらばらに切られたゲームタイトルの画像が差し込まれている。これがぴったりとそろう相手が、今回一緒にゲームを作る仲間になる、という趣向らしい。

 僕の名札に入っていたのは、ラブプラスの高峰愛花だった(これが金子さんの趣味か……!)他に、3人の人々がラブプラスの画像をもっていた。本来のチームの人数6人に対して、4人しか揃っていないということで、チーム名はラブマイナスに決定した。

・ゲームの核を決める

 4人で会議が始まった。一般的にはブレインストーミングからアイディアを出したりするのだろうが、僕たちは特に形式を決めずに話し合いを始めた。

 今回のGGJのテーマはこれだ。

 

f:id:yosuke-m:20120201120406p:plain

 

「輪廻転生とか、そういうあれですよね」
「ウロボロス」
「無限ループ」

 キーワードをいくつか紙に書き出してみる。お互いにどんなジャンルが作ってみたいのか、意見を交換し合う。アクション、パズル、ボードゲームといった案が上がる。

 と、ここで一つ問題が発覚した。うちのチームは、プログラマーが二人、グラフィッカーが一人、両者の掛け持ちが一人で、サウンドの担当者がいないのだ。

「これは、サウンドがいないという前提で進めたほうがいいかもしれませんね」

 サウンドがなくても成り立つゲームとしては、ボードゲームがある。そこで、僕が直前に出していた「蛇を操作して輪を作り、その中を陣地とする対戦型ゲーム」というアイディアを元に、ボードゲームを考えてみることにした。

「六角形がいいと思う」
 リーダーの出した案はこうだった。プレイヤーは順番に六角形のパネルを並べていく。パネルには蛇の絵が描かれている。それを繋げて、陣地を作る。

「どこが誰の陣地かを、どうやって見た目で示すかが問題ですよね」
「真ん中を取ったら勝ちというのはどうでしょうか?」

 次に出た案はこうだ。ボードの端から蛇が伸びてゆく。ただし、2つのパネルと隣接する場所にしか、自分のパネルは置けない。相手を妨害しながら、最短ルートで中心を目指す。

「これって先手必勝なんじゃないですか?」
「妨害が発生しないことがありえますよね」

 ボードゲーム案はうまくまとまらない。結局、原点に立ち返って、陣取りをデジタルゲームとして作ることになった。

 ここまで、およそ2時間。他のチームより早くまとまったものの、残り26時間で形にしないといけないと考えると、悠長にしている時間はなかった。

・ゲームデザインの細部を決める

 プログラマー間で、ゲームのアイディアをどう実現するか、会議することにした。

「蛇の通った軌跡をパスとして保存して、それを元に、マップチップを塗り替えます」
「それって難しくない?」
 リーダーが口を挟んだ。たしかに、任意のパスを塗りつぶすアルゴリズムは、ちょっと考えたくらいでは思いつかない。
「へびの曲がり方を一定にして、曲がり始めたら必ず円を描くようにしたほうが、簡単に面積を計算できるんじゃない?」

 たしかに、計算はそちらのほうが簡単だ。しかし、このゲームの醍醐味は、より多くの陣地をとろうとすればするほど、敵に妨害されるリスクが高まるという点にある。曲がり方を一定にしてしまうと、それが成り立たなくなる。だが、下手にリスキーなことをして、締め切りに間に合わなくなるのは避けたい。

 僕が口をつぐんだそのとき、もう一人のプログラマーが手を挙げた。
「やりましょう!」
 その勢いに押されて、僕も乗った。
「やりましょう!」
 そうして、リーダーは懐柔されたのだった。

 ちょうどよい時間だったので、お昼を食べるためCoCo壱番屋へと入った。

「操作どうします?」
 僕は聞いた。
「マウスでの操作をイメージしてました」
 と、もう一人のプログラマーは言った。しかし、現実的に考えて、マウスポインタの位置を複数取得する方法はない。ネットワーク対戦を組み込む余裕もない。ジョイパッドを使うのが無難だった。

「スティックで操作するなら、ウエライドでいうところの、赤いマシンでいくか、青いマシンでいくか」
「僕はいつも赤いほうでやってたから青いほうをよくしらない」
「みんなに遊んでもらってから決めたら?」

 CoCo壱のカレーは辛かった。

 帰り道、同じ大学からきていた参加者に会った。彼は、サウンドとして、別のチームに所属していた。今うちのチームサウンドがいないんだよねー、と言ってみたら、彼がサウンドを提供してくれることになった。多謝。

・実装

 部屋に戻ってから、プラットフォームをどうするかという話になった。GGJで3Dゲームを作る場合、Unityの利用が大半を占めるが、2Dについてはこれという選択肢がない。最初は、JavaScriptの使用を検討したが、ジョイパッドの入力を取得するのが難しいという話になり、結局XNAで作ることになった。Subversionの設定や、XNAのインストールをしていたら3時間ほどかかってしまった。

 その間に、チームメンバーが3人増えた。そして、誰もがグラフィッカーだった。後から知った話だが、金子さんは、このチームはゲームと言うよりアプリを開発するんじゃないか、という目論見だったらしい。

 グラフィック斑は、蛇が陣地を奪い合うというよくわからないシチュエーションに困惑していた。たしかに、設定から考えると、今回のようなゲームデザインにはなりにくいだろう。彼らが最初の企画に参加していれば、ゲーム内容はまた違ったものになっただろう。そんなことを考えながら、とりあえず、グラフィック斑には設定を後付けで考えてもらうことにした。加えて、デザインの方向性を指示するコンセプトアートもお願いした。

 一方、プログラマー斑は分業に悩んでいた。僕たちのチームには学生しかおらず、集団開発の経験がほぼなかった。結局、パスとマップチップのシステムはもう一人のプログラマーが組み、そのほかは自分が作ることになったが、この時点でちゃんと設計を固めていれば、もう少しきれいなコードが書けたのかもしれない。

 僕はGUIプログラマーとして、まず、へびが徐々に伸びていく仕組みを作らなければならなかった。そのためには、パーツごとに分割可能なデザインの蛇を用意してもらう必要があった。そのあたりの旨を固めて、デザイナーに伝えた。

 実は僕も彼も、C#による開発の経験はほとんどなかった。リファレンスを眺めながら、なんとかして蛇の操作を作った。その後、ウエライドの赤がいいねという話になり、操作系を作り変えた。この時点で、夕方の8時くらいだっただろうか。

 その直後から、続々と部品が仕上がり始めた。蛇のグラフィックができ、タイトル画面ができ、背景の草むらができた。さらに、パスのシステムが組み込まれた。このシステムが、蛇の交差を検出し、互いの体を切断し合う。BGMもついた。

 しかし、この時点で、一つの問題が浮上してきていた。グラフィックの仕事が少なく、やることがないという声が上がりはじめたのである。しかし、このゲームではもともと必要になる素材はそれほど多くない。プログラマーはかつかつで、他人の仕事に気を配るほどの余裕はなかった。

 今回一番苦戦したのは、やはり塗りつぶしの実装だった。当初、僕たちはパスを徐々に内側にしぼませていくようなアルゴリズムの使用を検討していた。しかし、これはうまくいかなかった。原因は不明だが、まったく意に介さない挙動を示すばかりだった。

 発想を変えることにしたのは、深夜3時を過ぎたころだった。まず、パスをドットの2次元配列に変換し、その、外側を塗りつぶす。外を塗りつぶすということは、すなわち、内側以外を塗りつぶすということだ。後から反転してやれば、内側が出る。外側を確実に塗りつぶすために、マップの上下左右に1pxずつ、プレイヤーの進入できない余白を設ける。そこから塗りつぶしを開始すれば、確実に外側を塗りつぶせる。発想はシンプルだが、深夜の朦朧とした頭ではなかなか出てこなかった。

 実装が終了して、うまく動くことを確認すると、僕たちは床で寝た。ゲームシステムはほとんどできていた。

・最後の日

 朝の時点で、未実装の要素は限られていた。得点の表示と、勝利画面である。その部分の素材をグラフィッカーに依頼し、僕たちはデバッグを始めることにした。

 しかし、これはデバッグにならなかった。やばい。このゲーム面白い。自画自賛しながら何試合も遊んでいた。バグも見つけたが、些細なものばかりだった。

 午前11時ごろには、得点表示も勝利画面も実装が終わっていた。マップ塗りつぶしのバグも直した。最終プレゼンまであと4時間もあった。僕たちは、遊びながら気になる点を改善していった。Ready Goの表示や、虹色のマス(取ると自分のスピードがあがったり、他のプレイヤーの速度が下がったりする)の機能がついたのは、このときである。

・まとめ

f:id:yosuke-m:20120201140337p:plain
※本当は4人対戦までできます

 また、今回制作したゲーム「snakencircle」は、福岡会場のオーディエンスアワードを受賞した。グラフィッカーの方々にうまく仕事を回せなかった等の問題はあったものの、結果としていいゲームができたことは誇っていいと思う。

 GGJの期間中は、まるで2~3時間が普段の一日に相当するかのような、非常に濃密で、かつスピード感のある時間を経験できた。大変楽しかった。

 

追記:GlobalGameJamのサイトからsnakencircleがダウンロードできるようになった。コントローラをたくさんもってないと遊べないけどな!