戦闘バランスを調整する – Combat Style編

環境構築

Combat Styleを自分で調整してみよう。

戦闘時の基本戦術を決めているのがCombat Styleです。

Modを導入したら、なにはともあれSSEEditで覗いてみる

SSEEditで覗いてみれば、そのModが何をしているのかがわかります。そして競合の有無も判明します。

スクリプト不使用をうたっている戦闘バランス調整Modは、ほぼこのCombat Styleを変更していると思っていいです。というより、他に方法がありません。

色々なModのデータを眺めてみることで、バニラ(ベセスダ)との違い、Modごとの違い、それぞれの方向性といったことが見えてきます。

Combat Styleとは何なのか

CK Wikiに解説があります。またこちらのブログで日本語でわかりやすい解説があります。それからUltimate Dragonsの作者のブログにもAI制御のあたりで意図が説明されています。

要約すると、こんな感じです。

  • 各武器を使う頻度
  • 各武器の攻撃力
  • 攻撃寄りか防御寄りか、バッシュやパワーアタックの頻度
  • 下がったり側面に回り込む頻度
  • 忍者ドッジ(超能力者のように遠距離攻撃を回避する行動)の頻度
  • 二刀流を使うか

Combat Styleは戦術のテンプレートで、例えば人間近接タイプレベル1、魔法タイプ、マンモス、ドラウグルといった風にたくさん用意されています。

NPCごとにデフォルトのCombat Styleが割り当てられています。さらにNPCにPackageが適用されている時は、Package側で指定されているCombat Styleを使います。

忍者ドッジに関して言えば、Combat Styleは個別の設定であり、Game Settingsに全体の設定があります。Game Settings側で発生率を0%にしておけば、Combat Style側の設定は無視されます。

調整の仕方

私は全体的なオーバーホールにYASHを使っています。YASHでもCombat Styleが調整されるので十分ですが、さらに難易度をあげるためにCombat Evolvedで上書きしています。

Combat Styleに求めているのは行動の多様性であり、攻撃力上昇はバランスを取りづらくなるのでバニラに戻します。

念のため忍者ドッジは0%にします。

これを行うSSEEdit用スクリプトを用意しました。

Combat Styleを調整する (pascal)

{
  Combat Style
}

unit UserScript;

var
  csgdList: TStringList;


function Initialize: integer;
begin
  csgdList := TStringList.Create;
  csgdList.Add('CSGD\Equipment Score Mult - Melee');
  csgdList.Add('CSGD\Equipment Score Mult - Magic');
  csgdList.Add('CSGD\Equipment Score Mult - Ranged');
  csgdList.Add('CSGD\Equipment Score Mult - Shout');
  csgdList.Add('CSGD\Equipment Score Mult - Unarmed');
  csgdList.Add('CSGD\Equipment Score Mult - Staff');
end;


function Process(e: IInterface): integer;
var
  m, p, pe: IInterface;
  i: integer;
  d: double;
begin
  // parse only Combat Style record
  if Signature(e) <> 'CSTY' then Exit;

  // remove Strafe Mult
  SetElementNativeValues(e, 'CSLR\Strafe Mult', 0);

  // get master record
  m := Master(e);

  if Assigned(m) then begin
    for i := 0 to csgdList.Count - 1 do begin
      d := GetElementNativeValues(m, csgdList[i]);
      SetElementNativeValues(e, csgdList[i], d);
    end;
  end;
end;


function Finalize: integer;
begin
    csgdList.Free;
end;


end.

このスクリプトを名前を付けて保存して、SSEEdit.exeのあるディレクトリのEdit Scriptsディレクトリに入れます。名前をCombat Style.pasにしたとします。

SSEEditですべてのプラグインを読み込みます。

ベースとなるプラグインのCombat Styleをすべて選択します。上記の場合だとCombat Evolved.espになります。Combat Evolved.espを開いてCombat Styleを選択すれば、中に入っているすべてのレコードをまとめて選択することになるので楽です。

右クリックしてCopy as override into(またはDeep copy as override into)を選び、プラグインを新規作成します。ESPFEでいいと思います。名前をMyCombatStyle.espにしたとします。

一番下にMyCombatStyle.espが追加されますので、これを開きます。

Combat Styleを右クリックしてApply Scriptを選びます。

先ほどのスクリプト(Combat Style.pas)を選んでOKを押します。

Actorへの適用について

ActorBaseにて指定するのがオーソドックスな適用方法です。この方法は決め打ちになります。

フォロワーの場合はCombatStyleを作り込んだらフォロワーのActorBaseに指定してゲームを起動、ゲーム中はずっと同じCombatStyleによる戦闘になります。

これとは別に、ReferenceAliasのCombat Override PackageにてPackageを適用する方法もあります。PackageにはCombatStyleを指定できるので、あるPackageが適用されているActorはCombatStyleもPackage依存のものとなるようです。

この方法はゲーム内で動的に変更できるという特徴があります。Conditionを工夫すれば、ヘルスが多い場合は攻め重視、ヘルスが減ってきたら守り重視といったことも可能です。

ただし、私の試した限りでは、このゲーム内でのCombatStyle変更はどういうわけかActorの挙動がおかしくなることが多く、実用的ではありませんでした。

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