Files
RingBRP/tools
slaguru666andClaude Opus 5 00f6a1e30f Art pipeline: the prompt asked for a person, and got one
Three fail-open classifiers, each reading a field that is not where the
bestiary keeps the answer. Found by generating one creature before
spending the allowance on forty-eight; art/creatures/gryphon-u1.png is a
WINGLESS gryphon, from a spec whose bodyPlan is "winged".

1. anatomyWords() read `species`. Shape lives in `bodyPlan` — that is the
   field selecting the hit-location table. 44 of the 100 new creatures are
   species "baseline" with bodyPlan quadruped or winged, so every one fell
   to the silent branch and asked for no shape at all.

2. isPersonSpec() ended `if (tag) return true` — an unrecognised role tag
   means person. MONSTER_TAGS listed three tags; the bestiary uses twelve,
   so 43 creatures were prompted as "portrait of X, waist-up portrait".
   Now bodyPlan decides first, structurally, because a tag list is free
   text that grows and bodyPlan is enforced by the engine.

3. ROLE_CLASS knew the same three tags, so HERALDRY fell through to
   "carries nothing manufactured and armour >= 4 -> anomalous". Six
   centuries of carved stone were classed as far-side machinery, and the
   armour clause duly asked for a mech. ROLE_CLASS now carries all twelve,
   and the heavy-armour wording follows era: machinery for future and
   anomalous, "hide and scale thick as carved stone" for the rest.

Also in this commit: all 100 creatures re-pointed onto the natural attacks
added in 3feac39 — 41 of 100 changed, the rest keeping grasp or punch
because that is genuinely what they do. Three manoeuvres stay as prose and
say so explicitly: dun_cow's and bull_azure's charge, gryphon's stoop and
drop, tup's blind side. Portraits redrawn, since era decides their hue.

All 23 guards pass.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 22:55:43 +01:00
..
2026-08-30 21:34:37 +01:00