論理と、幻想と。

ゲームやガジェットが好きなITスペシャリストが作ったものや考えたことについてダラダラ書きます

絶アルテマ前半「グラナイト・ジェイル」の並び順をスペスペでちょっと綺麗に可視化する

最近ぼちぼち、絶アルテマウェポン破壊作戦の攻略をはじめて改めてスペルパネルの再作成なんかをしています。ギミックについては散々解説が出ているので省略し、スペルパネル作成にあたっての要点のみ書きます。最後まで読むとそのまま使用可能なサンプルがダウンロードできるかもしれない。

結論

ベースの考え方は既出なんだけども、こういう感じでジョブアイコンで相対的な立ち位置を表示するよう作り込みます。

f:id:hackermind:20190501160547p:plain

処理方法

付与された3人のうち、優先度が高い人が前に立つ形で列を形成し、誘爆させる。ジョブ毎に順番を決めるアレ。

内部の動き

グラナイト・ジェイルがプレイヤーに付与された瞬間、対象者を示すログが内部的に出力される。3行のメッセージが同時に出力されるが、表示順を最優先にするためログに出力される順序は別に関係ない。

スペスペでスペル定義を作って捕捉する

テロップでも構わないけれど、スペルパネルを作って、その内側のスペルとしてそれぞれのジェイル対象判定を定義してやるのが良い。スペルパネル内で設定することによって自動的な並び替えが行える。

グラナイト・ジェイル:[0-9A-F]{8}:<DRG>: もしくはグラナイト・ジェイル:{id8}:<DRG>: がマッチングワードになる。プレースホルダを使用する場合 正規表現を使用する のチェックを忘れずに。

ジョブで並び順を決めるのであれば、ジョブをプレースホルダとしてマッチング条件に用いるのが適切。

アイコンを設定する

トリガーの設定のうち、Visualタブでアイコンを選択できる。また、アイコンを入手する を選択すると自動的にxivdbからアイコンセットがダウンロードされる。

あとはスペスペのUI上でアイコン部分をクリックし、Job を選択して一覧から該当するものを選ぶ。例えばDRG(竜騎士)にマッチングするトリガであれば、竜騎士のジョブアイコンを指定する。他のジョブも同様。

並び替える

ジョブアイコンが表示できた。あとはPT全員分のジョブ定義を作成して並び替えるだけ。これは単純にスペルパネルのソート順の設定を「表示順を最優先にする」にしておけば良い。

ソート順の設定とは、「スペルパネル内の複数の要素がアクティブになった場合に、どのように並び替えるか」の指定である。マッチした時間の若い順に並べるか、あるいは表示の優先順位が高い順番に並べるか、そもそも配置を固定して並び替えを行わないか、など。そして、「表示順を最優先にする」にした場合、実際にログが出現した(ACTがメッセージを記録した)順番に関わらず、スペスペ上で設定した各トリガーの優先順位にしたがって要素が並び替えられる。

グラナイト・ジェイルの優先度について、例えば前から順に 戦>ナ>竜>忍>詩>召>白>学と決定したとする。その場合は、この通りに表示の優先順位を設定してやればよい。優先度は数字が若いものほど優先度が高い。つまり、優先的に上に表示される。したがって、上記の例なら戦士を1番として、ナイトが2番、竜騎士が3番……学者が8番となるようにそれぞれ設定すればよい。

f:id:hackermind:20190501161318p:plain

縦方向じゃなくて横方向に並べたい

スペルパネルのGeneralタブで水平レイアウトにチェックを入れればよい。

自分のアイコンを目立たせたい

表示秒数が10秒であれば、10秒未満のときブリンクさせるよう設定すればよい。ずっと点滅する。あるいはNoticeでTTSYukkuriに読み上げさせてもいい。

音声で相対位置を読み上げさせたい

自分がジェイルの対象になった場合に「先頭」なのか「真ん中」なのか「最後尾」なのかを知りたい。視線移動に慣れてしまえばどうということはないが、聴覚での直接的なアナウンスがあった方が事故は減りそうだと思った。

これをスペルタイマーで実装しようとすると、評価すべき前提条件が一気に複雑になり現実的ではないと判断した。代替として、スペスペたいむのタイムライン上で簡単なアルゴリズムを書いてやることで相対位置の読み上げができる。つまり、グラフィカルな表示はスペルタイマー、アルゴリズムを解いて相対位置を読み上げるのはスペスペたいむ。そういう使い分けにしている。

肝心のタイムライン全体の公開は差し控えるけれども、その読み上げに関するロジックの組み方だけは近いうちに切り出して紹介しようと思う。

絶アルテマ、3連ジェイル用スペルパネルのインポート用サンプルはこちら