Skip to content
Dan Riddell edited this page Aug 11, 2026 · 3 revisions

crucible

crucible — the vessel the family is forged in.

The shared engine behind the family's Ebitengine apps and games. One package per engine concern, flat at the module root, generic over each app's own types.

The API reference lives on pkg.go.dev — this wiki carries what godoc cannot.

Documentation

Page Description
Provenance Where each package came from, and what deliberately stayed app-side

Packages

App-specific vocabularies — messages, events, cues, tiles, textures — stay in each app; packages that carry them are generic.

Package What it is
geom 2D/3D vectors, grid coords, rects, clamps, angle folding, easing
hud Timed status-line overlay
canvas Software RGBA text/menu surface
menu Title/pause/settings menu model, display-free
menu/ebiteninput The conventional menu bindings, read from Ebiten
keymap Display-free control-hint bar layout
window Shared Ebiten window setup and resizing policy
store JSON settings/records under the user config dir
status Cue → timed HUD line pipeline
narrate narrata-backed rewording of status lines
telemetry Generic observer bus with bounded recent feed
synth Procedural PCM sound effects, panning, cue shapes
record Frame capture to GIF, MP4 and PNG
demo Headless documentation-media toolkit — clips, montages, palette ramps
hub Multi-window leader/child coordination
worldgen BSP dungeons, corridors, flood-fill, weighted choice, and seeded grid lattices
level Shared world model + generation pipeline
raycast Raycasting camera, DDA, billboards, height-aware column walker
view Display-free 2D pan/zoom camera
camera Ebiten draw transform layered over a 2D view
rng Deterministic seeded sub-streams (PCG)
ring Fixed-capacity rolling-history buffer
paint Colour brightness scaling and full-frame framebuffer blend
spatial Uniform grid for radius queries, open-plane or toroidal
netplay Two-player host/join sessions over gob, with a lobby-facing session
pinhole Perspective camera: world→image projection and ground ranging

Only menu/ebiteninput, camera and window import Ebiten; everything else is plain Go and runs headless. menu itself is display-free, which is how a raylib front-end shares the family's menus. That is what lets each app generate its whole docs/demos set with no display — see demo and record.

Install

go get github.com/danielriddell21/crucible

Links

Clone this wiki locally