The out-of-tree Bunnyland plugin package bunnyland_cryptidsim.
Tests run against a sibling bunnyland-server checkout without installing anything —
tests/conftest.py puts both this package's src/ and ../bunnyland-server/src on
sys.path. From this server/ directory:
# uses the sibling bunnyland-server's virtualenv/deps
uv run --project ../../bunnyland-server -m pytest
# or, if bunnyland + relics are already importable:
python -m pytestLint:
uv run ruff check src testsbunnyland serve --module bunnyland_cryptidsimdefault_enabled=True, so no --plugin flag is required once the module is imported.
- Components —
CryptidComponent(name, elusiveness, habitat)(a rare creature);SightingComponent(one uncertain piece of evidence);CryptidCaseComponent(an investigator's dossier on a cryptid);ConfirmedCryptidComponent(the confirmed marker). - A sighting verb —
sight-cryptidinvestigates a cryptid in the room and records a sighting whoseclarityis deterministic (ahashlibdigest over stable ids + epoch, blended with elusiveness, the room's light, and range). Only fires under concealing conditions. - A confirmation consequence —
CryptidConfirmationConsequenceconfirms any case that has gathered enough clear sightings, marks the cryptid confirmed (discovery reward), and emits aCryptidConfirmedEvent. Sightings emitSightingRecordedEvent. - Prompt fragments —
cryptidsim_fragmentsrender hedged "unconfirmed report" lines and definitive confirmed lines into both human and AI prompts. - A worldgen hook —
CryptidWorldgenHookseeds rare cryptids into generated worlds from cryptozoological hints in the generation text. - A spawn factory —
spawn_cryptid.
Cryptids only appear (and are only sightable) when is_concealing holds — it is night, the
weather is obscuring, or the room is dark. Time and weather come from the world clock:
TimeOfDayComponent / WeatherComponent are read when the environment consequence has set
them, otherwise derived from the clock's game_time_seconds. A bare WorldActor reads clock
0 -> night, so it is already concealing without a tick running first.