Skip to content

Latest commit

 

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🌍 泰拉瑞亚存档智能跨版转换器 (Terraria Save Converter)

解决《泰拉瑞亚》(Terraria) 国际版(Steam/移动端)与中国版(心动国服)之间存档互通问题的终极工具。

本工具不仅能一键修改存档特征码(Magic Number),更深入解决了因两服方块数量不同导致的小地图(.map)读取错位崩溃问题,并提供全自动的依赖解析与 ZIP 批量流式处理。

✨ 核心特性 (Features)

  • 🔄 双向智能转换:支持 国际服 -> 国服 (无损) 和 国服 -> 国际服 (有损智能截断,防崩溃)。
  • 📦 ZIP 压缩包流式处理:直接以 .zip 文件作为入参,在纯内存中完成解密、重组和重打包,完美保留原存档目录树结构,零磁盘碎片污染。
  • 🕵️‍♂️ 动态引擎解析 (Mono.Cecil):拒绝硬编码!工具会自动在全盘搜索 Terraria.exe,并通过分析其底层 IL 汇编指令,动态提取当前版本的 TileID.CountWallID.Count完美自适应未来游戏更新
  • 🔐 全自动 AES 加解密:自动识别受加密保护的玩家文件 (.plr),并在内存中完成标准的 AES-128-CBC 无填充模式解密与回写。
  • 🔣 启发式 ZIP 编码识别:彻底解决手机端压缩包 (UTF-8) 与 Windows 压缩包 (GBK) 导致的中文路径乱码问题,工具会自动通过 iso-8859-1 探针无损试探并安全回退。
  • 💻 全平台兼容:智能路径嗅探支持 Windows (注册表/物理盘符扫描)、Linux (Steam/Flatpak)、macOS (.app 包内穿透)。

🚀 快速使用 (Usage)

本工具为纯命令行 (CLI) 程序。

基本语法:

TerrariaSaveConverter.exe <文件路径或ZIP压缩包> <目标平台>

参数说明:

  • <文件路径或ZIP包>: 可以是单独的 .wld, .plr, .map 文件,也可以是包含所有存档的 .zip 压缩包。
  • <目标平台>:
    • cn: 转换为中国版(国服)
    • intl: 转换为国际版(Steam/国际移动版)

使用示例:

# 将单个世界文件转换为国际版
TerrariaSaveConverter.exe MyWorld.wld intl

# 将整个存档压缩包转换为中国版
TerrariaSaveConverter.exe Saves.zip cn

转换完成后,工具会在同目录下生成一个带有 _intl_cn 后缀的安全副本,不会覆盖你的原文件

🛠️ 编译与构建 (Build)

本项目基于 .NET 6/8 构建,依赖 Mono.Cecil 进行静态装集分析。

  1. 克隆代码或下载源码。

  2. 在项目根目录执行以下命令安装依赖:

    dotnet add package Mono.Cecil
    dotnet add package System.Text.Encoding.CodePages
    
  3. 编译为独立的可执行文件 (以 Windows x64 为例):

    dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true
    

📖 技术原理解析:为什么我们需要这个工具?

很多玩家发现,仅仅修改存档头部的 Magic Number (cigolergnodnix),虽然能让游戏识别出世界(.wld),但打开小地图(.map)时,会发现方块颜色群魔乱舞,甚至导致游戏闪退

致命的“动态字典偏移”

泰拉瑞亚的 .map 文件为了追求极限压缩(使用 Zlib 配合 RLE),并不保存方块的绝对 ID,而是保存了一份临时映射字典。游戏在读取地图时,会根据当前客户端拥有的方块总数 (TileID.Count) 来重构这个字典。

  • 当国服转国际服时:国服拥有独占方块,导致国服保存的方块总数(如 650)大于国际服(如 625)。国际服在读取这份地图时,字典构建会在 625 时戛然而止。多出来的 25 种方块数据被截断,导致后续排号的墙体(Wall)、液体(Liquid)的 ID 全部集体向前偏移
  • 渲染错乱:国际服遇到原本属于“木墙”的文件 ID 时,去发生偏移的字典里一查,结果查到了岩浆或者背景,导致地图花屏。

我们的解决方案

本工具在处理 .map 文件时,不仅会修改头标,还会深层解压 Zlib 区块数据

  1. 提取原始文件的变体数组。
  2. 逆向演算出新旧字典的偏移映射表。
  3. 遍历几百万个地图像素,剔除国服独占的越界 ID(将其平滑降级为空气 0)。
  4. 重新封包并计算 Adler32 Checksum 写回区块。

这样保证了国际服客户端在读取地图时,字典严丝合缝,彻底消灭花屏和越界闪退。

⚠️ 免责声明 (Disclaimer)

  • 有损转换警告:由于引擎限制,从 中国版 转换到 国际版 的小地图 (.map) 转换是有损的。国服特有的宠物、时装、建筑在小地图上的像素将被擦除为未探索状态。
  • 请务必在操作前备份您的原始存档。本工具按“原样”提供,不对任何意外的数据丢失负责。

Made with ❤️ for the Terraria Community.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages