読者です 読者をやめる 読者になる 読者になる

ゲームのスクリプトがRubyでなぜいけないか?

僕が考える結論は、
ゲームのスクリプトは基本的にプログラマが書くのではなく、スクリプタが書くものだから。


前置。
まずこれはゲームをスクリプト言語でつくる、という訳ではなく、
シナリオやエフェクトの制御につかう簡易スクリプトのお話。
Rubyを挙げたのはRPGツクールXPで使われているから。


で、これらを使う人というのは概ねプランナかデザイナなので
Rubyなんて難しいものを使わせてはならないということになる。


どんなゲームでも、年間を通してつくるような規模のものであればスクリプト制御の必要性が生じると思う。
なぜならプログラマがすべてのロジックを記述するよりも、
シナリオやイベントはプランナ、
エフェクトやUIはデザイナが記述できたほうが楽で確かなものができるし、
何よりプログラマの手が足りないからだ。

プログラマがつくって、担当にみせて、チェックして、なんて間怠っこしい事はとてもじゃないがやってられない。
加えて、直接ソースコードをいじるとビルド時間が馬鹿にならない。
なので、ROMにおくデータをちょちょいと変えて動的に読ませる方が良い。
ゲーム中のたった一つのエフェクトのスピードを変えるだけでビルドしてリンクしてマシンに転送なんてやってられないのだ。


こういった表層上に現れるすべての事にプログラマが手を煩わされるわけにはいかないので、
プログラマではなく、それに適した人間が適切なものを用いて記述すべき、という考えになる。

イベント、UI、シナリオフラグ、NPC、敵の思考、
こういった雑多な処理はプログラマソースコードを用いて記述すべきではない。


で、ここでどのレベルまで記述できるようにするのか、
ということを考えるのがプログラマの仕事だ。


スクリプトを汎用的なものにしてしまえばゲームのすべてをスクリプトで記述できることもできるだろう。

が、殆どの場合単にパラメータだけを渡すことができ、
簡易ロジックのみを実装したコマンド式のもので済ませる。


これは要するにシナリオならシナリオに関係あることしか制御できず、
エフェクトならエフェクトに関係あることしか記述できない言語。



最も勘違いしてはならないのは、
プログラマではない人間にプログラマ的な能力を期待するのは間違い、ということ。
エレガントに書く、コンパクトに書く、スマートに書く、
そんなことを考えさせてはいけないし、考えてもくれない。
なので、Rubyは常に役不足になる。

限定的な処理に対し、
どんな処理をどんな風にでも書ける、
なんていうものを用意するのは愚の骨頂で、
限られた処理を限られたレベル、限られた範囲で書けるようにすべきだ。


越権は無用。
RubyよりもC、
CよりもBASICが望ましい。
ここで、オブジェクト指向とか言い出すアホがいたら無視して良い。
こうした考えは見えないところで利用者にとって親切で適切な動きをすれば良いのであって、
強いるものではない。


スクリプトにできる事を増やせば増やすほど、そのデバッグ責任もプログラマが負う。


スクリプトをつくって、その上、デバッガまで作らないとならなくなるのは本末転倒だ。
なので、常にスクリプトはシンプルであるべき、という経験を踏まえて、
JavaCCをちょこちょこと触る。
バーチャルマシンの動きをつらつらと考える。