Research notes
The raw research behind the study: 22 notes and two benchmark scripts, written while researching procedural pixel art and worlds for Tycho, between 2026-11-02 and 2026-11-04. The study’s pages rewrite them into the docs’ style; the notes keep everything, with each claim’s source inline and the line drawn between cited findings, inferences and gaps. They’re kept as written, so some of their statements were later corrected by measurement (the Diablo II sheet study corrects the style note’s “dark rim”) or by the pages. Every source the pages cite is also in Sources.
| Note | What it covers | Pages |
|---|---|---|
| sprites_characters_items.md | Generated sprites: mask and template generators, paper-doll kits and palette swaps, 3D, voxel and SDF render pipelines, the post-passes that make sprites look hand-made, ML tools as of late 2026, pixel recipes, determinism | Sprites |
| people_names_histories.md | People with a past: generated histories (Dwarf Fortress, Caves of Qud, Ultima Ratio Regum, Talk of the Town), naming languages and place names, cultures, daily schedules from Ultima VII to Shadows of Doubt, and how it all would feed Tyrell | People and histories |
| phone_performance.md | Phones as a budget: iOS and Android canvas, memory and WebGL limits, JS speed against a 2019 laptop, throttling and battery, workers and transfer, storage quotas and eviction, and measuring on a device | Phones and budgets |
| plants_trees_flowers.md | Plants: L-systems, space colonization, Weber–Penn and Hallé–Oldeman, species signatures for conifers, broadleaves, palms, cacti and dead trees, ground cover, flowers and meadow mixes, foliage technique, seasons and wind | Plants |
| world_generation.md | Worlds at every scale: noise terrain and biomes, WFC and constraint solvers, dungeons and levels, settlements, history-driven worlds, autotiling and Poisson decoration, JS libraries, and generate-and-test | Worlds and levels |
| realistic_world_generation.md | Geology-based world generation: Dwarf Fortress stage by stage with its fields, thresholds and rejection checks, Minecraft, O’Leary, mapgen4, Azgaar, WorldEngine and others compared, stream-power erosion, priority-flood, droplet and thermal erosion, lakes and coasts, wind and rain shadow, biome tables, caves and rock strata, and measured costs for a phone budget | Real geography |
| world_generation_bench.js | The plain-JS micro-benchmark behind those costs (node world_generation_bench.js 256): noise, diamond-square, priority-flood, flow accumulation, implicit and GPU-style stream power, droplets, thermal erosion, a wind sweep and CA caves on N×N typed arrays |
Real geography |
| settlements_paths_vegetation.md | Where things go on generated terrain: how people sited settlements and how games score sites, villages along roads and greens, desire and least-cost paths, ecological vegetation placement and spacing, and drawing height in 3/4 oblique | Real geography, Worlds and levels |
| buildings_interiors_sorting.md | Buildings: floor plans by treemap and graph, roofs on footprints, furniture by rules, houses by climate, roofs and walls cut away in iso and 3/4 games, x-ray, and depth sorting of tall and multi-tile objects | Buildings and interiors |
| buildings_sorting_bench.js | The timing script behind the page’s sort costs | Buildings and interiors |
| caves_villages_edges.md | Three follow-ups on the world demo: how real caves form (karst, lava tubes, sea caves) and how games make them, village forms from street villages to fishing hamlets and what decides them, and how to draw ecotones between biomes | Real geography, Settlements, paths and trees |
| lod_zoom_chunks.md | Zooming an endless chunked world: Merryfolk’s zoom and Tycho’s Chunks, semantic zoom in shipped games, palette-aware downscaling, keeping far colors true, chunk systems, transitions, and pinch and wheel controls |
Zoom and chunks |
| styles_resolution_perspective.md | Styles as hardware rules and modern habits, resolution tiers and integer scaling on phones, palette and color science (OKLab, ramps, dither), projections with their math and depth sorting, and how style choices meet generation | Palette and resolution, Perspectives |
| text_interface_legibility.md | Text and interface at 320×180: pixel font sizes and formats, outlines over busy art, other scripts, talk boxes and typewriter speed, integer scaling and touch targets on phones, and colorblind simulation and palette checks | Text and interface, Palette and resolution |
| sun_and_time_of_day.md | A movable sun: how shipped games do the time of day, cast shadows in each projection, shading faces by sun direction, sky and ambient through the day, performance tricks, and a solar position model | The sun |
| lighting_types_2d.md | A catalog of 2D light rated by where it runs (pre-bake, stand-in, shader): smooth, banded and dithered light, tile flood light, hard shadows, 2D GI, normal maps, emissive and bloom, volumetrics, palette-based light, light mixing | Light |
| effects_rendering.md | Effects under a fixed palette and the stand-in: light maps, palette cycling and fades, water, weather and atmosphere, particles, simulation effects, post-processing, and what fits per frame, pre-baked or in a shader | Effects and simulations, Light |
| falling_sand_materials.md | Falling sand from primary sources (The Powder Toy, Sandboxels, Sandspiel, Noita): material properties, reaction tables with chances, implementation techniques, plain-JS performance on phones, and what makes the toy fun | Effects and simulations |
| animation.md | Animation by code: procedural locomotion and IK, rotating and scaling sprites without ruining them, squash, smears and secondary motion, generating sprite sheets, environmental animation, and timing on a fixed step | Motion |
| sound_music.md | Sound in code: sfxr and ZzFX effect synthesis, rendering into buffers or building graphs, footsteps and ambient beds, chip limits as a style, vertical and horizontal adaptive music, seeded tunes, and mobile web audio | Sound and music |
| style_matching.md | Steering generation toward a target style, with Diablo II and Witchbrook as the targets: their pipelines, generic methods (render and quantize, synthesis, statistics, diffusion, critique), what an agent needs as input, what stays hard, and IP | Reaching a style |
| animals_creatures_ecology.md | Animals: generated creature design (Spore, No Man’s Sky, Dwarf Fortress), body plans and coloring, boids, herds and flocks, flow fields, species placement and population by body mass, activity by hour, and predator-prey cycles | Animals |
| d2_sprite_sheet_study.md | A measured Diablo II player sprite sheet (2,103 frames, measured for numbers only; the sheet isn’t in the repository): layout, size, colors, value, edges and texture, and what it means for a generator | Reaching a style |
| local_games_and_tycho.md | The local survey: Tycho’s API for pixels, painting, noise, color, effects, light and grids, and how each of the five games makes its art and worlds, with the patterns they repeat, the gaps, and what each would want to generate | The five games, The roadmap |