自分でゲームを作るという事に関して

サークル内デスマーチもあったので、それについて感じたことや現在の自分の意見を書き留めておく。
なお、ここでいうゲームとは、デジタルゲームを指す物とし、ゲームを作りたいと考えるものをアマチュア、すなわちお金の動かない(あるいは、同人で多少のお金が移動する程度の)LVであると想定する。


「ゲームを作りたい」というのは非常に簡潔であり、一見具体性のある目標の様に見える。特に、そのことがプログラミングを学び始める切っ掛けになった人も多いのではないだろうか*1
しかし、それだけでは目標を達成する事は非常に難しい。
特に少し大きなゲームを作成しようと思うと、それは非常に難しい物となる。
ゲームは複数の要素――例えば、ゲームのルール、ゲーム内のストーリー、画像・オブジェクト、音楽、操作性、演出など――を組み合わせた結果として出来上がるものである。
ゲームを作りたいという欲求に対して、どのレベルからアプローチをするにしても、ゲームとして成り立つための構成要素を集めなければならない。
もちろん、集めるのが無理な部分に関しては切り捨て、それをゲームとして昇華するという方法もある。だが、それを行うためにはゲームの構成要素を考え、自分でアレンジしてまとめ上げ、形にするという作業が必要になる。これは、全ての要素がそろっている場合にも必要になるスキルである。
これらの要素は多岐にわたるため、1人で全ての要素を入手するのは難しい。1人で作業を全て行えるのであれば何ら問題は無いが、そこにたどりつけるのはごく僅かだと考えられる。
では、チームを組めばいいのかというと、それも難しい。ゲームを作成すると言う事に対して時間を割いてもらうわけだから、その協力者に対してもゲームに参加することで得られる対価がなければ、なかなかチームを組んでもらえない。場合によっては、先にOKを出していても、直前でチームから脱退されることすら考えられる。あくまで趣味のLVにおいてゲームを作成しようとした場合、なんらかの価値を提供しなければ、協力関係を築きあげるのは難しいのである。


ゲームを作りたいと思っている者は、そのプロジェクトのリーダーであり、企画者であり、第1の顧客であるべきである。
「何が作りたいのか」「自分で作った作品を楽しめるのか」「作品に対して、ビジョンが見えるのか」といったことを、チームメンバに示す必要がある。明確な目標が見えないと、人は動いてくれない。
その意味では、出さなければならないという締め切りを設定することは非常に有用だろう。目標が日付という明確な形となって現われてくれるから。


もう一つ、プログラマ主導型のゲームプロジェクトは難しいということを今回感じた。これは、特に作品としての出来が見栄えに影響されることが大きい。
見栄えは特に絵やデザインによって大きく変わってくる。これらがしっかりしているだけで、シンプルなルールのゲームが高級に見えてくることすらあるし、自分はそれを常に感じている。
悪く言えば、ゲームプログラマは、ゲームのアイデアやストーリー、絵や音楽などの用意された素材(ゲームの元である「入力」)を合わせて、的確な形にして出力するということしか出来ないのである。
つまり、魅力的な入力を提供してくれる相手を引き込む理由が薄いのである。
これは、ゲームを作るときに、ゲームで使う綺麗な絵が既に用意されている(あるいは、その絵を作れるほどの実力を別の作品で見せている)のと、動くゲームを作り、それが実際に動いている所を見せるのでは、前者の方が直感的で、他者への説得力が強いことを意味している。
後者に魅力が無いわけでは無いが、それをプログラマ以外に理解してもらうことは難しいと考えられる。さらには、大抵の場合、ゲームというソフトウェアは、全ての素材の総括であるので、素材無しにプログラムの魅力を他の人にアピールすることが難しいということも、他者を引き込むことを難しくしている。


ゲームプログラマがすべきことは何か。
まず、ルール性の強いゲームにおいては、そのルールをプログラムとして形にできることが強みである。これは、ゲームのルール性を提案しやすいということを指す。
これはゲームデザイナーとしての仕事であるため、ゲームを作りたいと言ってプログラムを学ぶ人は、大抵ゲームデザイナーになりたいのであろう。この兼任は結構だと思うが、デザイナーであるが故に、あとから「あれもこれも」をしたがると思う。現に、自分はそうだった。
この様に「これができればいいな」と思いつつゲームの内容を変更することは、ソフトウェア開発の要求変更に相当する。
ここで安易な変更をしつつもゲームを完成させることは、ソフトウェア開発の中でも最高峰の難易度を誇るのである。
そのため、デザイナーの自分とプログラマの自分。この二者は、適切に分離をしておかなければならない。
そして、要求・仕様を十分に分析し、決定しておかなければならない。あるいは、十分に変化が起こりうる事を考慮した上で次の段階に移る必要がある*2
これらをあまり決めずにプログラムコーディングに突っ込むことは、ただの日曜プログラマの遊びに過ぎない*3 *4


もう一つ、ゲームの基礎デザインや、出力の精度を高めることがチームを作るための原動力になる。入力が良くても出力がダメでは、その最高のポテンシャルは発揮されない。入力を最大限利用できるような技法、演出、効果などを実現する方法を学ぶのがよいだろう。特に、入力側が予想出来ないような出力、入力側が望んでいる演出を実際に見せてみるのは非常に効果的だ。


8年ぐらい、個人でのゲーム制作に関してがむしゃらにやってきたが、その失敗の理由は「デザイナーとプログラマの分離」が出来てないことが大半を占めていると思う。
このことが切っ掛けで、各種の設計思想や開発手法に興味を持ったので、その経験が無駄とは思っていない。
ただ、分かってしまえば簡単な事だ。
自分でゲームを作るときには、今自分が何の「役」をしているのかを思い出して欲しい。

*1:例えば自分とか

*2:つまり、アジャイル的に動くということ。当然だが、これを的確に実現するためには相当量の知識・経験が必要となることは想像に難くない。

*3:無論、それで出来てしまうのであれば文句は言わないのだが、大体3〜5000行を超えたあたりで難しくなると感じている。

*4:もちろん、プロトタイプを作るなどの目標がある場合を除く。