スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

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

もう1年半ほど経ってしまったけれど、シナリオ自動生成のことを記事にしておこう。正しくはシナリオ自動生成ではなくて、シナリオ背景の自動生成だけれども。なお、この記事はホームページに掲載した記事の本体部分を抜粋したもので、ホームページの方には「シナリオ(背景)自動生成ツール作成までに自分でやったことや調べたことも記述している。

【シナリオの基本構造】
僕の目的は、プレイヤーがどんなキャラクターを作るかわからないからPCの立場や背景に非依存なシナリオで舞台はシティアドベンチャーというシナリオを自動生成したい、そして、重要なポイントはシナリオ中のイベントがそれぞれ関連性を持って、妥当な感じで生成できるということだった。もう少し具体的に言うと、PCが街で誰かに厄介事の解決を頼まれたり、たまたま関わった人を助けたり、事件に巻き込まれてそれを解決する羽目になったり、というシナリオを途中に発生するであろうイベントを含めて大体話が通じるような形で自動生成したかった。
ここで一番の難題はシナリオ中のイベントに関連性を持たせるという部分で、これがどうもうまく行かない。いろいろ調べたりしたけれど、どれも解決にはならなかった。書き始めると長くなるからここでは省略する。
で、いろいろ考えているうちに、先に挙げた様なシナリオは基本的に次の様な構成になることに気づいた。

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

上記の構成から、僕はシナリオ構築の視点を大きく変える発見をした。それは、
・事件こそがシナリオの中心である
・事件はPCがいなくても始まるし、進行する
ということだ。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の物語を想像しやすくなる。物語を想像しやすければ当然具体的なシナリオにも落とし込みやすい。ちなみに、これらはシナリオ途中の出来事とは無関係に生成しても大体問題ない。

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

コメント

非公開コメント

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。