SkyrimMOD作成wiki

SKSEプラグイン

最終更新:

匿名ユーザー

- view
だれでも歓迎! 編集

SKSE

外部拡張スクリプトであるSkyrim Script Extender(SKSE)の情報です。

SKSEの特徴

SKSEは2つの機能があって、ひとつはPapyrus言語そのものを拡張すること、ふたつめはプラグインで拡張することです。

Papyrus関数拡張

ひとつめはPapyrus言語で使える関数を増やします。
例えば、Get(Set)WeaponSpeed()は武器の振る速度を取得したりセットしたりできます。
スキルレベルに応じて武器速度を変えたりといったような応用できます。
Papyrusでは武器そのものの速度を扱うことはできません。


単に関数を書くだけで使えるので使用は容易ですがPapyrusの実行速度がボトルネックになる為、後述のプラグイン拡張よりは遅いです。

プラグイン拡張

C/C++のコードをコンパイルしてdllファイルにし、Data->SKSE->Pluginsに入れて動くものです。
C/C++の速度で動くのでPapyrusに比べて駆動自体は圧倒的に速いですが、Papyrusの関数を呼び出すときはその関数の速度でしか動きません。
また資料が少なく難解で膨大なSKSEのAPIを理解していないとプラグインの作成が難しいのがデメリットです。

SKSE開発情報&サンプル


Papyrus関数拡張SKSE

以下のSKSEを導入しておけば標準ではできない事のほとんどがスクリプトで行えるようになるため可能ならば全て導入しておく事を推奨。(変数の保存、ファイル読み書きについてはPapyrusUtilかJContainersのどちらか好みで)

PapyrusUtil

  • TFC、TMコマンドの実行、アクターのAI Packageの上書き、指定したアクター・オブジェクトから一定範囲内にいるオブジェクト・アクターの検索等、多機能の関数を追加する
  • オブジェクト、アクター毎に変数の保存、読込が行える。(これによりスクリプトでアクターの状態、フラグの保存にダミーのFactionを作って変数代わりに設定する必要が無くなる。)
  • Jsonファイルにデータを保存、読込が可能になる(ファイル読み書きを行うものとしてFISSがあるが検証によるとPapyrusUtilの方が高機能、またFISSは自動ロード等で一斉に読み込もうとするとCTDの要因になるとの事でファイル保存・読込関連はPapyrusUtil、または後述のJContainersを使うのを推奨)
  • AE対応済み
ダウンロード(LE / SE)

ConsoleUtil

  • コンソールコマンドをPapyrusから実行する事が可能になる、コンソールのメッセージの取得も可能
  • 一部のコンソールコマンドはPapyrus側には存在しないため、それを実行するために必要(NPCのレベルを設定するSetLevel等)
  • AE対応済み
ダウンロード(LE / SE) ※注:AEの最新版に対応していません
NG版(SEとAE両用、AEの最新版にも対応してます)

powerofthree's Papyrus Extender(ドキュメントあり)

  • PapyrusUtil同様、多機能の関数を実装。特にアクター関係の関数に関しては随一
  • Oblivionでは存在したがSkyrimでは存在しない関数と同機能の関数が使えるようになる(IsActorInWater、GetCombatTargets、GetActorsByProcessingLevel等)
  • アクター、エイリアス、マジックエフェクトのスクリプトで受信できるEventを拡張する事が可能
  • このSKSEのAddBasePerk関数はNPCに対してゲーム中にPerkを付与させられる唯一の手段となる
  • AE対応済み
  • 機能ピックアップ
    • 戦闘にて指定したアクターの味方のアクター、敵のアクターの一覧を習得
    • 水に浸かっているか、または水中にいるか判定
    • パークを動的に習得
    • 死亡時アイテムを動的に設定
    • 関数一つで肌テクスチャを変える(このSKSEを使用しない場合、かなり面倒)
    • キルムーブの首刎ねモーションなしで首と胴体を分離
    • 所有しているパークの数、一覧を取得
    • フォームのエディターIDの取得
    • エディターIDを指定してフォームを取得
ドキュメント
ダウンロード(LE / SE)

JContainers

  • Papyrusでクラスやスクリプトのインスタンスを実現するため、JSONベースのデータ構造を用いてPapyrusを拡張する
  • PapyrusUtil同様に変数の保存、読込が可能、外部にデータをファイルとして保存する機能も搭載されている
  • AE対応済み
※これを追記した筆者はあまり使ってないため、詳しい人が居ましたら追記お願いします
ダウンロード(LE / SE)

SUP SKSE

  • 文字列に関する関数が豊富で置換や部分削除等を行える他、検索と置換を正規表現で行える関数も用意されている
  • 一時的な値の設定・読込を行う関数が用意されている。一時的に保持した値はゲーム終了時に破棄される(OblivionのModLocalDataと同機能のものが使える)
  • スカイリムのインストールフォルダのパスを取得、ダイアログを開いてファイルを選択、スクリーンショットを取るなど、他のPapyrus拡張SKSEにない独特の関数が用意されてる

Papyrus MessageBox - SKSE NG

  • このSKSEで追加した関数一つで選択肢付きメッセージボックスを表示させられるようになるSKSE
  • 従来では選択肢付きメッセージボックスを出す場合はCKやxEditでMessageレコードを作成して、スクリプトから参照する必要があったがそれが不要になる
  • また、特定の条件下でメッセージの内容を変えるという事をやる場合、条件の数だけMessageレコードを作成する必要があったり、 選択肢をCondition Functionsではなくスクリプト内で条件を絞り込みたい場合、このSKSEを用いる事で表示させるメッセージや選択肢をスクリプト内で動的に制御できるようになる

開発や動作の補助をするSKSE

主に有名所なModでの使用や現在のMod環境では導入が前提である事が多かったり、
Mod開発者にとっても利用する事による利点が非常に大きいSKSEプラグインの一群を記載。
なお、ほとんどのSKSEはSE版が安定した後に制作されたものであるため
LE版には存在しないものがほとんどなので注意。
(こちらで記述してますが特に初心者はLE・SE両用ではなくSE版のみのModを作る事を強く推奨します)

利用しなくてもMod開発自体はできるがユーザーにとっても開発側にとっても利用しない事によるデメリット(特にフォームの競合による動作不良)が非常に大きいため、
Modのリリースを行いたいという人は一通り目を通しておく事。

Spell Perk Item Distributor (SPID)

  • 設定ファイルを用いる事でNPCにアビリティやPerk、アイテムを事前に付与させる事が可能になるSKSE
  • 付与対象の条件絞り込みが可能
  • 最新バーションでは一定レベルによる付与の設定はNPCの現在のレベルを参照に動的に付与されるようになった(以前は一定レベルによる付与は初期レベル依存だった)
  • NPCのレコードを汚さずにアビリティやPerkを持たせられるため、競合による不具合やマージを行わずにすむようになる。
  • クロークを使用して周りのNPCにスクリプト付きスペルを付与するという事をやらずに済むため負荷も少なくなる
  • 上記の理由によりNPCにスクリプト付アビリティを持たせるModではSPIDを用いるのが主流…どころか現Mod環境において数多くのModはこれを導入した環境が大前提となるためこれが未導入の環境はまず考慮しなくても良い。SPIDで処理できるものならばSPIDで処理する事で競合による問題が無くなるので扱いこなす事を強く推奨
  • LE版は一部機能が使えないため注意(対象をエディターIDで指定する等が使えない)
  • プレイヤーに対しての呪文追加やパーク追加はSPIDでは行えない。プレイヤーに対して呪文追加やパーク追加をしたいならば後述するSkyPatcherを使う事
ダウンロード(LE / SE・AE)

Keyword Item Distributor(KID)

  • アイテムや魔法エフェクト等、NPC以外のデータにキーワードを事前に付与させる事が可能になるSKSE(NPCはSPIDで付与可能)
  • SPIDが導入されていた場合、KIDの付与処理実行後にSPIDの付与処理が実行される
  • エンチャントであるか、攻撃的な効果であるか(Hostileフラグがあるか)等の条件で絞ってキーワード付与が可能
  • 魔法やパークを作成時にCondition Functionsで詳細な条件で絞り込みたい時に非常に有用。例えばこのSKSEでHostileフラグのある全Magic Effectにキーワード付与を行う事で従来ではできなかった「攻撃的な魔法のみ対象」といった判定条件が行えるようになる
  • SPID程ではないが現Mod環境ではこれを導入した環境が当たり前となってるためバニラの既存レコードの編集をする時にキーワードを追加したいだけの場合はKIDで処理する事を強く推奨
ダウンロード(SE・AE)

FormList Manipulator - FLM

  • 設定ファイルを使用してフォームリストをゲーム起動時に動的に追加するSKSE
  • Espの編集で既存のフォームリストに追加したいものがある場合、別のModでそのフォームリストの編集があると競合して編集内容が正常に反映されない危険性があるがFLMを使用する事により競合を回避する事ができる
  • バニラのフォームリストの変更を行うModを作る場合はこれを使用する事を強く推奨
  • PapyrusのModEvent受信時に動的にフォームリストに追加する事が可能。特定イベント発生後に店に並ぶ商品が増えるという事を行いたい時に有効
ダウンロード(SE・AE)

Item Property Manipulator - IPM

  • 設定ファイルを使用してアイテムのフォームデータをゲーム起動時やロード時、あるいはスクリプトから動的に変更するSKSE
  • アイテム名、価格、ダメージ値や重量などを変更する事ができる
  • バニラのアイテムを変更するModを作る場合はこれを使用する事を強く推奨
ダウンロード(SE・AE)

SkyPatcher

  • 設定ファイルを使用してゲーム起動時に様々なフォームデータの中身を動的に追加するSKSE
  • 2023年12月頃に出たSKSEプラグインで上記のSPID等の総合版とも呼べる内容(元はFallout4用に作られたものをSkyrim用に移植)
    • 従来のプラグインでは対応していなかったレベルドリストやレースの編集を行う事が可能
    • これにより競合が起こりそうなレコードのパッチ対応はクエスト関連を除けばほとんどSKSEプラグインで行うことができるようになった
  • SPIDやKIDと同じようにNPCへのアイテムやパーク、キーワード追加が行える他にSPIDではできなかったクラスの変更や不死設定が行える
    • 所有アイテムや呪文、パークの削除が行える。従来のプラグインには追加や変更はあったが特定のアイテムや呪文をNPCから消すという事ができなかった
    • SPIDやKIDではできなかったプレイヤーに対するアイテムや呪文、キーワード追加が可能
    • SPIDとは違い一定確率で付与、または現在レベルが条件というような動的なアイテムや呪文、パークの付与はできない。これ一つで全てを補えるわけではないので注意
  • 上記の通り、従来のSPID等のSKSEプラグイン群にはゲーム内での条件に合わせて動的に付与する仕組みがあるのとフィルタリングに関してもあちら側で条件として絞れてもSkyPatcherでは絞れないというのもあるので従来のは全く不要となるわけではない
ダウンロード(SE・AE)
ドキュメント

Papyrus Tweaks NG

  • スクリプト処理のアルゴリズムを修正し、パフォーマンスを劇的に改善するSKSEDLL
  • 一度に処理できるタスク(命令数)が100までだったのを500まで増加(設定で変更可能)。これにより一度に処理できる命令数が低いせいで大規模戦闘等でFPSが下がる(スクリプト処理速度も低下する)状況下だと処理待ち命令が増えて行き、最終的にフリーズするという現象を回避しやすくなる
  • 実験的な処理高速化の機能として一部の命令をメインスレッド上で処理する機能を追加。これにより命令処理する度に一々同期処理してた事による処理遅延(1命令0.01~0.1秒、FPSが低いほど長くなる)が消える、すなわちスクリプトの処理速度が実質FPS依存となってた問題が消えるため処理速度が大幅に向上(例として10秒ほど掛かる処理が1~2秒、0.5秒ほど処理が掛かるものが一瞬で終わるほどに短縮)
  • 仕組み上の問題で実質一度に処理できるスクリプト処理の上限が設けられた上にその上限自体が低く上限設定も不可能であったようなものであったため、パソコンのCPUを高性能化してもスクリプト処理に対する恩恵がほとんど得れなかったが、このSKSEプラグインによる大幅改善によりCPU高性能化の恩恵がかなり得られるようになった(特に処理高速化はCPUが強力である程効果大)
  • 処理高速化によるスクリプトの高速処理はCTDやフリーズのリスクを大幅に軽減してくれるがスクリプトの記述の仕方によっては正常に動作しない事もある。そのため、これの処理高速化の機能をONにした環境で正常に動作するスクリプトを作成する事を強く推奨
ダウンロード(SE・AE)

Payload Interpreter

  • モーションに無敵時間の発生や魔法効果の発動等の命令を仕込む事ができるようになるSKSE
  • モーションの特定のタイミングでスクリプト処理を実行させる事が可能になる
  • モーションに仕込まれた命令は実行する前にモーションが中断された場合は実行されない。このため、従来の必殺技系のModでは処理が全部スクリプトで制御されてたためにモーションが何かしらの要因で中断されてしまった後も処理が続くという問題がPayload Interpreterを使う事で無くせる
  • これを使ったModを作成する場合は基本的にDAROAR等の条件に応じた動的なアニメーション変更Modとの併用が前提となる
ダウンロード(SE・AE)

Papyrus以外でスクリプト処理を行えるようになるSKSE

Skyrim Platform

注:バージョンによっては動作が不安定だったりするため上級者向け
  • JavaScriptのコードからSkyrimの動作を制御するという革命的なSKSE
  • DLLファイルがJavaScriptのコードを解析、処理を行うため圧倒的な速度で処理を行える(PapyrusとSkyrim Platformの両方でほぼ同じアルゴリズムを使用して、552個のアイテムをプレーヤーからチェストに転送が完了するまで計測した所、Papyursで130秒ほど掛かるものが、Skyrim Platformだと1秒以内に終わる[ModページのPostより])
  • Skyrim起動中にJavaScriptのコードが更新されると再読み込みが行われ、コードの内容が即座に反映されるためデバッグが非常に容易
  • このSKSEに使用するJavaScriptのコードは、配布元のツールからTypeScriptをコンパイルして変換する必要がある。(コンパイル方法はダウンロードした圧縮ファイルのPlatform/plugin-example/のReadme.mdを確認する事。またコンパイルにはnpmのインストールが必須)
  • HTMLを読み込みゲーム画面上に表示させる事が可能。(HTMLを使ったModを作成したい場合、HTMLの読み込みや表示関連のソースコードのサンプルは非常に少ないですが幸いElden Equipの作者がModのソースコードをgithubで公開しているのでそちらが参考になります。Elden EquipのModページの下部にgithubのリンクがあります。)
  • 2022/4/11のVer2.6にてAE対応(ただし2.5以降は不安定で安定版はAE未対応の2.4のため注意)
  • 2022年4月から更新が無いためAE版の場合は注意2023年6月に更新されたため現AEのバージョンに対応
ダウンロード
Papyrus関数拡張SKSEの関数をSkyrim Platformで使用するための定義ファイルのダウンロードはこちら

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

目安箱バナー