エンジニア的ゲーム理論

FFXIVやPCが好きなITスペシャリストの屁理屈とか

アクション効果時間を視覚的に分かりやすく表示する

最近ヒーラーを真面目にプレイするようになって、「これ可視化できたら便利だなー」と思ったものをざっくり実現してみました。私のようにあまり場数を踏んでいないヒーラーのアシスト用途としてはそれなりに有意義かなと思います。

f:id:hackermind:20191013210522p:plain

スペスペのトリガー作成画面のUIは「アクションのリキャスト時間」を表示するトリガーの作成を前提に作られています。今回はリキャスト時間ではなく効果時間を取得したい、というのがテーマなので、トリガー定義画面におけるリキャスト時間を「アクションの効果時間」と読み変えるのがポイントです。

例えば

  • ディヴァインヴェール発動待機状態と残り時間
  • インビンシブルやボーライド、ホルムギャングなど無敵アビリティの残り効果時間
  • リビングデッド、ウォーキングデッド状態解除までの残り時間
  • 自分が対象に使った深謀遠慮の策の発動までの時間
  • 自分が対象に使ったリジェネやアスペクト・ベネフィクの単体HoT効果の残り時間

などなど。すべてスペスペのトリガー定義でシンプルに実現できます。

設定例

パーティリストの位置に合わせたスペルパネルを作成し、その中で個別のバーを重ねて表示するように定義します。パーティリストの1人ずつに対応したパネルやトリガーの定義については過去の記事も参照して頂けると理解しやすいかもしれません。

パーティメンバーごとのリキャスト表示パネルの作成 - エンジニア的ゲーム理論

高度なレイアウトを使用するにチェックを入れ、複数のトリガーが同時にマッチングしたとしても全てのバーが同じ位置に表示されるようにします。どれが優先的に表示されるか、というのは各トリガーの 表示の優先順位で指定します。

f:id:hackermind:20191013210752p:plain

バーの長さはパーティリストに合わせると違和感が少ないです。高さはお好みですが、太くするとパーティリストの次の人の詠唱バーに重なってしまうので細めにしておいた方がいいかと思います。

スペルパネルを用意したら、以下のようなトリガー定義を作ります。マッチングワードはモノによって変わりますがだいたいこんな感じです。

項目 設定値
マッチングワード ^1A:<id8>:<2ex> gains the effect of アクション効果名 from <2ex>
正規表現を使用する true
リキャスト時間 各アクションの効果時間
延長マッチングワード1 ^1E:<id8>:<2ex> loses the effect of アクション効果名 from <2ex> にマッチしたら -999.00 秒延長する
バーをブリンクする false (点滅させたい場合は true
進行方向を逆にする true (ゲージが増えていく表示にしたい場合は true
スペル名を表示しない true
リキャスト時間を表示しない true
リキャスト完了後も表示し続ける false

今回はバーの表示だけ出来ればいいのでアイコンやスペル名は全部カットします。また、アクションの効果時間が終わったらバーを非表示にしたいので、「リキャスト完了後も表示し続ける」はチェックを外します。

延長マッチングワードを用いて -999.00秒延長する というのが1つのポイントかなと思います。逆方向の延長なのでつまり短縮になります。つまりこの数字は、効果時間より長ければ適当でいいです。リキャスト時間が短縮されたことにより、リキャストが完了したことになる。リキャストが完了したら、スペルパネル上の表示が消える。この動きを利用します。

つまるところ、延長マッチングワードに指定した文字列によってアクションの効果が切れたことを検知したらバーの表示を消す、という動きになります。これはスペスペのあらゆるトリガー定義で使えるTipsです。

アクション効果名はゲーム画面のログに表示されるものをだいたいそのまま使えますが、ログから抽出すると確実です。ディヴァインヴェールディヴァインヴェール[バリア] のように、類似した複数の効果名を持つアクションもあるので、マッチング条件の記述には少しだけ気をつける必要があります。

例えばマッチングワードが ^1A:<id8>:<2ex> gains the effect of ディヴァインヴェール だと、PTリスト2番目の人がディヴァインヴェールを発動したときと、誰かのディヴァインヴェールによるバリア効果を受けたときの両方にマッチングしてしまいます。ディヴァインヴェール\s のような正規表現で厳密にマッチングさせることもできますが、 from <2ex> のように続けて書いておいてマッチング条件を絞る方が汎用的かなと思います。

また、リジェネやアスペクト・ベネフィク、深謀遠慮の策のように「自分が対象に使ったスキル」のみを表示したい場合には、マッチングワードを以下のように書き換えて、そのアクション効果を付与したキャラクターが自分である場合のみマッチングするようにします。

項目 設定値
マッチングワード ^1A:<id8>:<2ex> gains the effect of アクション効果名 from <mex>
延長マッチングワード ^1E:<id8>:<2ex> loses the effect of アクション効果名 from <mex>

動作サンプル

リビングデッド発動~ウォーキングデッド解除

f:id:hackermind:20191013210337g:plain

リビングデッドの発動を検出して、リビングデッド効果時間を示すバーを表示します。HPが1になりウォーキングデッドが発動すると、今度は逆方向、カウントアップするバーが動き出します。これはきちんとヒールしないとまずいので、目立つようにブリンク(点滅)するようにしました。ウォーキングデッドが発動したらこのバーがMAXになる前にHP回復しきればOK、という判断ができます。

ディヴァインヴェール待機時間+インビンシブル

f:id:hackermind:20191013211335g:plain

ディヴァインヴェールの使用をトリガーにしてバーが表示されます。自分はパーティリストのマウスオーバーで単体ヒール操作をすることが多いので、このバーが表示されている人にヒールするとヴェールが発動する、というのが直感的に分かると何となく良いような気がしていました。もっとも、範囲ヒールついでに発動させることがほとんどなので、それほど実用的ではありませんが。

深謀遠慮の策

f:id:hackermind:20191013211407g:plain

事前に投げた深謀遠慮の策が残っているのか、まだ効果が残っているのかどうかを可視化しただけ。

おまけ

例のごとくGistに私のサンプル置いときます。パーティリスト2番目 <2ex> に対応したものです。コピーして <3ex>~<8ex> まで書き換えて、あとはご自身のパーティリスト表示に合わせてレイアウト整えればいい感じに使えるんじゃないでしょうか。

ptlist-overlay-bar-2ex.spellpanel.xml · GitHub

トラブルシューティング

インポートしたスペルパネルがうまく動かない場合

  1. マッチングワード先頭の ^1A:<id8>: と 延長マッチングワードの ^1E:<id8>: を消してみる
  2. マッチングワード内の正規表現 <2ex><2> に置き換えてみる