シナリオ(背景)自動生成

これは僕が作成したシナリオ(背景)自動生成ツールがどのような考え方に基づいているかを記したものである。また、最後にこのツールを作成するために調べた(結果うまく行かなかった)手法や、このツール以前に自分でやってみた(結果うまく行かなかった)方法についても記しておく。

2015.11.14

【シナリオの基本構造】

僕の目的は、プレイヤーがどんなキャラクターを作るかわからないからPCの立場や背景に非依存なシナリオで舞台はシティアドベンチャーというシナリオを自動生成したい、そして、重要なポイントはシナリオ中のイベントがそれぞれ関連性を持って、妥当な感じで生成できるということだった。もう少し具体的に言うと、PCが街で誰かに厄介事の解決を頼まれたり、たまたま関わった人を助けたり、事件に巻き込まれてそれを解決する羽目になったり、というシナリオを途中に発生するであろうイベントを含めて大体話が通じるような形で自動生成したかった。

ここで一番の難題はシナリオ中のイベントに関連性を持たせるという部分で、これがどうもうまく行かない。いろいろ調べたりしたけれど、どれも解決にはならなかった。書き始めると長くなるからここでは省略する。

で、いろいろ考えているうちに、先に挙げた様なシナリオは基本的に次の様な構成になることに気づいた。

  1. 事件には悪役がいる
  2. 悪役が事件(につながる何らかの出来事)を起こす。
  3. PCが事件に関わる
  4. PCは(最終的に)悪役に対抗する側に協力する
  5. 結果、悪党の思惑通りにはならない

上記の構成から、僕はシナリオ構築の視点を大きく変える発見をした。それは、

ということだ。PCの関与は外部要因に過ぎない。僕はそれまでPCがどうしたら次はどうなるという風にシナリオを生成しようとしていたけれど、それは間違っているということだ。この考えに至ったことで、

  1. 事件を構築する
  2. 事件に対してPCがどう関わるかを追加する

という大本となるロジックができた。

【事件を生成する】

前述の考えから、まずはPCのことは関係なく事件を構成する手法を考えた。

事件は次の様に組み立てることができる。

  1. 首謀者と標的を決定する。
  2. 首謀者の視点で事件の目的を決定する。
  3. 2に基づいて幾つかのイベントを作る。

この段では1は自動的に決まる。単に首謀者と標的のNPCがいれば良い。違和感のある人もいるかもしれないが、どんなNPCを当てはめても基本的に事件を作ることができる。具体例を示すと「AがBを殺害しようとしている」、「AはBの所有物Xを奪おうとしている」などのAとBに農民、領主、騎士、盗賊、…、と適当な立場のNPCをランダムに当てはめてもきちんと事件になる。なお悪役という言葉を使用せず、首謀者と標的を使用したのには理由がある。これは後述する。

2から3の順で事件を構成するのがポイントだ。僕の目的はランダムだけど整合性のあるシナリオを生成できるようにすることだった。そのためには首謀者が最終的に何をするかを決めて、それを達成するための行動を逆算する必要がある。この方向で構築することで、関連性のある出来事をグループ化して扱うことができるから事件の最終目的に整合性のある出来事をランダム生成できる。その出来事の中で置き換え可能な部分、例えば場所とかアイテムとかはランダムに置き換え可能にしておけば良い。

これで、事件自体は自動生成できるようになった。

【PCの関与を組み込む】

事件をTRPGのシナリオにするためには、PCを関与させなければならない。つまり、導入イベントを用意するわけだ。論理的にはPCが前述の3で用意したイベントのどれかで良いのだけど、3で用意したイベントはPCが悪役の計画を妨害するための対象にしたい。だから、導入用のイベントは事件の前半で専用のものを用意することにした。例えば、PCが首謀者から協力を頼まれるとか、事件の発端を目撃するとか、標的から護衛を頼まれるとか。

(余談:PCが関与するのは事件の後、つまり、事件の真相を探るというシナリオは当然あり得る。これも、プログラムには組み込めそうだったけど、ややこしくなるから考えないことにした。)

次に決めなければならないのは1つはPCが最初に首謀者側につくのか、標的側につくのか、そして悪役は首謀者なのか標的なのかだ。この組み合わせによって話の展開は4パターンになる。話が前後してしまうけれど、途中に発生する出来事はこれを考慮して生成できるようにしている。もう一つ、僕のプログラムではPCが最終的にどっちの味方をすべきかを明示することにしている。事件の背景をシナリオ化するとき、PCが当初協力していたNPCが悪役だった場合、どこかでそれに気づいて陣営を変えられるようにしなければならないからだ。

最後に、事件は途中の出来事がPCによって邪魔された結果、計画が頓挫した悪役がどのような行動に出るかを決めなければならない。しかし、PCに邪魔をされて計画がダメになったというのは悪役にとって完全に想定外なわけで、整合性を持って行動を生成することはできない。でも、これには簡単な解決方法があって、単に悪役との最終決戦にすれば問題ない。時代劇などで追い詰められた悪役が主人公に斬りかかるのと同じだ。その上、この最終決戦はそれまでの流れとあんまり関係なく設定しても問題なくて、適当な場所でラスボスと対面して戦闘になるようにしておけば大体OKだ(僕は『The Lunatic』のようなファンタジーTRPGを念頭に置いているからこれで問題ない。『クトゥルフの呼び声』なんかだとこうは行かない)。

これで事件をシナリオ化してPC観点で物語を展開できるだけの情報ができた。

【NPCの背景を決める】

どんなNPCを首謀者にするか、標的にするかは重要じゃないと書いたけれど、それは事件を構成するまでの話だ。これをシナリオ化するためにはもう少し具体的にNPCを設定しないといけない。

僕のプログラムではでは「首謀者がなぜ事件を起こすのか」も生成している。事件型のシナリオの場合、往々にして予定外のことが起こる。NPCに基本的な行動指針があるとそれを決めやすい。そのための設定としてNPCが事件を起こした理由を設定した。

もう一つ、NPCの職業と首謀者と標的の関係性とをランダム生成している。たったこれだけの設定ではあるけど、これらがあることでNPCの物語を想像しやすくなる。物語を想像しやすければ当然具体的なシナリオにも落とし込みやすい。ちなみに、これらはシナリオ途中の出来事とは無関係に生成しても大体問題ない。

【終わり】

以上がシナリオ(背景)自動生成ツールでやっていることの全てだ。それほど大したことをしているわけではないけれど、結構使えそうなシナリオ(背景)を吐き出してくれるところをみるとこのロジックは結構良い線を行っているのだと思う。

【追記】

シナリオ自動生成ツールが欲しかったのは手っ取り早くTRPGのシナリオを作りたいからで、ツールを作ったり手法を確立したいからじゃなかった。だから、自分で作る前に相当Webで検索したり、TRPG関連の書籍などを読んだりした。これはその苦労の記録。

[ダンジョン、ウィルダネス、シティアドベンチャー]

フェンタジー系のシナリオパターンとして昔から言われているシナリオ類型だけど、出処はどこなんだろう? はっきり言って、この分類にはあんまり意味がないと思う。でも、ハック&スラッシュ(静的なシナリオ)と事件型(動的なシナリオ)という分類には意味がある。ハック&スラッシュ(静的なシナリオ)はローグ型のCRPGなんかですでに手法的には確立されている訳だし。

[シナリオのダンジョン化]

多分、昔Webで見たことがあると思うんだけどどこで見たかは忘れた。先ほど述べた静的なシナリオ以外でもダンジョンと同じような構造として表現できるという考え方だ。シナリオのイベントをノード(ダンジョンの部屋に相当)、イベントごとの接続をパス(ダンジョンの通路に相当)と考えるという訳。完成したシナリオはそうかもしれないけど、自動生成に応用するのは困難だ。ランダムに生成したノードにイベントを当てはめて、それを適切にパスで連結することができない(できなかった)。

[シナリオのテンプレート化]

これは可能性が高そうと思ってかなり考えた方法だ。実際、シナリオ(背景)自動生成プログラムの前に『The Lunatic」のサプリメントとして公開していたシナリオ作成ルールはこの考え方に基づいていたし。

僕がやろうとしたのは[シナリオのダンジョン化]を一歩進めて、基本構造を何パターンかに集約することで無理をなくそうというものだった。この方法は導入部分とクライマックス部分を構成するには問題ないんだけど、やはり中盤のイベントに整合性をもたせた上でランダム生成するのがうまく行かなかった。

[シナリオ類型集]

これは前述の[シナリオのテンプレート化]を検討していた時にその資料として調べたもので、ライトノベルとかコンピュータRPG向けのシナリオ作成の本とかシナリオ類型集なんかだ。ハンドアウトを使って特定のPCを主人公として扱うようなシナリオのパターンには使えるかもしれないけど、僕が求めていたものには合致しない。その上、シナリオの中盤で扱えるようなある程度具体的なイベントについては全然資料がない。全然役に立たなかった。

[既存のシナリオを一般化する]

これも[シナリオのテンプレート化]を検討していた時にやろうとして諦めた作業だ。手元にあるシナリオとかWebで公開されているシナリオを調べてある程度一般化すれば、テンプレートの要素にできるのでは、と思ってやろうとしたんだけど、10シナリオくらいのメモを作った時点で諦めた。シナリオの中盤部分の展開にパターンがありすぎてうまく一般化できなかった。

[NPC主体のシナリオ構築]

これはNPCの背景とか考え方、行動指針とかを決めることでシナリオ作成の助けにしようというもの。僕はこの考え方に基づいたシナリオ作成用のサプリメントを書いたことがある(公開したかはよく覚えていない)し、Webでもそういう感じの意見を見たことがある気がする。結論としてはこれもダメ。シナリオに必要なのは「事件」であって「NPC」はその部品に過ぎない。いくらNPCの設定を増やしてもそれがなんらかの事件に繋がらないとシナリオにはできない。

『The Lunatic』