
Share game rules and state, adapt the controls
A player may start on a headset, lose the connection and return on a phone. The challenge is keeping one account state across clients without duplicating a request or losing settlement, not copying button positions. Share rules and server state, then adapt each device's layout and inputs.
Define the shared service model first: account, selected game, round, request ID, accepted stake, result and recovery state. Keep authoritative state server-side. Clients request actions, display pending status and confirm responses. A new device reads service state rather than rebuilding it from local animations.
Separate adapters for graphics, input, permissions, haptics, sound and session lifecycle. This exposes device differences to testing and prevents controller-specific behaviour from changing game rules.
Build a platform capability matrix
| Capability | Desktop browser | Mobile browser or app | XR headset |
|---|---|---|---|
| Input | Keyboard and pointer. | Touch, device rotation and optional controller. | Controller, hand tracking or gaze with fallback. |
| Display | Large 2D viewport or canvas. | Narrow viewport, dynamic orientation and interruption. | Per-eye display, spatial panel and headset system UI. |
| Permissions | Browser storage and optional media access. | Camera, microphone and notifications may be requested. | Camera passthrough, hand, eye or spatial data where supported. |
| Lifecycle | Tab switch, reload and browser process loss. | Calls, lock screen, background suspension and battery limits. | Sleep, recentre, controller disconnect and runtime interruption. |
| Fallback | Accessible DOM interface. | Low-detail or touch-first 2D mode. | Flat panel or standard account interface. |
Mark each device combination supported, degraded, unsupported or untested, with version and test date. Portability claims need repeatable results rather than a list of engine export targets.
Keep the game service authoritative
Keep outcomes, wagers, balances, eligibility and settlement server-authoritative. Clients may animate, but need confirmation from the service. Give actions unique IDs so retries do not create duplicate bets or reset a round after device change.
Specify recovery for every disconnect point. After a timed-out start request, query the round before offering another. A settled result should appear in account history after a browser closes. When state cannot be restored, apply the published interruption rule and explain the status.
New Zealand's minimum standards require recovery from interrupted games, retention of information needed to restore state where possible and the customer-favourable outcome specified by the rules if play cannot continue. Implement those protections in shared backend logic; a patch on one client is insufficient.
Abstract input without hiding its limits
Map keyboard, touch, controller and hand gestures to consistent actions such as select, back, pause and confirm, while adapting the interaction. A tap selects; a controller points and presses; a pinch may choose. Do not bind a high-impact action to an easily accidental gesture.
Provide alternatives to default input: keyboard on web, touch targets on mobile and controller controls in headsets. Keep voice optional, labels consistent with visible text and focus visible. If hand tracking disappears, switch to controller without blocking rules or account access.
OpenXR and engine frameworks reduce some XR API differences, but runtimes and plugins still need testing. A shared action map does not equalise controller reach, button layout or tracking quality.
Accessibility must survive every layout
Do not hide essential details on phones or move them outside a headset view. Keep balance, stake, state, rules, odds, net position, time and safety controls available at every layout. Support reflow, zoom, text sizing, non-colour labels and captions.
Test screen readers, keyboard, touch, reduced motion, seated headset use and one-handed operation separately. A desktop scene may fail in VR after input changes; a phone button may sit behind a notch or browser bar. Test each client at its actual size and system settings.
Store limits and round-start permissions in shared services. Repeat tests after moving between phone, browser and headset. Layout may vary; a client must not keep its own limit or decide whether a self-excluded account can enter.
Protect privacy across platform APIs
Headsets and phones expose different sensors. Headsets may map rooms or track hands, eyes or faces; phones may provide camera and location. Document permissions, features, off-device transfer and retention of derived events for each client.
Sensor APIs and identifiers vary by platform. Make dependent features optional, name their purpose before requesting access and store only needed events. If a client adds identity matching, assess it separately from gesture controls.
Review third-party crash, analytics and advertising packages too. A shared codebase may still transmit different information from each device. Compare permissions, network calls and vendor access in release builds rather than relying on an earlier policy document.
Deployment and New Zealand market checks
DIA describes New Zealand's online-casino transition as staged: October 2026 guidance notes an advertising prohibition, operating restrictions around 1 December and a licensed regime expected in 2027. Eligibility can change while an app remains available in a store. Keep a market switch server-side under a compliance owner's control.
Do not bundle promotion in a client that cannot be updated quickly. Separate game assets, general copy and market-specific notices. Where lawful, the release should still disable wagering but retain account or support access. Check current eligibility before enabling New Zealand play.
Use consistent error states and support links across clients. A move from mobile to VR should not force unnecessary identity checks or erase a case. Explain why an action is blocked and which service handles it.
Cross-device test plan
- Start a round on desktop, switch to mobile and confirm the same server state appears.
- Submit an action during a network delay, then reload and verify no duplicate wager exists.
- Change input method and confirm rules, time, limits and exit remain reachable.
- Decline camera or hand-tracking permission and complete the task through a fallback.
- Trigger device sleep, browser backgrounding and headset recentering during a non-critical state.
- Run account limit and self-exclusion checks on every client route.
Cross-platform release measures
- State mismatch rate
- Use:Finds divergence between clients and the authoritative service.
- Duplicate action rate
- Use:Checks idempotency during retries and device changes.
- Task completion by input
- Use:Shows whether a control works outside the primary device method.
- Permission refusal with fallback completion
- Use:Shows whether optional sensor use is truly optional.
- Time to restore account controls
- Use:Checks support and safety access after a client interruption.
Engine portability depends on runtime support and available graphics APIs. Shared server rules and account state keep outcomes consistent as the game moves between devices.
Version account and client state explicitly
At session start, each client should report app version, platform, input and feature set. The service can return a configuration the build understands. A version check should stop a newer headset app from misreading a saved state from an old phone build.
Use backward-compatible APIs and a documented retirement period. Older clients must not avoid new limit or location checks. Evaluate account controls at every wager request, not just on lobby entry.
Group all client activity for one round in the incident dashboard. Support should see a mobile action recovered on desktop without merging unrelated session data.