Carry Flash saves between Ruffle and the original Flash Player #8

Merged
branderson merged 3 commits from flash-save-sync into main 2026-10-14 17:26:20 -07:00
3 Commits
Author SHA1 Message Date
branderson 28d590ddd2 fix(saves): treat a wrapper's [[DYNAMIC]] save path as the same save
A SWF a wrapper loads from memory saves under [[DYNAMIC]]/<n>, and
MochiAds does that in Ruffle but not in the standalone Flash Player, so
Bloons kept its progress at different paths in each. Saves differing
only by that step are now one save: the stream starts with Ruffle's
copy (the dynamic one when both exist) at every path it has for it, and
only saves the stream changed are copied back, to every Ruffle key for
them.
2026-10-14 17:04:50 -07:00
branderson a236d7a1b0 fix(saves): keep Ruffle's copy of a Flash save current in both directions
The stream starts with Ruffle's copy of each save, but Ruffle starts
first, and a game with progress only in the stream would write a fresh
save there that then replaced it. Before Ruffle starts a game it now
gets the stream's saves it doesn't have yet. This replaces the
first-switch rule, which kept a stale stream save over Ruffle progress.
Moving the Flash content type above GamePlayer's early return also
fixes a conditional hook.
2026-10-14 16:45:47 -07:00
branderson 3d93ef7304 feat(saves): carry Flash saves between Ruffle and the original Flash Player
Ruffle keeps SharedObjects in localStorage and the streamed Flash Player
as .sol files, in the same format under different names. Starting the
stream now adds the game's Ruffle saves, translated to Flash Player's
paths, and stream save updates are copied back into Ruffle's storage.
Root-path saves carry over only when this game made them. A game's
first switch keeps the stream's copy of a save both sides already had.
2026-10-14 16:14:59 -07:00