模组:编辑 XNB 文件
←目录
本页描述了如何编辑游戏文件以更改游戏中的数据、图像和地图。
介绍
什么是 XNB 文件?
游戏将数据、地图和纹理存储在 .xnb 这种压缩数据文件中,它们在游戏的 Content 文件夹中。
例如,对话期间显示的阿比盖尔的头像来自这个文件: Content\Portraits\Abigail.xnb。解包这个文件,你会得到 Abigail.png 这个图片文件,内容如下:
(如果你使用 xnbcli 来解包,你通常会得到 Abigail.json 文件。 那只是用来打包回 .xnb 所需的文件,通常不需要更改它。)
如何将更改应用到游戏中?
有3个方法可以使你的修改应用到游戏中:
- 创建一个Content Patcher内容包(也见:nexusmods.com上的Content Patcher)。这不需要编程,仅编辑 JSON 文件就可以更改游戏的 XNB 数据,也无需替换实际的游戏文件。
- 制作一个 SMAPI 模组 并使用 内容 API。不过,这需要编程。
- 通过替换原始游戏文件来创建 XNB 模组。不再建议使用,本页面没有讲解; 访问 使用 XNB 模组 获取更多信息。
在哪里可以得到帮助?
欢迎前往星露谷物语模组社区寻求帮助。
解包游戏文件
你无法编辑 .xnb 文件其本身,你需要编辑其中的文件。
将文件从中取出叫做 解包;
把文件放入其中叫做 打包。
有两个主要的 XNB 解包工具可用:
StardewXnbHack
StardewXnbHack 是用于解包 XNB 文件的开源且跨平台的工具。
它不能打包回 .xnb ,不过你也只在创建内容包时才需要打包回去。
如何操作:
- 安装 SMAPI
- 下载 StardewXnbHack(确保你下载的文件适用于你的系统,例如在Windows平台需要下载: StardewXnbHack-*-for-windows.zip 而不是 source code!)
- 解压缩并放进 你的游戏文件夹, 也就是让 StardewXnbHack.exe 文件位于与
StardewValley.exe
相同的目录下. - 双击运行 StardewXnbHack.exe (Windows)、StardewXnbHack.sh (Linux)、 StardewXnbHack.command (MacOS) 来解包游戏文件夹中 Content 文件夹下的所有 XNB 文件。
就是这样!它将会把解包的内容放入游戏文件夹下的 Content (unpacked) 文件夹。解包出的文件可用于创建 Content Patcher 的内容包。
xnbcli
xnbcli 是用于打包和解包 XNB 文件的开源且跨平台的工具。它无法解包带有数据模型的 XNB 文件 (例如 Data\FishPondData 或者 Data\Movies),并且需要手动编辑数据文件才能与 Content Patcher 等模组一起使用。
如何操作:
- 下载 xnbcli。 (确保你下载的文件适用于你的系统,例如在Windows平台需要下载:xnbcli-windows-x64.zip 而不是 source code!)
- 解压缩下载的文件:
- 找到你要解包的文件。
- 将它放进 xnbcli 的 packed 文件夹。
- 双击 unpack.bat (Windows)、unpack.sh (Linux)、unpack.command (Mac)。
- 检查 Unpacked 文件夹,解包后的文件在该文件夹中 (如果你没有一次性解包很多文件,它可能会在屏幕上闪烁并瞬间消失,这很正常!无论如何,请注意检查 Unpacked 文件夹。注意 1.4 引入了 xnbcli 无法处理的新数据模型格式;对于某些数据文件,你需要使用 StardewXnbHack 才行。)
- 编辑解压缩的文件(请参见下文)。
- 如果这是一个数据文件(而不是图像或地图),要替换或编辑该文件,则需要删除 XNB 元数据。当前的 JSON 文件内容应如下所示:
{ "header": { "target": "w", "formatVersion": 5, "hidef": true, "compressed": true }, "readers": [ { "type": "Microsoft.Xna.Framework.Content.DictionaryReader`2[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]", "version": 0 }, { "type": "Microsoft.Xna.Framework.Content.Int32Reader", "version": 0 }, { "type": "Microsoft.Xna.Framework.Content.StringReader", "version": 0 } ], "content": { "0": "Weeds/0/-1/Basic/Weeds/A bunch of obnoxious weeds." } }
只需删除 除了内容字段(content)以外的所有内容,就像这样:
{ "0": "Weeds/0/-1/Basic/Weeds/A bunch of obnoxious weeds." }
故障排除:
- 如果您在 Linux 或者 Mac 上遇到权限问题:
- 打开一个终端(在 MacOS 中,在 Spotlight 中搜索“终端”或者英文“Terminal”)
- 输入
chmod +x
, 并以一个空格结束输入,现在不要按 Enter 键。 - 拖拽 unpack.sh (Linux) 或 unpack.command (Mac) 到终端窗口上以输入文件路径。
- 按 Enter 键。如果操作正确,终端将不会显示任何消息,权限问题应该解决了。
- 重新尝试运行 pack.sh (Linux) 或 pack.command (Mac).
- 如果在 Windows 上遇到无法识别的命令,请执行以下操作:
- 确保你没有误下载 源代码zip!
打包游戏文件
你不需要打包游戏文件,如果你正在使用 Content Patcher 的话。
使用 .json, .png, 或者 .tbin 文件连接到你的 content.json.
如果你确实想打包,则需要使用 xnbcli:
- 找到你要重新打包的文件。
- 复制到 xnbcli 的 unpacked 文件夹。
- 双击 pack.bat (Windows)、pack.sh (Linux)、pack.command (Mac)。
- 移动打包后的 .xnb 文件至原来的位置。
进行修改
数据
每个 XNB 都有自己的格式。请参阅模组:目录#高阶主题中的文档。
图像
一些定义:
- spritesheet 指的是包含小图像的 PNG 文件(小图像通常排列成规则的网格形式)。每一块小图像都称为一个 sprite。例如,在Content\Maps\spring_objects.xnb中,每个游戏内物品都有一个 sprite。
- tilesheet 是 Spritesheet 的同义词,用于地图图块。在tilesheet中,每个方格称为“图块(tile)”,大小为 16×16 像素。
- portrait 是Content\Characters\*.xnb的spritesheets中的sprite。
Spritesheets 易于编辑:
- 解包你想要更改的文件。
- 用图像编辑器(例如Windows平台上的 Paint.NET,或是适用于Windows/Linux/Mac平台的 GIMP)打开已解包的 .png文件。注意,使用支持透明通道(即ARGB 中的 A:alpha 通道)的图像编辑器(例如 Photoshop)非常重要,因此不推荐使用Windows自带的画图。
- 直接对图像进行更改。
- 重新打包文件 然后复制到原位置。
就是这样!然后你就可以打开游戏以看看你做出的修改了!