DialogueMenu
会話の選択肢を実現しているのがDialogueMenuになります。
XDIには改造されたDialogueMenu.swfが同梱されています。
これをffdecで開き、スクリプトを書き換えてみたのですが、DialogueMenuが表示されるタイミングでCTDするようになってしまいました。Fallsoulsが導入されているとCTDするようです。Fallsoulsを外すとCTDこそしなくなりますが、選択肢が壊れます。おそらくはffdecでサポートされていない命令がスクリプトに含まれているからなのだと思います。
読む分には問題ないので、処理の流れを追いかけてみました。
DialogueMenuのProcessUserEventメソッドに入力に対する処理が書かれていました。
選択肢の決定
決定はMultiActivateAになっています。
これはMultiActivateBにしたいのですが、編集ができないので妥協です。
カーソルの移動
選択肢のカーソル移動はQuickkeyUp、QuickkeyDown、QuickkeyLeft、QuickkeyRightになっているようです。
CustomControlMap.txtでコントローラー側に設定しておかないと、XDIでは入力を受け付けないようです。
QuickkeyUp 0x26 0xff 0x0001 0 0 0
QuickkeyDown 0x28 0xff 0x0002 0 0 0
QuickkeyLeft 0x25 0xff 0x0004 0 0 0
QuickkeyRight 0x27 0xff 0x0008 0 0 0
上の例ではキーボードのカーソルキーとコントローラーの十字キーを割り当てています。
これで普段はキーボードとコントローラーのどちらもでお気に入りを開くことができるのですが、DialogueMenuではキーボードの入力が無視されてしまいます。
DialogueMenuにおける入力が以下のMultiActivateA/B/X/Yになっているようです。
MultiActivateA 0xff 0xff 0x1000 0 0 0 0x8
MultiActivateB 0xff 0xff 0x2000 0 0 0 0x8
MultiActivateX 0xff 0xff 0x4000 0 0 0 0x8
MultiActivateY 0xff 0xff 0x8000 0 0 0 0x8
デフォルトだとキーボードのカーソルキーが指定されており、どうやらDialogueMenuの最中ではこちらが優先されてしまうため、カーソルキーがお気に入りではなくなってしまうのが原因のようです。そこでキーボードの指定を削除してみたところ、カーソルキーの入力を受け付けるようになりました。
あとはJoyToKeyでコントローラーの十字キーにカーソルキーを割り当てれば、コントローラーでカーソルを動かせるようになります。
MultiActivateAはバニラのDialogueMenuで下の選択肢を選ぶキーのようですが、XDIでは現在選択中の選択肢を選ぶという動作になるようなので、MultiActivateAとMultiActivateBを入れ替えてしまってもいいのかなと思います。
XDIでカーソルをコントローラーで動かすまとめにまとめました。
選択肢の直指定
コントローラーをオフにした状態では、選択肢の上から順にキーボードのフルキー側の1~8が対応しており、押すことで選択できます。
コントローラーをオンにした状態では、キーボードの入力を受け付けなくなってしまいます。
コントローラーを動的に切り替える
Buffout 4に、ゲーム内で入力を見て自動的にコントローラーのオン・オフを行う機能があります。類似のModが他にもあるようです。会話中にスムーズにマウスを使えるようになります。
これが解決策のひとつになるのですが、JoyToKey環境では普段から何か操作するたびにコントローラーのオン・オフが目まぐるしく切り替わって鬱陶しいと感じます。
通常時のお気に入りの扱い
コントローラーの十字キーでお気に入りを入力するのであれば、これで特に問題ないです。
私はJoyToKeyを使って十字キーにModの機能を割り当てているため、このままだとそれらが使えなくなってしまいます。
そのまま十字キーを押した時は、Tactical Action Extension Package Extendedの代替ホットキーが発動するようにしてあったのですが、これはTactical Action Extension Package Extended側にQuickkeyUp、QuickkeyDown、QuickkeyLeft、QuickkeyRightがそのまま代替ホットキーになる機能を追加することで対策しました。
それから
バニラは肯定が下にあり、Aで決定するのと、会話中にスキップするためにAを押すことが多く、指は常にAに置きっぱなしであることに気がついたので、MultiActivateAのままでいいかなと思いました。
それよりもXDIだと肯定が上から2番目に配置されており、毎回カーソルで1つ下に動かすのが手間に感じました。
バニラには向いていないので、Point LookoutなどのModで遊ぶときだけ使うのがいいと思いました。