Commit Graph
14 Commits
Author SHA1 Message Date
nxroot f0bc4c92c1 Merge remote-tracking branch 'origin/main' into uninstall-pack-dependencies
# Conflicts:
#	Launcher/mod_manager.cpp
2026-10-25 01:34:52 +01:00
nxrootandClaude Opus 5.5 52e32c5e52 Mod manager: review fixes for uninstalling what a pack brought in
- Forgetting uninstalled packs' records cannot close the launcher: a
  brought-in.json that cannot be rewritten (a locked or read-only Mods
  folder) is logged as a warning; the mods are gone already.
- A dependency the player had before is matched ignoring case, as Windows
  matches folders: one installed under another spelling counts as installed
  (it is not downloaded again or renamed) and is never recorded as brought in.
- UNINSTALL waits while an install runs, so the two never rewrite
  brought-in.json at once.
- A mod pack installs from GET MODS: a package with nothing to load of its
  own is taken when its manifest.json lists dependencies, as the install
  options already said; it was refused, so no pack ever got a record.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 01:33:20 +01:00
AyeZeeBB 7fa407ac36 Launcher: GET MODS installs plugin mods and mod packs instead of refusing them
A Thunderstore install was refused unless the package held layout.toc, reskate-levels.json or a
parks folder, so a package with only a plugin, or a pack whose manifest only lists dependencies,
could not be installed from GET MODS. reskate-plugin.json now counts as content (and finds the mod
inside a package like the other markers), and a manifest with dependencies is a mod pack, as
InstallOptions::require_content always said.
2026-10-23 16:35:42 -05:00
nxroot 14eef02a91 Merge remote-tracking branch 'origin/main' into uninstall-pack-dependencies
# Conflicts:
#	Launcher/Test/mod_manager_tests.cpp
#	Launcher/mod_manager.cpp
#	Launcher/mod_manager.h
2026-10-23 18:21:43 +01:00
AyeZeeBB 35824f4d1c Launcher: categories shown only or hidden in GET MODS and MY MODS, and the game's shader cache emptied when the mods change
- The category menu on GET MODS, and a new one on MY MODS, take each category as shown only, hidden or
  either (a click goes round them), with how many mods are in each; each page's choice is kept in the
  launcher's settings. On MY MODS a mod Thunderstore does not list, or lists in no category, is under
  "No category".
- Before a launch whose mods give the game other data than the last launch's (the mods with a layout,
  their files and load order, and the variants in play), the game's own shader cache
  (%LOCALAPPDATA%\ReSkate\Game\Skate\cache) is emptied: shaders kept from earlier mods were found to
  break the picture after many changes. The shader_cache folder the game ships with is left alone.
2026-10-22 19:05:51 -05:00
nxrootandClaude Opus 5.5 22325c246a Mod manager: offer only the mods a pack's install brought in
A Thunderstore install now notes, per package asked for, the dependencies it
downloaded that were not installed before (Mods/brought-in.json), and the
uninstall offers only those, so a mod the player had already is never offered
(nor one the install only updated). A pack installed before this has no
record, so its uninstall offers nothing. Dependency names longer than a mod
folder's are matched to the cut folder thunderstore::folder_for installs.

The confirmation's checkbox reads "Uninstall N modpack dependencies?", with
its label spaced like the settings page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 14:15:50 +01:00
nxrootandClaude Opus 5.5 02e8ced717 Mod manager: offer to uninstall what a mod pack brought in
Installing a mod pack installs its dependencies, but uninstalling it left
them all behind. The uninstall confirmation now lists the mods the chosen
ones list as dependencies (and theirs in turn) that no mod staying
installed still lists, with "Also uninstall the N mods it brought in,
which nothing else needs" ticked. A dependency another mod needs is never
offered; unticked, only the chosen mods go, as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 12:30:05 +01:00
AyeZeeBBandJean-Luc T. f6f1052237 Mods: a link inside a mod folder refuses its install instead of writing outside Mods
Reported in #265 by Kayyo321; first fixed in #267 by Jean-LucTch, whose
approach this keeps to the folder being installed.

"Install folder" named each file with fs::relative, which follows links:
a file link inside the folder to a file outside it came out as
../../<file>, and the copy wrote over that file (ReSkate.dll among what
it could reach).

- Files are named by where they sit in the chosen folder
  (lexically_relative), never by where a link leads, and go through
  safe_entry like a zip's entries.
- A symbolic link, junction or mount point inside the folder refuses the
  install, saying which. Links on the way to the folder or to the Mods
  folder (a library moved to another drive) stay fine, as do cloud
  placeholders such as OneDrive's, which name nothing else: #267 refused
  any reparse point on those paths, so a game reached through a junction
  could install nothing.
- Tests: a junction inside a mod folder is refused and the file it leads
  to is untouched, with no staging left behind (this fails without the
  fix); a Mods folder and a picked folder reached through junctions still
  install; a file symbolic link is refused (skipped without Developer
  Mode, which creating one needs).

Co-authored-by: Jean-Luc T. <88255067+Jean-LucTch@users.noreply.github.com>
2026-10-16 20:16:33 -05:00
AyeZeeBB 181e02454b Mods: an update deletes the copy it replaces instead of recycling it
Every update, and every install over an installed mod, sent the old
folder to the Recycle Bin, which filled up with old versions.

- commit() moves the installed copy aside into the staging folder, moves
  the new one in, then deletes the old for good. A new copy that cannot
  go in puts the old one back; a copy with a file in use is not replaced
  and stays whole.
- Uninstalling still goes to the Recycle Bin. The Replace dialog says the
  installed copy is deleted.
2026-10-16 20:01:41 -05:00
AyeZeeBB a2d6daffbc Official mods: Board Break and Road Rash downloaded from Thunderstore and kept at their latest, with an Official tab
The launcher reads the official list from the ReSkate backend (or the last one it read, or its own)
and keeps each mod in Mods/.reskate-official at its latest version; a copy the player installed is
moved in, the deprecated Board Break retired. The game loads them always on and leaves out Mods
folder copies; the browser no longer lists them. The built-in zips are gone (FPV drone too), and
built-in folders no longer carried are removed.
2026-10-16 18:59:41 -05:00
AyeZeeBB 43b998f285 Built-in content: Board Break and Road Rash, replacing their Thunderstore mods, packed with zstd
Fourth Studio's Board Break pack (ten decks and every sound) and Road Rash wounds are built into
ReSkate.dll beside the FPV drone, unpacked under Mods/.reskate-builtin and always on.

- The Thunderstore copies (Fourth_Studio-Board_Break_Pack, Fourth_Studio-Road_Rash and the
  deprecated Fourth_Studio-Board_Break, or the same put in by hand) are moved to the Recycle Bin
  as the launcher starts and dropped from mods.json; the merge leaves them out should one still
  be there, and the Thunderstore browser no longer lists, updates or installs them, a dependency
  on one included.
- Board Break's deck list, sounds and deck settings look in the built-in packs too.
- Names with spaces inside them (Board Break's "Body Impact 1.wav") unpack.
- The build makes each zip in assets/builtin into one zstd stream (ReSkateBuiltinPacker,
  Engine/Vfs/builtin_pack_format.h), which the DLL carries: repeated files across a pack cost next
  to nothing. Board Break 15.0 -> 5.4 MB, the drone 6.0 -> 5.4 MB, Road Rash 36.1 -> 34.2 MB;
  ReSkate.dll 86 -> 70 MB. Plain zips still unpack.
- Tests: the mods taken for built-in ones and their retirement, and a pack unpacking to exactly
  its files, refusing one that leaves its folder or is cut short (RESKATE_BUILTIN_PACKS also
  unpacks the packs a build made).
2026-10-16 18:38:46 -05:00
copilot-swe-agent[bot]andJean-LucTch 8eddcab142 Coordinate custom-map downloads with the multiplayer deadline
Co-authored-by: Jean-LucTch <88255067+Jean-LucTch@users.noreply.github.com>
2026-10-13 11:11:27 +00:00
Bortlesboat c9a7dfce38 Preserve nested mod metadata without package replacements
Only replace a nested metadata file when the package supplies a matching
top-level file. Cover ZIP and folder installs with partial metadata and
case-insensitive package overrides.
2026-10-03 00:31:05 -04:00
AyeZeeBB ca1d82f636 1.0.0 Release! 2026-10-02 14:40:41 -05:00