Ilia Denisov
a7f483792f
CI / changes (pull_request) Successful in 2s
CI / unit (pull_request) Has been skipped
CI / integration (pull_request) Has been skipped
CI / ui (pull_request) Successful in 1m7s
CI / conformance (pull_request) Successful in 10s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 1m42s
feat(offline): randomise the hotseat seating (random first mover)
...
The 2-4 hotseat players now start in a random seating order (so who goes
first, and the turn order, is random) — matching the online games. The
engine starts at seat 0, so shuffling the seats at creation picks the
starter; the shuffle is seed-driven (a distinct derivation from the tile
bag), so replay reproduces it. Scoped to hotseat — vs_ai stays human-first.
- lib/roster.ts: shuffleSeeded (unit-tested); NewGame shuffles buildSeats
with the game seed before create.
- e2e: pin a seed that keeps the roster order so the lock assertions stay
deterministic.
2026-07-07 16:20:53 +02:00
..
2026-07-06 20:03:12 +02:00
2026-07-07 11:39:43 +02:00
2026-07-07 15:37:25 +02:00
2026-07-06 20:54:03 +02:00
2026-07-06 01:54:20 +02:00
2026-06-10 16:56:03 +02:00
2026-06-10 16:56:03 +02:00
2026-07-01 22:58:40 +02:00
2026-07-07 14:45:53 +02:00
2026-07-05 15:36:35 +02:00
2026-07-05 15:36:35 +02:00
2026-07-05 15:36:35 +02:00
2026-07-05 15:36:35 +02:00
2026-07-05 15:36:35 +02:00
2026-06-14 21:55:59 +02:00
2026-06-14 21:55:59 +02:00
2026-06-11 18:50:10 +02:00
2026-06-11 18:50:10 +02:00
2026-06-03 13:33:03 +02:00
2026-06-03 13:20:56 +02:00
2026-06-15 12:23:10 +02:00
2026-06-15 12:23:10 +02:00
2026-06-14 20:18:58 +02:00
2026-06-14 20:18:58 +02:00
2026-06-15 18:14:19 +02:00
2026-06-15 18:14:19 +02:00
2026-06-03 17:33:47 +02:00
2026-07-05 22:13:21 +02:00
2026-06-24 11:39:29 +02:00
2026-06-24 11:39:29 +02:00
2026-06-30 21:48:56 +02:00
2026-06-30 21:48:56 +02:00
2026-07-06 10:39:29 +02:00
2026-07-07 00:42:43 +02:00
2026-07-06 18:15:12 +02:00
2026-06-29 22:58:43 +02:00
2026-06-29 22:58:43 +02:00
2026-06-07 22:25:29 +02:00
2026-06-10 16:56:03 +02:00
2026-06-15 13:25:36 +02:00
2026-06-15 13:25:36 +02:00
2026-06-19 16:50:48 +02:00
2026-06-14 17:53:03 +02:00
2026-06-19 16:50:48 +02:00
2026-07-07 00:42:43 +02:00
2026-07-02 16:20:35 +02:00
2026-07-02 21:58:07 +00:00
2026-07-07 14:10:57 +02:00
2026-07-06 20:54:03 +02:00
2026-06-30 23:00:19 +02:00
2026-07-07 00:42:43 +02:00
2026-07-07 00:42:43 +02:00
2026-07-02 16:20:35 +02:00
2026-07-02 16:20:35 +02:00
2026-06-16 19:09:24 +02:00
2026-07-02 00:10:02 +02:00
2026-07-02 00:10:02 +02:00
2026-06-22 16:16:33 +02:00
2026-06-22 16:16:33 +02:00
2026-07-02 00:09:52 +02:00
2026-07-02 00:09:52 +02:00
2026-07-06 23:11:17 +02:00
2026-07-06 23:11:17 +02:00
2026-06-20 21:28:31 +02:00
2026-06-20 21:28:31 +02:00
2026-07-01 23:31:49 +02:00
2026-07-03 22:46:55 +02:00
2026-07-03 22:40:49 +02:00
2026-07-03 22:40:49 +02:00
2026-07-07 15:37:25 +02:00
2026-06-24 12:36:52 +02:00
2026-06-24 12:36:52 +02:00
2026-07-06 20:03:12 +02:00
2026-07-06 20:03:12 +02:00
2026-07-06 20:03:12 +02:00
2026-07-07 11:11:13 +02:00
2026-07-07 11:11:13 +02:00
2026-06-19 12:12:53 +02:00
2026-06-19 12:12:53 +02:00
2026-06-19 16:50:48 +02:00
2026-06-14 17:53:03 +02:00
2026-06-10 16:56:03 +02:00
2026-07-01 22:58:40 +02:00
2026-06-16 12:28:04 +02:00
2026-06-16 12:28:04 +02:00
2026-07-06 11:06:59 +02:00
2026-07-05 21:11:41 +02:00
2026-07-05 21:11:41 +02:00
2026-07-07 15:47:34 +02:00
2026-07-07 15:47:34 +02:00
2026-06-09 07:42:47 +02:00
2026-07-02 21:58:07 +00:00
2026-07-07 16:20:53 +02:00
2026-07-07 16:20:53 +02:00
2026-06-11 23:40:40 +02:00
2026-07-03 04:30:16 +02:00
2026-07-07 01:44:16 +02:00
2026-07-06 14:54:09 +02:00
2026-07-02 21:58:07 +00:00
2026-07-02 21:58:07 +00:00
2026-06-21 10:42:31 +02:00
2026-06-21 10:42:31 +02:00
2026-06-17 22:17:27 +00:00
2026-06-17 22:17:27 +00:00
2026-06-11 14:13:54 +02:00
2026-06-11 14:13:54 +02:00
2026-06-24 12:36:52 +02:00
2026-07-03 13:18:37 +02:00
2026-06-06 10:23:42 +02:00
2026-07-06 18:15:12 +02:00
2026-06-19 16:50:48 +02:00
2026-06-19 16:50:48 +02:00
2026-06-22 11:52:00 +02:00
2026-06-22 11:52:00 +02:00
2026-07-02 00:09:52 +02:00
2026-07-03 13:18:37 +02:00
2026-07-03 17:59:33 +02:00