Files
runi-dist/docs/ubisoft-connect.md

91 lines
4.4 KiB
Markdown

<!-- Generated from the Runi source repository at v0.4.0. -->
<!-- Edit the original there, not this copy. -->
# Ubisoft Connect integration
## User flow
Use **+ → Ubisoft Connect** for the shortest path, or **Tools → Stores** to
return to the same manager later.
1. Choose **Install Automatically** to download the official Ubisoft Connect
installer and run its silent install into a dedicated managed prefix, or
choose **Import Existing Prefix**. Imported prefixes remain user-owned.
2. Open Ubisoft Connect. The real client UI appears for login and game
installation; Runi neither stores credentials nor copies login tokens.
3. Close the client. Runi scans its local Wine registry, configuration
catalogue and local launcher storage, then shows every detected game for
review. Nothing is imported without that review.
4. Imported titles appear under platform **PC** and store **Ubisoft**. Play
uses the Ubisoft deeplink directly; routine game launches do not require
navigating the store UI.
The integration is launcher-light, not fully headless: authentication, account
security prompts, updates and game installation still belong to Ubisoft
Connect. Once authenticated, a normal game launch only sends the deeplink.
## Shared prefix and runner
One Ubisoft installation owns one dedicated prefix. Every linked Ubisoft game
stores only a `[store_binding]` reference to it. The manager's **Change Runner**
action therefore changes the runtime for all linked games together. Runi
does not mix standalone Windows games into this prefix.
This ownership boundary has deliberate safeguards:
- only one game may be active in the shared prefix at a time;
- deleting a game never deletes the shared prefix;
- the integration cannot be removed while games still reference it;
- per-game `.pfy` export refuses shared store prefixes;
- Doctor reports a missing binding, prefix, launcher or provider mismatch;
- a managed prefix is deleted only through a separate explicit confirmation;
- an imported external prefix is never deleted by Runi.
Removing a linked game from the GUI removes only its Runi registration by
default. An optional **Open Ubisoft Connect to uninstall the game** action sends
`uplay://uninstall/<install-id>` to the launcher in the shared prefix. Ubisoft
Connect remains responsible for the confirmation and file removal; Runi
never deletes the game's directory directly. If that flow cannot be opened,
the registration is kept so the operation can be retried.
## Launch and cloud sync lifecycle
Play resolves the store installation and runs `upc.exe
uplay://launch/<ubisoft-id>/0` through its selected Proton runner. The bootstrap
process is not considered the game. Runi watches the executable names
recorded during discovery and scopes them to the shared prefix when process
environment data is available.
Once a real game process has been seen and then exits, the library shows a
30-second cloud-sync countdown. At the end Runi closes the launch session.
Choose **Keep Open** to leave Ubisoft Connect running and release the game card
immediately. If no game process is ever detected, Runi does not guess that
cloud sync has begun; the user can stop the session explicitly.
After a session closes, local data is scanned in the background. The review
dialog appears only when genuinely new games are found.
Cover discovery asks the Ubisoft Store for the exact master product first and
uses its official vertical `boxshot`. The resolved `ecommerceMasterId` is kept
as `identity.ubisoft_store_product_id`; it identifies the installed store
edition without replacing the canonical Runi game identity. If the store
has no unique exact product, Runi tries an exact SteamGridDB match and then
an exact Steam Store match. The horizontal Ubisoft Connect background is not
used as a cover, and vague title matches are never accepted merely to fill a
card.
## Local identities
Each registration keeps two different identities:
- `game.installation_id`: the UUID for this concrete Runi registration;
- `identity.runi_game_id`: Runi's canonical game identity, reused
across reinstalls and store aliases.
Ubisoft's launch, space and installation IDs are aliases attached to the
canonical identity. Removing and re-adding a title can therefore reconnect to
the same game identity without depending on its old config filename.
The Ubisoft Store product ID is a separate edition-level alias: Standard,
Deluxe and other commercial editions may have different product IDs while
sharing the same canonical game.