第1回で
ダイアログを作ったのと同じ要領で、"HireDismissDialog"という新しいDialog Viewを作成しました。
ここに、「人間フォロワー全解雇」と「動物フォロワー全解雇」のセリフをひとつずつ作ります。
「人間フォロワー全解雇」はこんな感じ。
PapyrusFragmentには、
(GetOwningQuest() as SL01SPSQuestScript).SL01AllDismissSPSFollower()
と入力。
Conditionsでは、人間フォロワーの人数を数えているグローバル変数が「0」でない時を設定。
そしてこのダイアログを出すのは、とりあえずですがドラゴンブリッジの宿の女主人ファイダさんにしました。宿の主人をフォロワーとして連れ出すことはまずないと思うので、メンテナンスの役割をお願いするのに最適です。Conditionsを加えて、雇用中のフォロワーに話しかけても同じダイアログが出るようにしてもいいかもしれません。
こういうメンテナンス系処理はMCMメニューを作ってそちらでやった方が便利なのかもしれませんが、まずもってメニューの作り方から覚えなきゃいけず、大変なので手は出さないことにしました。
「動物フォロワー全解雇」のダイアログ
PapyrusFragmentには、
(GetOwningQuest() as SL01SPSQuestScript).SL01AllDismissSPSAnimalFollower()
と入力。
Conditionsには動物フォロワーの人数を数えているグローバル変数が「0」でない時を設定。
話し相手はやっぱりファイダさん。
いずれも、誰かを雇用している状態で、フォロワーAliasがなぜか空になってしまった状況、連れているフォロワーが何らかの影響でDisableやDeleteマークされてしまった状況を想定したメンテナンス用ダイアログです。それ以外の不具合には多分対処できません。
FollowerCountのグローバル変数が「0」の状態で、何かがおかしくなるという状況はまず起きないでしょうから、この条件設定でおおむね大丈夫でしょう。
「人間フォロワー全解雇」と「動物フォロワー全解雇」ともにScriptでは以下の処理を行わせています。
・フォロワーAliasを順番にチェックして、誰かがAliasに入っているなら通常の解雇処理を実行、Aliasが空なら何もしない。
・すべてのAliasを空にしたら、FollowerCountのグローバル変数を強制的に「0」にする。
ここまでできたら、ちょっとだけダイアログBranchの整理をしてみたいと思います。
念のために一度クエストをOKして、ファイルをセーブしておきます。BranchのInsertとRemoveの操作で、CKが強制終了したことがあったためです。あと、間違ってBranchをDeleteしちゃった時の保険にもなります。
今見ているDialog Viewは、メンテナンス用の全解雇ダイアログが登録されています。ここに前回のDialog Viewで作った、「雇用」のダイアログBranchを移動させます。
何もない白い部分で右クリックして、「Insert branch into current view」を選択。
Select Topicというウィンドウが開きます。
この中から、「雇用」のダイアログBranchを選択してOKします。
すると、「雇用」のダイアログBranchがViewの中に新しく加わりました。
移動させて見やすく整理します。
以前に作った方のFollowerDialog Viewを選択。
こちらにも「雇用」のダイアログBranchが表示されています。こちらのはもう必要ないので、Viewから消すことにします。
ダイアログをViewから消すには、背景の濃いオレンジ色のところにカーソルを合わせて右クリック。
「Remove branch from current view」を選びます。「Delete branch」は選ばないでください。これはBranchのデータそのものを削除する選択肢です。
Removeした直後。
なぜかTopicだけが残りましたが、無視します。
HireDismissDialogueを選択するか、いったん「Quest Data」ボタンを押すなりしてこの画面を一度非表示にすれば直ります。
こんなふうに、きれいに消えてくれると思います。
これでこのDialogueViewには、「雇用中に表示されるダイアログ」だけをまとめることができました。とても見やすいです。
Branchを並べ替えて整理整頓。
今はまだこの程度ですけど、今後他の機能を追加してダイアログが増えたら、適度にDialog Viewを追加して整理すると管理しやすくなります。
ついでに、最大人数まで雇用している時に雇用しようとすると、「もう誰か連れているようだ」と言われるダイアログも追加しておきます。なしでいいかと思っていたんですけど、やっぱりあった方が便利でした。
最初に人間フォロワーの「雇用」Topicを開けます。
以前加えていた「ActorTypeNPC」の条件ですが、どうも無しでもいいっぽいので消すことにしました。
Conditionsは、過不足のない設定をするのがなかなか難しいです。ダイアログの出現で何か問題があったら、またその時見直して対処することにしました。
「ActorTypeNPC」の条件を消したら、再度右クリックしてCopy All Conditionsを選択します。
最後にOK。
雇用Branchに新しいTopicを追加します。
セリフに「もう仲間がいるじゃないか」を入力。
Conditionsには先ほどコピーしておいたのを、Paste Conditionsで貼りつけます。
FollowerCountのグローバル変数のみ、「最大雇用人数に等しいとき」に変更。
これでOKします。
動物フォロワー用も同様に。
動物はしゃべれないので、Promptにプレイヤー側からの断りの文句を入れておきます。
話しかけると、「今ペットがいっぱいだから、また今度ね」というダイアログがでるので、動物フォロワー枠が満員になっているのが分かります。
最終的にこうなりました。
最後に、「手伝ってもらおうかな」の指示中、フォロワーの受け答えを追加します。
「Favors」ボタンを押すとこの画面になるので、真ん中のTopicsの欄内で右クリック。NewTopisを選びます。
SelectTopicウィンドウが開きます。
指示(Favor)モード中は、それぞれの状況に応じてここに並んでいる受け答えの種類が存在します。すべて設定する必要はありません。
「Agree」、「Refuse」、「MoralRefusal」の3種類のみ設定することにしました。
まずは、指示されたことに「同意」する受け答えを作ります。「Agree」を選んでOKします。
小さいウィンドウが開くので、Topicの名前を分かりやすいものにします。
面倒であれば、空白でもいいかと思われます。
Topicのところに(Agree)と付いたEditorIDが加わります。改めてこれを選択し、右側のInfo欄で右クリックしてNew。
同意のときのセリフを入れます。この例では汎用ボイスすべてで使えるSharedInfoを選びました。Randomにもチェックを入れておきます。
Conditionsは、「自作の人間フォロワー用Currentファクションに入っている」だけを設定しておきます。これでこの自作クエストのFavorモードセリフが、他のフォロワーModに影響を与えることはないでしょう。
ちなみに、バニラのフォロワー用ボイスを持っている人は、バニラクエストで設定されているFavorモードのセリフで受け答えしてくれるみたいです。なのでここのセリフ設定は、バニラフォロワーのボイスタイプを持っていない人専用になります。
同意のセリフが一つだけでは寂しいので、同じ要領でもうひとつセリフを登録しました。
こちらにもRandomにチェックを入れておきます。
こんな感じ。
ものを頼んで同意してくれた時は、「分かった」と「分かった分かった。お前には負けたよ」のどちらかをランダムで言ってくれます。
同様にして「拒否」するときのTopic「Refuse」も作りました。
こちらは拒否するのにふさわしいSharedInfoがあんまり見つからなかったので、とりあえずセリフはひとつだけ。
「いいや、そうは思わない(PersuadeReject02)」と拒否ります。
「モラルに反することを指示されて拒否」をするTopic「MoralRefusal」も作ります。
単に「拒否」する場合よりは少し強めの反応を示すセリフがいいのかな……。
「そんなことを信じるとでも?(PersuadeReject01)」のセリフは、話し手の表情にPuzzled(50)が設定されているので、顔をゆがめながら断ります。
この「モラル拒否」は言う頻度が少ないっぽいので、セリフはひとつでも十分かと思います。
一例として、所有権のあるベッドに寝かせようとすると、このセリフを言います。
これで一通りの設定が完了です。
ひたすらテスト。
人間フォロワーと動物フォロワーを連れている状態でファイダさんに話しかけ、ダイアログが出ているのを確認します。実際に全てのフォロワーが解雇されるかどうかも確認。
コンソールでグローバル変数を直接変更することもできます。これでFollowerCountの変数を強制的にゼロ以外にして、テストすることもできます。「Set <Global変数のID名> to <値>」です。余談ですがゲーム内での時刻もグローバル変数なので、「Set Gamehour to 18.5」とすると、午後6時半になります。
雇用時のメッセージも、最大人数まで雇っているとき、きちんと断りのセリフが出るかどうか調べます。
ゲーム終了後はPapyrusログでエラーが出ていないかも確認。
……よし、できた!
次で最後です。
自作クエストを開け「QuestData」内にて、「Start Game Enabled」にチェックを入れます。
これでこのModをゲームに導入すれば、クエストが自動的に始まるようになります。もうコンソールからいちいちStartQuestしなくてよくなります! 「一番初めにこれをやっとけ」って感じですが、テスト段階のクエストはうまく動くかどうか何かと不安なので、ある程度形になるまではこうしてます。無駄な用心のような気もしますけど……。
ちなみに、ダイアログやシーンなどに会話文を含んだ「Start Game Enabled」のクエストは、「
ダイアログが出現しない」、「シーンが始まらない」といった問題が起きるようです。これを解決するために、SEQファイルを生成します。これはコマンドプロンプトやSteamからでも作れるらしいのですが、TES5Editで簡単に作成できるのでそちらでやることにします。
ファイルをセーブしてCKを終了します。
TES5Editを起動して、作成したespファイルを読み込みます。
読み込みが終わったら、自分のファイルの上で右クリックして、Other > Create SEQ Fileを選択。
右欄のところにこんな感じでseqファイルを1つ生成したお知らせが出ます。
Seqファイルは、Skyrim本体のDataフォルダのSeqフォルダ内にできます。
これでクエストのダイアログが表示されるようになります。
あとはApply Filter for Cleaningして、バニラデータに意図しない変更を加えていないかチェックします。
バニラデータは何一つ弄っていないので、色の付いている項目はないはずです。必要であればRemove "identical to Master" recodesでクリーニングします。あるいは項目を直接選んでRemoveします。
Modを作っている時はこんな感じで、ひと段落着く度にクリーニングしています。記憶が新しいうち、データの数が少ないうちにやらないと、「意図しない変更」がどれなのか自分でも分からなくなってしまうので。
さて、「傭兵にお金を払って雇用」はできませんが、それ以外はバニラのフォロワークエストとほとんど同じ動作の自作フォロワークエストができました!
自作Mod未導入のセーブデータを使って、自作フォロワークエストが自動的に始まってくれるか、ダイアログはちゃんと出てくれるかを確認します。
ここまでくれば本動作テストがてら、自作Modで遊べるようになります。
Aliasも増やせます。ただし「自分のAliasを検索する(SL01GetMyAlias)」の処理自体がたいして早くないのと、「最後のAlias〜最初のAlias」の順に検索しているので、たくさん増やすときは検索の順を「最初〜最後」に変える必要があるかもしれません。
雇用時の処理では、番号の若いAliasへ優先的にNPCを突っ込んでいるので、最初のほうのAliasが使用されている確率が高いためです。
それからフレンドリーファイアの設定が無い状態に限りなく近いので、仲間割れへの注意が要ります。軽く1、2発誤爆する程度なら仲間割れは起きないようですが、油断しているとすぐ仲間内で敵対します。魔法を使うフォロワーは特に要注意……。
前へ |
次へ
ここまでの成果を、サンプルとしてまとめてみました。
サンプルでは、人間フォロワーに食事の簡易Eatパッケージもつけてあげてます。インベントリに食料(正確には"VendorItemFood"のキーワードを持つアイテム)があると、それを消費して朝食と夕食を勝手に食べます。
動作保障はできませんので、あくまでCKでの確認と参考程度ですが……。一応、当方の環境では動作してました。
■
ダウンロード
espファイルと、作成に使用したScript(コンパイル済みのpexファイルとソースであるpscファイル)、seqファイルが入っています。
もしこれと同じespファイル名、Scriptファイル名でModを作成されている場合は、上書きしてしまわないようご注意ください。