feat(saves): import and export Hookshot saves; a cleaner saves script and guide #20
No reviewers
Labels
No labels
accessibility
autorelease: pending
autorelease: tagged
bug
dependencies
documentation
duplicate
enhancement
github_actions
good first issue
help wanted
invalid
needs measurements
question
testing wanted
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Longshot!20
Loading…
Reference in a new issue
No description provided.
Delete branch "HumanBean/Longshot:saves-hookshot"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Why
Since the rename,
scripts/oot_saves.pylooks only in Longshot's folders, so a Hookshot player can't bring their save over to Longshot (or take it back). This adds Hookshot as a source and a target, and cleans up the script and its guide.What changed
import hookshot/export hookshot. Hookshot's saves are found in$XDG_DATA_HOME/hookshoton Linux (Hookshot'shost/hos_main.cbeforee2a4d453). On Windows they are in%USERPROFILE%\Games\Hookshotand the version folders under it (the 2.x builders' default game folder, and the folders the LongshotLauncher importer searches).--hookshot DIRor--from/--topoint elsewhere.hookshotcounts in the running-game check.host/nn_fs.candhost/nn_applet.c. It is the same one user id (5a3c9e1f0b7d24680000000000000001, fromuser_uid), the samesave/<id>layout, and the same files (account.sav,option.sav,slot_NN/progress.sav,caption.sav). Neither project writes journal or.tmpfiles:nn::fs::Commitis a no-op and the game writes the files directly. So the files are copied byte for byte.Core/HookshotSaves.cs), without depending on it. It uses the same folders, and the same checks before a Hookshot import: only save files, no link, no empty file and none over 4 MB, at least one slot, and aprogress.savin each. Like the launcher, a copy into Longshot or Hookshot that has no save yet createssave/<user id>instead of failing; on Windows the game folder has to exist. Like the launcher, it also checks both sides for a pending NX2navi save.to-lichii,to-longshotand the hidden--lichii;%USERPROFILE%\Games\Longshotinstead of requiring--longshot;slot_NN;refuse_linksis one loop;docs/saves.mdis rewritten as a player guide. It covers where Longshot's saves are, the script, importing from Hookshot, the emulators, copying by hand and a troubleshooting table, and links to the launcher's saves guide. That page lands with the launcher (LongshotLauncher PR #1), so the link 404s until then. "What was tested" keeps its facts and names Hookshot where the old text had been renamed to Longshot.tests/test_oot_saves.pygrows from 35 to 47 tests:--hookshot/--from;USER_IDchecked againsthost/nn_applet.candhost/nn_fs.c;Measurements
Before: main @
d3bd2805After: saves-hookshot @
1928fbabHardware: Linux (CachyOS), no game run
Scene: none (a script on made-up saves in temporary folders)
Method:
python -I -B tests/test_oot_saves.pyandLONGSHOT_VULKAN_HEADERS=/usr/include python -I -B tests/run_all.py, once eachimport hookshotunknown emulator hookshotNot tested
WINDOWSpatched.Screenshots
Nothing on screen.
Issues
See LongshotLauncher PR #1 (the launcher's Hookshot importer, kept consistent with this).
Checklist
For everyone
type(scope): description).main.python -I -B tests/run_all.pyrun and passing (any failure that also fails onmainis named above).third_party/untouched (a new folder with aPROVENANCE.mdinstead).Assisted-by:/Co-Authored-By:trailers. (Made with an AI agent; no trailers, by the maintainer's rule for this account.)If applicable
docs/tested-configurations.mdfor each measured run.MKWVK_API_VERSIONbumped (gpu/vk/vk_api.h'sMkwVkHostorMkwVkRendererchanged).mainand passing here.tests/that reads changed source updated in this PR, not weakened.HumanBean referenced this pull request2026-11-13 00:12:55 +00:00