“模组:Content Patcher”的版本间的差异

来自Stardew Valley Wiki
跳到导航 跳到搜索
第118行: 第118行:
 
* [https://docs.google.com/presentation/d/1OBIJSNOwEA2sdBzNbUiVUQni-ajABGFmL-FUanhuLvk intro to converting XNB mods] (unofficial).
 
* [https://docs.google.com/presentation/d/1OBIJSNOwEA2sdBzNbUiVUQni-ajABGFmL-FUanhuLvk intro to converting XNB mods] (unofficial).
  
==Examples==
+
== 例子==
(We'll have a guided tutorial here soon.)
+
(很快就会在这里提供指导教程。)
  
===Change horse/pet icons===
+
=== 改变马/ 宠物图标===
For edits to replace the look of horses and/or pets (cats and dogs), you can add these to your content.json in order to also replace the little head icon in the inventory menu:
+
对于替换马和/ 或宠物(猫和狗)外观的编辑,您可以将这些添加到您的 content.json 中,以便也替换库存菜单中的头像图标:
  
For horses:
+
:
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
 
//horse head in inventory
 
//horse head in inventory

2021年8月8日 (日) 06:16的版本

目录

Robin building.png
“我这里还有很多事情需要处理。”
— 罗宾

不完整的翻译

本文或部分尚未完全翻译成中文。 欢迎您通过编辑帮助其建设。
最后编辑ChenNiuniu于2021-08-08 06:16:32.

想为游戏创建内容包模组吗?教程就在这里。有关如何使用模组,请参阅 模组:使用指南/入门

快速开始

此页面是对创建 Content Patcher 的内容包的简要介绍。如果你不需要介绍,请参阅 完整的技术资料

基本概念

什么是 Content Patcher ?

Content Patcher是一种 SMAPI 模组,可更改游戏资源(图像、对话、数据和地图),而无需替换游戏文件或编写代码。可以通过创建包含几个 JSON 文件(基本上是文本)的内容包(基本上是文件夹)来使用它。只需编辑 JSON 文件就可以:

  • 替换一个图像文件
  • 制作季节性的变化
  • 根据天气、日期、与其他 NPC 的关系等进行更改
  • 进行非常具体的更改(例如,在完成乔家超市献祭之后,在下雪的冬天的周末,咖啡价格会更高)
  • 以及更多

资源 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

Modding - creating an XNB mod - example portraits.png

因此,如果想更改阿比盖尔的肖像,则可以使用 Content Patcher 加载或编辑 Portraits/Abigail.

Load 和 Edit

可以通过两种概念上的方式来更改资源:

  • Load|加载 Asset的初始版本。 每个Asset只能同时被一个模组加载。 这主要用于完全替换模组(例如完全改变 NPC 肖像的模组),或提供 Content 文件夹中不存在的文件。
  • Edit|编辑 加载后的Asset。 可以对同一资产应用任意数量的编辑。

例如,假设游戏需要阿比盖尔的肖像。 这是应用更改的方式:

                                           ┌────────────┐
                                           │ 编辑Asset │
                         ┌────────────┐    ├────────────┤
获得肖像/阿比盖尔 ──>│ 载入Aeest  │───>│编辑Asset │──> 肖像Aeest
                         └────────────┘    ├────────────┤
                                           │ 编辑Asset │
                                           └────────────┘

这分为四种主要操作类型(LoadEditDataEditImageEditMap),在 内容修补程序自述文件中的更多详细信息(见下文)。

开始

了解Json

You'll notice a lot of files with .json at the end of the name when creating mods for Stardew Valley. That means they're formatted as JSON, which is just a way of writing text that's readable to code. If you haven't used JSON before, reading An Introduction to JSON first will be very helpful to understand what the files are doing.

Create example mod

首先让我们安装并运行我们的基本内容:

  1. 安装 SMAPIContent Patcher.
  2. 解压游戏的Content文件夹,这样您就可以看到每个资产包含的内容。
  3. 修改或创建SMAPI内容包。
  4. 使用以下内容在同一文件夹中创建一个 content.json 文件:
    {
       "Format": "2.0.0",
       "Changes": [
       ]
    }
    
  5. Launch the game.

如果到目前为止你做的一切都正确,你应该在 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"
      },
   ]
}

(还有其他字段,如 ConfigSchemaDynamicTokens 用于更高级的用法;这些都包含在完整的自述文件中。)

下一步

您已经创建了一个内容补丁包!

如需帮助使其做某事,请参阅...

例子

(很快就会在这里提供指导教程。)

改变马/宠物图标

对于替换马和/或宠物(猫和狗)外观的编辑,您可以将这些添加到您的 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 }
}

For dogs:

//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

For cats:

//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