戦闘時の基本戦術を決めているのが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の挙動がおかしくなることが多く、実用的ではありませんでした。