スカイリムの世界で繰り広げられる様々なストーリーやイベントの数々は、全てQuestによって管理されています。
メインクエストのように、特定のイベントに関わる人物や場所があらかじめ決まっている場合もあれば、執政から受ける依頼のように「山賊退治」のキーワードが共通するのみで場所も退治する相手も毎回違うという場合もあります。
この「毎回違う」イベントは、場所ごとに山賊のアジトとボスを指定したQuestが複数用意されてそれらがランダムに選ばれているわけではなく、ひとつのQuestのみで管理されています。そしてそのひとつのQuestが、毎回異なる場所とそこにいるボスをランダムに選んでいます。これが「
Radiant Story」というシステムです。CK wiki の
チュートリアルに具体的な作成方法が説明されています。
山賊退治の例だと、ロケーションAliasに「山賊のアジトである」「依頼を受けた地域の領内にある」という条件が指定されており、Quest開始と同時にその条件を満たすダンジョンがランダムに探し出されてAliasにねじ込まれます。ボスも「ロケーションAliasにいる、ボスのレファレンスタイプを持つ」NPCが探し出されてボスAliasに突っ込まれます。
「Radiant」がうまく働く為には、選び出される
ロケーションやNPCにも適切なキーワード等が設定されている必要があるというのが分かります。
「Radiant」に選出してもらえる設定さえ持たせれば、MODで追加した山賊のアジトでも依頼対象になります。実際にQuestを確認し、具体的にどのような方法でAliasが選出されるか確認してみます。
山賊退治用Quest「BQ01」です。
このQuestはStory Managerの「Change Location Event」からイベントデータを受け取って開始します。開始条件は、プレイヤーが「スカイリム9つのホールドの、どれかの町にやって来たとき」です。
上から順にAliasの内容を見て行きます。Aliasは「
ロケーション(Cell)」専用と「
レファレンス(オブジェクトやActor)」専用の2種類あります。
- Location:Story Managerから「New Location」のイベントデータを受け取ります。プレイヤーの移動先のロケーションが入ります。
- LocationCenterMarker:Alias「Location」に登録された「LocationCenterMarker」というRefTypeを持つオブジェクトをAliasに入れます。CKで町を見た時、黄色い直方体のついたXMarker等を見つけることがありますが、あれです。黄色い直方体が「LocationCenterMarker」というRefTypeを持っている印になってます。
- Hold:プレイヤーがいるホールドを特定するためのAlias。多くの場合ロケーションは、「ホールドロケーション ― 各地のロケーション」のように親ロケーションを持つ親子構造になっています。Alias「LocationCenterMarker」が存在するロケーションもしくはその親ロケーションから、「LocTypeHold」のキーワードを持つロケーションを拾っていると思われます。
- Jarl、Steward:「Find Matching Reference」のConditionに合致するレファレンスが探し出されます。どちらも「初期配置場所のロケーションもしくは親ロケーションがAlias:Holdと同じ」が条件に含まれています。あとは加入しているFactionで首長と執政をそれぞれ探し出してます。ちなみにStewardの方にはOptionalのフラグがついているので、このAliasが満たされなくても(つまり執政が死んでいても)Questが開始できます。
- InnKeeper:「Find Matching Reference」のConditionに合致するレファレンスが探し出されます。首長や執政より条件がきつくて、宿屋主人用のファクションに加入している条件の他に、「初期配置場所のロケーション、もしくは親ロケーションがAlias:Locationと同じ」となっています。つまりプレイヤーが訪れた町の宿屋の主人に限定されるはずです。もし首長などと同じく「Alias:Holdに属する~」とやってしまうと、そのホールドに存在する宿屋の主人の誰かが選出されてしまいます。シルバーブラッドの主人から賞金の依頼を受けようとしても、Aliasがオールドフロルダンの宿屋の主人に割り当てられているために依頼が受けられないということが起こりえます。
- BountyLocation:山賊のアジトを探します。「Alias:LocationCenterMarkerが属する『LocTypeHold』のキーワードを持ったロケーションと自分の親ロケーションが同じ」かつ「『LocTypeBandidCamp』のキーワードを持つ」かつ「『Boss』のRefTypeを持ったレファレンスが存在する」ロケーションが選ばれます。要するに、同じホールドにあるボス付き山賊アジトが選出されます。
- MapMarker:Alias:BountyLocationにあるマップマーカーのオブジェクトを探します。Optionalのフラグがついているので、このAliasが満たされなくてもQuestが開始できます。
- Bounty:賞金首のAliasです。Alias:BountyLocationの持つ「Boss」のRefTypeを持ったレファレンスが選ばれます。
- Letter:賞金首の布告。
- Player:プレイヤーの行動を監視するためのAlias。依頼を受けることなく移動したら、Questを終了するScriptがついています。
複雑ですが、こんなふうにして山賊退治のクエストが作られています。
特にLocationを指定するAliasのうちLocationCenterMarkerは、それ自体がクエスト中で使われるというよりも今いるホールドを特定するための処理に使われている感じが強いです。
こちらは「ホワイト川監視所」のLocationです。Object WindowのWorldData > Locationにあります。
Locationは各セルに設定する、地域情報のようなものです。複数のセルに同じLocationを設定して、ここらはロリクステッド範囲圏とか、この屋内セル全部レイクビュー邸所属とかを決められます。
親ロケーションに「WhiterunHoldLocation」、Locationのキーワードとして「LocTypeBandidCamp」を持っているのが分かります。
画面右側には、このLocationが割り当てられているCellの一覧、Locationに存在するRefType一覧、Actor一覧があります。特にRefType一覧を見ると、この場所が他のどんなQuestの候補地になるかうっすら予想できます。
色々仕込まれてますね。ところでLocationEdgeMarkerって?
気になる項目はObject Windowのリストから探し出し、右クリック>Use Infoでそのデータを参照しているObject一覧を出すことができます。この一覧からRefTypeがどこで何のために使われているのかが、分かる場合もあります。
調べてみたところ、LocationEdgeMarkerは「そのあたりで何やら事件があると聞いた。調査に向かう途中だ」と道を歩いている傭兵の目的地に設定されることなどが分かりました。
このようにRadiantシステムを利用したQuestの構造を知ることで、スカイリムの世界に自然に溶け込んだ山賊アジト追加Modや、タルスガルが立ち寄れる宿追加Modなどを作成することが可能です。自分の作った宿にヘルゲンから逃げてきた農民夫婦が来てくれたりすると、かなり嬉しいです。
Radiantクエスト自作も楽しいでしょう。他Modで追加されたNPCやロケーションも、向こうで設定さえ持ってくれていれば自作クエストに巻き込んでしまえます。