Spawn

Make Games with Words

Explore or make your own

spawn / swhat we're building

pinned

start herewhat spawn isfaqfrequently asked questionsthe betthe spawn bet

updates

engine v4.6Atelier3 hoursengine v4.5Surface Tension1 weekengine v4.4Solid2 weeksengine v4.3Groovy2 weeksengine v4.2Continuum3 weeksengine v4.1Foundations4 weeksengine v0.1GenesisApril 29, 2026
← All posts

engine v4.6.0

Atelier

June 1, 2026

A real workshop for god mode — tabbed tools, undo/redo, and richer material looks.

what's new

  • God mode is a real in-world editor now. Grab any object and move, rotate, scale, or stretch it with on-object handles. A toolbar at the bottom gives you shapes, paths, and brushes, and your tools live in tidy tabs in the top-right. Made a mistake? Ctrl+Z to undo, Ctrl+Y to redo (top-left).
  • Paint your world. Sculpt hills and valleys with terrain brushes, paint different ground materials, and scatter plants and objects across the land. Right-click anything you've scattered to tune the whole patch at once — amount, size, spacing, sway, and how it grows on slopes.
  • Sculpt while you play. Terrain you raise, lower, or repaint updates live underfoot — and since edits sync to everyone, you and your friends can build the same world together in real time.
  • More material looks — give objects toon, phong, matcap, and other lighting styles, not just the standard one.
  • Per-object shadows — turn shadow casting and receiving on or off for any object — handy for glass, signs, and effects.
  • Animations just work. Name a clip loosely (say "walk") and it still finds the right one instead of freezing in a T-pose, and you can layer upper-body-only animations over a full-body one.
  • Walk-through archways — archway openings reach the ground, so players walk straight through the doorway.
  • Smoother and sharper — a rebuilt renderer keeps frame rates steady, holds detail on distant models, and keeps memory in check on big scenes. Custom camera styles run smoothly again.
  • Sculpting feels right on hills and cliffs. The brush lands exactly where you point — even on steep ground — strokes stay strong on slopes, and the brush ring hugs the terrain instead of floating as a flat circle.
›technical notes

God mode: in-world editing surface (#6496, #6576)

  • Rebuilt god mode as a direct-manipulation editor — anatomy-grown handles/gizmos (translate/rotate/scale/extrude), hover affordances, and a bottom toolbar (paths/shapes/brushes + blueprint-category tabs). All authoring flows through replicated, deterministic Tome authoring input (server-authoritative, multiplayer co-edit), not the old client-only selection-inspector transport.
  • Placement: primitives, blueprints (full subtree clones), and prefabs via cursor-follow + click-to-commit, right-click cancel. Splines: freehand draw, extend-from-endpoint, snap-close, shape recognition, conform-to-terrain. Attach/detach, subtree-aware duplicate, parent-aware transforms, R-to-rotate.
  • BREAKING: god-mode authoring UI moved to creatorTabs (CreatorTabDef[] on GameSpec, compiled to CompiledSpec.creatorTabs); setCreatorTab(id, tab|null) adds/replaces/removes one tab. The old creatorUi and mode:"god" modUis are no longer compiled or rendered into the rail (hard-cut; creatorUi remains in the type as @deprecated). One module per tab — default export = render, named onMount/onDestroy for lifecycle. Rail moved from a bottom-center pill to a top-right tab rail (buildCreatorTabRailHtml).
  • Added god-mode undo/redo: top-left controls + replicated god:undo/god:redo actions (Ctrl+Z / Ctrl+Y) on the player-keyed UndoStacksResource (the same stack api.undo() drives). Property edits only; structural spawn/delete is a follow-up.
  • Fields primitive: named authored+runtime spatial rasters (terrain:height, terrain:material:<id>, scatter:<bedId>, plus gameplay fields), component-backed inside the rollback envelope; every field op is O(update) via per-chunk versioning. New readField/writeField ObjectAPI; writeField inside withPersistence authors (→ place.fields), otherwise writes the runtime layer.
  • Runtime terrain editing: terrain mesh + collider read the composed (authored+runtime) field, so a gameplay/behavior writeField("terrain:height"|"terrain:material:<id>") sculpts live (only authored edits persist). Static { terrain: offset } objects re-anchor when the composed ground moves (terrainReanchorSystem, version-gated); physics bodies settle on the composed collider.
  • Brushes + scatter: godMode.brushes registry (defineBrush/updateBrush/getBrush) + paint-only scripts (export function paint(p, inset, current, ctx)). Ships terrain/material/daisies built-ins (materials derive from the terrain palette). Scatter = real entities (≤500 cap), edited via one generic scatter editor (Amount/Pattern/Size/Sway/Steep/Grow/Shrink); TomeOwnedField auto-prunes a bed's field on destroy. Added getObjectWithDescendants (deep-clone subtree).

Renderer → adapter rewrite (#6517)

  • Replaced the 13 hand-rolled state/* translator classes with op-driven per-kind handlers that write Three.js directly off the ECS delta stream (no RenderPrep/RenderReadView/DrawableSource intermediate; per-handler typed userData). Renderer dropped from ~66k to ~20k LOC. TransformSmoother emits synthetic transform/world-* ops into the same per-op write path. No spec/script migration required — games render the same.
  • Node-material resolver: DrawMaterial.key maps to lit material families (standard/PBR, Phong, Lambert, Toon, Matcap, unlit) plus water/slash/shockwave/voxel paths, with consistent override application. isEmissiveMaterial (flash + glow) broadened from MeshStandard-only to any material with emissive/emissiveIntensity.
  • Per-entity draw/shadow component (castShadow/receiveShadow, default on), authored via ObjectProperties.castShadow/receiveShadow; honored across standalone, indirect-batch (in the batch lane key), and oversized primitive lanes. Effect/water materials keep __noShadow as cast default.
  • Animation: mixer now substring-matches a missing clip name ("walk" → "Walking") and falls back to the first viable clip instead of rendering T-pose; restored mask bones (per-bone clip filtering for upper-body-only overlays) and LOD migration (camera-driven reconcile, thresholds 25/50/100, LOD3 resident to 200m).
  • Bounded texture VRAM via handler retain/release at every bind site + re-enabled eviction; batched MSDF world-text glyphs; GPU scatter for terrain decorations; place-transition stream reset (keeps same-frame recreated entity objects alive).
  • Fixed archway primitive geometry (doorway opening reaches the floor) and a regression that broke kind: "custom" cameras.

God-mode polish + sculpting feel (#6587, #6588, #6585)

  • Particle emitters get their own editor cluster (move pad, vertical lift, one shape-aware size grip that grows the emission shape, rate chip, verbs — no yaw/scale grips); selected emitters draw their emission volume as a translucent shell. Smoke placeable emits from a box volume.
  • Toolbar pipeline unified: default + spec prefabs group by category into tabs; "Shapes"/"Paths"/"Brushes"/"Effects" are joinable category names, so creator/Savi blueprints land inside the built-in shelves.
  • Hover affordances stay quiet while a selection is active; co-located handle fan-out uses a screen-space threshold so nearly-identical anchors separate consistently; a controls cheat sheet sits under the top-left undo/redo cluster.
  • Brush sculpting feel: dabs land on the first ray–terrain crossing (the cliff face under the pointer), the cursor projects against the sculpted surface frozen at stroke start, built-in Raise/Lower compensate for slope, and the brush ring drapes over the terrain.
  • Savi: the god-mode briefing fires only when a game has no creator tabs and steers her toward a per-place "Places" tab, blueprints/brushes in a zoo place, and withPersistence for panel edits; heightmap-terrain skill triggers incidental terrain and tames domain-warp spikes.
›migration notes

The god-mode authoring UI is now a tab rail in the top-right, defined by a new creatorTabs array on the spec. It replaces creatorUi and the god-mode half of modUis. Each tab is ONE script module: its default export is render(localPlayer, world) => htmlString, and it may add named exports onMount(container, localPlayer, world) / onDestroy(container) for mount-managed panels.

Migrate every affected game:

  1. If the spec has creatorUi: { render: "scripts/creator-ui.js" }, replace it with a tab and delete creatorUi:
    creatorTabs: [
      { id: "creator", title: "Creator", icon: "🛠️", script: "scripts/creator-ui.js" }
    ]
    
  2. For each modUis entry whose mode is "god" — e.g. "slash-fx#editor": { label: "Slash FX", icon: "🧩", shortcut: "F", ui: { render: "scripts/panel.js" } } — add a creatorTabs entry and remove that entry from modUis:
    { id: "slash-fx#editor", title: "Slash FX", icon: "🧩", shortcut: "F", script: "scripts/panel.js" }
    
    The tab's script is the old ui.render module — its default export is still the renderer, and any onMount/onDestroy named exports keep working. No script edits are needed.
  3. Leave modUis entries with mode: "game" untouched — those are gameplay panels, not god-mode, and are unaffected.
  4. creatorTabs is ordered: the first tab is selected by default. Put the primary authoring panel first.
  5. Strip self-positioning from each migrated panel script. The engine now mounts the panel in a container directly under the tab row, so the panel's render must return plain content. Remove any fixed/absolute wrapper and any top padding/margin that the old panel used to clear the topbar (e.g. class="fixed right-4 top-20 …" → just the inner <div>). Leaving it in double-offsets the panel.

If a game had no creatorUi and no mode: "god" modUis, it needs no changes — god mode still has its built-in authoring (handles, toolbar, undo/redo).

pinned

what spawn isstart herefrequently asked questionsfaqthe spawn betthe bet

updates

Atelierengine v4.63 hoursSurface Tensionengine v4.51 weekSolidengine v4.42 weeksGroovyengine v4.32 weeksContinuumengine v4.23 weeksFoundationsengine v4.14 weeksGenesisengine v0.1April 29, 2026
← All posts