久々に、アニメ種族以外のお話です。
メインクエストは1週しかクリアしたことがなく、今更ながら初めてBOSルートに突入しました。まだまだ長く遊べそうです・・・。
で、ここで困ったことが。
移動はNeutral Vertibirdsを使ってるんですが、どうやらThe Prydwenへの着艦に失敗するようです。空中に放り出されてしまう為、うちのNanakoが大変危険で心配です。
バグレポは上がってるようですが、最終更新から2年以上経ってるMODですし、自分で対策することにします。
長くなるので、今回は原因確認まで。実際の改造は次回にて。
The Prydwenから落下する状況確認
原因を特定すべく、一連の動作を追っていきます。まずはボストン空港に止めておいたNeutral Veltibirdに搭乗。
降りてこないパイロットが気になってたので、自販機と大差ないGen1 Synthに差替えてます。
いざ、The Prydwenに向けて離陸!
ボストン空港からなのですぐ到着です。アームが伸びて、着艦準備開始。
主翼を畳んで着艦完了。プレイヤキャラの降機アニメーションが始まります。
で、ここからが問題。プレイヤキャラが降り終わる前に、Neutral VertibirdがPrydwenからの離艦を開始します。
BOSのベルチだと、プレイヤキャラが降り終えた後に飛び去りますね(一時生成NPCですし)。
結果、プレイヤキャラがベルチから離れた頃には、フライトデッキは遥か上。あとは一直線にdiving to paradise。コズワースは残ってますね。これじゃ111が残念な子みたい。
うーむ・・・。Prydwenにあまり立ち寄るつもりは無いですが、困りますねこれ。直します。
Fast Travel用Questを確認
ベルチバードのFast Travelは、クエスト(ガービーから受注するお使いと同じ)として動作します。そこでNeutral VertibirdのFast Travel用Quest、NTRVFTxx003502
にガザ入れ開始。NTR・・・ゴクリ。
ここのQuest Stagesタブと、Scenesタブを調べます。
ちなみにバニラのベルチ用Questと、基本的に同じ構造してます(Signal Granedeの代わりにPip-Boyを使ったり、Fragment ScriptがQuest Scriptに吸収されてたり等、差分は結構在りますが)。
Quest Stages
Questの進捗次第で、フラグが立っていきます。おおよそ見たままの条件で設定されます。
30未満は呼び出し時なので、今回は、以下に注目。
Stage 30 (搭乗完了)
Stage 40 (飛行中)
Stage 50 (着陸中)
Stage 60 (着陸完了)
Stage 100 (クエスト完了)
Scenes
クエストを進めるに当たっての段取りです。左から順にPhaseが進んでいき、一番右まで到達したら全Phase終了。主にPhaseを進める条件設定や、終了時のアクション(Stage設定や、Fragment Scriptの実行)が設定されてます。
今回必要な部分だけ抜粋。
抜粋しても長いので、前後半に分けます。
Phase 3
プレイヤキャラがベルチに乗るのを待ってる状態。搭乗したらFragment Scriptを実行し、Phase 4へ移行。
スクリプトの内容は、
- コンパニオンの適宜配置(複数可)
- コンパニオンにGhost属性追加(被弾してもすり抜ける)
- Quest Stage 30の設定
Phase 4
Pip-boyからの目的地設定待ち。設定後に離陸したら、Quest Stage 40を立ててPhase 5へ移行。
Phase 5
着陸待ち状態(目的地もしくは任意の途中着陸)。着陸態勢に入ったらQuest Stage 50を立て、Phase 6へ移行。
続いて後半。
Phase 6
着陸完了待機中。完全に着陸したら、Quest Stageに60を立てて、Phase 7へ移行。
Phase 7
プレイヤキャラの降機待ち状態。プレイヤキャラが降りたらFragment Scriptを実行し、Phase 8へ移行。
スクリプトの内容は、
- 同乗してるコンパニオンを全員降ろす(?)
- コンパニオンのGhost属性解除
Phase 8
降機待ち(5秒間)
以上でPhase終了。特に変な所は無いように見えます。
The Prydwen着艦の流れを再確認
これを踏まえて、もう一回流れを再確認。
sqs xx003502
をポイントごとに実行して、Quest Stageと比較していきます。
- プレイヤキャラ搭乗。Stage 30
- 飛行状態。Stage 40
- 着艦準備。Stage 50
- 着艦完了。Stage 60
- 降機中、5秒を待たずにクエストが終了済に(Stage 100)。ベルチ離艦開始。
- プレイヤキャラがダイブ。
プレイヤキャラが降りた後の、5秒間待機が動いてないように見えますね。本来ならこの5秒の間に、安全に降機できる筈なのに(BOSベルチと同じ)。
スクリプトのログを確認
Scene通りに動いてないとすると、Quest Scriptが何かやってそうです。Neutral Vertibirdのスクリプトにはデバッグメッセージが沢山あるので、確認します。
[06/29/2019 - 08:44:16AM] NTRVFTScene Scene starts
[06/29/2019 - 08:44:16AM] NTRVFTScene Phase 3 begins
[06/29/2019 - 08:44:20AM] turret got idlechairsitting from [ObjectReference < (00000014)>]
[06/29/2019 - 08:44:20AM] NTRVFTScene Phase 3 ends
[06/29/2019 - 08:44:20AM] NTRVFT Stage is now: 30
[06/29/2019 - 08:44:20AM] Companion [CodsworthReferenceScript < (0001CA7D)>] ghosted: True
[06/29/2019 - 08:44:20AM] NTRVFTScene Phase 4 begins
[06/29/2019 - 08:44:27AM] NTRVFTScene Phase 4 ends
[06/29/2019 - 08:44:27AM] NTRVFT Stage is now: 40
[06/29/2019 - 08:44:27AM] NTRVFTScene Phase 5 begins
[06/29/2019 - 08:44:46AM] NTRVFTScene Phase 5 ends
[06/29/2019 - 08:44:46AM] NTRVFT Stage is now: 50
[06/29/2019 - 08:44:46AM] NTRVFTScene Phase 6 begins
[06/29/2019 - 08:44:58AM] NTRVFTScene Phase 6 ends
[06/29/2019 - 08:44:59AM] NTRVFT Stage is now: 60
[06/29/2019 - 08:44:59AM] Player dismounted
[06/29/2019 - 08:44:59AM] PartySize: 1
[06/29/2019 - 08:44:59AM] actor on turret sheathing [Weapon < (61003170)>]
[06/29/2019 - 08:44:59AM] GunTurret ExitTurret: [Actor < (00000014)>]
[06/29/2019 - 08:44:59AM] Follower [CodsworthReferenceScript < (0001CA7D)>] dismounted
[06/29/2019 - 08:44:59AM] [ntrvertibirdactorscript < (FF015907)>] re-equipping weapon [Weapon < (FE0368E0)>]
[06/29/2019 - 08:44:59AM] NTRVFTScene Scene ends
[06/29/2019 - 08:44:59AM] NTRVFT Stage is now: 100
[06/29/2019 - 08:44:59AM] Companion [CodsworthReferenceScript < (0001CA7D)>] ghosted: False
[06/29/2019 - 08:44:59AM] NTRVFT Stage is now: 100
[06/29/2019 - 08:44:59AM] PartySize: 1
[06/29/2019 - 08:44:59AM] Companion [CodsworthReferenceScript < (0001CA7D)>] ghosted: False
[06/29/2019 - 08:44:59AM] Follower [CodsworthReferenceScript < (0001CA7D)>] dismounted
[06/29/2019 - 08:44:59AM] NTRVFT stopped
[06/29/2019 - 08:44:59AM] PartySize: 0
・・・はい、大問題。SceneがPhase 6で終了しています。通常の地面では問題無いですが、Prydwenに限ってだけはPhase 8まで走ってくれないと落下死することに。
こんな感じでPhase 7とPhase 8がすっ飛ばされてるので、プレイヤキャラがベルチから降りた瞬間に、クエストが終了してると思われます。
スクリプトにエラーログが出てる訳じゃないので、こういうのはプラグインと突き合わせないと原因が分からないですね。競合不具合の際もこういう手順で確認しないと、ことによっては見落とす可能性が。
対策は次回にて。残念ながらNeutral Vertibirdにはスクリプトソースが無い為、PexInspector (Fallout 4 and Skyrim Script Editor)を使ってバイナリ(pexファイル)を直接書き換えます。
(おまけ)Quest構造について
僕もクエスト関係はあまり触ったことないのでアレですが、中身を見る前にたとえ話的な概要説明をば。重要項目として、Quest Stages、Scenes、Quest Aliasesがあります。
Quest Aliases
クエストを演じる役作り。映画を例にすると、『パイレーツ・オブ・カリビアン』というクエストで、『ジョニー・デップ』というNPCが、『ジャック・スパロゥ』というAlias(エイリアス)を演じます。多分こんな認識でいいと思う・・・きっと。
入植者が農民やバーテン、プロビジョナー等に色々変り身するのは、配置次第でそれぞれのエイリアスを演じてる為。
SceneやQuestが終了すると、NPCは”Fill”状態だったエイリアスから離れます(素のPackageに戻るか、複数のエイリアスがあればpriority別に戻る筈)。
恐らくPrydwenからベルチが飛んでいくのは、Quest終了時に地表に居ない為、デフォルトのPackageで帰っていくんだと思います(見た目飛行機だけどNPCなので)。
それと長々と書いといて何ですが、次回もエイリアスは見ません(問題のキモがエイリアスじゃない為)。
Scenes
クエストの脚本。各章(Phase)を順次こなして、最終章まで演じきれば大団円(大抵は自身のスクリプトで停止させる)。今回の話だと、Phase条件を満たすごとに次Phaseに進み、要所のPhase終了をトリガにアクション起こしてます(Quest Stageを進める、同乗したコンパニオンへのGhost属性付与等)。
Quest Stages
進捗フラグ。Sceneやスクリプトから立てられます。これをトリガにしてアクション起こすことも可能(Stageに括ったスクリプトを走らせるとか)。
メインクエストが不具合で進まなくなった時に、コンソールからフラグ立てて強制進行させるアレです。
以上、おしまいです!
続きはこちら。