Content Patcher用MODの作成方法(初級編)


昔のStardew ValleyのmodなんかでContent Patcher用に作られていないものをContent Patcherへ対応させるための方法です。(Content Patcherを以下CPと呼びます)

SMAPI、CPの導入方法等は色々なところで解説されているので省きます。

基本的にここに書くことはContent Patcherの製作者のReadme(英語)に載ってます。

XNB用のmodとCP用のmodとを比較した時のメリット


とりあえずCP用modを使うメリットとしてはゲームの内部(オリジナル部分)を弄らなくてもいいので、modを入れるたびにゲーム丸ごとバックアップ取ったりしなくていいので楽ということです。

他にも例えば、CPを知り尽くすと1度設定しておくだけでNPCのポートレイトを色々な人が作ったmodに季節ごとに、曜日ごとに、天気、プレイヤーの各種スキルレベル、年数経過、友好度が10以上の時・・・etc 自由自在に変えて表示させることも可能です。


実際にまだCP用として作られていない「Velverette's Anime Portrait and Sprite Mod」を使ってCP用に作り変えてみます。これはnexusmodsにあるxnb用のmodです。


使うもの



では試しにアビゲイルのポートレイト1つをCP用にしてみましょう。
以下が流れです

  1. xnbをrepackしてpngにする
  2. manifest.jsonを作成する
  3. content.jsonを作成する
  4. 上記1~3で作成したファイルを適切に配置する


MOD適用前



1.xnbをrepackしてpngにする


XNB-Mod-Toolkitv2を使います。
一応昔のwikiに使い方は載ってます。
(なぜか今のwikiからはページ自体消滅しているみたいですね)

まずVelverette's Anime Portrait and Sprite ModのページのFILESにあるVillagers- Vanilla Colors-の方「Villagers- Vanilla Colors--645-.zip」をダウンロードして解凍します。
その中の「Portraits」フォルダに入っている「Abigail.xnb」をXNB-Mod-Toolkitv2の「Packed」フォルダに入れます。その後、XNB-Mod-Toolkitv2の「UNPACK FILES.bat」をダブルクリックして実行します。



「Villagers- Vanilla Colors--645-.zip」ファイルを解凍した後の「Portraits」フォルダの中身


XNB-Mod-Toolkitv2の「Packed」フォルダに「Abigail.xnb」ファイルを入れる


「Packed」フォルダに「Abigail.xnb」を入れたら、XNB-Mod-Toolkitv2の「UNPACK FILES.bat」をダブルクリックして実行します。


そうすると一瞬コマンドプロンプトが表示されてXNB-Mod-Toolkitv2の「Unpacked」フォルダの中に「Abigail.png」ファイルと「Abigail.yaml」ファイルができます。
(「Abigail.yaml」ファイルは今後使わないので必要ありません。yamlファイル自体何に使うのか知らない)

これでpngファイルのunpack(取り出し)に成功しました。



2.manifest.jsonを作成する


今から作成するMODの概要を宣言するファイルが「manifest.json」です。SMAPIが読み取るためのファイルです。
適当にテキストファイルを新規作成して下記をコピペでOK。
ファイル名を「manifest.json」にします(【注意】拡張子をjsonにすること)。

{
   "Name": "Villagers_Vanilla_Abigail",
   "Author": "cronosylph",
   "Version": "1.0.0",
   "Description": "Reconstruct old xnb",
   "UniqueID": "cronosylph.Villagers_Vanilla_Abigail",
   "MinimumApiVersion": "2.9.0",
   "UpdateKeys": [],
   "ContentPackFor": {
      "UniqueID": "Pathoschild.ContentPatcher",
      "MinimumVersion": "1.6.0"
   }
}


各種フィールドをざっくり説明するとこんな感じです。詳しくはここ(英語)

フィールド 説明
Name modの名前
Author modの作者名
Version modのバージョン
Description modの概要(短めの短文)
UniqueID modのユニークなID、推奨されるフォーマットは「<your name>.<mod name>」
MinimumApiVersion このmodを動作させるのに必要なSMAPIの最小バージョン
UpdateKeys Nexus Modsなんかに登録する場合には入れる
ContentPackFor どのmodによって(このmodを)読み取る事が出来るかの指定(ContentPatcherが必要な場合は変えなくてOK)
  UniqueID 要求modのユニークID(この場合ContentPatcherのUniqueID)
  MinimumVersion (オプション)必要な要求modの最小バージョン



3.content.jsonを作成する


MODの中身、実際にどういう動きをさせるかを記述するのが「content.json」です。
manifest.jsonと同様に適当にテキストファイルを新規作成して下記をコピペでOK。
ファイル名を「content.json」にします(【注意】拡張子をjsonにすること)。

{
  "Format": "1.6",
  "Changes": [
       {
          "Action": "Load",
          "Target": "Portraits/Abigail",
          "FromFile": "Portraits/Abigail.png"
       }
    ]
}


"Format"で「content.json」の書式のバージョンを記入します。(現在は1.6)
"Changes"での指定でどのファイルを置き換えるかや、ファイルの中へイメージをコピーしたりします。
上記のコードだと具体的には"FromFile"で指定した場所にあるファイルを"Target"で指定したファイルに、"Load"(置き換える)します。
この場合"Target"に指定しているファイルはxnbですが拡張子まで記述する必要はないです。


4.1~3で作成したファイルを適切に配置する


「[CP] Villagers_Vanilla_Abigail」フォルダを作成してその中に2~3で作成したファイルを入れます。 (フォルダ名は分かりやすければ何でもいいですが、CP用のMODなので頭に[CP]と付けるといいと思います、実際にCP用のMODの多くに付けられてます。)
そして「Portraits」フォルダを作成します。


「Portraits」フォルダの下に1で作成した「Abigail.png」を入れてください。


全てのファイルを適切に配置したら「[CP] Villagers_Vanilla_Abigail」フォルダをStardew ValleyのMODフォルダへ入れて完了です。


以上で作業は終わりです。



一応作成したファイルを用意しました。

[CP] Villagers_Vanilla_Abigail



実際にゲームを起動してMODが適用されてるか確かめてみましょう



ゲーム起動時に表示されるコンソール1

ゲーム起動時に表示されるコンソール2

ゲームを起動するとこのようなコンソールが表示されて、どのMODが読み込まれているか表示されます。update keyがないと表示されてますがそもそも入れてないので無視してOKです。

MOD適用後

ちゃんとMODが適用されました。


以上、Content Patcher用MODの作成方法(初級編)でした。
おつかれさまでした。

1 件のコメント: