Checkpoint:基于 C++ 的 3DS 和 Switch 游戏存档管理工具

Fast and simple homebrew save management framework for 3DS and Switch.

Branch5Tags30
This repository is empty

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 标准库:stdiostdlibstringunistdctypemathtime

运行中的脚本会占据屏幕:其输出会流式传输到可滚动的日志窗格,而其对话框和进度条则会显示在另一个屏幕(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 对其进行语法检查。

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 3dsmake 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。
  • zsaleebapicoc 的最初贡献者(Checkpoint 的脚本引擎基于此 C 解释器构建),以及所有为 FlagBrew 版本 picoc 做出贡献的人,本项目依赖于此分支。
  • WinterMute、fincs 和 devkitPro 贡献者提供了 devkitARM、devkitA64 和 dkp-pacman
  • Yellows8 和所有维护者提供了 switch-examples
  • rakujira 设计了精美的 Checkpoint 标志。
  • achinech 帮助调试了著名的 3.8.x 版本崩溃问题。
  • 所有测试人员和故障排除人员的帮助。
  • 多年来一直支持本项目的广大用户。

没有你们,就没有这个项目。谢谢你们。

Discord

Introduction

Fast and simple homebrew save management framework for 3DS and Switch.

Customize your domain
1293.08 K169Visit GitHub