docs: user-facing documentation and signing key
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
<!-- 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.
|
||||
Reference in New Issue
Block a user