Same scene · different constraintsTooling / active extraction
retro-kit
Reusable pieces. Not another engine.
Our browser games kept rebuilding the same things: seeded randomness, pixel painters, palettes, tiny fonts and synthesized sound. retro-kit pulls those pieces out so the next experiment can start with the interesting question.
Implementation in progress. The package is not published yet; this page records what exists today.
Inside the toolkit ↓DeterministicSeeded generation and repeatable output
DOM-free paintersNode, workers and browser consumers
Generated mediaPixels, light maps, voices and effects
01 / PixelsAuthor small. Render precisely.
PixelBuffer keeps painting independent of the DOM. ScaledPainter lets a scene use a low-resolution authoring grid while reserving finer operations for details. The same painters can run in Node, a worker or the browser.
02 / RandomnessA seed should be a promise.
Seeded generators and named, serializable random streams make results reproducible. Deterministic hashes help check whether a change actually altered the output. A new sound should not accidentally rearrange the landscape.
03 / ColourConstraints with teeth.
Profiles apply palette limits, dithering and attribute-cell colour restrictions. Palette ramps shift shadows and highlights as well as brightness. C64, Game Boy, Amiga and VGA-inspired constraints give the same scene different visual rules.
04 / SoundNotes in. Oscillators out.
An audio engine handles buses, ducking and browser gesture unlock. Chiptune and named-note sequencers drive synthesized voices; a separate effects layer handles short game sounds. Formant speech experiments add voiced glides and shaped-noise consonants.
05 / Type and lightSmall systems that finish a scene.
A 5×7 bitmap font supplies measurement, wrapping and drawing. Light maps use the same pixel buffers for additive and multiplicative lighting, with posterization when smooth gradients would break the style.
06 / OutputKeep the renderer at the edge.
Canvas, ImageBitmap and Phaser adapters consume the generated output. The core does not need Phaser. A Node-only PNG encoder uses zlib to turn RGBA pixels into files without an image-processing dependency.
Scope & release status
Not a complete game framework—and not pretending to be one.
There is no all-in-one scene editor or required entity system here. Game rules, world structure and rendering remain the experiment’s responsibility. Shared dialogue, quest and save-state systems are future work, not features to rely on today.
The current work is extraction and integration: separating reusable code from its original games without losing their behaviour. There is no public package or installation command yet.
← Back to Build