Play liveChoose your opponent
Join
54be506
19 lines · 927 Bytes Raw Permalink History
1// A random player: any listed move, random targets and cards where the move leaves them open. Seeded from what it
2// sees, so the same game plays the same way twice.
3export default function act(obs, legal) {
4 let x = [...JSON.stringify([obs.zones, obs.log.length, obs.viewer, legal.length])].reduce((h, c) => (h * 31 + c.charCodeAt(0)) >>> 0, 7);
5 const rand = (n) => ((x = (x * 1103515245 + 12345) >>> 0) % n);
6 const l = legal[rand(legal.length)];
7 const m = structuredClone(l.message);
8 if (l.validTargets.length && !Array.isArray(m.params.targets)) {
9 const t = l.validTargets[rand(l.validTargets.length)];
10 m.params.targets = [t];
11 m.params.target = t;
12 }
13 if (Array.isArray(m.params.cardIds) && !m.params.cardIds.length) {
14 const hand = obs.players[obs.viewer].hand ?? [];
15 const need = obs.pending?.discard?.min ?? 1;
16 m.params.cardIds = hand.slice(0, need).map((c) => c.id);
17 }
18 return m;
19}