A laden wizard shows their burden

A carried treasure rendered nowhere in first person — the thief hauling
your gold looked exactly like an innocent. The treasure now rides its
carrier at chest height, drawn just in front of their card (a sort bias
wins the tie), gliding along with their tweened strides and showing
through warp mouths like everything else. The workshop rehearses it
with ?carry=Rival.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Eric Wagoner
2026-08-23 20:48:41 -04:00
co-authored by Claude Fable 5
parent df20e35124
commit 846cf56ffe
2 changed files with 22 additions and 3 deletions
+6
View File
@@ -38,6 +38,12 @@
const [k, n] = spec.split("@") as [string, string?];
view.wallDamage[k] = Number(n ?? 1) || 1;
}
// ?carry=Rival hands the first treasure to that wizard, for viewing
// what a laden thief looks like.
const carrier = q.get("carry");
if (carrier && view.treasures[0]) {
view.treasures[0] = { ...view.treasures[0], carriedBy: carrier, position: null };
}
// ?terrain=pit@3,7;thornbush@4,7 — furnish squares for the renderer
// (and the artist) to rehearse. dimwarp@x,y opens a floor mouth.
for (const spec of (q.get("terrain") ?? "").split(";").filter(Boolean)) {
+16 -3
View File
@@ -387,11 +387,24 @@ export function billboards(
});
}
for (const t of view.treasures) {
if (!t.position || t.carriedBy) continue;
const src = art(`treasure-${(view.players.find((p) => p.id === t.owner)?.colorIndex ?? 0) % 6}`, "objects");
if (t.carriedBy) {
// A carried treasure rides its carrier at chest height, drawn just
// in front of them — the most important status in the game should
// be visible on the thief's own body.
const carrier = view.players.find((p) => p.id === t.carriedBy && p.alive);
if (!carrier || carrier.id === povId) continue;
const o = posOverride?.[carrier.id];
out.push({
x: o?.x ?? carrier.position.x + 0.5, y: o?.y ?? carrier.position.y + 0.5,
src, scale: 0.26, rise: 0.2, bias: 0.12, label: "treasure",
});
continue;
}
if (!t.position) continue;
out.push({
x: t.position.x + 0.5, y: t.position.y + 0.5,
src: art(`treasure-${(view.players.find((p) => p.id === t.owner)?.colorIndex ?? 0) % 6}`, "objects"),
scale: 0.4, rise: 0, label: "treasure",
src, scale: 0.4, rise: 0, label: "treasure",
});
}
// The floor's furniture, standing in the room. Bushes fill the square