解决《泰拉瑞亚》(Terraria) 国际版(Steam/移动端)与中国版(心动国服)之间存档互通问题的终极工具。
本工具不仅能一键修改存档特征码(Magic Number),更深入解决了因两服方块数量不同导致的小地图(.map)读取错位崩溃问题,并提供全自动的依赖解析与 ZIP 批量流式处理。
- 🔄 双向智能转换:支持
国际服 -> 国服(无损) 和国服 -> 国际服(有损智能截断,防崩溃)。 - 📦 ZIP 压缩包流式处理:直接以
.zip文件作为入参,在纯内存中完成解密、重组和重打包,完美保留原存档目录树结构,零磁盘碎片污染。 - 🕵️♂️ 动态引擎解析 (Mono.Cecil):拒绝硬编码!工具会自动在全盘搜索
Terraria.exe,并通过分析其底层 IL 汇编指令,动态提取当前版本的TileID.Count和WallID.Count,完美自适应未来游戏更新。 - 🔐 全自动 AES 加解密:自动识别受加密保护的玩家文件 (
.plr),并在内存中完成标准的 AES-128-CBC 无填充模式解密与回写。 - 🔣 启发式 ZIP 编码识别:彻底解决手机端压缩包 (UTF-8) 与 Windows 压缩包 (GBK) 导致的中文路径乱码问题,工具会自动通过
iso-8859-1探针无损试探并安全回退。 - 💻 全平台兼容:智能路径嗅探支持 Windows (注册表/物理盘符扫描)、Linux (Steam/Flatpak)、macOS (.app 包内穿透)。
本工具为纯命令行 (CLI) 程序。
基本语法:
TerrariaSaveConverter.exe <文件路径或ZIP压缩包> <目标平台>
参数说明:
<文件路径或ZIP包>: 可以是单独的.wld,.plr,.map文件,也可以是包含所有存档的.zip压缩包。<目标平台>:cn: 转换为中国版(国服)intl: 转换为国际版(Steam/国际移动版)
使用示例:
# 将单个世界文件转换为国际版
TerrariaSaveConverter.exe MyWorld.wld intl
# 将整个存档压缩包转换为中国版
TerrariaSaveConverter.exe Saves.zip cn
转换完成后,工具会在同目录下生成一个带有 _intl 或 _cn 后缀的安全副本,不会覆盖你的原文件。
本项目基于 .NET 6/8 构建,依赖 Mono.Cecil 进行静态装集分析。
-
克隆代码或下载源码。
-
在项目根目录执行以下命令安装依赖:
dotnet add package Mono.Cecil dotnet add package System.Text.Encoding.CodePages -
编译为独立的可执行文件 (以 Windows x64 为例):
dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true
很多玩家发现,仅仅修改存档头部的 Magic Number (cigoler 或 gnodnix),虽然能让游戏识别出世界(.wld),但打开小地图(.map)时,会发现方块颜色群魔乱舞,甚至导致游戏闪退。
泰拉瑞亚的 .map 文件为了追求极限压缩(使用 Zlib 配合 RLE),并不保存方块的绝对 ID,而是保存了一份临时映射字典。游戏在读取地图时,会根据当前客户端拥有的方块总数 (TileID.Count) 来重构这个字典。
- 当国服转国际服时:国服拥有独占方块,导致国服保存的方块总数(如 650)大于国际服(如 625)。国际服在读取这份地图时,字典构建会在 625 时戛然而止。多出来的 25 种方块数据被截断,导致后续排号的墙体(Wall)、液体(Liquid)的 ID 全部集体向前偏移。
- 渲染错乱:国际服遇到原本属于“木墙”的文件 ID 时,去发生偏移的字典里一查,结果查到了岩浆或者背景,导致地图花屏。
本工具在处理 .map 文件时,不仅会修改头标,还会深层解压 Zlib 区块数据:
- 提取原始文件的变体数组。
- 逆向演算出新旧字典的偏移映射表。
- 遍历几百万个地图像素,剔除国服独占的越界 ID(将其平滑降级为空气
0)。 - 重新封包并计算
Adler32 Checksum写回区块。
这样保证了国际服客户端在读取地图时,字典严丝合缝,彻底消灭花屏和越界闪退。
- 有损转换警告:由于引擎限制,从
中国版转换到国际版的小地图 (.map) 转换是有损的。国服特有的宠物、时装、建筑在小地图上的像素将被擦除为未探索状态。 - 请务必在操作前备份您的原始存档。本工具按“原样”提供,不对任何意外的数据丢失负责。
Made with ❤️ for the Terraria Community.