Sekiro Combat SSE

Modの紹介

防御時にエフェクトを追加したり、ステータス変化の調整をします。

Nexus

Ultimate Combat SEが必要

Ultimate Combat SEの改変パッチになります。よってUltimate Combat SEが必須となります。

私はUltimate Combat SEは使っていないので、単独で動作するように改造して使っています。ステータス調整は他のModでやっているので、その辺りはすべて取っ払いました。エフェクトがとてもかっこいいので、今後も使い続けることになりそうです。

技術的なこと

新規にスペルを追加しています。NPCにスペルを適用するために、Ultimate Combat SEのスペル配布の仕組みをそのまま使っています。

Ultimate Combat SEが元から配っているスペル自体に処理を追加する方式にかえたようです。

このスクリプト配布がキモで、私の思いつく限り、3つの方法があります。

  1. Cloakスペルをプレイヤーに持たせてバラまき続ける。
  2. Actor自体にスクリプトを持たせる。
  3. SKSEのDLLプラグインで独自に実装する。

Cloakスペルでバラまく方法がもっとも多く使われていると思います。完全スクリプトベースといえます。実装が簡単で手っ取り早く、利用者も楽です。ただし、負荷が増えます。気をつければどうにかなる問題ではありません。スクリプトは一度に動かせる数や量に限界がありますので、何でもかんでもModを突っ込んで動かしていると、あっという間にスタックエラー頻発の不安定環境が出来上がってしまいます。

Actor自体にスクリプトを持たせる方法は、おそらく負荷が最も小さくなります。配布するという作業がないからです。そのかわり、SSEEditでパッチを作成するという作業がずっとついてまわります。新たなModを入れるたびにパッチも更新しないと反映されないので、すごく面倒に感じます。

SKSEのDLLプラグインは高度なやり方で、スクリプトベースにくらべると負荷が小さくなると思います。Ultimate Combat SEはおそらくこれです。DLLが書けないと話にならず、Actorの抽出条件がDLLに組み込まれているので簡単にはかえられず、特注品になります。SKSEのバージョンに依存するのもデメリットです。

改造について

Sekiro CombatがUltimate Combat SEに依存しているために、Ultimate Combat SE無しでも動くようにしました。実際のところは、自作の直前防御Mod(Timed Block)にエフェクトを組み込んでみたという話なんですけど。

Timed Blockはもともと直前防御成功時にエフェクトが出せるようになっていて、バニラの素材を切り取って作ったもので、はっきりいってショボイです。また、音はありませんでした。見た目だけだと気にならなかったのですが、音を出すようにしたところ、遅延をはっきりと認識できました。Timed Blockは良くも悪くも汎用的に作ったので、MCMにたくさんある設定値をOnHitイベント発生時に確認する処理が結構ありました。可読性を重視して書いていたこともあって、関数のはじめの方に変数宣言を並べていたり、そういったことが遅延の原因みたいでした。

そこで、ステートを使って高速版モードなるものを用意してみました。MCMの設定はすべてがオンであることを前提に、確認を省いたステートです。さらにコードも見直して、後にまわせる処理は後にまわし、エフェクトを最速で発生させるようにしたところ、遅延がほぼなくなりました。

Papyrusはコードがそのまま実行されるわけではなく、ゲームエンジンから都度処理時間を与えられて動いているみたいです。なので、「何かを1つ処理していいよ」と言われて何かを1つ処理したら「次は1/60秒後ね」と言われて待たされるような感じなのかなと思います。ですので、if文1つや変数宣言1つといっても馬鹿にならないわけです。

最後に

Ultimate Combat SE + Sekiro Combatの評価やTimed Blockの動作確認で直前防御を中心にプレイを続けていたのですけども、NPCの武器を振る動作がはやすぎてなかなか直前防御できないんですよね。受付時間を長くすればいいというだけの話ではなく、歳をとったゲーマーはNPCの動作を見てからでは間に合わないのです。これはもう、戦闘オーバーホールModあたりに、NPCの武器速度(weaponspeedmult)を一律落とさせることをした方がいいのでは、と思いました。

タイトルとURLをコピーしました