Modがうまく動かないときは

環境構築

Modをインストール、アップグレードした時の問題についてまとめました。

新規インストール

新規にインストールする場合は、当たり前のことを守れば大体は問題ないので、特に注意することはありません。

Modが動く環境を整えるのが大前提です。SKSE64が必要だとか、PapyrusUtil SEが必要だとか、大抵はDescriptionに書かれていますのでよく読みましょう。

途中まで進めたゲームに新規にインストールする場合ですが、スクリプトに関してはほぼ問題なく動きます。テクスチャ等のリプレースも安全です。レコードの追加や書き換えはニューゲームまたはセルをリセットするまで適用されない場合があります。

アップグレード

アップグレードは常に問題がつきまといます。

アップグレードが安全に行えるのはテクスチャ等のリプレースのみです。仕組み的には参照するデータ(ファイル)が置き換わるだけなので、問題が起こるのはまれです。

スクリプトを安全にアップグレードする方法はありません。なぜなら、スクリプトは一度動き始めるとセーブデータの中に保存されて、以降はそれが使われ続けるからです。

技術的な解説をすると、イベントが発生するとスクリプトのインスタンスが生成されてメモリ内にコードが配置されます。コードの実行が終わるとインスタンスがメモリから撤去されます。セーブデータの中に保存されるのは、このインスタンスです。インスタンスごと保存する理由は、いつでも安全にセーブとロードができるようにするためです。セーブしたあとでModをアップグレードしてスクリプトが更新されると、セーブデータ内のインスタンスにあるコードとディスクに配置されているスクリプトのコードに食い違いが発生します。この場合Skyrimはゲームをロードして安全に再開させるために、セーブデータ内のインスタンスを優先します。つまり、バージョンアップされたコードは無視されるのです。こうなると、もはやまともな動作は期待できません。

クエストのスクリプトのように、ゲーム内に常に存在しておりプロパティを保持し続ける場合、クエストが初期化された段階でプロパティの初期値が決定します。初期値はコードに定義されており、それからさまざまに処理に応じて変化していきます。Modをアップグレードしてスクリプトの初期値が変更されても、すでに稼働を始めているゲーム内のクエストのスクリプトには反映されません。反映されるのは、新規にプロパティを追加した場合のみです。

スクリプトを確実にアップグレードするには、セーブデータのクリーニングを実施するか、ニューゲームを行います。

ニューゲームは言うまでもなく、セーブデータを新規に起こすわけですので、セーブデータ内のインスタンスというものは存在しません。

セーブデータのクリーニングとは、セーブデータ内のインスタンスを一掃する作業になりますので、クリーニング後のセーブデータには確実に新しいコードが配置されます。

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