Quick Change Armor

Mod紹介

プレイヤーを表示しながら防具の脱着ができるようになります。自撮りをする機能もあります。Toounさんの作品です。

配布サイトへ (patreon)

インストール手順

普通にMO2でインストールするだけです。

バージョン更新履歴

DEF UIが必須となっていますが、バージョン0.2の場合はFall UIでも問題なさそうでした。

バージョン0.4の場合、DEF UIの上からFall UIをインストールして上書きする形にすればとりあえず動くようです。DEF UIがないとメニューを開いた時点で無限ロードになってしまいます。

バージョン0.5でFISに対応しました。Fall UI環境でも問題なく使えるようです。

不具合と対処法

コントローラーのLTを押すとカーソルが出てきておかしなことになる

対処法は「LTを押さない」です。

ホットキーをLT同時押しに割り当てて使っていたのでなかなか気がつけず悩みました。

ですが、コントローラーで自撮り機能を使うには押さないとならないようです。LTを押すと左側に第2のカーソルが出てくるので、スティックの下を押して自撮りのアイコンに合わせ、スティックを左右に倒して第1のカーソルを何の装備も選択していない状態にしてから決定ボタンです。

表示すべきではない防具が表示されてしまう

バニラのUIにおいてはNon-Playableフラグが立っている防具は表に出てこない仕様になっています。例えばPip-boyがそうです。

ところがこのModはNon-Playableフラグを見ていないらしく、すべて出てきてしまいます。Pip-boyが外せてしまいますし、Visible Weaponなどのイミテーション防具も出てきてしまいます。

Papyrusでなんとかする場合、SkyrimであればSKSEでNon-Playableフラグを確認できる関数が用意されているのですが、なぜかFO4SEは未実装なので対処できません。

仕方がないのでNon-Playableであることを示すキーワードを用意して、このキーワードを持つ防具を対象外とするようにしました。あとは表示したくない防具にキーワードを付与すればいいです。Pip-boyはForm IDを直に指定して対象外にしました。

QCAMenu.pscにて、InitInventoryItems関数とOnItemAdded/OnItemRemovedイベントに除外するコードを追加しました。

QCAMenu.psc (papyrus)

Function InitInventoryItems(Actor player)
    Debug.Trace("F4QCAMenu: Initializing player inventory", 0)
    ArmorInventoryItems = new item[0]
    ArmorInventoryItems2 = new item[0]
    Form[] items = player.GetInventoryItems()
    int currentItem = 0

    Form kPipboy = Game.GetFormFromFile(0x21B3B, "Fallout4.esm")
    if Game.IsPluginInstalled("MyTweak.esm")
        ArmorTypeNonPlayable = Game.GetFormFromFile(0x818, "MyTweak.esm") as Keyword
    else
        ArmorTypeNonPlayable = none
    endif

    While (currentItem < items.length)
        Form Item = items[currentItem]
        if (Item is Armor) && (Item != kPipboy)
            if !ArmorTypeNonPlayable || !Item.HasKeyword(ArmorTypeNonPlayable)
                item invItem = new item
                invItem.Id = Item.GetFormID()
                invItem.Name = Item.GetName()
                invItem.Description = ""
                invItem.Count = player.GetItemCount(Item)
                invItem.Equipped = player.isEquipped(Item)
                item[] arr = Self.GetAvailableArrayForItem(Item)
                arr.add(invItem, 1)
            endif
        endif
        currentItem += 1
    EndWhile
    int totalArmor = ArmorInventoryItems.length + ArmorInventoryItems2.length
    Debug.Trace("F4QCAMenu: Initial items were initialized, Armor count: " + totalArmor as string, 0)
EndFunction

メニューを閉じると1人称視点になってしまう

メニューを開いたら3人称視点にして、閉じたら1人称視点にしてカメラ周りをリセットしているようなので、最後に3人称視点にするコードを付け足せばOKです。CloseMenu関数になります。

Camera TweaksにQCAのメニューを閉じたときにPOVを復元する機能を付けました。

全身が表示されない

左側のメニューで上半身、下半身を選べるようですが、FOVを上げると画面内に全身が入るようになります。

Camera TweaksでQCAのメニューを開いている間のFOVを設定できるようにしました。

メニュー画面で無限ロード

バージョン0.4以前ではDEF_UIがないと無限ロードになってしまいます。バージョン0.5でFall UIに対応しました。

バージョン0.5で、OnMenuSelectという関数を定義したpexファイルがDataフォルダ以下に存在していると無限ロードになってしまいます。プラグインに紐づけしていなくてもダメで、pexファイルの名前も問わず、とにかく関数があるだけでダメのようです。

改造してみた

いくつか機能を追加してコードを最適化してみました。

  • 無駄な処理をなくして高速化しました。
  • 装備の検索をゲーム起動時ではなく、メニューを開く時に変更しました。
  • 上で解説している「表示すべきではない防具が表示されてしまう」を追加しました。
  • ホットキーに自撮りを追加しました。
  • パワーアーマーに乗っている最中も着替えられるようにしました。Power Armor Tweaksが必要です。
  • メニューを開いている間も表示されてしまう以下のModのUIを消すようにしました。
    • DEF_SSW Survival Stats widget redone
    • Condition Boy - Now with Condition Girl
  • 外部Modに依存していた不具合を修正しました。(2023/2/19)

バージョン0.5に上書きして使います。

ファイル置き場へ

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