@diffenderfer-games/hub 2.0.0-next.6 → 2.0.0-next.8

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.
Files changed (58) hide show
  1. package/CHANGELOG.md +58 -27
  2. package/dist/auto.d.ts +2 -2
  3. package/dist/auto.js +2 -2
  4. package/dist/avatar-pixi.js +1 -1
  5. package/dist/avatar-svg.js +1 -1
  6. package/dist/avatar.d.ts +2 -2
  7. package/dist/avatar.js +3 -3
  8. package/dist/doctor/cli.mjs +1 -1
  9. package/dist/index.d.ts +2 -2
  10. package/dist/index.js +2 -2
  11. package/dist/shared/art.js +145 -3
  12. package/dist/shared/art.js.map +1 -1
  13. package/dist/shared/avatar.d.ts +3 -3
  14. package/dist/shared/client-version.gen.js +1 -1
  15. package/dist/shared/daily.js +1 -1
  16. package/dist/shared/describe.d.ts.map +1 -1
  17. package/dist/shared/describe.js +9 -1
  18. package/dist/shared/describe.js.map +1 -1
  19. package/dist/shared/index.d.ts +88 -11
  20. package/dist/shared/index.d.ts.map +1 -1
  21. package/dist/shared/live-canvas.js +1 -1
  22. package/dist/shared/overlays.js +1 -1
  23. package/dist/shared/pose-key.js +1 -1
  24. package/dist/shared/src.js +172 -28
  25. package/dist/shared/src.js.map +1 -1
  26. package/dist/shared/svg-markup.js +112 -27
  27. package/dist/shared/svg-markup.js.map +1 -1
  28. package/dist/shared/svg.js +1 -1
  29. package/dist/turns-rules.d.ts +2 -0
  30. package/dist/turns-rules.js +1 -0
  31. package/dist/turns.d.ts +23 -1
  32. package/dist/turns.d.ts.map +1 -1
  33. package/dist/turns.js +79 -13
  34. package/dist/turns.js.map +1 -1
  35. package/package.json +7 -2
  36. package/src/avatar/adapters/pixi-crowd.ts +302 -302
  37. package/src/avatar/adapters/pixi-types.ts +84 -84
  38. package/src/avatar/adapters/three.ts +126 -126
  39. package/src/avatar/art/glasses.ts +61 -3
  40. package/src/avatar/art/shape.ts +22 -3
  41. package/src/avatar/describe.ts +4 -1
  42. package/src/avatar/geom.ts +5 -0
  43. package/src/avatar/render/compose.ts +67 -22
  44. package/src/avatar/render/eyewear.ts +75 -13
  45. package/src/avatar-three.ts +18 -18
  46. package/src/avatar.ts +2 -2
  47. package/src/core/avatar/hub-avatar.ts +308 -308
  48. package/src/core/hub-progress.ts +269 -269
  49. package/src/core/page-account.ts +121 -121
  50. package/src/core/turns/hub-turns.ts +25 -4
  51. package/src/core/turns/turn-game.ts +143 -21
  52. package/src/core/turns/your-turn-buzz.ts +69 -0
  53. package/src/core/version/client-version.gen.ts +1 -1
  54. package/src/index.ts +68 -67
  55. package/src/overlay/overlay.ts +3 -3
  56. package/src/turns-kit/check-rules.ts +116 -17
  57. package/src/turns-rules.ts +12 -0
  58. package/src/turns.ts +4 -3
package/dist/turns.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { c as parseJsonText } from "./shared/json-guards.js";
2
- import { createTurnRng, createTurnRng as createTurnRng$1, defineTurnRules, turnRngStateFromSeed, turnRngStateFromSeed as turnRngStateFromSeed$1 } from "@diffenderfer-games/hub-contract";
2
+ import { createTurnRng, defineTurnRules, turnRngStateFromSeed } from "./turns-rules.js";
3
+ import { createTurnRng as createTurnRng$1, turnRngStateFromSeed as turnRngStateFromSeed$1 } from "@diffenderfer-games/hub-contract/turns-rules";
3
4
  //#region src/turns-kit/check-rules.ts
4
5
  /**
5
6
  * The rules conformance kit (docs/multiplayer.md "Turn games: testing"):
@@ -7,12 +8,18 @@ import { createTurnRng, createTurnRng as createTurnRng$1, defineTurnRules, turnR
7
8
  * module the way the hub does and throws on the first broken promise:
8
9
  *
9
10
  * - every game reaches an outcome within `maxMoves`, and `toAct` is never
10
- * empty before it;
11
+ * empty before it; every seat in `toAct` gets to move (not only the
12
+ * first), and so do the seats in `mayAct` (out of turn: a jump-in, a
13
+ * catch) whose `autoReact` (or `options.reactMove`) has a move;
14
+ * - `toAct` and `mayAct` only name seats that exist;
11
15
  * - the state survives a JSON round trip after every move, and the same seed
12
16
  * plays the same game (no `Math.random`, no hidden globals);
13
- * - `autoMove` (when the rules have it) is always legal;
17
+ * - `autoMove` and `autoReact` (when the rules have them) are always legal;
14
18
  * - no seat's `view` or `eventView` shows another seat's secrets: markers
15
- * planted with `options.plant` never appear in anyone else's view;
19
+ * planted with `options.plant` never appear in anyone else's view until
20
+ * the rules reveal them (`options.revealed`: a card played face up);
21
+ * - with `options.shuffleHidden` (the "twin table"): shuffling everything a
22
+ * seat may not see never changes that seat's view;
16
23
  * - stored fixtures from older versions `migrate` to a state that views;
17
24
  * - views, events and moves stay within the hub's size caps.
18
25
  *
@@ -45,43 +52,99 @@ function pickMove(rules, options, state, seat, rng) {
45
52
  if (rules.autoMove === void 0) return fail("the rules have no autoMove: pass options.randomMove");
46
53
  return rules.autoMove(state, seat, rng);
47
54
  }
55
+ /** An out-of-turn move for `seat`: the check's own chooser, else the rules' autoReact, else none. */
56
+ function pickReaction(rules, options, state, seat, rng) {
57
+ if (options.reactMove !== void 0) return options.reactMove(state, seat, rng);
58
+ return rules.autoReact?.(state, seat, rng) ?? null;
59
+ }
60
+ /** Fail unless every seat in `list` exists. */
61
+ function checkSeats(list, seats, what, seed) {
62
+ if (list.some((seat) => !Number.isInteger(seat) || seat < 0 || seat >= seats)) fail(`${what} named a seat that doesn't exist: [${list.join(", ")}] (seed ${String(seed)})`);
63
+ }
64
+ /**
65
+ * The next move of a game: half the time a seat in `mayAct` that has an
66
+ * out-of-turn move, else a seat in `toAct` (any of them, not only the
67
+ * first). The kit's own `pick` RNG chooses, so the game's RNG sees only
68
+ * the rules' own draws.
69
+ */
70
+ function nextMove(rules, options, state, toAct, rng, pick) {
71
+ const optional = (rules.mayAct?.(state) ?? []).filter((seat) => !toAct.includes(seat));
72
+ if (optional.length > 0 && pick.int(2) === 0) {
73
+ const seat = pick.pick(optional);
74
+ const move = pickReaction(rules, options, state, seat, rng);
75
+ if (move !== null) return {
76
+ seat,
77
+ move,
78
+ by: options.reactMove === void 0 ? "autoReact" : "reactMove"
79
+ };
80
+ }
81
+ const seat = toAct.length === 0 ? void 0 : pick.pick(toAct);
82
+ return seat === void 0 ? null : {
83
+ seat,
84
+ move: pickMove(rules, options, state, seat, rng),
85
+ by: options.randomMove === void 0 ? "autoMove" : "randomMove"
86
+ };
87
+ }
48
88
  /** Play one seeded game; answers its moves and a trace for the determinism check. */
49
89
  function playGame(rules, seats, seed, options) {
50
90
  const rng = createTurnRng$1(turnRngStateFromSeed$1(seed));
91
+ const pick = createTurnRng$1(turnRngStateFromSeed$1(seed ^ 1540483477));
92
+ const twinRng = createTurnRng$1(turnRngStateFromSeed$1(seed ^ 668265263));
51
93
  const marker = `MARKER-${String(seed)}-`;
94
+ const markerOf = (owner) => `${marker}${String(owner)}`;
52
95
  let state = rules.setup({
53
96
  seats,
54
97
  options: options.setupOptions ?? null,
55
98
  mode: options.mode ?? null,
56
99
  rng
57
100
  });
58
- if (options.plant !== void 0) for (let seat = 0; seat < seats; seat++) state = options.plant(state, seat, `${marker}${String(seat)}`);
101
+ if (options.plant !== void 0) for (let seat = 0; seat < seats; seat++) state = options.plant(state, seat, markerOf(seat));
59
102
  const maxMoves = options.maxMoves ?? 2e3;
60
103
  const trace = [];
104
+ let outOfTurn = 0;
105
+ /** The twin table: each seat's view is the same after what it can't see is shuffled. */
106
+ const checkTwin = () => {
107
+ if (options.shuffleHidden === void 0) return;
108
+ for (let viewer = 0; viewer < seats; viewer++) {
109
+ const real = JSON.stringify(rules.view(state, viewer));
110
+ if (JSON.stringify(rules.view(roundTrip(options.shuffleHidden(roundTrip(state), viewer, twinRng)), viewer)) !== real) fail(`seat ${String(viewer)}'s view changed when what it can't see was shuffled: it shows something hidden (seed ${String(seed)})`);
111
+ }
112
+ };
113
+ /** The seats whose planted marker is still secret (the rules haven't revealed it). */
114
+ const secret = new Set(options.plant === void 0 ? [] : Array.from({ length: seats }, (_, seat) => seat));
61
115
  const checkViews = (events) => {
116
+ for (const owner of secret) if (options.revealed?.(state, markerOf(owner)) === true) secret.delete(owner);
62
117
  for (let viewer = 0; viewer < seats; viewer++) {
63
118
  const seen = JSON.stringify(rules.view(state, viewer)) + JSON.stringify(events.map((event) => rules.eventView?.(event, viewer) ?? null));
64
- for (let owner = 0; owner < seats; owner++) if (owner !== viewer && options.plant !== void 0 && seen.includes(`${marker}${String(owner)}`)) fail(`seat ${String(viewer)} can see seat ${String(owner)}'s secret (seed ${String(seed)})`);
119
+ for (const owner of secret) if (owner !== viewer && seen.includes(markerOf(owner))) fail(`seat ${String(viewer)} can see seat ${String(owner)}'s secret (seed ${String(seed)})`);
65
120
  }
66
- if (options.plant !== void 0 && JSON.stringify(rules.view(state, null)).includes(marker)) fail(`the public view shows a seat's secret (seed ${String(seed)})`);
121
+ const shown = JSON.stringify(rules.view(state, null));
122
+ for (const owner of secret) if (shown.includes(markerOf(owner))) fail(`the public view shows seat ${String(owner)}'s secret (seed ${String(seed)})`);
123
+ checkTwin();
67
124
  };
68
125
  checkViews([]);
69
126
  for (let moves = 0; moves < maxMoves; moves++) {
70
127
  if (rules.outcome(state) !== null) return {
71
128
  moves,
129
+ outOfTurn,
72
130
  trace: trace.join("|")
73
131
  };
74
- const seat = rules.toAct(state)[0];
75
- if (seat === void 0) fail(`toAct is empty but there is no outcome yet (seed ${String(seed)}, move ${String(moves)})`);
76
- const move = pickMove(rules, options, state, seat, rng);
132
+ const toAct = rules.toAct(state);
133
+ checkSeats(toAct, seats, "toAct", seed);
134
+ checkSeats(rules.mayAct?.(state) ?? [], seats, "mayAct", seed);
135
+ if (toAct.length === 0) fail(`toAct is empty but there is no outcome yet (seed ${String(seed)}, move ${String(moves)})`);
136
+ const next = nextMove(rules, options, state, toAct, rng, pick);
137
+ if (next === null) return fail(`no seat could move (seed ${String(seed)}, move ${String(moves)})`);
138
+ const { seat, move } = next;
139
+ outOfTurn += toAct.includes(seat) ? 0 : 1;
77
140
  if (bytesOf(JSON.stringify(move)) > MOVE_MAX_BYTES) fail(`a move is over ${String(MOVE_MAX_BYTES)} bytes`);
78
141
  const result = rules.apply(roundTrip(state), seat, roundTrip(move), rng);
79
- if ("error" in result) fail(`${options.randomMove === void 0 ? "autoMove" : "randomMove"} made an illegal move for seat ${String(seat)}: ${result.error} (seed ${String(seed)}, move ${String(moves)})`);
142
+ if ("error" in result) fail(`${next.by} made an illegal move for seat ${String(seat)}: ${result.error} (seed ${String(seed)}, move ${String(moves)})`);
80
143
  state = roundTrip(result.state);
81
144
  if (bytesOf(JSON.stringify(state)) > STATE_MAX_BYTES) fail(`the state is over ${String(STATE_MAX_BYTES)} bytes`);
82
145
  checkViews(result.events ?? []);
83
146
  rules.progress(state, seat);
84
- trace.push(JSON.stringify(move));
147
+ trace.push(`${String(seat)}:${JSON.stringify(move)}`);
85
148
  }
86
149
  return fail(`a game did not end within ${String(maxMoves)} moves (seed ${String(seed)})`);
87
150
  }
@@ -91,6 +154,7 @@ function checkTurnRules(rules, options = {}) {
91
154
  let games = 0;
92
155
  let moves = 0;
93
156
  let longestGame = 0;
157
+ let outOfTurn = 0;
94
158
  for (const seats of options.seats ?? [2]) for (let game = 0; game < (options.games ?? 25); game++) {
95
159
  const seed = seats * 100003 + game;
96
160
  const played = playGame(rules, seats, seed, options);
@@ -98,6 +162,7 @@ function checkTurnRules(rules, options = {}) {
98
162
  games += 1;
99
163
  moves += played.moves;
100
164
  longestGame = Math.max(longestGame, played.moves);
165
+ outOfTurn += played.outOfTurn;
101
166
  }
102
167
  for (const fixture of options.fixtures ?? []) if (fixture.version < rules.version) {
103
168
  if (rules.migrate === void 0) fail(`a version ${String(fixture.version)} fixture needs rules.migrate`);
@@ -108,7 +173,8 @@ function checkTurnRules(rules, options = {}) {
108
173
  return {
109
174
  games,
110
175
  moves,
111
- longestGame
176
+ longestGame,
177
+ outOfTurn
112
178
  };
113
179
  }
114
180
  //#endregion
package/dist/turns.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"turns.js","names":["createTurnRng","turnRngStateFromSeed"],"sources":["../src/turns-kit/check-rules.ts"],"mappings":"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"}
1
+ {"version":3,"file":"turns.js","names":["createTurnRng","turnRngStateFromSeed"],"sources":["../src/turns-kit/check-rules.ts"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@diffenderfer-games/hub",
3
- "version": "2.0.0-next.6",
3
+ "version": "2.0.0-next.8",
4
4
  "description": "The diffenderfer.games hub client for games: accounts, saves, stats, leaderboards, inventory, daily challenges, the input system and the social/multiplayer forwarders, typed from the hub contract.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -64,6 +64,11 @@
64
64
  "types": "./dist/turns.d.ts",
65
65
  "default": "./dist/turns.js"
66
66
  },
67
+ "./turns-rules": {
68
+ "source": "./src/turns-rules.ts",
69
+ "types": "./dist/turns-rules.d.ts",
70
+ "default": "./dist/turns-rules.js"
71
+ },
67
72
  "./types": {
68
73
  "source": "./src/types.ts",
69
74
  "types": "./dist/types.d.ts",
@@ -106,7 +111,7 @@
106
111
  },
107
112
  "dependencies": {
108
113
  "@ayepi/core": "0.4.1",
109
- "@diffenderfer-games/hub-contract": "2.0.0-next.6"
114
+ "@diffenderfer-games/hub-contract": "2.0.0-next.8"
110
115
  },
111
116
  "publishConfig": {
112
117
  "access": "public"