nu-Eden: Sundered Skies
nu-Edenian Language
nu-Edenian Technical Archive
//Generation Algorithm
▸Pipeline Architecture
The edenji generation pipeline transforms seed strings into deterministic SVG glyphs through six stages.
▸Stage 1: Seed → Hash
let rand = seededRandom(seed)
The seededRandom function produces a deterministic PRNG from any string input. All subsequent random decisions draw from this sequence, ensuring reproducibility.
▸Stage 2: Character Type Selection
Six types weighted by frequency:
Ideographic (15%) → Single expanded radical
Phonetic (10%) → Radical chosen for sound
Compound (25%) → Two semantic radicals
Semanto-Phonetic (35%) → Semantic + phonetic radical
Wildcard (10%) → Irregular composition
Innovation (5%) → Novel compound
The type determines how many radicals are selected and which layout templates are available.
▸Stage 3: Radical Selection
Semantic Selection
For semantic radicals, the hash maps to a semantic domain (Elements / Life / Abstracts / Artifacts) and grammatical class (Action through Innovation). The pickRadical function uses the seed to select from the 256-slot grid.
Phonetic Selection
For phonetic components, the seed word's pronunciation is approximately mapped to radical IDs via hash-based consonant/vowel extraction.
Radical Structure
Each radical contains:
- ▪id: Hex address (00–FF)
- ▪grammaticalClass: One of 16 classes
- ▪semanticDomain: One of 4 domains
- ▪strokeData: KAGE stroke string in 200×200 grid
- ▪positions: Valid placement positions in layouts
▸Stage 4: Layout Composition
The IDS layout template is selected based on radical count and character type:
| Radical Count | Preferred Layouts |
|---|---|
| 1 | encloseFull, overlay (radical fills entire grid) |
| 2 | lr (⿰), tb (⿱), encloseTop (⿵), encloseLeft (⿷) |
| 3 | lmr (⿲), tmb (⿳) |
Each layout defines slots — bounding boxes within the 200×200 grid:
lr: {
slots: [
{x1: 0, y1: 0, x2: 98, y2: 200}, // left
{x1: 102, y1: 0, x2: 200, y2: 200}, // right
]
}
▸Stage 5: Stroke Assembly
The remapStrokesToSlot function transforms each radical's strokes into the target slot:
- ▪Parse the radical's stroke data string
- ▪For each stroke, scale and translate coordinate pairs from 200×200 to the slot bounds
- ▪Reconstruct the stroke data string
- ▪Join all radicals' transformed strokes with
$
The grammatical class marker strokes are also added at this stage — verbs get base lines, nouns get corner brackets, etc.
▸Stage 6: SVG Rendering
The assembled stroke string is passed to Kage.makeGlyph2():
- ▪getStrokes() parses
$-delimited data into StrokeData arrays - ▪Recursively resolves any type-99 REFERENCE strokes through Buhin lookup
- ▪Font.getPolygons() renders each stroke through Mincho or Gothic
- ▪Polygons.generateSVG() converts polygon outlines to
<svg>markup
The resulting SVG can be rendered inline at any size.
▸Dual Reading Generation
generateReadings(seed) → { onyomi, kunyomi }
- ▪Onyomi: Single CVC syllable drawn from Edenian phonology
- ▪Kunyomi: 2–3 syllable polysyllabic form, independently generated
Both readings are deterministic from the seed.