こんにちは。
ケムコ社員Nです。独身です。結婚できません。周りはどんどん結婚していきます。結婚式にさほど誘われないのは人望によるものでしょうが、ご祝儀貧乏が怖いのでさほど問題ありません。
はやくご祝儀を搾取する側に回りたいものです。この前フリが後々で本編につながってくるとは、読者の皆様はきっと夢にも思わないことだろう・・・
【ゲーム制作における一般的な職種一覧】
☑プランナー(企画)
☑ディレクター(監督)
□プログラマー(制作)
□ライター(作文)
□グラフィッカー(作画)
□コンポーザー(作曲)
□ボイスキャスト(声優)
□デバッガー
□マーケター
早速本題に入りましょう。
今日のお題は「プログラマー」。彼らの世界では「プログラマ」と表記するのが習いですが、今回はゲーム業界の職種ということであえて長音記号をつけておきます。
プランナーが「理論」であるならば、プログラマーは「実践」をつかさどります。プログラマーがいなければ、幾多の企画も机上の空論に過ぎないと言えるでしょう。
ところで・・・
読者の皆様は、プログラムとは何かご存知なのでしょうか。
もちろん情報系企業で働いておられる皆様や、幼いころからITに慣れ親しんだ世代の方々は、筆者よりも数段高いレベルでとっくにご承知のことでしょう。
しかしながら、いかにITだらけのこの時代とはいえ、いちユーザとしての一線を越える機会がなければ、この機械が動いている理由は「?」のまま終わってしまうと思うのです。
ですので、今回はあえて、ゲームプログラムとは何かという所からお話ししていきたいと思い・・・
えー、もうちょっと待って下さい。
そもそも皆さん、ゲームとは何かって分かっていますか?
ゲームとは何か
なんで第三回目にしてこんな初歩の初歩みたいな話をするのかという話ですが、そもそも皆様は「ゲームとは何か」に答えられるのでしょうか。
もちろん本コラムの読者様であればゲームをやったことがないという方はおられないでしょうが、危惧しているのは皆様がゲームを目の前にして「これはゲームだ」という以上の回答ができないことです。
ゲームはゲームだろ、と。
そりゃそうなのですが、ゲームとは何か、という問いに対しては「人間とは何か」に比べればずっと分かりやすい辞書的な回答があります。
ゲームというのは、
何らかのルールのもとに行動や選択を行い、それによって楽しむ行為
です。
スポーツの試合もゲームといいます。飲み会の余興でも●●ゲームといったものがあります。これらは名に恥じず全てゲームです。ルールがないゲームは存在せず、
ルールに基づいて行動や選択をする人・・・すなわちプレイヤーがいないゲームも存在しません。
え、そっちかよ。もっとこう、プレステとかスマホとかパソコンとか使ってやるやつのことじゃないのかよ。そう仰る向きもあるかと思いますが本来ゲームとは幅広い意味をもつ言葉です。
本コラムで扱っているような種類のゲームはコンピュータゲームといいます。より短いビデオゲームという言い方もありますが、
こちらはビデオモニタを介さないものを除外するという定義もあるようなので本コラムではコンピュータゲームというほうを採用します。
こう書くと「コンピュータといえばパソコン(PC)のことだろうが、別にコンピュータは使ってないぞ」と仰る方がいるかもしれません・・・お言葉ですが、ゲームを遊べる機械はすべて本質的にはコンピュータ(電子演算機)です。
パソコンは色々できるコンピュータ、ゲーム機はゲームしかできないコンピュータとお考えください。
さて、ゲームとコンピュータの定義を両方押さえた上で、コンピュータゲームとは何かと申し上げますと、
"コンピュータが提示する"何らかのルールのもとに行動や選択を行い、それによって楽しむ行為
です。
ゲームの定義に「コンピュータが提示する」をつけただけですが、これによって世の人が単に「ゲーム」と呼ぶコンピュータゲーム達は、エンターテインメントの世界を一変させる豊かで奇想天外な体験を提供可能としたのです。
実世界におけるゲームでは、ルールを理解し、管理するのはあくまで人間です。スポーツでは全てのプレイヤーがルールを理解したうえで、
公正な立場の審判を交えつつ進行しますね? 一人遊びゲーム(ソリティア)の類だって、自分で審判とプレイヤーの両方を担当しつつ、ルールに則って手を進めるわけです。
逆を返せば、ルールは人間に理解・処理できる程度には単純でないといけません。将棋や碁も(死ぬほど奥が深いとはいえ)基本的なコマの動かし方・石の置き方については、
覚えることはそんなにありませんから、一通りのルールを覚えてしまえばとりあえず遊ぶことはできます。
しかし、ルールが人間の理解力や処理能力を超えてしまうとどうでしょう。筆者はいまだにサッカーのオフサイドや麻雀の符計算が理解不能ですが、
そういうレベルではなく、得点算出にものすごく複雑な計算が必要だったり、プレイヤーが200人いて全てを公正に判定しなければいけなかったり、そんなゲームがあったらとても管理しきれないでしょう。
そんな状況をコンピュータは可能にします。
コンピュータというやつらは、人間がちょっと英字とかな入力をまちがえただけで「system」と打ちたいという意図も理解せず「トントカイモ」などと出力する
アホな連中ですが、大量の計算をいちどに行うとか、とても正確な計算をするとかだけはとても得意です。
面倒な部分を全てコンピュータに任せ、プレイヤーは人間に理解できる範囲で設定された操作のみを行う・・・コンピュータゲームの本質はそういうものです。
ただし、コンピュータはそれだけではエンターテイナーにはなれません。アホのコンピュータたちに創造性(クリエイティビティ)はありません。あくまで演算を行うだけ。
つまり決められた手順に従って作業を行うだけです。それはゲームとて同じこと。「コンピュータゲームという一連の手順」を「だれか」に教えてもらわない限り、
コンピュータはただのつまらない機械のかたまりにすぎません。
この「コンピュータゲームという一連の手順」こそがゲームプログラムであり、この「だれか」こそがプログラマーなのです。
ゲームプログラムとは何か
ようやくここまで来ましたが、既に答えは出ています。
ゲームプログラムとは、
「コンピュータゲームという一連の手順」。
・・・と言われたって全然ピンとこないでしょうが、実はそんなに難しいものではありません。
みなさん、「プログラム」を見たことはありますよね?
コンピュータの話じゃありません。
例えば冒頭の結婚式の話などしましょうか。招待状をもらって、おめかしをして式場に行くわけです。
挨拶をのべ、記帳をし、
泣く泣くご祝儀をお渡しして、その後
プログラムをもらいますね。
そうです。プログラムとは
式次第のことです。
プログラムには何が書いてあるでしょうか?
式で行われる
イベント名と、それが発生する
時間ですね。
場合によっては「雨天の場合、代わりに●●●で行います」みたいな
但し書きも入っているかもしれません。
その本質は、
いつ何が行われるか、特殊条件発生時はどうするかといった行程表です。
コンピュータプログラムも、これと9割同じものです。
お式のプログラムは、それに沿って参加者(人間)が動きます。
コンピュータプログラムは代わりにコンピュータが動く。違いはそれだけです。
突然ですが、誰でも知っているロングセラーゲーム「じゃんけん」を遊びたくなりました。しかし筆者には友達が少ないのでコンピュータと遊ぶことにします。おいコンピュータ、じゃんけんしようぜ。当然何も返事はありません。
あいつらアホだからです。コンピュータは自分で考えることをしません。しかたないので以下のようなプログラムを渡してやります。
- 「0、1、2」の数字を無作為に選んでね
- もし0が選ばれたらコンピュータはグーを出すことにしてね
1ならチョキを、2ならパーを出すことにしてね
- 筆者にグーチョキパーのどれを出すか選ばせてね
- 筆者が選んだなら、コンピュータが出した手と筆者が出した手を比べて、勝ち負けあいこを判定してね
- 結果を表示してね
- 「もう一回やるかどうか」を筆者に聞いてね
もし「やる」なら「1」に戻ってね
やらない」ならここでプログラムは終了だからね
全然難しくないと思います。
要はじゃんけんというゲームの手順を丁寧に分解して、何をして、次に何をやるのかということを全部順番に書いているだけ。じゃんけんというゲームの式次第です。
・・・ちなみに、一応言いますと、上記はコラム読者に読みやすいように柔らかい日本語で書いておりますが、コンピュータに日本語は読めません。アホめ。コンピュータが読めるかたちの言葉にした場合以下のような感じになります。
0101100110101010101010101010101001011001101010101010101010101010101010101010101010101010010110011010101010101010101010101010101010101010101010100101100110101010101010101010101010101010101010101010101001011001101010101010101010101010101010101010101010101010010110011010101010101010101010101010101010101010101010100101100110101010101010101010101010101010101010101010101001011001101010101010101010101010101010101010101010101010010110011010101010101010101010101010101010101010101010100101100110101010101010101010101010101010101010101010101001011001101....
|
※あくまで例なので、これを打ちこんでも動かないよ
読めねーよ。
そうです。突き詰めればコンピュータというやつは
0か1で表された情報=デジタル情報しか読めない奴なのです。
アホめ。人間様の言語なんて高等すぎて到底理解できないとでもいうのか。
おっと、コンピュータに少しばかり知識をお持ちの皆様は、「コンピュータが使っているのは確かに
2進数だが、
ちゃんとビットを翻訳さえすれば意味のある言葉になるだろう」とご推測かと思います。
半分正解、半分不正解です。コンピュータが理解できるのは、
メモリに登録された0や1のどこからどこまでをどうする、といった命令(機械語)だけであり、
結局それは数字によって指示するとても単純な命令を膨大に連ねた羅列にすぎず、ぱっと見で理解できる形ではとてもありません。
ちょっと分かりにくくなってきましたが、
要は例えば「ここに色っぽい女魔術師を描画してほしい」と人間なら一瞬のうちに魂で理解できる指示を実行させるのに、
コンピュータはメモリ上の0と1で処理を行うため、単純ながらものすごい数のメモリ制御命令を指示される必要があるということです。
しかしそれでも昔は、プログラマーは実際に数字を打ちまくってプログラムを作っていたようです。当然間違えやすいですし、あとから見たとき何がなんだか分かりません。
そんなわけでプログラマーたちは色んなコンピュータと人間の共通語を発展させてきました。
共通語で書いたプログラムを通訳(コンパイラとかアセンブラとか)にかけて、機械語に翻訳するか、
あるいは
共通語プログラムを同時通訳者(エンジン)に読み込ませて実行させる(この場合プログラムは特にスクリプトと呼ばれがち)のです。
それにより今では、じゃんけんプログラムは以下のような感じで書けるようになりました。
‘ExcelJanken ver 1.0/2015 written by HisshaN@KEMCO
Sub Janken ()
Dim r As Integer
Dim te As String
Dim rYou As Integer
Dim teYou As String
Dim Res As String
Dim Dialog As Integer
Start:
Randomize
r = int(Rnd * 3)
If r=0 Then
te = "グー"
ElseIf r=1 Then
te = "チョキ"
ElseIf r=2 Then
te = "パー"
End If
rYou = MsgBox(“何を出す?” & vbCrLf & ”はい:グー” & vbCrLf & ”いいえ:チョキ” & vbCrLf & ”キャンセル:パー”, vbYesNoCancel)
If rYou=6 Then
teYou = "グー"
ElseIf rYou=7 Then
teYou = "チョキ"
ElseIf rYou=2 Then
teYou = "パー"
End If
If te = teYou Then
Res = “あいこです”
ElseIf (te = “グー” And teYou = ”チョキ” ) Or (te = “チョキ” And teYou = ”パー” ) Or (te = “パー” And teYou = ”グー” ) Then
Res =”あなたの負けです!”
ElseIf (te = “グー” And teYou = ”パー” ) Or (te = “チョキ” And teYou = ”グー” ) Or (te = “パー” And teYou = ”チョキ” ) Then
Res = “あなたの勝ちです…”
Else
Res=”筆者の想像もしない事態が起きました”
End If
Dialog = MsgBox(“あなたの手:” & teYou & vbCrLf & “コンピュータの手:” & te & vbCrLf & Res & vbCrLf & vbCrLf & “もう一度やりますか?“, vbYesNo)
If Dialog = 6 Then goto Start
End Sub
|
これはVBAと呼ばれる言語で記述したじゃんけんゲームです。VBAと聞いてピンときた方もおられるでしょうが、VBAとはMicrosoft Excelでマクロ(特定手順を自動でやってくれるプログラム)を書くときに使うものです。
そう、あれもプログラム。試しにこのプログラムをExcelのマクロとして実行してみてください。ちゃんと動きます。
昔はこうやって、文字媒体でプログラムを配布して、みんな手作業でプログラムを打ち込んで楽しんでいたようですよ。
Excelをお持ちの皆様は是非お試しください。
但し、じゃんけんのしすぎやマクロ暴走であなたかPCが死んでも弊社では責任をとれません。
Excel上の実行結果はこんな感じ。
どす黒い冗談はさておいて、上記プログラムを見てみてください。
VBAを知らない方も、数字の羅列よりは何らかの法則性を感じさせる、理解できそうな感じを受けるのではないでしょうか。
プログラムとはこういうもので、ゲームのプログラムも、やっていることは基本的には変わりません。
基本的には。
まあ、賢明なる読者の皆様はもうお気づきでしょう。
筆者のようなド素人がコラムの片手間に書いたプログラムが、そこかしこでプレイヤーを熱狂させている超絶クオリティなゲームたちと同じはずがないと。
ゲームプログラマーと呼ばれるには
実のところ、筆者だってじゃんけんとか、青玉を動かして赤玉から逃げるゲームとかその程度なら作れますが、
現代においてそれだけでゲームプログラマーを名乗れるかといえばそうではありません。
「ここでこんな美麗な演出を表示してくれ」
「ここでこの音を鳴らしてくれ」
「ここをプレイヤーが触ったら、こう、ヌルッと動かしてくれ」
「ここでプレイヤーがこっちを選んだらこっちのストーリーを、
逆を選んだらこっちのストーリーをそれぞれ分岐させてくれ」
プランナーから降ってくる色々な指示に対し、プログラマーが答えてよいのは3つだけです。
A.「その指示はこないだ貰った指示と矛盾してますが正しいのはどっちですか」
B.「その指示は(コンピュータが力不足とかそういう理由で)実現困難です」
C.「やります」
プランナーの指示に一貫性があり、なおかつ実現できると思われることならば、全て「やります」と答えられなければならないのがプログラマーです。
彼らは自分が担当するコンピュータ(例えば、スマホゲームを作るならばスマホ)について、十分すぎるほど詳しくなければなりません。
そのうえで、プランナーが「こういうことをやりたい」と言う時、その具体的な方法がぱっと思いつくようでなければなりません・・・。
もちろんプランナーがまだ誰もやったことのない奇抜な案を立てたなら話は別ですが、
そういったことは基本的にまれであり、ゲームを形作る細部の演出や挙動は既にどこかで誰かがやったことのあるものです。
例えばさっきの例で「ヌルッと動かす」というのがありましたが、画像をヌルッと動かす方法というのは一から作ると結構面倒なものの、
既に「ヌルッと動かすキット」みたいなものが存在しているため、それを組み込めば簡単にヌルッと動かせる・・・というような状況があったりします。
プログラマーはその「ヌルッと動かすキット」の存在を知っていなければならないし、もし知らなかったならばすぐに調べて知れる程度の調査技術を持っていなければならない、ということです。
例えば、ITの本場であるアメリカの情報をあたるために、最低限の英語知識も必要になったりします。
なんて言いましたが、実は結構なんとかなります。
今はインターネット上に情報が充実していますし、プログラミングを行うための支援ツールも大量に存在します。だから真のプロフェッショナルでなくてもゲーム作りを行うことはできなくもありません。
しかしながら、ゲーム作りの現場では常に、一流のプログラマーの存在が待ち望まれています。そう、さながら救世主のごとく。
ゲームプログラマーの戦場
前回のコラムで、ディレクターとプランナーの間で起きる
血みどろの争いについて軽く触れました。
それは現場側の「良いものを作りたい」という理想と、プロジェクト管理側の「納期までに完成させなければならない」という現実のせめぎ合いでもありました。
しかしながら現場においても理想と現実のバトルは頻繁に発生します。
特にプランナーとプログラマーの間で。
筆者はケムコ社内開発時にプランナー兼いろいろとして参加することが結構あるのですが、その場合は社内のプログラマーさんと共同で動くことになります。
が、
しょっちゅうバトルになります。
【会話例】
プランナー 「待て、ここってこうした方が面白いぞ!?」
プログラマー「うるせーばか!」
デバッガー 「既知の不具合は一度に全部なおしてくれ!」
プログラマー「じゃあ一度のデバッグでぜんぶ不具合を報告しろ!」
ディレクター「ここの仕様、いつになったら実装されるんだ!」
プログラマー「その仕様はめんどくさかったんでやめました!」
血で血を洗うとはこのことか。
プログラマー各位の名誉のために言っておきますと、基本的に悪いのは仕様書をちゃんと書かない・デバッグ管理が甘い・後々から思いつきでどんどんアイデアを出す等する、別スタッフの側であることが多いです。
そのとばっちりを最終的にはスケジュール厳守という形で背負わされるプログラマーさんたちが、時々トンデモナイ言動に走るのは全員反省すべきことです。
まあ
「その仕様めんどくさかったんでやめました!」という言い分については未だに何が何だかよくわかんないのですが、
それもこれも基本的には
極めて詳細な仕様書を作る暇がないがゆえのトラブルが大多数です(だからやってみてから問題が出る)。
しかし、たとえプランが完璧だったとしても必ずトラブルは起きます。
「バグ」、つまりプログラムの不具合です。
常に真理として言われていることがあります。
「バグのないプログラムは存在しない」
コンピュータはアホなので、カッコが1つ足りないとか、ここに空白がないとか、そんなミスでも動きが止まります。
実際、じゃんけんプログラムも、最初に走らせた時点で「EndIfをEnd Ifとスペース入りで書いたため動かない」「変数を書き間違えてたせいでチョキとパーが出せない」という2つのバグが発生しました(修正済み)。
が、例外処理をテキトーにしているためまだバグはあるかもしれません。こんなに短いプログラムでもバグるものなのです。
ミスを犯す人間のほうがアホだという説もありますが、結局のところ人間の脳とコンピュータでは得意分野が違うのでどっちがバカだという話は不毛ですよね(卑怯)。
プログラマーは、じゃんけんなど比較にならないほど膨大な量のプログラムを作るので、それに見合った量のミスを
確実にしてしまいます(
確実に、です)。
そのミスが分かりやすいもの――その処理を行った瞬間プログラムが停止するとか、そういったものならまだ良いです。
しかし、
ぱっと見で気づかないが良く見るとここに1ドットぶん変な線が出てるとか、
100回「調べる」コマンドを行うとおかしくなるとか、
「盗み」効果のついた武器を装備した状態で中ボス「マルコゲター」の攻撃「あばれる」を2回くらうとブラックアウトして操作不能になるとか、そういうトリッキーなバグはなかなか見つかりませんし、
技術的に乗り越えるのが非常に難しいことも多々あります。機械や基本システム側にバグがあって、ゲーム作る側ではどうしようもない場合すら少なくありません。
そしてそういった深刻なバグは、往々にして、スケジュールが危なくなってきたときに満を持して出現し、制作チームを発狂させるのです。
そんな時、現場では常に究極の選択が行われています。どうやって直すか。そもそも直せるのか。直せないとしたら。この機能全体をなかったことにするか。
ちょこっとルールを変えてしまうか。それとも・・・
み、見なかったことにしてしまおうか・・・
それで意見が合えばいいですが、「その解決策は現実的ではない」「でもこうするしかないだろ」などと意見をたがえれば、バトル発生は必至となります。
結局のところ、何かトラブルが起きた時、ものを言うのはどれだけ基礎を熟知し、どれだけ機械やプログラム言語を熟知しているかというプログラマーとしての地力なのです。筆者のような付け焼刃のなんちゃってプログラマーが、ネットで拾った既製品の素材を駆使してゲームを作り上げたところで、いざトラブルが起きたという時、毛ほども役に立たないでしょう。
やはりプログラマーは職人であり、ゲーム制作という究極的な創造の場において頼れるのは、彼らの職人芸のみなのです。
RPGにおけるプログラマー
最後にケムコの実例を。
再三述べておりますように、ケムコはパブリッシャーであり、社内でRPGは作っておりません。プログラマーさんは他の制作陣ともどもまるごとデベロッパーたる制作会社さんの側にいらっしゃいます。
しかしながら、ケムコのディレクターはしばしば、先方のプログラマーさんとやりとりをすることになります。
良くあるケースは、何かバグが起きて解決方法が分からない時に、プログラマさんに直接連絡をとり、「これこれこういう方式で計算方法を変えてもらえないですか、その場合どれくらい時間がかかりますか」などと相談するときです。
こういった「○○するのにどれくらいかかる」という見積もりは、ゲームに限らず全てのプログラマーにとって、大変難しいながら必須とされる技能です。
常に時間との戦いになる制作現場ではこの見積もりを軸に全てを動かしますからね。
ともかく、そんな状況ですので、筆者自身はまだRPG制作現場には身を置いたことがありません。が、誰もが口をそろえて言うのが、プログラマーにとってRPGはとてもきつい題材だということです。
RPGには様々なパートがあります。移動、イベント、メニュー、戦闘・・・それぞれほとんどまったく別の作りでプログラムを作らなければなりません。
データ量も膨大です。画像もたくさん扱わなければなりませんが、たくさんの画像などのデータを一度に扱おうとすればするほどコンピュータ(スマホやゲーム機)に負担をかけ、下手をするとプログラムは強制終了してしまいます。
加えてRPGはゲーム自体が大ボリュームになりがちで、そのぶんプログラムは膨大になります。とてもとても大変だというのです。
筆者が担当したいくつかの(RPGよりは複雑でない)ゲームですら大変な制作がいくつもありましたので、RPGのそれは想像もしたくない、まさに修羅場に違いありません。
しかし、プログラマーさんは一言「やります」といって、その強大すぎる敵にもポーカーフェイスで立ち向かいます。
そして(色々紆余曲折はあるにせよ)最終的には文字通り「指先ひとつで」それをやってのけるのですから、まさにヒーローと呼びたくもなります。
たとえやっていることの見た目が地味でも、彼らが間違いなく、制作現場の花形であると言えるでしょう。
とは言っても、あまりプログラマーに無茶ばかり言っていては彼ら彼女らを潰してしまいます。
プログラマーに禁断の選択肢「もう疲れました・・・」を言わせないよう、
プランナー側は現実としっかり向き合ってしっかりした仕様をつくり、ディレクターはしっかりとしたプロジェクト管理を行っていくべきですね。
今回のまとめ
- ゲームプログラムとはコンピュータに特定の動作を指示するもので、プログラマーはその指示をつくる人
- コンピュータはアホ
- プログラマーはその網羅的な知識をもって仕様を実現しなければならない
- バグは絶対に出る
- トントカイモ
次回、
ライターについて。ああ、もう既に波乱の予感がします。なぜなら筆者がもっとも得意とする職種がライターだからです(だからこのコラムを書くことになってしまったのですが)。そして、ライターというものが、往々にして軽く見られがちだからです。
デジタルの世界で最もアナログな業種、ライターの秘技と苦悩とは!? 次回のコラムもぜひお楽しみに。
※コラムへの感想および筆者N(♂)との結婚相談はkeitai-info@kemco.jpへどうぞ。
【04回 了】