Fallout箱庭DIY

「箱庭DIY」Fallout分室

【Fallout4】ゲームパッドからのWheel Menu起動を『Aボタン長押し』に変更する実験

スポンサーリンク


F4WheelMenu
飲食するためだけに、毎度Pip-boyを開くのが面倒です。そんなズボラさんに便利なのが、こちら『Fallout 4 Wheel Menu』。
www.nexusmods.com
ホットキー1発起動で使い勝手良好。なんですが、ゲームパッドだと『十字キー下』のみの割付になってます。僕の環境だと、セーブアイテムやベルチ呼び出しで頻繁に『十字キー下』を使う為、ちょっと勝手が悪いんですよね。
そこで、『Aボタン(箱コン)の長押し』に変更することにします。


※毎度のことですが自己責任で改造してください。それから元の作者に無断で公開するようなことの無いようお願いします。

Wheel Menuのスクリプト変更

スクリプトは1つだけ。Questカテゴリ内、”WheelMenu(0x000F99)”に括られてます。ありがたいことにソースファイルが同梱されてますので、”WheelMenuWidget.psc”を改造します。
WheelMenuのQuest

ゲームパッドにはF4SEの関数を使うので、F4SEのソースファイルの用意を忘れずに。

やることは、

  1. Key bindを”十字キー下”から”Aボタン”に変更
  2. キー入力判定トリガを、”押し込み”から”長押し後のリリース”に変更

の2点が必須。MCMからの長押し時間調整機能も付けますが、これは無くてもOK。


Key bindの変更

まずは、十字キーからAボタンに割付を変更します。WheelMenuWidget.pscの310行目あたりから見ます。青字”QuickkeyDown”で、”十字キー下”の登録と解除をしてます。


Function RegisterForCustomEvents(Actor player)
; RegisterForRemoteEvent(player, "onItemEquipped")
RegisterForRemoteEvent(player, "onItemAdded")
RegisterForRemoteEvent(player, "onItemRemoved")
RegisterForRemoteEvent(player, "onDeath")
; Todo: investigate possibility of applying only to specific keywords only
AddInventoryEventFilter(none)
; RegisterForKey(71); g
RegisterForExternalEvent("WheelMenuInit", "onMenuInit")
RegisterForExternalEvent("WheelMenuSelect", "onMenuSelect")
RegisterForExternalEvent("WheelMenuClose", "OnMenuClose")
if (GamepadControlEnabled)
RegisterForControl("QuickkeyDown")
Else
UnregisterForControl("QuickkeyDown")
EndIf

EndFunction



これを、”Aボタン”である”Active”に変更。


if (GamepadControlEnabled)
RegisterForControl("Activate")
Else
UnregisterForControl("Activate")
EndIf

EndFunction

ボタン入力を『長押し』に変更

このままだと、NPCや家具をアクティベートする度にWheel Menuが起動してしまいます。さすがに厳しいので、長押しして離した時のみの起動に変更します。
今度は367行目あたりをチェック。
OnControlDown”で、ボタンの押し込み判定をしてますね。”QuickkeyDown(十字キー下)”とは、Downの意味が異なるので注意。


Event OnControlDown(string asControlName)
If (asControlName == "QuickkeyDown")
ToggleMenu()
Endif
EndEvent



これを、以下のように変更しました。


Event OnControlUp(string asControlName , float fTime)
If (asControlName == "Activate" && fTime >= fTimeThres)
ToggleMenu()
Endif
EndEvent
OnControlUp”は、長押し中のボタンを離した時をトリガにします。2番目の引数である”fTime”には、長押し時間(float)が格納されます。

次の行のif文に書いた”fTimeThres”は、Wheel Menu起動に必要な『長押し時間設定(秒)』として使います。
つまり、

『押したボタンがAボタン』かつ『”fTimeThres”秒以上の長押し』

をした時のみ、Wheel Menuが起動します。

『長押し時間設定』のproperty宣言を追加

”fTimeThres”の宣言をまだしてないので、冒頭にProperty宣言を追加。初期値は0.5にしておきました。


int Property SlowTimeMode = 0 Auto
int Property SlowTimeMagnitude = 0 Auto
int Property MenuOffsetX = 0 Auto
int Property MenuOffsetY = 0 Auto
float Property MenuScaling = 1.0 Auto
bool Property GamepadControlEnabled = true Auto
float Property fTimeThres =0.5 Auto
String WheelMenuName = "F4WheelMenu" const
以上でソースファイルの書換え完了。

スクリプトをコンパイルしてProperty接続を確認

コンパイルが成功して、Property”fTimeThres”が正しく初期値で接続されてればOK。
コンパイル後のProperty接続確認
これで終了にしても問題無いです。Aボタン長押しでWheel Menuが起動する筈です。


この後、MCMから”fTimeThres”を調整できるようにしますが、MCMを使わずにEdit Valueで直接書き換えても、好きな長押し時間に変更できます。再コンパイルは不要なので、後から書き換える時は、FO4Edit使った方が楽かも。

MCMに『長押し時間』の調整項目を追加

『長押し時間』を、ゲーム内で調整可能にします。その方がフィーリング的に合わせやすいかな、と。MCMの出番です。Wheel Menuは元からMCM対応MODなので、作業は簡単。

Data\MCM\Config\WheelMenu\config.jsonを変更します。”Gamepad”セクションの中に、長押し時間調整項目(の所)を追加しました。


{
"type": "section",
"text": "Gamepad"
},
{

"type": "switcher",
"text": "Bind menu to D-Pad down",
"help": "Enables menu binding for gamepads (D-Pad down). Requires save or game reload to take the effect",
"valueOptions": {
"sourceType": "PropertyValueBool",
"sourceForm": "WheelMenu.esp|F99",
"propertyName": "GamepadControlEnabled"
}
},
{
"type": "slider",
"text": "A-button holding down",
"help": "The amount of time the button is held down in seconds.",
"valueOptions": {
"min": 0,
"max": 3,
"step": 0.1,
"sourceType": "PropertyValueFloat",
"sourceForm": "WheelMenu.esp|F99",
"propertyName": "fTimeThres"

}
}
]
}

”slider”で0から3まで、刻み幅0.1。”text”と”help”は、なんとなくそれっぽくw
書換え対象のPropertyは、ソースで記述した通りfloat型の”fTimeThres”。この閾値と実際に長押しされた時間の比較で、Wheel Menuの起動可否を判断します。

ゲーム上では、こんな感じ。ぶっちゃけ個人的には0.5のままでよかったかも(汗)
MCMに長押し時間追加
OFF/ON設定名称が”D-Pad down”のままなのが、微妙に気になりますぬ・・・あとでA-buttonに書き換えることにします。
物持ち上げる時に不便そうだったら、もう少し時間延ばすか、あるいは”QuickkeyDown” の長押しでもいけるかも?(試してないですけども)。

以上、おしまいです!

 

Copyright © 2015 Fallout Hakoniwa DIY All rights reserved .

S.kutsumiya@gmail.com