StardewValleyポートレート差し替えModの作り方
StardewValleyをMod環境でやっていると
大体の人がまずポートレート(いわゆる顔グラ)差し替えModを入れると思います(偏見)。
ネットの海に流れているポートレート差し替えModは数知れずありますが、
お絵かきを趣味にしている方は「自分でも作ってみたいなぁ…」と思ったことがあるんじゃないでしょうか。
この手の記事はもう昔に比べて充実してると思いますし、
私も過去に似たような記事を書いたので需要がなさそうですが、
今まで私が書いた記事は分かりづらかったのでもうちょっとわかりやすくまとめることが出来ないかもう一度覚書をしてみようと思います。
私もプログラミングが得意というわけではないのでところどころ捉え方が怪しい部分があるかと思いますが、噛み砕いて読んでくださいね。
ContentPatcherの仕組み
Stardew ValleyでModを入れる時、まず最初に目にするのがSMAPIですが、
その次に真っ先に目にするのはやっぱりContentPacherだと思います。
ContentPatcherとは、ゲームの既存の内容を書き換える・追加するModで、
ポートレート差し替えModやカスタムNPCなどは殆どがContentPatcher製のModです。(ContentPatcherを始め、前提Modに関しては私の過去のModおすすめ記事にも書いてありますし、他の方の記事でもわかりやすく紹介されています)
特に、CotnentPatcherで作れるModの中で一番簡単なのがポートレートなどの画像差し替え系のMod。
画像が作れてしまえば、意外と簡単に画像差し替えModは作れます。
ポートレート差し替えModを作ろう!
というわけで、せっかくなのでポートレート差し替えModでも作ってみませんか?
画像差し替えなんて公開するまでは自己満足ですから、最初はどすんとハードルを落として、画像一枚差し替えるくらいの気持ちでいいのです。(流石に著作権違反や無断使用はだめですよ)
何でも良いので画像を一枚用意してください。最初なので機能性は考えず、NPCの通常顔を他の画像に変える、というのをやってみましょう。
画像の規格について
NPCのポートレートはPNG形式で、1つの表情につき縦横64pxで作られています。
たくさんある場合は、横2列を下に増やしていくように64x64の画像を連結していけばOKです。
![](https://assets.st-note.com/img/1664703621309-Il9CplB5H1.png)
たとえば、これが顔グラの表情1枚だとします。
それを2列x表情の数だけ縦に並べていくと…
![](https://assets.st-note.com/img/1664703829924-mqpP5i16wa.png)
こういう感じになります。
なぜ6枚用意したかというと、通常のNPCは必ず必要な表情パターン数があります。
まず結婚不可のNPCは通常、喜び、悲しみ、ユニークの表情が必ず必要です。
結婚候補NPCの場合はそれに加えて愛、怒りの6枚が必ず必要になります。
まあ、今回は差し替えが目的で、1枚のNPCを目標にするわけですから、特に気にしなくて良いのですが、差し替えるNPCの表情の分だけ用意する必要があります。そのあたりは覚えておきましょう。
差し替えるNPCを決めよう
画像が用意できる方は、いきなり枚数の多いNPCから始めても良いですが…
最初にたくさん用意して失敗すると悲しいので、まずは1枚だけ作ってテストだけでもしてみることをおすすめします。
というわけで、まずは表情の要らない1枚だけのNPC…
ギュンターさんあたりで例を書いてみます。
ギュンターさんは基本的に街の住民として数えられないNPC扱いなので、表情は要りません。1枚でOKです。(可愛そうですが…)
①Modの作り方「コード本体部分」編
画像や構想は決まりましたか?
では、早速Modの作成に取り掛かっていきましょう。
まずフォルダを以下のような構成にしてみましょう。
Mod/
+[CP] Portraits Test/
+assets/
| +NPC.png
+content.json
+manifest.json
当たり前ですが、Modフォルダにはこのファイル群以外にちゃんとContentPatcherを配置している状態にしてくださいね。
content.jsonとmanifest.jsonはとりあえず置いておいて、以下の通りにやってみてください。
まずModの本体のフォルダを作り、その中にassetsというフォルダを作ります。
次にassetsフォルダの中にNPCの画像(PNGファイル)を入れましょう。
その後、assetsの上のMod本体のフォルダに戻り、テキストファイルを作り、content.jsonという名前にファイル名を変更します。同じように、manifest.jsonも作っておいてください。
content.jsonをテキストエディタで開きます。
…ここで一つおすすめしておくと、テキストエディタはメモ帳ではなくNotepad++などのコードを書くのに便利なソフトを使うことをおすすめします。(私はいつもそれ)
出来たら、中に以下のようなコードを書きます。
{
"Format": "1.28.0",
"Changes": [
{
"Action": "EditImage",
"Target": "Portraits/Gunther",
"FromFile": "assets/NPC.png"
}
]
}
実は、画像差し替えの本体部分はこれだけで終わりです。
コードの意味を説明していくと…
まず、最初のFormatの部分ですが、これはコードの構文に前提ModであるContentPatcherのどのバージョンを使うかという意味で、主に構文にかかわる問題なので、大きなアップデートが来るとかで無い限りあまり気にする必要はありません。簡単なポートレート差し替え系のModなら、多少バージョンが変わってもいちいち対応する必要もないと思います。
次にChangesの部分。
コードがわからない人には難しいかもしれませんが、この部分は大括弧[]でフィールド分けされています。この中にこのコンテンツパックが何をするのか、命令を書きます。フィールド内に中括弧{}で内容が書かれているのがわかりますか?この中括弧{}で囲まれた部分が命令一つの内容です。これに関しては後述しますが、先にAction~の部分を見ていきましょう。
簡単に言えば、Actionに書かれているEditImageという指定で「画像を書き換えるよ」という命令を与え、その対象のパスをTargetで指定しています。(この例では、ギュンターさんのポートレート画像です)そしてFromFileで指定されているのが自分が用意した書き換えに使う画像のパスです。
FromFileの画像でTargetの画像をActionで書き換えるよと言っているわけです。
要約すると、assetsフォルダの中のNPC.pngでギュンターさんのポートレートを書き換えるよという意味です。
ちなみに、先程の中括弧{}で囲まれた命令は以下のように増やしていくことが出来ます。
{
"Action": "EditImage",
"Target": "Portraits/Gunther",
"FromFile": "assets/NPC.png"
},
//↑このカンマで上の中括弧と下の中括弧の間を区切ります
{
"Action": "EditImage",
"Target": "Portraits/Marlon",
"FromFile": "assets/NPC2.png"
}
上の例では、NPC.pngでギュンターさんのポートレートを差し替え、NPC2.pngでマーロンさんのポートレート差し替え、ということをしています。
つなげていく際は、途中に必ずカンマが必要なのでお忘れなく。
ContentPatcherにはこういった命令がたくさんあり、それを組み合わせることでいろんなModが作れるようになっています。
もしModを本気で作ってみたいと思うようになったときは、ContentPatcherのREADME(英文)に詳しく命令の内容が書かれているので、是非見に行ってみてください。
以上でCPによるポートレート差し替え部分のコードは終わりです。
②Modの作り方「manifest.json」編
さて、本体のコードが終わったところで、Modに関する内容詳細ファイルmanifest.jsonの作成に取り掛かりましょう。
manifest.jsonとは、Modのプロフィールのようなものです。
名前や説明、どのModを前提にして動くかなどを記していきます。
このファイルがなければModフォルダの中にファイルがあってもModとして認識してはくれません。どんなModにも必ず必要です。
先程のようにmanifest.jsonをテキストエディタで開き、以下のようにコードを書きます。
{
"Name": "",
"Author": "",
"Version": "1.0.0",
"Description": "",
"UniqueID": "YourName.YourModName",
"UpdateKeys": [""],
"ContentPackFor": {
"UniqueID": "Pathoschild.ContentPatcher"
}
}
manifest.jsonの基盤の状態のものです。
これにModの詳細を記入していきます。
以下を参考に入力していってください。
基本的に英語推奨です。
Name
Modの名前です。SMAPIやゲーム中に表示されます。Author
Mod作者の名前。あなたのHNとかで大丈夫です。Version
Modのバージョン。今すぐ正式リリースしたいならこのままでもいいですし、テストverにしたいなら0.1とかでも良いと思います。Description
Modの説明。SMAPIコンソールなどに表示されます。適当で良いと思います。UniqueID
ModのユニークなID。要するに他のModと被ってはいけません。被らない文字列にしましょう。基本的には自分の名前のあとにピリオド、その後にMod名をつけるのが一般的です。
例:YourName.ModNameUpdateKeys
これはNexusModsなどに公開した際、アップデートがあったときにSMAPIコンソール上に表示させるときに使います。NexusModsに登録しないなら空でもOKです。登録する場合は"Nexus:***(ModのIDの数字)"のようにします。
くれぐれも他人のModのIDを入れないように気をつけましょう。ContentPackFor
これは前提になるModのリスト。今回はContentPatcherのみですので、変える必要はありません。
以上が入力できたら、manifest.jsonの作成は終了です。
③テストをしよう
以上全てが終わったらModのテストをしてみましょう。
今回はギュンターさんのNPCをオリジナルの画像にしたので、
ゲーム上でギュンターさんに会いに行けば確認できます。
図書館に行って話しかけてみましょう。アーティファクトがない状態で話しかければポートレートが表示されるはずです。
④うまく行かなかったら…
ここまでシンプルなModであれば、考えられる原因は構文ミスくらいしかないと思いますが、それを確認するために以下のことを確認してみてください。
SMAPIコンソールに赤い文字でModが読み込めなかった旨が表示されていないか
内容をよく読んで該当箇所を改善してみましょう。よくあるのは、構文ミス、前提Modがないなど。同じように、黄色い文字で警告が表示されていないか
同じModが2つ入っているなどでロードがスキップされてしまうことがあります。赤文字でよくわからないエラーが出た
よく読めばわかることもありますが、意味の分からない文章の場合もあります。そういうときは、Googleで同じ症状の人が居ないか調べてみると良いかも。これのときは大体他のModと競合を起こしている場合が多いので、Modは必要最低限の環境でテストすることをおすすめします。その他、引っかかりやすい原因
manifest.jsonの記述が間違っていたり、画像ファイルの形式が違うなど、色々ありますが、コードが原因じゃないこともあるので、入ってるファイルを総当りでチェックしてみたら見つかるかもしれません。とにかく完成前から部分的にチェックしてみる
一気に全部片付けようとすると失敗の元になります。
大作を作っていても全部できたあとに失敗したらどこが原因かもわかりません。少しずつチェックをしながら作っていくことが大事です。(私はそれをしないからいつも泣くことになるんですよね…)
終わりに
以上つらつらと説明してきましたが、ごく簡単なポートレート差し替えModなら作業自体はとてもシンプルなものです。理解するまでが大変なのですが…出来た時の喜びはひとしおです。ポートレートは誰もが作ってみたいと憧れるModの一つだと思うので、これを読んでみて挑戦したくなったら是非挑戦してみてくださいね。
ちなみに…
今回はギュンターさんで説明してきましたが、同じような内容で他のNPCも差し替えることが出来ます。Guntherの部分をDwarfにすればドワーフになりますし、他のNPCでもOKです。その場合は、もうおわかりかもしれませんが、差し替え先のファイルと同じ規格で画像を用意しましょう。
足りない表情があると表示されなかったり、読み込み不能の原因になるので、よく確認してくださいね。通常であればゲームデータの解凍をしてオリジナルのデータを見ながらの作成をおすすめしますが、よくわからないうちは他の方のModの規格を確認して真似てみるのがいいかもしれません。
以上、ポートレート差し替えModの作り方でした。
機会があれば、次はアイテムアイコンの差し替え方法でも書いてみようかな。