ソウルライクを快適にするコントローラー設定
ダークソウルやエルデンリングをやっていてどうしても我慢がならないローリングの仕様について、ツールを使った力業で解決できたので設定を書いておく。
「ローリングが咄嗟に出ない」問題
フロム・ソフトウェアのソウル系のゲームでは 1 つのボタンがローリング (回避) とダッシュの機能を兼ねていて、短押しでローリング、長押しでダッシュになる。そして、ボタンが押された瞬間には短押しか長押しかを区別できないため、ローリングはボタンを押した瞬間でなく離した瞬間に出るという仕様になっている。当然、原理的に押した瞬間を判定するより出るのが遅くなるし、特に反射的に回避しようとするときは力が入ってしまって余計に離すのが遅くなりがちで、「この仕様のせいで避けられなかった」と感じることは多い。シリーズのストレス要因の中でも上位に入ると思っている。
これはプレイヤーの間ではそこそこ知られた話で、多くの人が言及したり不満を述べたりしているのを観測できる。
数え切れないくらいゲームオーバーになるこの手のゲームにおいて、「今のはゲームじゃなく自分が悪かったんだ」と思えることはとても重要だ。コンソールでプレイしているのであればこの仕様は受け入れるしかないが、幸いなことに PC ではコントローラーの操作を高度にカスタマイズできる外部ツールが存在する。ここでは reWASD という有料ソフトウェアと、reWASD で背面ボタンを含めたカスタマイズができる DualSense Edge を使って操作性の改善を試みる。
なお、自分はここで書くようなツールや設定をマルチプレイヤーで使うつもりはない。
reWASD 設定 (BASIC)
以下では個人的な都合1により、ローリング/ダッシュのボタンは PS の × ボタン (Xbox の A ボタン) であると仮定する。それ以外のキーコンフィグを使っている人は適宜読み替えてほしい。
reWASD は単純なボタンのリマップにとどまらず、マクロ的な動作をさせる機能も持っている。そこで、× ボタンの動作として「× を押して即座に離す」というマクロを割り当てれば解決なのでは?という発想が自然に出てくる。ただし、これだけだとダッシュが出せなくなるので、背面ボタンの 1 つを × に割り当ててダッシュにはそちらを使うようにする。
- 仮想コントローラーを Xbox 360 に設定する2
- × ボタンに「A ボタンを押し、17 ms 待ち、A ボタンを離す」という Combo を割り当てる
- 背面ボタン右 (RB) に A ボタンを割り当てる
単純な設定だが、これはとてもうまくいく。押してから離すまでの時間が短すぎるとうまく認識されないため、ディレイをある程度長めにするのがポイント。ゲームが常時 60 fps で動作するという前提なら、1 フレームの時間である 16.66… ms 以上にしておけば安定して認識されるのではないかと思う。
reWASD 設定 (ADVANCED)
上記の設定 (BASIC) によって、あたかも元から「ローリングは ×、ダッシュは背面」という独立した操作系であったかのような幻想を作ったわけだが、実はこれは完璧ではない。唯一問題なのは、背面でダッシュしながらローリングを出そうと思った場合、そのまま × を押しても「A 押しっぱなし」のままと認識されてしまうため、いったん背面を離してから × を押す必要があるというところ。せっかく分割したのにこのような操作を要求されるのは非直感的である。「ダッシュ状態から即座にローリングに移行」という動きを要求される場面は多くはないがゼロでもないので、できればなんとかしたい。
これを解決しようと思うと、「単独の ×」と「背面を押しながらの ×」を別物として扱い、「背面を押しながらの ×」のほうには「背面によって押されている A をいったん離してから再度押し直す」という動作をさせるしかない。結果、以下のようにレイヤーのシフトを駆使した複雑な設定になってしまう。
- Main Layer
- × ボタンに「A ボタンを押し、17 ms 待ち、A ボタンを離す」という Combo を割り当てる
- 背面ボタン右に以下の 2 つの機能を割り当てる
- A ボタン
- Shift-layer 1 へのシフト
- Shift-layer 1
- × ボタンに以下の 2 つの機能を割り当てる
- 「34 ms 待つ、A を押す、17 ms 待つ、A を離す」という Combo
- Shift-layer 2 へのシフト
- × ボタンに以下の 2 つの機能を割り当てる
- Shift-layer 2
- 背面ボタン右の割り当てを「継承しない」にする
- × ボタンを離したときに Shift-layer 1 へ戻るように設定する
- reWASD アプリの環境設定 → 全般にある「シフトレイヤーを切り替えた時、押し続けられているボタンを新しいマッピングで押し直す」を有効にする
ポイントは、背面でダッシュしている間は layer 1 にシフトすることで × ボタンに別の機能を持たせていること。そして、「シフトレイヤーを切り替えた時~」の設定と layer 2 の背面の「継承しない」により、すでに押されているボタンを別のボタンから離すという動作を実現していること。layer 1 の 34 ms のディレイは、layer 2 へのシフトによって押されていたボタンが離され、それがゲームに認識されるまでにこのくらいの時間が必要なようだったので入れている。
この設定によって、ダッシュ中にそのまま × を押すだけでローリングに移行できるし、ローリングが終わったらまたシームレスにダッシュに移行するという挙動が実現できた。
しかしこれでもまだ完璧ではなく、ローリング後すぐに背面を離すともう一度ローリングが出てしまうことがあるという、新たな問題が発生してしまっている。layer 2 から 1 に戻るときに押し直された × が短時間で離されることで、ダッシュの継続ではなくローリングに使われてしまうからだ。ローリングが出そうとしたときに出ないのか、出したくないときに出てしまうのか。個人的には後者のほうが危険度が低く感じられるので ADVANCED のほうが優れた設定だと考えているが、使い込むうちに意見が変わることもあるかもしれない。
余談
1 つのボタンが回避とダッシュを兼ねるという操作系はフロムの作品に限ったものではなく、例えば自分の知っている例では仁王シリーズが該当する。この記事の内容はそういった他の作品にも適用できるはずなので、記事のタイトルは「ソウルライク」としておいた。
もっとも、仁王の場合は回避をガード状態から出す場合、もしくは攻撃動作をキャンセルして出す場合にはボタンを押した瞬間に出るという仕様になっているため、必要性はそれほど高くないかもしれない。仁王えらい。
参考資料
- (第1回)reWASD 機能チェックと翻訳セルフレビュー 環境設定_全般 - eps_r
「シフトレイヤーを切り替えた時~」の設定の存在と挙動を知ることができた。感謝。