王国之泪解包教程

这是一篇发布于 607 天前的文章,部分信息可能已发生改变。

最近给王国之泪100%进度通关了,闲来无事就折腾了下王国之泪的拆包,探索一下这个在我心目中最伟大的游戏之一的素材包。经过半个小时的折腾终于大概搞懂了如何拆包并提取素材,这里做一个记录。

叠甲

这里不会对过于基础的内容做详细的说明,如 XCI、NCA、NSP 是什么,github 上不去怎么办,给出的 github 链接如何下载,命令行怎么用等等等等。

解包/拆包

事先准备

需要用到的工具、项目如下,将其全部下载即可。本教程基于原生 Windows 10 x64 环境编写,不保证其他操作系统、架构下的可行性。

  1. https://gbatemp.net/attachments/extrt_v2-1-rar.148595/
  2. https://github.com/julesontheroad/NSC_BUILDER
  3. https://github.com/KillzXGaming/Switch-Toolbox
  4. https://github.com/facebook/zstd
  5. https://github.com/SciresM/hactool
  6. 王国之泪的 XCI 文件,我的 blog 不会提供这个文件,原因如第 7 条所述。
  7. 有效的 prod.keystitle.keys,我的 blog 也不会提供这两个密钥,我不想收到东半球最强法务部的律师函。不过你大概可以在网上找到这两个 key 文件,毕竟 PC 上的 NS 模拟器必须要这些密钥才能启动游戏。

大概上述的所有东西下载并解压后你会得到这样的一堆文件。
示例
这张图片内文件的排列与上面列出的工具列表的序号一一对应,防止以后某个项目改变了它的文件夹名后这篇教程直接boom。

将 XCI 解压为 NCA

  1. prod.keys 复制到 NSCB_101bx64/ztools/ 文件夹内 重命名为 keys.txt
  2. 打开 NSCB_101bx64/NSCB.exe
  3. 输入 6 回车。
  4. 将 XCI 文件直接拖入打开的窗口中并回车。
  5. 输入 1 回车。
  6. 继续输入 1 回车。
    不出意外的话,你应该可以看到这样的进度条。
    示例
    待进度条走完并出现 *********** ALL FILES WERE PROCESSED! ************* 时就可以关闭这个蓝框框了,而解压下来的 NCA 文件则保存在 NSCB_101bx64/NSCB_extracted/ 下。

NCA 解包

  1. hactools.exe 复制到 EXTRT_v2.1
  2. prod.keys 复制到 EXTRT_v2.1/ 文件夹内 重命名为 keys.txt
  3. 将上面提取出的 最大体积 的 NCA 文件拖到 EXTRT_v2.1 文件夹中的 BAT 脚本上。举个例子:
    示例

接下来就是漫长的等待,程序会在完成后自动退出。等待的时间与你的磁盘性能、CPU 性能(单核性能)有关。解包完成后的文件则在 EXTRT_v2.1/EXTRTD_OUTPUT/program/ 目录下。

读取解包文件

  1. 打开 Toolbox-Letest/Toolbox.exe (后续会简称为 Toolbox)
  2. 依次选择 Tools > Compression > ZSTD > Decompress 并在弹出的文件选择窗口中选中 EXTRT_v2.1/EXTRTD_OUTPUT/program/romfs/Pack/ZsDic.pack.zs
  3. 展开左侧收缩框,依次将这三个文件导出到 Toolbox-Letest/Lib/ZstdDictionaries/ 文件夹内。如下图:
    示例
  4. 关闭并重新打开 Toolbox。
  5. 点击 File > Open (Folder) 在弹出的窗口选中你刚解包的数据的目录。

解包后的文件夹结构

解包后大概会有 30w+ 的文件以及目录深度可能超过 7 级,为了更快速的找到我需要的东西,这里记录下目录结构。

模型、动作、光影法线贴图等

均在 /Model 中,基本都是 .mc .bfres 文件。

纹理

全部都在 /TexToGo 目录下,以 .txtg 格式存在。

背包内物品的缩略图

均在 /UI/Tex/Icon,以 .bntx 格式存在。

原始的图鉴照片

均在 /UI/Tex/PictureBook,以 .bntx 格式存在。

地图

均在 /UI/Map,以 .bntx 格式存在。

音频

均在 /Sound/Resource/Stream,以 .bwav 格式存在。

过场动画

均在 /Event/Movie。以 .webm 格式存在,平均码率 4000kb/s。


不同后缀的文件的作用

.ainb

控制 AI 逻辑的文件。(猜测)

.asb

不详。

.baatarc

不详。

.baev

不详。

.bagst

不详。

.bars

大概是一种打包音频文件的格式。你可以使用这个 软件 来编辑它。

.bcul

不详。

.beco

类似于调整 LOD 的文件,用于暂停摄像机看不到的区域的渲染。更多信息

.belnk

不详

.bfarc

不详

.bfevfl

事件流?不是很懂(,建议直接看 wiki

.bfres

BFRES v10,用来保存模型的数据。

.bfsha

不详。

.bgyml

类似于 yaml 格式的文件,bgyml 文件存储了一些配置,可以用 这个工具 打开,当然,ToolBox 也是可以的。

.bhtmp

可能是 heatmap?(纯猜测)。

不详。

.bkres

不详。

.blarc

不详。

.blwp

不详。

.bnsh

不详

.bntx

类似于一种图片格式,用于保存静态的图片素材。

.bphnm

不详。

.bphsc

不详。

.bphsh

不详。

.bslnk

不详。

.bstar

不详。

.bwav

音频格式,可以用 foobar2000 配合 vgmStream 插件播放、转码。更多详细的信息可以看 这里

但是使用 foobar2000+vgmStream 转码后的文件体积貌似会特别大,可能是 vgmStream 插件的 bug。

.byml

类似于 .bgyml

.cai

不详。

.chunk

不详。

.crbin

不详。

.cutinfo

不详。

.dpi

不详。

.genvb

不详

.jpg

.mc

MeshCodec,用来打包模型中的骨骼、动作、法线贴图、阴影贴图等数据。

.pack

打包文件。

.png

.quad

不详

.rsizetable

ResourceSizeTable,用来存储资源大小的文件。

.sarc

类似 .pack

.ta

不详

.txt

.txtg

TexToGo,一种贴图纹理格式。如这个 gist 所示,.txtg 文件的格式长这样。

OffsetNameLengthExpected ValueNotes
x00Magic8 Bytesx50 x00 x11 x00 x36 x50 x4b x30The last four bytes always contain 6PK0
x08Width2 BytesVariableMost likely width based upon similarly named sprite sizes
x0AHeight2 BytesVariableMost likely height based upon similarly named sprite sizes
x0cUnknown1 ByteIf the preceding entries are width and height, this may refer to ‘Z’ as a dimension, such as with 3d textures
x0ETotal Files1 ByteVariableThe number of file entries, starting from 0x50
x50Decompressed File Checksums8 Bytes * x0EVariableEach int contains the decompressed file size
(x50 + (8 bytes * x0E))Compressed File Checksums8 Bytes * x0E * 2VariableAfter reading each int, the next int is a control value of unknown purpose, which is commonly equal to 6
Follows Compressed File ChecksumsZSTD Stream Start4 Bytesx28 xb5 x2f xfdZSTD magic header. The number of ZSTD headers found in the file should be equal to the value of x0E

Notes

  • The format appears to be a forked version of the 6pack format, except using ZSTD to compress entries instead of fastlz
  • Files are Little-Endian (LE) UTF8.
  • 0x54 appears to indicate that the largest block size is 65536
  • Block sizes were observed to run from the largest possible, decreasing by half until the end of the file
  • Decompressed data resembles the ASTC image format, but attempts to take the decoded data and create ASTC files have not been successful

.vsts

不详。

.wbr

不详。

.webm

.zs

Zstandard,类似 zip 7z rar,一种压缩数据的格式。更多信息
大部分文件都带了这个后缀,所以需要先解压才能看到里面的内容。但幸好我们已经修改了 ToolBox 的文件,ToolBox 将会替我们完成解压~