Sudachi存档数据修改指南:五步定位游戏SaveData并安全编辑
【免费下载链接】sudachiSudachi is a Nintendo Switch emulator for Android, Linux, macOS and Windows, written in C++项目地址: https://gitcode.com/GitHub_Trending/suda/sudachi
这篇文章带你基于 Sudachi(跨平台 Nintendo Switch 模拟器)的真实存档实现,快速找到游戏存档存放在哪里、如何备份、再动手修改——没读过源码也能跟着做完。
存档打不开,先从哪查起
游戏存档突然损坏,你想手动还原或修补几个字节,可翻遍配置目录只看到一堆 16 位十六进制命名的文件夹,找不到任何眼熟的文件。这篇文章解决一个问题:怎么根据 Sudachi 的存档体系,精准定位某个账号下某款游戏的存档目录,并在不弄坏存档的前提下安全读写。
原理速览:存档藏在"虚拟NAND"的哪一层
大白话说:Sudachi 在电脑上模拟了一块 Switch 的 NAND 文件系统,存档不是单个文件而是一个目录,目录名由"用户ID + 游戏ID"按固定公式算出来。核心逻辑在 savedata_factory.cpp 的GetFullPath方法:用户账号存档(Account 类型,即按账号隔离的存档)路径固定为/user/save/0/<user_id>/<title_id>,其中user_id是 128 位标识、显示为 32 个十六进制字符,title_id是游戏标识的 16 位大写十六进制。
// 打开存档时优先查新位置,查不到才走旧路径 if (future_dir != nullptr) { return future_path; // 新位置存在就直接用它 }系统实际维护着两套位置:旧格式save/0/<user_id>/<title_id>,新格式save/account/<user_id-uuid>/<title_id>。打开时先探测新位置,存在就用(见源码第 116–125 行)。所以找存档时两个位置都得看,别只认旧格式。
分步实操:从用户ID到具体存档
第一步:确认你要操作的账号 user_id。每个游戏账号对应一个 128 位user_id,先拿到它,后面所有路径都靠它算出来。
第二步:按公式生成两个候选路径。旧格式的计算逻辑只有短短一行:
// 旧格式:save/0/<user_id>/<title_id>,全部大写十六进制 return fmt::format("/user/save/{:016X}/{:016X}{:016X}", 0, user_id[1], user_id[0]);新格式则替换成/user/save/account/<uuid>/<title_id>。先查旧路径、再查新路径,哪边存在哪边就是目标存档目录。
第三步:修改前先整目录备份。存档目录里有个.sudachi_save_size文件(注意开头的点,属于隐藏文件),共 16 字节,前后各 8 字节记录主数据与日志区大小。动手前把整个目录复制一份,出错了才有得救。
第四步:用十六进制编辑器改数据,同步更新尺寸记录。改完如果数据体积变了,要把.sudachi_save_size里的数值一起改,否则模拟器只会按旧尺寸读取,改动等于白做。
第五步:进游戏跑一遍,确认能正常读取。模拟器每次启动都会清空temp临时目录(见第 56–62 行),临时区里的东西别当作长期数据存放。
踩坑与自检:这几点最容易让存档"变空"
- 尺寸文件名别记错。它叫
.sudachi_save_size而不是save_size.dat,定义在 savedata_factory.h;文件缺失或不足 16 字节时,模拟器会把存档尺寸直接当作 0 处理。 - 路径格式不要只写死一套。新旧格式共存,新格式的目录名里用户ID还带连字符(UUID 风格),只查一边就可能漏掉存档。
- 系统级存档别乱碰。Account 与 Device 两类存档在打开时会自动创建,但 System(系统级)存档涉及整台虚拟系统,改错影响面大,⚠️ 非必要不修改。
- 修改前自检清单:① 目录名是否为 32 位 + 16 位十六进制结构;② 备份是否已完成;③ 尺寸文件是否恰好 16 字节;④ 改完后是否进游戏验证过一次。
想写个小工具批量算路径的话,直接参考静态方法GetUserGameSaveDataRoot(user_id, future)的实现(见第 147–154 行),几行代码就能复刻新旧两种根目录。
下一步可以做什么
路径逻辑拿到手后,顺手就能套上界面:用 Qt(模拟器自身所用的界面框架)搭一个目录浏览器加十六进制编辑器,再补上批量备份与模板迁移。再往后,可以结合模拟器的 network 模块 给存档加同步能力。实施优先级建议:先写路径计算和备份这两个可独立验证的功能,再接编辑器界面,最后做批量与同步——这样即使后两期没做完,前面也已经是一套能用的工具了。
【免费下载链接】sudachiSudachi is a Nintendo Switch emulator for Android, Linux, macOS and Windows, written in C++项目地址: https://gitcode.com/GitHub_Trending/suda/sudachi
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考