Half the warp pairings were secretly mirrors
Eric walked a five-player board's corner warp and the world stretched. The lane rule — carry the along-the-edge offset through unchanged — is only correct for half the side pairings: for the rest (N to N, E to N, and their kin, the ones five-player boards deal), the proper rotation lands the entry axis head-to-head against the exit axis, and preserving the raw lane smuggled a REFLECTION into the traversal — rays crossing over at the mouth, parallax inverted, the far room swimming. warpLaneMirrored computes the pairing's sign from the rotation itself; castRay mirrors the lane where required, and warpMotion anchors the far mouth at its opposite corner to stay the same pure rotation — so sprites and projectile legs agree with the rays again. The workshop grows ?players=2..6 to stand on any table size (the mirror-class mouths live on the five-player boards). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
700db70d4e
commit
707297da17
@@ -14,8 +14,11 @@
|
||||
/** ?demo=1: two automatons play a stretch, then the reel replays it —
|
||||
* the real Replay component, toggleable into first person. */
|
||||
const demoReel = q.has("demo");
|
||||
// ?players=2..6 sizes the table (5-player boards carry the corner
|
||||
// warps whose traversals rotate the world a quarter-turn).
|
||||
const count = Math.min(6, Math.max(2, Number(q.get("players") ?? 3)));
|
||||
const { state: dealt } = createGame({
|
||||
playerIds: ["Wanderer", "Rival", "Stranger"],
|
||||
playerIds: ["Wanderer", "Rival", "Stranger", "Pilgrim", "Vagabond", "Drifter"].slice(0, count),
|
||||
seed,
|
||||
sets: ["basic", "expansion1"],
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user