Skip to content

Repository files navigation

ORTUS — a rising

ortus, -ūs (m.): a rising, a beginning, a birth — of the sun, of a spring, of a life.

The cosmos you kindled, now yours to keep. ORTUS is a living, persistent world you sow once and then tend over days and weeks. It grows and drifts in real time — even while you are away, it computes the minutes you missed and lives them — it remembers being tended, and it is never the same twice.

Not a game and not a gallery. A living thing.

It is the third and final movement of a trilogy:

ANIMA a cabinet of living things you watch
VIGILIA an interactive fiction at the end of worlds you end, and choose what is carried
ORTUS the world your spark became you tend

VIGILIA ends, literally, with a kindling. ORTUS is what the spark became.


The experience

  • The Sowing. On your first visit, a single ember. Three soft choices — the ground, the first living thing, the sky — shape the world's seed. Then it kindles, and the first day plays out before you: germination, first blooms, a first creature waking, nightfall's bioluminescence, and a dawn that lands at your real time of day.
  • Tending. Gentle verbs, spent in dew that condenses with real time (a reason to return, never a chore): sow a sleeping seed, call the rain, bless a plant, prune one back to the cycle, and name a newly-arisen kind — a name it keeps forever, even through extinction and return.
  • Dum aberas — while you were away. Every return opens with a quiet digest of the births, first blooms, new kinds, returns from the seed-bank and weather-wonders you missed; a real absence is replayed as a time-lapse before it folds away.
  • The Chronicle. The Keeper's Book remembers the world's whole arc — an illuminated Annals (the sowing, each naming, each named kind's first fall and first return) beside the rolling record.
  • Never the same twice. Genomes drift; lineages split into new kinds with generated Latin binomials; extinction is never final — kinds collapse into the seed-bank as spores and return, changed. Growth, decay, return.
  • The Constellation. A second lens on the same world: its kinds seen from above as a slowly wheeling star chart, kinship (speciation) drawn as the lines of a constellation. A star's brightness is its number; dormant kinds are hollow rings; the kinds you named burn gold.
  • The hillside remembers. A meteor leaves a stone that stands there always; where a kind grew thickest, the soil stays rich (a little lusher, forever). The land becomes a record of its history.
  • Spore drift. Release a single kind as a spore-glyph and give it to a friend's world, where it drifts into their seed-bank to wake, changed — life shared between worlds, not replaced.

Keyboard: S snapshot · B book · C the Constellation · N name · R rain · Esc close.


Run it

It is a dependency-free static site. Double-click index.html — it runs from file://. Or serve the folder and open it. No build step, no bundler, no network calls (fonts are self-hosted for GDPR).

Your world lives in localStorage; carry it to another browser or device with the seed-glyph (the carry button) — because the engine is deterministic with catch-up, an exported glyph is the world, reconstructed exactly.


How it works

Two layers:

  • Macro (persistent, deterministic). An individual-based ecology at 1 tick = 1 real minute. All state lives here. It runs headless in Node, receives time only through advance(world, now), and draws all randomness from the world's own PRNG stream — Math.random/Date are forbidden inside the engine, so the same seed always lives the same life. On load it replays the minutes you were gone (a 92-day catch-up runs in well under half a second).
  • Micro (ephemeral, 60 fps). The embodiment. Plants and creatures are instantiated from macro state with stable per-individual seeds, so the same plant stands on the same spot with the same silhouette after a reload. Nothing here is saved, and it never touches the engine's PRNG.

The world can wither but never ends: a deterministic revival floor forces life back after a barren spell, by construction rather than by tuning.

index.html · css/ortus.css
js/prng.js      sfc32 + hashing
js/genome.js    heredity, drift, speciation, Latin binomials
js/engine.js    the macro simulation (pure, Node-loadable)
js/save.js      key-versioned localStorage, one-Keeper guard, export/import
js/render.js    canvas: sky, terrain, landmarks, sprite-cached plants, creatures, event performances
js/chart.js     the Constellation — a read-only star chart of the kinds and their kinship
js/audio.js     an optional soundscape (off by default)
js/ui.js        the Sowing, HUD, chronicle, verbs, naming, Dum aberas, the seed-glyph, spore drift
fonts/          self-hosted Young Serif · Newsreader · IBM Plex Mono
docs/BIBLE.md   the full design record

Verify (dev-only, tools/)

cd tools && npm install          # puppeteer for real-browser checks
node validate.js --seeds 27 --days 90   # determinism · stability · liveliness · catch-up
node smoke.js                    # save/load · export/import · hostile-blob rejection · one-Keeper
node gen-images.js               # regenerate icons + og-image
node shots.js                    # headless-Chromium screenshots of the live app

The validator enforces the hard contracts as a build-time gate: same seed ⇒ identical life, no NaN, populations bounded, the world alive after 90 days across all 27 sowing combinations, the world breathes (not pinned at cap, seasons bite, fauna present), and catch-up stays fast.


Built in the ANIMA/VIGILIA lineage — self-contained, static, made to be kept. Design record in docs/BIBLE.md. Deployment in DEPLOY.md.

About

ortus, -ūs (m.): a rising, a beginning, a birth — of the sun, of a spring, of a life.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages