なぜシナリオスクリプト言語には2層構造が必要となるか

物語を重視するゲームのスクリプティング言語には、簡潔な記述の層と細かい記述の層の2層構造が必要である、と常々考えています。もしかしたら、それは層ではなくて、面 (aspect) と呼ぶべきかもしれませんが、ともかく、少なくとも2通りの触り方はできねばならないと考えます。

理由は簡単。ゲームのシナリオスクリプトには、シナリオライターとスクリプトプログラマーの両者が触るからです。そして、シナリオライターとスクリプトプログラマーでは、一般的に扱うスクリプトの複雑さが異なります。ですので、シナリオライターが納入する記述レベルと、スクリプトプログラマーがゲームエンジンに実際に喰わせるスクリプトの記述レベルの2層が必要となるのです。

もちろん、ライターによってはスクリプトプログラマまで兼任できるだけのスキルを持っている場合もあります*1が、一般的にはライターは分岐構造くらいまで書いて、あとはスクリプトプログラマに渡すケースが多いと思います*2。ちなみに、もっと大型の企画で、システムが複雑、かつ、シナリオ執筆が孫受けくらいにまで撒かれるようなタイトルでは、3層くらいの記述フォーマットになることもあるとかないとか。また、もっと状態遷移が複雑な RPG では、シナリオスクリプトを書くことが一種の職人芸となってしまい、人材の代替が利かない(辞められたら困る)というレベルにまでなっているという話も複数の会社で耳にしました。どこも苦労しているようです。

ぴったりの例というわけではありませんが、ネット上で ADV タイトルに関するいくつかの事例を見かけましたので、せっかくなので引用してみます。

例えば、プログラマの視点から見ると、シナリオライターとのやり取りは以下のような状況になります。

喉痛い - senzogawaのNな日々

 ちなみに、簡易な記述方式というのは、全角英字の書き出しから、全角のみで記述する方法で、「半角文字書きたくない」というシナリオ書きの要望から作り出した謎言語だ。それを元に変換するわけだけど、いかんせん面倒が多い・・・もっと楽な方法を探さねば。

一方、同じようなことをシナリオライターの視点から見た表現が以下のようになります。(※上下の2つが同一タイトルに関する記述というわけではありません。念のため)

美少女ゲームシナリオ教室・補講 (注意: リンク先には成人向けのネタが含まれます)

フラグによる分岐の場合は、専門的にはIF文というのを使うのですが、IF文を使用せずとも指定はできます。

;*********
;▼▲フラグ分岐▲▼
;*********
(1)F001=1の場合
SCENE05へジャンプ
(2)F002=1の場合
SCENE06へジャンプ
(3)その他
SCENE07へジャンプ

のように書いておけば、プログラマーには伝わります。

要するに何がいいたいのかと申しますと。

従来技術の問題点その1
物語作成のプロであるシナリオライターに複雑なスクリプト言語での記述を求める事は難しい。そのため、中間的な記述フォーマットで書いてもらって、あとでスクリプトプログラマーが頑張って編集するケースが一般的である。しかし、これでは後からシナリオに変更が発生した場合に、中間記述フォーマットと最終的なシナリオスクリプトとの同期が困難である。
従来技術の問題点その2
シナリオライターが実際に書く中間的な記述フォーマットは、言ってしまえばIF文とGOTO文の塊でしかない。これでは複雑な分岐構造を構築・管理することが困難である。

ということで。

解決案その1
ひとつのスクリプトの実体を複数の視点から記述できるようなスクリプト言語にする。すでに行われていることでは、エンジンが必要とする細かいコマンドはマクロとして別ファイルに閉じ込めてしまい、シナリオライターにはそのマクロだけを理解してもらって頑張って記述してもらうなど。
解決案その2
その1をもう一歩押し進めて、ひとつのスクリプトの実体を複数の視点から操作できるような IDE を作成する。フローチャートの自動同期機能や、典型的な分岐構造に関するテンプレートなどを用意することで、シナリオライターのマルチシナリオの作成をサポートする。

なんてことを考えるわけです。

解決案その1に関しては、吉里吉里が本当にいい例だと感じています。分かりやすく言うと、TeX と LaTeX の関係といいますか。

解決案その2は、現状ではまだ実現しているツールはないと理解しています。頑張ります……。

マルチシナリオの作成の IDE によるサポートって、言うのは簡単なんですけど、実際問題、どんな機能があればいいんでしょうね〜。分岐構造のテンプレートというのも、どういう感じで綺麗なシステムに落とすかは、かなりの難題でございます。

まずは、分岐構造の分類から入らないとやっぱり駄目そうですよね……。

*1:シナリオからプログラミングまで全部やってしまう素敵タレントの持ち主もPC98時代くらいにはいらっしゃいました

*2:とはいえ、ADV の開発経験はバイト時代の2社3タイトルほどしか無いので、最近の流行りがどうかは分かりません。話半分程度に聞いておいてください。