`shapes:` list defines 2-3 polygons (name + sides + interior angle sum);
`copies:` is a list of 3-4 selections (with possible repetition) drawn
from the same pool. serde_yaml expands aliases on parse, so the target
is the inlined form; players using `- &name` anchors inside the list
and `*name` aliases in `copies:` produce the same Value and pass via
the semantic short-circuit.
All randomised per seed (ChaCha8Rng XOR'd with 0x..0B).
Not wired into levels::registry() yet — integration belongs to a follow-up.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
`vault:` with four entries — decimal int gold, decimal int silver,
fractional float experience, and an ISO-8601 date string. Description
hints at hex/octal/exponent equivalents the player can write — any
form parsing to the same numeric value passes.
All four values randomised per seed (ChaCha8Rng XOR'd with 0x..0A).
Not wired into levels::registry() yet — integration belongs to a follow-up.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
`door_defaults` plus `north_door` and `south_door`, each containing a
`<<:` key whose value is the defaults dict. north overrides locked,
south overrides material. serde_yaml treats `<<` as a literal mapping
key, so the target and a player's `<<: *defaults` form parse to the
same Value.
Default material/locked and which side overrides which are randomised
per seed (ChaCha8Rng XOR'd with 0x..09).
Not wired into levels::registry() yet — integration belongs to a follow-up.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Three keys:
- scroll: multi-line string (block scalar `|`)
- weight: fractional float (e.g. 12.5) — forces float without needing
the `!!float` tag in the target text
- title: string of digits (player needs quotes or `!!str` to avoid int)
Per-seed deterministic via ChaCha8Rng XOR'd with 0x..08.
Not wired into levels::registry() yet — integration belongs to a follow-up.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Top-level `floor:` int + `rooms:` mapping where each room carries a
type, a locked flag, an exits list, and a contents list. Two rooms
picked from a name/kind pool; exits and contents drawn from typed
pools. Deterministic per seed (ChaCha8Rng XOR'd with 0x..07).
Not wired into levels::registry() yet — integration belongs to a follow-up.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
`shapes:` list defines 2-3 polygons (name + sides + interior angle sum);
`copies:` is a list of 3-4 selections (with possible repetition) drawn
from the same pool. serde_yaml expands aliases on parse, so the target
is the inlined form; players using `- &name` anchors inside the list
and `*name` aliases in `copies:` produce the same Value and pass via
the semantic short-circuit.
All randomised per seed (ChaCha8Rng XOR'd with 0x..0B).
Not wired into levels::registry() yet — integration belongs to a follow-up.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
`vault:` with four entries — decimal int gold, decimal int silver,
fractional float experience, and an ISO-8601 date string. Description
hints at hex/octal/exponent equivalents the player can write — any
form parsing to the same numeric value passes.
All four values randomised per seed (ChaCha8Rng XOR'd with 0x..0A).
Not wired into levels::registry() yet — integration belongs to a follow-up.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
`door_defaults` plus `north_door` and `south_door`, each containing a
`<<:` key whose value is the defaults dict. north overrides locked,
south overrides material. serde_yaml treats `<<` as a literal mapping
key, so the target and a player's `<<: *defaults` form parse to the
same Value.
Default material/locked and which side overrides which are randomised
per seed (ChaCha8Rng XOR'd with 0x..09).
Not wired into levels::registry() yet — integration belongs to a follow-up.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Three keys:
- scroll: multi-line string (block scalar `|`)
- weight: fractional float (e.g. 12.5) — forces float without needing
the `!!float` tag in the target text
- title: string of digits (player needs quotes or `!!str` to avoid int)
Per-seed deterministic via ChaCha8Rng XOR'd with 0x..08.
Not wired into levels::registry() yet — integration belongs to a follow-up.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Top-level `floor:` int + `rooms:` mapping where each room carries a
type, a locked flag, an exits list, and a contents list. Two rooms
picked from a name/kind pool; exits and contents drawn from typed
pools. Deterministic per seed (ChaCha8Rng XOR'd with 0x..07).
Not wired into levels::registry() yet — integration belongs to a follow-up.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Target structure: a `trap:` dict plus a `rooms:` map where 2-3 rooms
all share the same trap. serde_yaml expands aliases on parse, so the
emitted target is the inlined form; players using `&anchor` / `*alias`
produce the same parsed Value and pass via the semantic short-circuit.
Trap properties (type / depth / spikes) and reused rooms are randomised
per seed (ChaCha8Rng XOR'd with 0x..06).
Not wired into levels::registry() yet — integration belongs to a follow-up.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Top-level `chambers:` mapping; each chamber name maps to an item list.
2-3 chambers, 2-3 items each, drawn from typed pools. Deterministic per
seed via ChaCha8Rng XOR'd with 0x..05.
Not wired into levels::registry() yet — integration belongs to a follow-up.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Top-level `chest:` key with a 3-5 item sequence drawn from a small pool.
Per-seed deterministic via ChaCha8Rng XOR'd with 0x..04. Description
rendered with tera; flavor uses a 📦 emoji.
Not wired into levels::registry() yet — integration belongs to a follow-up.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>