2015 | おばちゃんのスカイリムガイド

2015/08/03

ModOrganizerとSublimeText2のための協奏曲

今秋には新作Fallout4の公開を控え、もはや一昔前の名作と言ってもおかしくないくらいの年月が経ってしまったスカイリムですが、まだまだ遊んでみたいModが山のようにあって、いまだにニューゲームを繰り返している進歩のないおばちゃんです。
まあでも、ニューゲームすると、「今回のプレイにはこういうModが欲しいよな…」とか「ここをこんな風に変えてみたらどうかしら…」とか思い始めて、プレイ自体は一向に進まないんですけどね。
Steamで記録されているプレイ時間を見てみると、私はゲーム本体を遊んでいる時間の四倍くらいCKを起動しています。つまり20時間遊ぶために80時間も余計なことしてるわけで……こんなんだから、いつまでたっても遊び足りない気分が抜けないのかもしれません。

さてそんなわけで、今日は私がスカイリムを遊んでいる期間の八割もの時間を費やしている、CKやスクリプトを編集するためのエディタについて、設定や使用上の注意などをまとめておきたいと思います。
Modの導入方法や日本語化の作業などは、今までさんざん繰り返してるせいで少々ブランクが開いたとしても忘れることはないかな、と思うんですが、Modの制作環境の方については、再び構築できる自信がないんですよね。CKはともかく、エディタなんて今までろくに入れ直したことなんてないし。
それに私はMO経由のCKでスクリプトを編集するために、「Advance Papyrus」というものを使っているのですが、あまり使ってる方がいらっしゃらないのか、ググってもろくにヒットしないんですよね。
なのでご紹介がてら、導入手順や設定などを書いておきたいなと思います。
そんなわけで今回は個人の備忘録のような内容になってしまうかと思いますが、どうかご容赦ください。


「SkyrimEditor.ini」の設定について
まずはCKの設定ファイルであるSkyrimフォルダの「SkyrimEditor.ini」について。
「SkyrimEditor.ini」の設定についてはいろんな方がweb上にまとめて下さっていて、私が今更書くようなことでもないんですけど、何かあった時にすぐに復元できるように、今の自分の環境をざっと書いておきたいと思います。
ちなみに私は「SkyrimEditor.ini」をコピーして「SkyrimEditorCustom.ini」という名前のファイルにリネームしたものを編集しています。
(CKは「SkyrimEditor.ini」よりも優先的に「SkyrimEditorCustom.ini」を読み込んでくれます)
動揺すると脊髄反射で「キャッシュの整合性を確認」を押してしまう粗忽者の私は、そちらの方がSteamに設定を上書きされる心配がないので。

弄ってる箇所は、まず[General]の項目です。
[General]
sLanguage=JapaneseSjis
bAllowMultipleMasterLoads=1

sLanguage=JapaneseSjis」の箇所は、私はCK用に文字コードをShift-JISに変換した日本語stringsを使っているので、それを読み込むために追加しています。
このsLanguageで指定する言語名は実在しない言語名でも何でも良いのですが、「Data/Strings」フォルダにその言語名のついたSTRINGSファイルが入っていないとエラーになったり読み込み自体が終わらなかったりしますので注意が必要です。
ユーザーメイドのModで、Strings付きのesmというのはそんなに見かけませんが、もしそういったものをCKで読み込む時は気をつけること。
CKはコミュ障なんじゃないかと思うくらいエラーの原因についてはまったくヒントをくれないのがデフォルトですので、 sLanguageの設定を独自のものにする場合はこの点を覚えておかなければいけません。
(※ちなみにsLanguageの指定が何も無い場合は自動的に「English」となるようです)

bAllowMultipleMasterLoads=1」は複数のマスターファイルを同時に読み込んでModを制作するための設定です。これはまあ、とりあえず最初に設定しておきたい項目ですね。

[Archive]
SResourceArchiveList2=Skyrim - Shaders.bsa, Update.bsa, Dawnguard.bsa, HearthFires.bsa, Dragonborn.bsa
[Archive]の項目では「SResourceArchiveList2」のお尻にDLCのbsaファイルを追加しています。
bsaファイルはCKでは自動では読み込まれないので、DLCの素材を制作リソースとして使用する場合はこのように設定ファイルに書き加えておかなければなりません。
そういえば先日、私はSkyUIを5.0にアプデしたのですが、それをついうっかり配布時のbsaのまんま突っ込んでおりまして……そのおかげで見事に落とし穴にハマってしまいました。
実は先日ニューゲームした折に、私は「iNeed」も一年ぶりに更新しまして、それで自作のHUDメーターを付けようとしてたんですが、CK上でiNeedのクエストのスクリプトにプロパティを追加しようとしたら、「Errors encounterd while attempting to reload the script」というエラーが出て、プロパティの情報自体を全然読み込めないんですよね。
そのエラーは今までの例からすると、スクリプト(pexファイル)が所定の場所に入っていない(もしくはコンパイルに失敗している)時に出るものなんですが、iNeedのスクリプトはちゃんと「Data/Scripts」に入っているのに、そのエラーばかりが繰り返し出るのです。
まあ、冷静に考えたらHUDウィジェット関係の改造をしようとしてたんだから、SkyUIが怪しいということに真っ先に気づくべきだったんですが、CKは馬鹿の一つ覚えのように「スクリプトをリロードできません」と繰り返すばかりなので、いったい何が悪いのかさっぱりわかんなかったんですよね。

ちなみにMCMやHUDウィジェットといったSkyUIの機能を使っているModは、スクリプトをコンパイルする時には必ず、拡張元のSkyUIのスクリプトが必要になります。
そしてCK上でスクリプトのプロパティを設定する時にも、CKはそのスクリプト単体だけでなく、関連するスクリプト(しかもpexファイルの方)を全部読みにいくんですね。
だから関連Modのリソースがbsaファイルの中に入ったまんまの状態だと、CKはスクリプトを読み込むことができないというエラーになるのです。
特に私は今回、SkyUIのスクリプトのソースファイルの方は、旧バージョンのものがインポート元のフォルダに残っているという状態で、コンパイル時につまずくことがなかったので、アプデしたSkyUIのpexファイルがbsaの中に入ったまんまになっていることに気づかず、原因を究明するのに苦戦してしまいました。
皆様もどうかお気をつけ下さい。

[MESSAGES]
bBlockMessageBoxes=1
次はMESSAGESの項目の「bBlockMessageBoxes」の設定を1に変更。
これはModを最初に読み込む時に出てくるウザいポップアップ広告みたいなWarningメッセージ(キャンセルボタンを押してすっとばせる奴)を非表示にするための設定です。

[Localization]
iExtendedTopicLength=161
bAllowExtendedText=1
最後に、これはTopicの文字カウント数を増やすためのものです。
ダイアログでそんなに長いセリフを入力することがなければ要らないです。




「Advance Papyrus」の導入方法と設定について
私は日頃「Mod Organizer」を使ってスカイリムをプレイしてるんですが、Modを作成する場合も同じようにMOからCKを起動して弄っています。
MO経由でCKを使うと、Dataフォルダ内を汚すことなく、作成中のファイルをMOの「overwrite」フォルダに置いておけるので、自分のModデータを管理するのにすごく便利なんですよね。
特にスクリプトファイルは、自分の書いたものをバニラのソースとは別に置いておけるのは非常に有難いです。なにしろバニラのスクリプトファイルは一万三千個くらいありますから。
自分のスクリプトを「Data/Scripts/source」なんかに一緒に入れた日には、あっという間に収拾がつかなくなって、衝動的に「キャッシュの整合性を確認」を押すハメになってしまいます。
まあ、スクリプトに関しては、今年四月のアプデでスクリプトソースが「Script.rar」として配信されるようになったので、わざわざダウンロードし直さなくても簡単に元の状態に戻せるようになりましたが。


しかしそんな神ツールのMOにも弱点というか困ったところがあって……MO経由で起動したCKではなんとスクリプトをコンパイルすることができないのです。
スクリプトを多用するからこそMOを使い始めたのに、肝心のスクリプトがコンパイルできないなんて本末転倒というか……皮肉なものです。
そういえばこちらの記事を拝見して初めて知ったのですが、どうやらMO経由のCKでスクリプトがコンパイルできないのは、スクリプトのコンパイラが64bitのプログラムだから……だそうです。
確かにMOからは32bitのアプリケーションじゃないと起動できませんが、まさかコンパイラが64bitだったとは……そんな理由でコンパイルできなかったとは思いも寄りませんでした。
ちなみに上記の記事では「PapyrusCompiler.exe」を32bitに変換してコンパイルするという方法を取っていらっしゃいましたが、私は「Advance Papyrus」というPapyrusスクリプトのコンパイラを拡張するツールを導入してMO経由のCKでもコンパイルできるようにしています。
「Advance Papyrus」のしくみ  
「Advanced Papyrus」というのは、オリジナルのPapyrusコンパイラの代わりに自分が「PapyrusCompiler.exe」として一旦データを受け取って、コンパイルの作業そのものはオリジナルの「PapyrusCompiler.exe」にやらせる…という、仲介業者のような役目を果たすプログラムです。
MO経由では起動できないコンパイラでも、「Advanced Papyrus」を挟むことでコンパイルできるようになるというわけです。ですからこのツールを導入する時は、「Advanced Papyrus.exe」を「PapyrusCompiler.exe」という名前にリネームして、オリジナルのPapyrusコンパイラとして偽装します。
また、このプログラムは元のオリジナルのコンパイラを「PapyrusCompiler - Original.exe」という名前で探しに行きますので、オリジナルのコンパイラは必ずその名前に変更しておく必要があります。
[インストールの手順]
1. 「Advance Papyrus」をダウンロードし、「Advanced Papyrus.exe」を「Skyrim/Papyrus Compiler」フォルダにコピーする。
2. 「Skyrim/Papyrus Compiler」フォルダにある、オリジナルの「PapyrusCompiler.exe」を「PapyrusCompiler - Original.exe」にリネームする。
3. 1でコピーした「Advanced Papyrus.exe」を「PapyrusCompiler.exe」にリネームする。
4. 「Advanced Papyrus.ini」を用意し、「Skyrim/Papyrus Compiler」フォルダに入れる。
この「Advance Papyrus」の便利なところは、ただMO経由のCKからのコンパイルを可能にするだけでなく、コンパイルする際に「Advanced Papyrus.ini」という独自の設定ファイルを読み込んで、パラメーター付きでコンパイラを実行してくれるところです。
スクリプトがコンパイルされる時、コンパイラはそのスクリプトファイル単体だけでなく、関連するすべてのスクリプトファイルをチェックしに行きますが、CKのデフォルトの状態ではその関連ファイルはすべて「Data/Scripts/souce」に入れておかなくてはならない設定になっています。
しかし「Advance Papyrus.ini」でimportのフォルダのパスを指定してからコンパイラを実行すると、スクリプトのインポート元のフォルダを変更できたり、複数のフォルダを指定したりできるのです。
MOを使っている場合はModのデータはDataフォルダに直に入れたりはしないのが基本ですので、この複数フォルダをインポート元にしてコンパイラを実行できるという機能はとても重要です。

ちなみに私が現在使用している「Advanced Papyrus.ini」のデフォルト設定はこんな感じになっています。
[Skyrim]
scripts=D:\Program Files (x86)\Steam\steamapps\common\Skyrim\Data\Scripts\Source
output=D:\MO\overwrite\Scripts
flags=TESV_Papyrus_Flags.flg
[Import]
path0=D:\MO\overwrite\scripts\source
path1=D:\MO\mods\SexLab Framework v1.59c\scripts\source
path2=D:\MO\mods\FNIS v5.5\scripts\source
path3=D:\MO\mods\SkyUI v5.0\scripts\source
path4=D:\MO\mods\SKSE v1.7.3\scripts\Source
path5=D:\Program Files (x86)\Steam\steamapps\common\Skyrim\Data\Scripts\Source\Dragonborn
path6=D:\Program Files (x86)\Steam\steamapps\common\Skyrim\Data\Scripts\Source\Hearthfire
path7=D:\Program Files (x86)\Steam\steamapps\common\Skyrim\Data\Scripts\Source\Dawnguard
[Import]のカテゴリ以下で、コンパイラが関連するスクリプトを検索しにいくフォルダ……いわゆる「クラスパス」みたいな場所の指定ができます。私は上記の設定を基本にして、関連するModのスクリプトが他にある場合には、そのModをインストールしたフォルダをその都度追加しています。
特にエロ系のModは、SexLab様を始めzazだのDeathAlternativeだのFNISだの、関連するスクリプトがはんぱなく多いものですが、それをModをインストールした場所においたまま、パスを追加するだけで参照できるのはすごく便利です。
ひとつふたつだったら、自分の作業フォルダに入れてもいいのですが、どのスクリプトに手を加えたのか時間が経つとわからなくなってしまいますので、できれば「overwrite/Scripts/source」フォルダは自分の作成(あるいは改造)したスクリプトだけにしておきたいものです。

上記の記述を見てわかるように、インポート元に複数のフォルダを指定する場合は、path0、path1、path2……と順番に数字を振って指定するのですが、コンパイラは数字の小さい順からスクリプトファイルを探しにいき、一番最初に見つけたものを採用してコンパイル時に参照します。
つまり同じファイル名のスクリプトが、path0の指定のフォルダと、path1に指定されてるフォルダの両方に存在していたら、数字の小さいpath0のフォルダにあるスクリプトの方が使用されるということです。
ですので、この指定は優先度の高いフォルダから順に記述する必要があります。
もちろん作業フォルダ、自分のスクリプトの置き場所となるMOのフォルダ以下の「overwrite/Scripts/source」は、最優先の「path0」に指定します。
あとは順に使用する関連Modのソースを指定していって……SKSEやDLCのスクリプトなどは基本のものですので最後の方に書くのが良いかと思われます。
「Adbance Papyrus」経由でコンパイルすると、下線のようなメッセージが出ます。
この表示が出ていれば、「Adbance Papyrus.ini」の設定が効いています。
(その証拠にCK上でもSexLab様の関数がエラーにならずにコンパイルできている)
ちなみにこのiniの設定は、CKに付属のエディタからコンパイルする時だけでなく、他のエディタなどからコンパイラを呼んで起動する場合でも有効になります。
importの複数フォルダ指定はオリジナルの「PapyrusCompiler.exe」でも可能っちゃ可能なんですが、「Advanced Papyrus」ではその指定をbatファイルなどに書いたりする必要なく、iniファイルで一元管理できるのが個人的にポイント高いなあと思っています。
iniファイル自体の書式も見やすくて、編集もしやすいですしね。


説明の順番が前後してしまいましたが、「Advanced Papyrus.ini」の[Skyrim] のカテゴリでは、自分の環境に合わせた基本設定を行います。
「scripts」はコンパイラが最後に関連コードを探しにいくスクリプトのベースコードがある場所です。
通常はバニラのスクリプトソースが揃ってる場所……スカイリムをインストールした「Data/Scripts/Source」を指定します。「Script.rar」をどこか別の場所に解凍しているのなら、そちらへ。

「output」は、コンパイル後のスクリプト(pexファイル)が書き出される場所です。
MOを使っている場合はMOのフォルダ内の「overwrite/Scripts」を設定します。
また「flags」で指定している「TESV_Papyrus_Flags.flg」は、「scripts」で指定した場所に必ず入っていなくてはなりません。この「TESV_Papyrus_Flags.flg」というファイルはスクリプトに「hidden」や「Conditional」といったフラグをつける際に使用されるものらしいのですが、私には詳細はようわかりません。
このファイルは、デフォルトでは「Data/Scripts/Source」の中に他のバニラのスクリプトと一緒に入っているものですので、自分で移動したり削除したりしてなければそこにある筈です。
もちろん「Script.rar」をどこか別の場所に解凍しているのなら、そちらに入ってます。


SublimeText2の導入方法と設定について
私はスクリプトを組む際に「SublimeText2」というエディタを愛用しています。
以前、このエディタの導入方法については記事にまとめたことがあるのですが、MOから起動したCK経由でSublimeText2を使うためには、64bit版ではなく、32bit版の「SublimeText」をインストールする必要があります。
32bit版のSublimeText2でも、インストール方法やパッケージの導入方法などは64bit版と同じです。
まず「Package Control」をインストールし、「Papyrus」「ConvertToUTF8」「IMESupport」といった主要なパッケージを導入して基本環境を準備します。(詳しくはこちらの記事を参照ください)

私はSKSEやPapyrusUtilなどの関数をよく使うので、それらの関数がわかりやすくシンタックスハイライトされるように、GitHubの「SublimePapyrus」のリポジトリから最新版のデータを入手して 自分でSublimeTextのPackagesフォルダにデータを追加しています。
こちらはSKSE、SkyUI、FISS、Jcontainers、UIExtensions、NetImmers Ovveride、PapyrusUtilなどなど、有名どころのライブラリをことごとく網羅している追加のシンタックス集のようなものです。
「SublimePapyrus」はリリース版のデータもありますが、そちらはライブラリごとにまとまったパッケージになっていて使いづらいので、私は直接ソースの方から使うものだけ選択して入れてます。
ブラウザから最新ソースをダウンロードする場合は、右下の「Download ZIP」ボタンを押します。
「Core」フォルダの中には言語の定義ファイルなどが入ってますんで、このフォルダの中身をSublimeTextの「Packages/Papyrus」フォルダに上書きしてやると、SKSEの最新版の関数やSexLab様のPapyrusUtil系の関数までちゃんと認識されて文字色が変わるようになります。
(※SublimeTextにインストールされたパッケージのデータは、Win7のデフォルトでは「C:\Users\ユーザー名\AppData\Roaming\Sublime Text 2\Packages」に入ります。Papyrus用のパッケージを導入したら、そこに「Papyrus」フォルダが出来ている筈ですので、そこに追加のファイルを入れます。
また、たまにですが、ファイルを追加しただけではシンタックスの定義が更新されないことがあります。
その場合は「Papyrus.tmLanguage」を一度エディタで開いて保存しなおすと認識してくれるようです)

また「Libraries」フォルダには各ライブラリの関数のスニペットが大量に揃っています。
これも「Packages/Papyrus」フォルダ内に入れれば、Papyrusスクリプトを編集してる最中に使えるようになりますので、よく使うものを導入すると作業がとてもはかどります。
ちなみにスニペットというのはよく使うコードなどを短縮入力するための機能です。
たとえば「dpc」(DisablePlayerControlsの略)と入力して変換のタブキーを押すと、
……というような長ったらしい関数の引数が一気に自動入力されたりします。
関数の詳細をわざわざCK Wikiで調べたりしなくてもよいので楽チン…なのですが、個人的にスニペットは自分がよく使う関数だけを選択して追加するのがよいと思います。
使わない関数が変換の候補に出てくるとジャマなだけなので。

スニペットのトリガーとなる単語(変換前の単語)は、大文字小文字が厳密に合っていないと変換されませんので、よく使うスニペットは自分でsublime-snippetファイルを開いて、入力しやすい単語に編集しなおしておくのがおすすめです。
たとえば先程の「DisablePlayerControls」のスニペットは、「Game.DisablePlayerControls.sublime-snippet」というファイルで設定されてるのですが、中身を開くとこんな感じになっています。
デフォルトではトリガーは「DisablePlayerControls」になってたかと思います。
「<tagTrigger>」というタグで囲まれた単語が変換前のワードになりますので、自分で覚えやすいと思うものに変更します。
私は関数名だけでなく、よく使うスクリプト回しや構文もスニペットに全部登録していて、自分の頭ではちっとも覚えていないので、自力では一行もスクリプトを書くことができません。
スニペットのバックアップデータをしっかり取っておかないと……です。

前述したとおり、Sublime Textからコンパイルする場合でも「Advanced Papyrus.ini」の設定は有効です。
「Papyrus」のパッケージを導入すると、SublimeText上からスクリプトをコンパイルできるビルド設定がもれなくついてきますが、「SublimePapyrus.ini」でちゃんと自分のSkyrimの「PapyrusCompiler.exe」を正しく指定さえしていれば、他は特に何も弄る必要はありません。
前述した通り、下線の表示が出ていれば「Advance Papyrus.ini」が効いています。
CKからこのSubLimeText2でスクリプトを直接開いて編集する場合は、まずスクリプトの「pscファイル」をSubLimeText2で開くというOS上の「ファイルの関連付け」を行っておきます。
(Win7の場合は、何かpscファイルを選択して右クリックし「プログラムから開く」>「既存のプログラムの選択」でSublime Text2を選択します。
※SublimeText2を一度アンインストールして入れ直したりしていると、ファイルを開くプログラムの候補にならないことがあります。その場合はレジストリエディタでSublime Text2の項目を削除しなければなりません。やり方は「ファイルの関連付け レジストリ」などでググってお調べください)
「ファイルの関連付け」を行っていればCKから直接スクリプトをSublimeTextで開くことができます。
MOから起動したCKでスクリプトを編集するためにSublime Text2を開く時は、既にSublime Text2が起動した状態になっていないか、ご注意ください。
CKの「Open in External Editor」で「Sublime Text2」が初めて起動する状態でないと、MOの仮想Dataフォルダの設定は有効になりません。既に起動してあるSublimeText2では仮想Dataフォルダ上にあるスクリプトを認識できず、白紙状態になってしまいます。
またSublime Textで他人様のModの既存のスクリプトを変更する場合は、別名保存でMOの「overwrite/Scripts/source」にソースを保存してから、コンパイルするのが良いです。
そのまま保存すると、元のオリジナルのソースを普通に上書きしてしまいますので。
(コンパイル後のpexファイルは「overwrite/Scripts」に出力されるので、元のデータを上書きされることはないのですが)

以上、長くなりましたが、こんなところです。
また何か思い出したら追加したいと思います。