The out-of-tree Bunnyland plugin package bunnyland_festivalsim.
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_festivalsimdefault_enabled=True, so no --plugin flag is required once the module is imported.
- Components —
FestivalComponent(the current-festival world singleton),DecorationComponent(a placed lantern/banner),ContestComponent(an entry-accepting contest), andReputationComponent(a character's standing). - The festival calendar —
FestivalConsequencereads the world clock and season with the coretime_of_dayhelper and opens/closes festivals on a fixed, deterministic schedule, storing the current festival on the clock singleton and emittingFestivalOpenedEvent/FestivalClosedEvent. - Seasonal mood —
SeasonalMoodConsequencebrightens every active character'sAffectComponenta little each tick while a festival is underway (capped, and skipping suspended/dead characters). - Verbs —
decoratehangs a fresh decoration (or a held item) in the room;RoomDecoratedEvent.give-gifttransfers a held item to another character in the room and warms the reciprocalSocialBond, more so during a festival;GiftGivenEvent.enter-contestregisters a held item into an open contest in the room;ContestEnteredEvent.judge-contestcrowns the top entry (deterministic tie-break), closes the contest, and awards the winner a trophy and reputation;ContestJudgedEvent.
- The open contest hook —
ContestEntry(a contest→entry edge) andregister_contest_entry(...)let any other pack enter its own loot (Hearthsim dishes, Anglersim catches, Bardsim songs) without importing anything else from this package. - Prompt fragments —
festival_fragments(the current festival),decoration_fragments(room decorations), andcontest_fragments(open contests and the viewer's own renown). - A worldgen hook —
FestivalWorldgenHookdresses generated town squares (rooms that read like a square/plaza/market/green/commons) with seeded decorations and a bake-off. - Spawn factories —
spawn_decoration,spawn_contest.