Fast and simple homebrew save management framework for 3DS and Switch.
Checkpoint 
一款适用于3DS和Switch的快速简洁的自制存档管理框架,采用C++编写。

为何选择Checkpoint?
Checkpoint的设计理念是简洁与高效。用户界面在力求简洁易用的同时,尽可能整合了丰富的功能选项。
此外,Checkpoint极为轻量,却配备了美观的图形用户界面,并采用了最新的可用库进行构建。
Checkpoint无需依赖外部标题列表或过滤器即可运行:标题会被自动检测和筛选,因此用户无需持续维护就能确保其功能完整。
Checkpoint不仅是一款应用,更是一个框架:它对存档所能执行的所有操作,都可通过您自行编写并放置在SD卡上的脚本来实现,让主机能够完成任何官方版本都未曾提供的功能。详见脚本功能。
功能特性
Checkpoint支持为以下内容备份和恢复存档数据:
- 3DS:3DS卡带和数字版游戏(包括试玩版)、扩展数据、DS卡带、DSiWare以及GBA虚拟主机游戏
- Switch:已游玩过的游戏的存档,并会自动加载游戏信息
两个版本均具备以下核心功能:
- 全新设计的用户界面,支持亮色和暗色模式主题
- 设置 section,可直接在主机上配置各项功能:收藏、筛选、额外存档文件夹等,无需手动编辑文件
- 国际化支持:英语、意大利语、法语、德语、葡萄牙语、西班牙语、荷兰语、日语和中文
- 快速响应的文件操作:备份和恢复在工作线程中运行,备份过程中可随时取消
- 额外存档文件夹,可通过内置文件夹浏览器为每个游戏单独配置
- 后台FTP服务器,让您可直接从电脑访问存档备份
- 主机间无线存档传输
- 脚本引擎,附带用于金手指管理和Google Drive存档同步的脚本,并提供编写自定义脚本的API文档
- HTTP日志服务器,可从网络中的任何浏览器实时查看Checkpoint的日志
在Switch平台上,Checkpoint还提供:
- 基于deko3d构建的渲染后端,使应用体积比以往减小约70%
- 支持1080p docked模式,以及720p掌机模式
- 恢复后逐文件验证,更安全地处理大型存档恢复
脚本功能
Checkpoint 运行脚本,这些脚本用 C 语言编写,并在主机上进行解释执行。脚本是 SD 卡上的单个 .c 文件:无需编译器,无需重新构建,无需重新刷写。将其放入正确的文件夹,下次启动应用时,它就会出现在脚本菜单中(3DS 上按 SELECT,Switch 上按 减号键)。
脚本拥有原生 API — #include <checkpoint.h> — 可访问应用本身使用的相同机制:
- 标题(Titles):完整的目录、ID、名称、产品代码、卡带/存档/扩展数据标志、备份文件夹
- 存档数据(Save data):打开标题的存档(或 3DS 扩展数据、主机范围的共享扩展数据),对其中的文件进行读取、写入、删除、列出和提交操作
- SD 卡:目录列表、
mkdir -p、存在性检查,以及常规的 C 文件 I/O - Zip:打包或解包文件夹,使用与无线传输和 chlink 相同的仅存储框架
- 网络(Network):HTTP GET、包含方法、标头和正文的完整请求,以及流式文件上传
- JSON:解析和遍历文档
- 用户界面(UI):消息、确认对话框、单选和多选选择器、键盘和数字小键盘、状态栏以及嵌套进度条,所有这些都由 Checkpoint 本身渲染
- 外加 picoc 的 C 标准库:
stdio、stdlib、string、unistd、ctype、math、time
运行中的脚本会占据屏幕:其输出会流式传输到可滚动的日志窗格,而其对话框和进度条则会显示在另一个屏幕(3DS)或日志上方的卡片(Switch)上。按住 B 键可以中止任何脚本,即使是陷入无限循环的脚本,且无需重启主机。
应用已内置了一些脚本:
- sharkive — 金手指管理器:下载 Sharkive 数据库,允许您为每个标题勾选金手指,并写入 Luma3DS(3DS)或 Atmosphere(Switch)所需的金手指文件
- googledrive — 将您的存档备份到您自己的 Google Drive,支持设备代码登录和每个备份单独压缩 (设置指南)
- webdav — 适用于您已有的任何 WebDAV 服务器(Nextcloud、Synology、
rclone serve webdav等):仅上传不存在的内容,并且可以将备份下载回主机 (设置指南) - playcoins — 设置主机的 Play Coins(3DS)
编写您自己的脚本的完整文档位于 scripts/README.md:包括 API 参考、解释器限制、使用示例以及针对人工和 AI 作者的检查清单。scripts/examples/example.c 是一个可运行的引导示例,每个菜单项对应一个 API 领域。在将脚本复制到 SD 卡之前,请在您的 PC 上使用 tools/scriptlint.sh 对其进行语法检查。
chlink
Checkpoint 附带了 chlink,这是一款适用于电脑的配套命令行应用,可与 Checkpoint 的无线存档传输功能配合使用。通过 chlink,您可以通过本地网络将存档备份从电脑发送到主机,或从主机接收备份到电脑——无需数据线,也无需插拔 SD 卡。
传输受主机上显示的 4 位 PIN 码保护,并且 chlink 会自动识别采用 Checkpoint SD 卡布局的备份,因此标题和备份信息会自动为您填充。
chlink 是一个独立的、无依赖项的可执行文件,支持 Windows、macOS 和 Linux 系统。您可以从 发布页面 下载,或从 tools/chlink 文件夹自行构建。
使用方法
您可以在 3DS 上通过 cfw 和基于 Rosalina 的 Homebrew Launchers 使用 Checkpoint。*Checkpoint 不支持基于 hax 的 Homebrew Launchers。
Switch 版 Checkpoint 运行于 homebrew launcher。请确保您运行的是最新的 payloads。
首次启动所需时间会比平时长,因为需要创建工作目录——此后 Checkpoint 的启动速度会显著加快。
工作路径
Checkpoint 依赖以下文件夹来存储其生成的文件。请注意,所有工作目录都会在首次启动时自动生成(或者当 Checkpoint 发现某个新标题尚未拥有工作目录时)。
3DS
sdmc:/3ds/Checkpoint: 根路径sdmc:/3ds/Checkpoint/config.json: 配置文件sdmc:/3ds/Checkpoint/logs: 日志文件sdmc:/3ds/Checkpoint/saves/<unique id> <game title>: 某款游戏的所有存档备份的根路径sdmc:/3ds/Checkpoint/extdata/<unique id> <game title>: 某款游戏的所有 extdata 备份的根路径sdmc:/3ds/Checkpoint/scripts/universal: 您自己的脚本,适用于所有标题sdmc:/3ds/Checkpoint/scripts/<title id>: 您自己的脚本,仅适用于该标题
Switch
sdmc:/switch/Checkpoint:根路径sdmc:/switch/Checkpoint/config.json:配置文件sdmc:/switch/Checkpoint/logs:日志文件sdmc:/switch/Checkpoint/saves/<title id> <game title>:通用游戏的所有保存备份的根路径sdmc:/switch/Checkpoint/scripts/universal:您自己的脚本,适用于所有游戏sdmc:/switch/Checkpoint/scripts/<title id>:您自己的脚本,仅适用于该游戏
配置
所有以前需要手动编辑配置文件的选项,现在都可以直接在主机的“设置”部分进行管理。config.json 文件仍存储在 Checkpoint 的工作目录中,但您不再需要手动修改它。
故障排除
当出现异常情况或操作失败时,Checkpoint 会显示错误代码。如果您遇到任何问题,请先确认该问题是否已解决,然后报告错误代码以及可重现该问题的操作摘要。
此外,您可以加入 FlagBrew 的 Discord 服务器(下方链接)获得实时支持。
构建
分别编译 3DS 和 Switch 版本的 Checkpoint 需要 devkitARM 和 devkitA64。更多信息请访问 devkitpro.org。按以下方式安装或更新依赖项。
脚本引擎位于子模块中,因此全新克隆时需要执行:
git submodule update --init --recursive
3DS 版本
dkp-pacman -S libctru citro3d citro2d tex3ds 3ds-curl 3ds-mbedtls
Switch 版本
dkp-pacman -S libnx switch-pkg-config deko3d switch-harfbuzz switch-freetype switch-libjpeg-turbo switch-curl switch-mbedtls
在仓库根目录执行 make 3ds 或 make switch 进行构建。
许可证
本项目采用 GNU GPLv3 许可证。GPLv3 的附加条款 7.b 和 7.c 适用于本项目。详情请参见 LICENSE.md。
致谢
- Bernardo 创作了 Checkpoint。
- J-D-K 提供了最初的 JKSM 版本。
- TuxSH 提供了 TWLSaveTool,本项目从中借鉴了 SPI 代码。
- LiquidFenrir 实现了 GBA 虚拟主机的存档支持。
- SNBeast 提供了 DSiWare 存档支持的概念验证。
- edu1010 实现了无线存档传输功能。
- piepie62 以及所有其他 PKSM 贡献者,部分代码已移植到 Checkpoint。
- zsaleeba 是 picoc 的最初贡献者(Checkpoint 的脚本引擎基于此 C 解释器构建),以及所有为 FlagBrew 版本 picoc 做出贡献的人,本项目依赖于此分支。
- WinterMute、fincs 和 devkitPro 贡献者提供了 devkitARM、devkitA64 和 dkp-pacman。
- Yellows8 和所有维护者提供了 switch-examples。
- rakujira 设计了精美的 Checkpoint 标志。
- achinech 帮助调试了著名的 3.8.x 版本崩溃问题。
- 所有测试人员和故障排除人员的帮助。
- 多年来一直支持本项目的广大用户。
没有你们,就没有这个项目。谢谢你们。
Introduction
Fast and simple homebrew save management framework for 3DS and Switch.
Customize your domain