Hedges stay in their squares; the eyes turn to the lock they pick
Eric's rosebush-through-a-wall, hunted to two roots. A camera-facing billboard viewed obliquely rotates out of its square, so cell-bound volumes are now windowed to the exact segment where their plane crosses their own cell — no end may paint beyond it. And the real smoking gun: the near-bias that lets a hedge win the tie against the wizard standing in it was applied to the OCCLUSION depth too, letting the hedge cheat a fifth of a cell through any neighboring wall. The bias now orders sprites among themselves only; walls always judge the true depth. Also answered: edge-deeds turn the head. Picking or jamming a lock, unlocking with the Master Key, raising or razing or drowning a wall — any edge-bearing deed by the reel's own wizard now aims the camera at that edge's midpoint before the outcome shows, same as any other target. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
285c91b2c8
commit
ccb5346a31
@@ -258,6 +258,21 @@
|
||||
cell = v.players.find((p) => p.id === e.defender)?.position ?? null;
|
||||
} else if (e.type === "objectThrown" && e.attacker === povId) {
|
||||
cell = e.landedAt;
|
||||
} else if (
|
||||
// Deeds done to an EDGE — a lock picked or jammed, a door
|
||||
// unlocked, a wall raised, razed, or drowned — turn the eyes
|
||||
// to the edge's midpoint just the same.
|
||||
"edge" in e && typeof e.edge === "object" && e.edge !== null && "cell" in e.edge &&
|
||||
(("caster" in e && e.caster === povId) || ("player" in e && e.player === povId))
|
||||
) {
|
||||
const edge = e.edge as { cell: { x: number; y: number }; side: "N" | "E" | "S" | "W" };
|
||||
const m = edgeMid(edge.cell, edge.side);
|
||||
// edgeMid sits ON the boundary; step half a texel toward the
|
||||
// cell so the same-cell check below behaves.
|
||||
if (Math.abs(m.x - (me.position.x + 0.5)) > 0.3 || Math.abs(m.y - (me.position.y + 0.5)) > 0.3) {
|
||||
return { x: m.x - 0.5, y: m.y - 0.5 };
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (cell && (cell.x !== me.position.x || cell.y !== me.position.y)) return cell;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user