GameSaverRevived

v1.1.1·Updated 2026-08-19

Auto-saves every card pick so a crash or disconnect doesn't end the run. Bug-fix fork of otDan's GameSaver. Fixes written with AI assistance.

About this mod Author’s original text

GameSaverRevived

Auto-saves every card pick so a crash or disconnect doesn't end the run. Bug-fix fork of otDan's GameSaver. Fixes written with AI assistance.

A bug-fix fork of otDan's GameSaver (MIT).

All of the original design and UI is otDan's work. This fork exists because the save browser

had stopped working: the LOAD and BACK buttons did nothing, players showed up twice, card

counts were wrong, and rounds needed several clicks to select or became unselectable entirely.

AI disclosure: the bug fixes, the offline share-code system and the icon in this fork

were written with AI assistance, reviewed and tested by a human. The original mod's design

and UI are otDan's work. ROUNDS has no "AI Generated" category, so this

note is the disclosure.

Works with RoundsWithFriends

and LobbyImprovements.

What it does

Every time cards are picked, the mod snapshots the whole match: every player's cards, points,

rounds won, colour, and the game mode settings. If the game falls over, someone drops, or the

lobby dies, the host opens a new lobby, hits LOAD, picks the round, and starts the match.

Everyone gets their cards and score back and the run continues.

Saves live in BepInEx/config/Saves. Only the host sees the LOAD button, because only the

host can drive the restore.

Sharing a save

Pick a round, hit EXPORT, and a code is copied to your clipboard. Paste it to a friend;

they hit IMPORT and it appears in their browser. Whoever hosts next can then load it.

The code is the save. Nothing is uploaded, there is no account, no API key and no server that

can expire or disappear, and it works offline. Encoding is deterministic, so the same save always

produces the identical code and two people can compare codes to confirm they are about to load

the same state.

Typical codes run 400 to 1300 characters, which fits in one Discord message. A very large lobby

with long decks can exceed the 2000-character limit, so every export is also written to

BepInEx/config/Saves/_shared/ as a text file you can attach instead. IMPORT reads whatever is

in the text box, or falls back to your clipboard if it is empty.

The original used paste.ee: it uploaded your entire saves folder and returned a

five-character id, with the author's personal API token compiled into the mod. That is why a

short code was possible, and also why it broke.

Installing

Install through r2modman or Mod Manager along with its dependencies.

Remove or disable otDan-GameSaver first. This fork keeps the original plugin GUID on

purpose so it acts as a drop-in replacement, and BepInEx resolves a GUID clash by loading only

the highest version. That means installing both is harmless but pointless, and leaving the old

one enabled while downgrading this one would silently bring the bugs back.

What was fixed

Card resolution no longer takes the whole menu down with it. One unresolvable card used to

throw out of the resolution loop. The half-filled list was then cached forever, which is why

players with 18 cards displayed 5. The same exception escaped through StartCoroutine, which

returns null when an iterator throws on its first step, and that null went into the list

that Close() walks with StopCoroutine - so LOAD and BACK threw a NullReferenceException

before doing anything, for the rest of the session. Cards now resolve one at a time behind a

try/catch, the list is only published once complete, and anything unresolvable shows as???

instead of killing the menu.

The most common trigger was a randomly-generated card from RandomCardsGenerator. Its

GenerateRandomCard(int seed) overload passes a null player and then dereferences it, and

only survives when the seed happens to still be in that process's in-memory cache from the

original match. So the identical save could load fine on one machine and throw on another.

Selecting things works on the first click. Clicking a round used to start a builder

coroutine that hid rows one per frame and, at the same time, an enabler

Install & use Install: BepInEx plugin

  1. The archive from playbuff is the mod itself — usually a BepInEx plugin (a .dll or a plugin folder once unzipped).
  2. Recommended: use a community mod manager (such as r2modman) — pick this game, import the mod, and the manager sets up BepInEx and its dependencies for you.
  3. Manual route: install the BepInEx loader in the game folder, then drop the unzipped .dll or plugin folder into BepInEx/plugins/.
  4. Launch the game — the BepInEx console logs every plugin it loads; seeing this mod in the log means it is installed.

Mods with listed dependencies need those installed too, or they will not load. Options are usually changed in-game or in the plugin's config file.

Dependencies

Install these first, or the mod will not work:

willis81808-MMHookolavim-RoundsWithFriendsPykess-ModdingUtilsBepInEx-BepInExPack_ROUNDSwillis81808-UnboundLib

File & checksum

Filename
GameSaverRevived-1.1.1.zip
File size
603.9 KiB