@bountyboard/arcade-sdk 1.3.0 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -1
- package/README.md +8 -8
- package/dist/global.js +4 -1
- package/dist/multiplayer.cjs +4 -1
- package/dist/multiplayer.cjs.map +1 -1
- package/dist/multiplayer.js +4 -1
- package/dist/multiplayer.js.map +1 -1
- package/docs/external-authoritative-servers.md +21 -21
- package/docs/game-design-playbook.md +25 -25
- package/docs/llms.txt +147 -102
- package/docs/relay-rooms.md +22 -22
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @bountyboard/arcade-sdk
|
|
2
2
|
|
|
3
|
+
## 1.4.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 004192a: Honor the room ID returned by the host ticket service when joining by code. This lets isolated playtest invitations select a fixed room while retaining the normal join and reconnect lifecycle.
|
|
8
|
+
|
|
9
|
+
## 1.4.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- publish workflow and docs cleanup
|
|
14
|
+
|
|
15
|
+
## 1.3.1
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- 7273667: Stop prompting flexible-orientation Arcade games to rotate on mobile.
|
|
20
|
+
|
|
3
21
|
## 1.3.0
|
|
4
22
|
|
|
5
23
|
### Minor Changes
|
|
@@ -64,7 +82,7 @@
|
|
|
64
82
|
- 145d951: Document the built-in relay room tier: every multiplayer-approved game gets
|
|
65
83
|
hosted casual lobbies (public quick match, invite codes, host succession,
|
|
66
84
|
rate-guarded public message fan-out) with zero server code, via the existing
|
|
67
|
-
`joinRoom()` API. New `docs/relay-rooms.md` covers the wire contract
|
|
85
|
+
`joinRoom()` API. New `docs/relay-rooms.md` covers the wire contract: the
|
|
68
86
|
`joinData.roomSize` founding rule (2–64, default 8), `relay`/`relay_host`
|
|
69
87
|
events, the 1 KiB / 15 msg/s / 120 msg/room/s guardrails, and the
|
|
70
88
|
client-trusted outcome model (relay rooms never emit `end` or report results).
|
package/README.md
CHANGED
|
@@ -144,8 +144,8 @@ Hosted uploads run in an opaque-origin sandbox without `localStorage`; SDK
|
|
|
144
144
|
cloud save is primary there. URL embeds and standalone builds need their own
|
|
145
145
|
same-origin storage. Oversized blobs reject `too_large` immediately (a
|
|
146
146
|
client-side precheck against the same 1 MiB cap the server enforces), and a
|
|
147
|
-
host that never answers rejects `error` after a 15-second request timeout
|
|
148
|
-
|
|
147
|
+
host that never answers rejects `error` after a 15-second request timeout.
|
|
148
|
+
The same timeout covers load, variant, and multiplayer ticket requests. Every
|
|
149
149
|
save/load rejection is a real `Error` with a typed `code`:
|
|
150
150
|
|
|
151
151
|
```text
|
|
@@ -156,7 +156,7 @@ unsupported | unauthenticated | too_large | rejected | error
|
|
|
156
156
|
|
|
157
157
|
Prefer `save()`/`load()` when you control the source. The shim is for engine
|
|
158
158
|
runtimes whose storage layer can't be rewired without patching engine
|
|
159
|
-
internals
|
|
159
|
+
internals: GameMaker HTML5 (`ini_open`, `ini_write_*`, and `game_save` all sit
|
|
160
160
|
on `localStorage`), Godot, Unity, Construct. It replaces the throwing
|
|
161
161
|
`localStorage` with a Storage-shaped object backed by your cloud save, so those
|
|
162
162
|
builds persist per player and across devices with no engine changes.
|
|
@@ -181,7 +181,7 @@ startGame();
|
|
|
181
181
|
|
|
182
182
|
Writes made before hydration are kept and merged with the cloud read (your
|
|
183
183
|
write wins; a `removeItem` isn't resurrected), and nothing is pushed to the
|
|
184
|
-
server until that read has SUCCEEDED
|
|
184
|
+
server until that read has SUCCEEDED. A failed read is retried, and a write
|
|
185
185
|
that still can't confirm what the player had is refused rather than allowed to
|
|
186
186
|
overwrite it blind, so neither a fresh-start write at boot nor a transport blip
|
|
187
187
|
can wipe an existing save. `sessionStorage` is shimmed too, but memory-only. Guests and
|
|
@@ -325,11 +325,11 @@ Two tuning hooks: `joinRoom({ timeoutMs })` overrides how long a join (and
|
|
|
325
325
|
each reconnect attempt) waits for the server's welcome before rejecting with
|
|
326
326
|
`code: 'error'` (default 10000, clamped to 1000–60000), and `room.latencyMs`
|
|
327
327
|
reports the join-handshake latency (socket open to server welcome, refreshed
|
|
328
|
-
on every reconnect; `null` until the first welcome)
|
|
329
|
-
render-side smoothing
|
|
328
|
+
on every reconnect; `null` until the first welcome). Treat it as an estimate
|
|
329
|
+
for tuning render-side smoothing, not a measured RTT.
|
|
330
330
|
|
|
331
331
|
Rooms are lobby-based: each game module declares its player range (up to 64
|
|
332
|
-
per room). `match: true` is public quick match
|
|
332
|
+
per room). `match: true` is public quick match: Bounty Board fills the game's
|
|
333
333
|
open public room and starts a fresh one when no seat is free; the matched
|
|
334
334
|
room's `room.code` still works as an invite code. When the last free seat is
|
|
335
335
|
lost to a race the SDK re-matchmakes automatically (up to two retries) before
|
|
@@ -344,7 +344,7 @@ snapshots at the room tick rate, and every input takes a network round trip
|
|
|
344
344
|
before its effect appears in a snapshot. There is no built-in client-side
|
|
345
345
|
prediction, interpolation, or rollback. Design for it: turn-based, timing-duel,
|
|
346
346
|
score-race, and party games feel native; twitch physics (fighting games,
|
|
347
|
-
precision platform duels) need your own render-side smoothing
|
|
347
|
+
precision platform duels) need your own render-side smoothing: interpolate
|
|
348
348
|
between snapshots and animate optimistic feedback for the local player's input,
|
|
349
349
|
but treat the next snapshot as truth. Assume 50-150 ms of input-to-snapshot
|
|
350
350
|
latency on real connections when tuning game feel. (Relay rooms differ: game
|
package/dist/global.js
CHANGED
|
@@ -1597,7 +1597,10 @@
|
|
|
1597
1597
|
return new RoomConnection(code, devGrant, joinData, timeoutMs).connect(devGrant);
|
|
1598
1598
|
}
|
|
1599
1599
|
return requestTicket({ roomId: code }).then(
|
|
1600
|
-
(grant) =>
|
|
1600
|
+
(grant) => {
|
|
1601
|
+
var _a;
|
|
1602
|
+
return new RoomConnection((_a = grant.roomId) != null ? _a : code, null, joinData, timeoutMs).connect(grant);
|
|
1603
|
+
}
|
|
1601
1604
|
);
|
|
1602
1605
|
}
|
|
1603
1606
|
var multiplayer = { joinRoom };
|
package/dist/multiplayer.cjs
CHANGED
|
@@ -1622,7 +1622,10 @@ function joinRoom(options) {
|
|
|
1622
1622
|
return new RoomConnection(code, devGrant, joinData, timeoutMs).connect(devGrant);
|
|
1623
1623
|
}
|
|
1624
1624
|
return requestTicket({ roomId: code }).then(
|
|
1625
|
-
(grant) =>
|
|
1625
|
+
(grant) => {
|
|
1626
|
+
var _a;
|
|
1627
|
+
return new RoomConnection((_a = grant.roomId) != null ? _a : code, null, joinData, timeoutMs).connect(grant);
|
|
1628
|
+
}
|
|
1626
1629
|
);
|
|
1627
1630
|
}
|
|
1628
1631
|
var multiplayer = { joinRoom };
|