Driveables of the Commonwealth – APCを改造してみた

Mod作成

運転できる移動拠点としてDriveables of the Commonwealth – APCを使っています。色々といじっているので、それについてまとめます。

パッチを作る

FO4EditでASmallAdditionStandaloneDrivablesAPC4.espを開きます。

左ペインのASmallAdditionStandaloneDrivablesAPC4.espを開いて、何でもいいので右クリックしてCopy as override intoを選びます。

<new file>.esp(ESLになっているもの)を選んで名前を付けます。これでESPFE形式のパッチができます。

とりあえずQuestからASmallAdditionNewAPCMainQuestを選び、MyPatch – DriveablesAPC.espという名前にしました。

ここでCtrl + Sを押して保存しておきます。

これ以降、レコードの編集はすべてパッチの方になります。

初期位置を変更する

Vault 111からかなり遠い位置にあり、修理のためにJunkが大量に必要となるため、乗れるようになるまでが非常に長いです。そこで、Vault 111を出たところに移動します。

左ペインのASmallAdditionStandaloneDrivablesAPC4.espのWorldspaceを開きます。どこかにPlaced Object ASmallAdditionNewAPCBrokenContainer00 “Dead APC” [CONT:030083FD]というのがあります。これを右クリックしてCopy as override intoでパッチにコピーします。

以降の解説ではこのコピーの手順を省略しますが、コピーすることが前提です。

パッチの方のDead APCを編集します。

CellをVault 111を出たところのセルに、Positionを適切な座標に変更します。

セルと座標の見つけ方

Better Console – F4SEを入れておきます。

ゲームを起動して、APCを置きたい場所に行ってコンソールを開きます。

地面に落ちているオブジェクトをクリックするとリファレンスIDが表示されますので、それをメモしておきます。

今回は三角コーンを選んでみました。リファレンスIDは819a3でした。

FO4Editを起動して、左上のFormIDのところに819a3を入力すると、当該オブジェクトが判明しますので、セルと座標を見ます。

修理を省略する

材料を大量に要求されるので、ニューゲーム直後から乗ることができません。

MessageのASmallAdditionNewAPCmbBroken00に条件が設定されてますので、すべて削除します。

このFix!という選択肢にあるConditionsが条件になります。Conditionsを右クリックしてRemoveを選ぶと削除できます。

個別に削除する場合はConditionsではなくてConditionを削除です。

これで材料がなくても修理可能になります。

最初から修理済みにしたかったのですが、スクリプトに手を入れないと難しいようなので、これで妥協です。

クエストをなくす

最初くらいは消化してもいいと思いますが、何度もニューゲームするたびに消化するのは面倒なので、なくします。

QuestのフラグからStart Game Enabledをオフにします。

  • ASmallAdditionNewAPCMainQuest
  • ASmallNewAPCBiscuitsCompanionQuest

Flagsを右クリックしてEditを選びます。Start Game Enabledのチェックを外します。

クエストそのものは無くなっておらず、永久に開始しないだけです。無くすと他のレコードに不整合が出てしまいそうなので、これで十分です。

クエストのための敵がWorldspaceに配置されていますが、すべて削除しておいた方が無難です。

APC以外のPlaced ObjectやPlaced NPCにDeletedフラグをオンにします。

Record Flagsを右クリックしてEditを選択、Deletedにチェックを入れます。

故障しないようにする

様々な条件ごとに破損値が用意されており、どれかがひとつでもしきい値を越えると故障するようになっています。

乗り降りするだけでも破損値が増えていき故障するので、そのうち面倒になってきたので仕組みごと無くしました。

ASADrivablesNewAPCScript.pscの中で次のような箇所をすべてコメントアウトすればいいです。

ASmallAdditionBoatBreakdownGlobal02.mod(1.0)

このグローバル変数は7種類ほどあります。

ヘッドライトを明るくする

デフォルトだと飾りのようで使い物にならないので、遠くまで届くようにします。

Lightが光源になります。

項目説明
Radius光が届く距離です。
Color色合いです。
FOV光の幅です。光はヘッドライトから扇状に飛びます。
Fade value減衰度です。光は近いところは明るく、離れるにつれて暗くなります。この値を大きくすると、少し離れただけですぐに暗くなります。遠くまで照らしたい場合は小さくします。

ヘッドライトの見た目はnifファイルを編集する必要があります。

他のセルからAPCのあるセルに移動してきた時に、光源が消えることがあります。Fallout 4にある不具合のようです。消して付けなおすを直ります。

APCのASmallAdditionNewAPCLightsOnOffAVというActorValueがヘッドライトの状態なので、これを設定します。0が消灯、1が点灯、2が自動点灯(夜間だけ点く)です。

乗車で点けて、降車で消すようにしてみました。これで点きっぱなしがなくなります。

フォロワーを乗せる

プレイヤーがAPCに乗ると、フォロワーは徒歩で付いてくるので、これを何とかします。

理想は砲手にさせたいのですが、私のスキルでは無理そうだったので、乗っている間は消えるようにしました。

変更するのはASADrivablesNewAPCScript.pscになります。

ASADrivablesNewAPCScript.psc (papyrus)

; この変数を追加する
Actor FollowerActor

; この関数は既にあるので追記する
Function Controlled(ObjectReference ActionRef)
    ; 以下の行をまとめて追加する
    Quest FollowerQuest = Game.GetFormFromFile(0x289E4, "Fallout4.esm") as Quest
    ReferenceAlias FollowerAlias = FollowerQuest.GetAlias(0) as ReferenceAlias
    FollowerActor = FollowerAlias.GetActorReference()

    if FollowerActor
        if !FollowerActor.IsDead()
            FollowerActor.SetUnconscious(true)
        endif

        FollowerActor.SetAlpha(0.0)
    endif
    ; ここまで

    ; 以降、既存のコードが続く
Endfunction

; この関数は既にあるので追記する
Event OnExitFurniture(ObjectReference akActionRef)
    If (akActionRef == Game.GetPlayer() as ObjectReference)

        ExitRide()

        ; 以下の3行を追加する
        Utility.Wait(3.0)
        Game.ForceThirdPerson()
        ExitFollower()
        ; ここまで
    EndIf
EndEvent

; この関数を追加する
Function ExitFollower()
    if FollowerActor
        if FollowerActor.IsDead()
            if FollowerActor.Is3DLoaded()
                FollowerActor.ForceRemoveRagdollFromWorld()
                FollowerActor.MoveTo(Game.GetPlayer())
                FollowerActor.ForceAddRagdollToWorld()
            else
                FollowerActor.MoveTo(Game.GetPlayer())
            endif
        else
            FollowerActor.SetUnconscious(false)
            FollowerActor.MoveTo(Game.GetPlayer())
        endif

        FollowerActor.SetAlpha(1.0)
    endif
EndFunction

Knockout Framework (Death Alternative)を使っている場合、HC_HealCompanionObjectAliasScript.pscの内部で、フォロワーが復帰する時に解雇されてしまうので、解雇の処理をコメントアウトで無くす方がいいと思います。

さらに色々とやってみて、なんとか砲手にできました。ベルチバード関連で色々調べてみたでまとめてあります。

トラブル

APCの内部で敵がいると言われて眠れない

APCの中に入ったらコンソールを開き、tfcで周りを確認すると敵の犬がいますので、killで殺せばOKです。

外に出た途端にランダムエンカウントで襲われる

APCの中というのは「ある場所に用意されているセル」なので、出入りするということはファストトラベルをしているようなものです。ですので対策としてはランダムエンカウント地点から離れた場所でAPCを停車するしかありません。

タイトルとURLをコピーしました