「模组:Content Patcher」修訂間的差異
ChenNiuniu(討論 | 貢獻) |
Margotbean(討論 | 貢獻) 小 (文本替换 - 替换“tt>”为“samp>”) |
||
(未顯示由 2 位使用者於中間所作的 6 次修訂) | |||
行 1: | 行 1: | ||
← [[模组:目录|目录]] | ← [[模组:目录|目录]] | ||
− | |||
− | |||
想为游戏创建内容包模组吗?教程就在这里。'''有关如何使用模组,请参阅 [[模组:使用指南/入门]] | 想为游戏创建内容包模组吗?教程就在这里。'''有关如何使用模组,请参阅 [[模组:使用指南/入门]] | ||
行 15: | 行 13: | ||
* 制作季节性的变化 | * 制作季节性的变化 | ||
* 根据天气、日期、与其他 NPC 的关系等进行更改 | * 根据天气、日期、与其他 NPC 的关系等进行更改 | ||
− | * 进行非常具体的更改(例如,在完 | + | * 进行非常具体的更改(例如,在完 成Joja 超市献祭之后,在下雪的冬天的周末,咖啡价格会更高) |
* 以及更多 | * 以及更多 | ||
===资源 Assets=== | ===资源 Assets=== | ||
− | 一个 '''asset''' 本质上是游戏中的 < | + | 一个 '''asset''' 本质上是游戏中的 <samp>Content</samp> 文件夹,具有唯一的“资源名称”。 资产名称从不包含 <samp>Content</samp>路径、语言或文件扩展名(可以使用令牌来定位特定的语言)。例如: |
− | {| class="wikitable" | + | {|class="wikitable" |
|- | |- | ||
! 文件 | ! 文件 | ||
! 资源名称 | ! 资源名称 | ||
|- | |- | ||
− | | < | + | | <samp>Content/Portraits/Abigail.xnb</samp> |
− | | < | + | | <samp>Portraits/Abigail</samp> |
|- | |- | ||
− | | < | + | | <samp>Content/Maps/spring_beach.xnb</samp><br /><samp>Content/Maps/spring_beach.es-ES.xnb</samp><br /><samp>Content/Maps/spring_beach.fr-FR.xnb</samp> |
− | | < | + | | <samp>Maps/spring_beach</samp> |
|} | |} | ||
− | 一个资源可能包含多个子画面或数据条目。例如:< | + | 一个资源可能包含多个子画面或数据条目。例如:<samp>Portraits/Abigail</samp>: |
[[File:Modding - creating an XNB mod - example portraits.png]] | [[File:Modding - creating an XNB mod - example portraits.png]] | ||
− | 因此,如果想更改阿比盖尔的肖像,则可以使用 Content Patcher 加载或编辑 < | + | 因此,如果想更改阿比盖尔的肖像,则可以使用 Content Patcher 加载或编辑 <samp>Portraits/Abigail</samp>. |
===Load 和 Edit=== | ===Load 和 Edit=== | ||
可以通过两种概念上的方式来更改资源: | 可以通过两种概念上的方式来更改资源: | ||
− | * ''Load|加载'' Asset的初始版本。 每个Asset只能同时被一个模组加载。 这主要用于完全替换模组(例如完全改变 NPC 肖像的模组),或提供 < | + | * ''Load|加载'' Asset的初始版本。 每个Asset只能同时被一个模组加载。 这主要用于完全替换模组(例如完全改变 NPC 肖像的模组),或提供 <samp>Content</samp> 文件夹中不存在的文件。 |
* ''Edit|编辑'' 加载后的Asset。 可以对同一资产应用任意数量的编辑。 | * ''Edit|编辑'' 加载后的Asset。 可以对同一资产应用任意数量的编辑。 | ||
行 56: | 行 54: | ||
</pre> | </pre> | ||
− | 这分为四种主要操作类型(< | + | 这分为四种主要操作类型(<samp>Load</samp>、<samp>EditData</samp>、<samp>EditImage</samp>、<samp>EditMap</samp>),在 内容修补程序自述文件中的更多详细信息(见下文)。 |
==开始== | ==开始== | ||
===了解Json=== | ===了解Json=== | ||
− | + | 在为 Stardew Valley 创建 mod 时,您会注意到很多文件的名称末尾带有 <samp>.json</samp> 。 这意味着它们被格式化为 JSON ,这只是一种编写代码可读的文本的方式。 如果您以前没有使用过 JSON ,请阅读 ''[https://towardsdatascience.com/an-introduction-to-json-c9acb464f43e An Introduction to JSON]'' 会助于了解文件在做什么。 | |
− | === | + | === 创建示例模块=== |
首先让我们安装并运行我们的基本内容: | 首先让我们安装并运行我们的基本内容: | ||
<ol> | <ol> | ||
<li>安装 [https://smapi.io/ SMAPI] 和 {{nexus mod|1915|Content Patcher}}.</li> | <li>安装 [https://smapi.io/ SMAPI] 和 {{nexus mod|1915|Content Patcher}}.</li> | ||
− | <li>解压游戏的< | + | <li>解压游戏的<samp>Content</samp>文件夹,这样您就可以看到每个资产包含的内容。</li> |
<li>修改或创建SMAPI内容包。</li> | <li>修改或创建SMAPI内容包。</li> | ||
− | <li>使用以下内容在同一文件夹中创建一个 < | + | <li>使用以下内容在同一文件夹中创建一个 <samp>content.json</samp> 文件: |
{{#tag:syntaxhighlight| | {{#tag:syntaxhighlight| | ||
{ | { | ||
行 76: | 行 74: | ||
}|lang=javascript}} | }|lang=javascript}} | ||
</li> | </li> | ||
− | <li> | + | <li> 启动游戏。</li> |
</ol> | </ol> | ||
行 82: | 行 80: | ||
===内容格式=== | ===内容格式=== | ||
− | 您在上面创建的 < | + | 您在上面创建的 <samp>content.json</samp> 文件告诉 Content Patcher 要更改什么。 这有两个主要领域: |
− | * < | + | * <samp>Format</samp>:格式版本。 您应该始终使用最新版本(当前为 1.19.0)来启用最新功能并避免过时行为。 |
− | * < | + | * <samp>Changes</samp>:您要进行的更改。 每个条目称为“补丁”,并描述要执行的特定操作:替换此文件、将此图像复制到文件中等。您可以列出任意数量的补丁。 |
− | 您可以在 < | + | 您可以在 <samp>Changes</samp> 字段中列出任意数量的补丁,每个补丁都由 <code>{</code> 和 <code>}</code> 包围。 有关更多信息,请参阅下一节,但这里有一个快速示例: |
{{#tag:syntaxhighlight| | {{#tag:syntaxhighlight| | ||
{ | { | ||
行 106: | 行 104: | ||
}|lang=javascript}} | }|lang=javascript}} | ||
− | (还有其他字段,如 < | + | (还有其他字段,如 <samp>ConfigSchema</samp> 和 <samp>DynamicTokens</samp> 用于更高级的用法;这些都包含在完整的自述文件中。) |
==下一步== | ==下一步== | ||
行 115: | 行 113: | ||
如需帮助使其做某事,请参阅... | 如需帮助使其做某事,请参阅... | ||
* [https://github.com/Pathoschild/StardewMods/tree/develop/ContentPatcher#readme Content Patcher readme]供完整参考; | * [https://github.com/Pathoschild/StardewMods/tree/develop/ContentPatcher#readme Content Patcher readme]供完整参考; | ||
− | * [https://www.youtube.com/watch?v=uqRTgjWvDYs video intro to Content Patcher] ( | + | * [https://www.youtube.com/watch?v=uqRTgjWvDYs video intro to Content Patcher] ( 非官方); |
− | * [https://docs.google.com/presentation/d/1OBIJSNOwEA2sdBzNbUiVUQni-ajABGFmL-FUanhuLvk intro to converting XNB mods] ( | + | * [https://docs.google.com/presentation/d/1OBIJSNOwEA2sdBzNbUiVUQni-ajABGFmL-FUanhuLvk intro to converting XNB mods] ( 非官方). |
==例子== | ==例子== | ||
行 166: | 行 164: | ||
}} | }} | ||
--> | --> | ||
+ | |||
+ | [[Category:模组]] | ||
[[en:Modding:Content Patcher]] | [[en:Modding:Content Patcher]] |
於 2021年11月4日 (四) 18:57 的最新修訂
← 目錄
想為遊戲創建內容包模組嗎?教程就在這裡。有關如何使用模組,請參閱 模組:使用指南/入門
快速開始
此頁面是對創建 Content Patcher 的內容包的簡要介紹。如果你不需要介紹,請參閱 完整的技術資料
基本概念
什麼是 Content Patcher ?
Content Patcher是一種 SMAPI 模組,可更改遊戲資源(圖像、對話、數據和地圖),而無需替換遊戲文件或編寫代碼。可以通過創建包含幾個 JSON 文件(基本上是文本)的內容包(基本上是文件夾)來使用它。只需編輯 JSON 文件就可以:
- 替換一個圖像文件
- 製作季節性的變化
- 根據天氣、日期、與其他 NPC 的關係等進行更改
- 進行非常具體的更改(例如,在完成Joja超市獻祭之後,在下雪的冬天的周末,咖啡價格會更高)
- 以及更多
資源 Assets
一個 asset 本質上是遊戲中的 Content 文件夾,具有唯一的「資源名稱」。 資產名稱從不包含 Content路徑、語言或文件擴展名(可以使用令牌來定位特定的語言)。例如:
文件 | 資源名稱 |
---|---|
Content/Portraits/Abigail.xnb | Portraits/Abigail |
Content/Maps/spring_beach.xnb Content/Maps/spring_beach.es-ES.xnb Content/Maps/spring_beach.fr-FR.xnb |
Maps/spring_beach |
一個資源可能包含多個子畫面或數據條目。例如:Portraits/Abigail:
因此,如果想更改阿比蓋爾的肖像,則可以使用 Content Patcher 加載或編輯 Portraits/Abigail.
Load 和 Edit
可以通過兩種概念上的方式來更改資源:
- Load|加載 Asset的初始版本。 每個Asset只能同時被一個模組加載。 這主要用於完全替換模組(例如完全改變 NPC 肖像的模組),或提供 Content 文件夾中不存在的文件。
- Edit|編輯 加載後的Asset。 可以對同一資產應用任意數量的編輯。
例如,假設遊戲需要阿比蓋爾的肖像。 這是應用更改的方式:
┌────────────┐ │ 编辑Asset │ ┌────────────┐ ├────────────┤ 获得肖像/阿比盖尔 ──>│ 载入Aeest │───>│编辑Asset │──> 肖像Aeest └────────────┘ ├────────────┤ │ 编辑Asset │ └────────────┘
這分為四種主要操作類型(Load、EditData、EditImage、EditMap),在 內容修補程序自述文件中的更多詳細信息(見下文)。
開始
了解Json
在為 Stardew Valley 創建 mod 時,您會注意到很多文件的名稱末尾帶有 .json。 這意味着它們被格式化為 JSON,這只是一種編寫代碼可讀的文本的方式。 如果您以前沒有使用過 JSON,請閱讀 An Introduction to JSON 會助於了解文件在做什麼。
創建示例模塊
首先讓我們安裝並運行我們的基本內容:
- 安裝 SMAPI 和 Content Patcher.
- 解壓遊戲的Content文件夾,這樣您就可以看到每個資產包含的內容。
- 修改或創建SMAPI內容包。
- 使用以下內容在同一文件夾中創建一個 content.json 文件:
{ "Format": "2.0.0", "Changes": [ ] }
- 啟動遊戲。
如果到目前為止你做的一切都正確,你應該在 SMAPI 控制台的「加載的 X 內容包」下看到新的 mod。 (如果沒有,請查看上述步驟或 尋求幫助。)
內容格式
您在上面創建的 content.json 文件告訴 Content Patcher 要更改什麼。 這有兩個主要領域:
- Format:格式版本。 您應該始終使用最新版本(當前為 1.19.0)來啟用最新功能並避免過時行為。
- Changes:您要進行的更改。 每個條目稱為「補丁」,並描述要執行的特定操作:替換此文件、將此圖像複製到文件中等。您可以列出任意數量的補丁。
您可以在 Changes 字段中列出任意數量的補丁,每個補丁都由 {
和 }
包圍。 有關更多信息,請參閱下一節,但這裡有一個快速示例:
{
"Format": "2.0.0",
"Changes": [
{
"Action": "Load",
"Target": "Animals/Dinosaur",
"FromFile": "assets/dinosaur.png"
},
{
"Action": "EditImage",
"Target": "Maps/springobjects",
"FromFile": "assets/fish-object.png"
},
]
}
(還有其他字段,如 ConfigSchema 和 DynamicTokens 用於更高級的用法;這些都包含在完整的自述文件中。)
下一步
您已經創建了一個內容補丁包!
如需幫助使其做某事,請參閱...
- Content Patcher readme供完整參考;
- video intro to Content Patcher (非官方);
- intro to converting XNB mods (非官方).
例子
(很快就會在這裡提供指導教程。)
改變馬/寵物圖標
對於替換馬和/或寵物(貓和狗)外觀的編輯,您可以將這些添加到您的 content.json 中,以便也替換庫存菜單中的頭像圖標:
馬:
//horse head in inventory
{
"Action": "EditImage",
"Target": "LooseSprites/Cursors",
"FromFile": "yourfile.png",
"FromArea": { insert values here },
"ToArea": { "X": 192, "Y": 192, "Width": 16, "Height": 16 }
}
狗:
//dog head in inventory
"ToArea": { "X": 208, "Y": 208, "Width": 16, "Height": 16 }, //Dog 1
"ToArea": { "X": 224, "Y": 208, "Width": 16, "Height": 16 }, //Dog 2
"ToArea": { "X": 240, "Y": 208, "Width": 16, "Height": 16 }, //Dog 3
貓:
//cat head in inventory
"ToArea": { "X": 160, "Y": 208, "Width": 16, "Height": 16 }, //Cat 1
"ToArea": { "X": 176, "Y": 208, "Width": 16, "Height": 16 }, //Cat 2
"ToArea": { "X": 192, "Y": 208, "Width": 16, "Height": 16 }, //Cat 3