Architecture: list what is new since round 11, Home links Videos (#85)

Round 12 of the clean-up checked every page against the code. The
paths the wiki names all exist, but Architecture had gaps.

- Architecture names the folders and files added since round 11,
  among them core/recording/ and editor/composition/, and the new
  shared parts deviceParts, DeviceFace, TextPool, clipStrip and
  core/util/bytes.
- Home links the Videos page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
adminandClaude Opus 5.5 committed 2026-10-14 20:40:27 +02:00
1 parent e33da8932d
commit 9a28ec8e2e
2 files changed
+75 -32

No files matched your search

+73 -31
@@ -130,10 +130,10 @@ web/index.html Vite source page (dev) index.html built page
web/play.html a released game (#266) play.html built page (generated, served) web/play.html a released game (#266) play.html built page (generated, served)
src/main.ts, play.ts the two entries; page.ts is the canvas both are (the WebGL context, root, resize) src/main.ts, play.ts the two entries; page.ts is the canvas both are (the WebGL context, root, resize)
src/core/model/ Project (object holders), Asset + AssetTypes, SceneObject (and what a list calls one: src/core/model/ Project (object holders), Asset + AssetTypes, SceneObject (and what a list calls one:
`objectName`, `groupName`), Properties (value types, and the walks over a nested value: `mapNested`, a struct field taken out or renamed), hierarchy, walk (generic parent/child walks), instance (container content resolved from its template), usages (where an asset is used), container (the cycle guard), placement (what may be dropped where), texture (frames, the slice grid, a frame's collision outlines, and the nine-slice and sort line of any picture, #308), cutTarget (which picture a nine-slice or sort line is set on: a texture frame, or pixel art and vector art as a whole, #308), frameOutline (#193: a frame's outlines as a collider wears them, centred, a pixel to a unit, cut into pieces once per drawn list), traceCollision (#161: a frame's outlines read off its picture — the pixels from an alpha threshold on are solid, each 4-connected island is walked round along the pixel edges and cut down to a few corners without ever crossing itself; crumbs below 1 % of the frame drop out), generated (pictures that are drawn rather than uploaded, #185: the key `gen:<assetId>@<revision>`, the register of readers that tell the picture path an asset's canvas size and revision, and the `fingerprint` pixel art and vector art make their revision with), vectorart (#129: the canvas as a property, which ring is worth drawing, and the revision as a fingerprint of the drawing rather than a counter, a texture fill's picture included) + vectorPath (what a shape draws, as plain commands: closed rings fill, every ring strokes, a segment is a line while neither of its ends carries a handle; a paint resolved to sorted stops or the picture it names) + vectorPaint (#186: gradients and texture fills — where a paint lies when it is switched on, the colour between two stops, adding, moving and removing a stop, a paint moved with its shape, and the rule that a texture fill takes uploaded pictures only) + vectorBoolean (#187: union, subtract, intersect and exclude on the sampled outlines, each shape read by the even-odd rule; the result rings in the order Pixi's hole detection needs, every outline followed by its holes and preceded by the islands inside them) + vectorCurves (#208: every sampled point remembers its cubic and its `t`, so a run of result points along one cubic becomes that cubic again, cut with de Casteljau), pixelart (#130: the palette a picture is painted in, how the layers of a frame come together, the sheet of all frames, a frame id read as a cut of it, and the revision) + pixelCel (the file of one layer on one frame, and its SHA-256 name worked out in the browser) + pixelDraw (what the tools do to the indices: brush, line, rectangle, ellipse, fill, resize about an anchor, merge, a palette colour taken out) + pixelEdit (every edit of layers, frames and cels as a function from one state to the next), polygon (an outline checked, cut into convex pieces and clipped to a rectangle), tile (the three kinds and their block shapes, reading a tile's pictures, the animation step), autotile (which quarter tile a neighbourhood asks for, the 47/16 tiles a block produces, 1 for a plain tile), tilemap (the cells of a layer, which neighbours a cell is joined to, the cells a stroke or a rectangle covers), tilemapCollision (the solid cells of a map, drawn in or out by their tile's collision scale and merged into rectangles, one group per one-way angle and per surface (`tileMaterials`, #193), the outlined cells as polygons — an autotile's outlines cut into its quarters and pieced together per cell like its picture —, where one sits in the world, and which cells of a placed map a world rectangle can reach, in cells (`cellsWithin`, #184)), tilemapMemo (what a map's cells work out to, kept while they hold the same: a version per cell map compared cell by cell, since strokes paint in place), animation (which frame at time t, a row's value there, what a row may aim at, the players on an object; KeyRef and its lookups) + animationPreview (the root at a frame, written into copies), curve (#247: a drawn easing evaluated at t — each segment a cubic solved for t by bisection, held to its rules by `sanitizedCurve`: ends at 0 and 1, no point overtaking another, no handle past its neighbour — and which keys and `Lerp` nodes use one) + curvePresets (the built-in eases traced as curves, a segment halved only where it strays), graphLookup (what a graph sees of the project: behaviors to run, state machines to read, curves to ease along), structTypes (#253: Struct assets as types — every typed struct variable, struct field and `Pack`/`Expand` found and brought in line with its asset, a renamed field carried through every value first, the cycle rule), Scope (how long a shared value lives: per instance, one for the run, or one per scene and rebuilt with every scene that loads, #164 — for a state machine's current state and for the values of a Variables asset), video (#402: a video or a clip of it by id, the stretch a clip Line truncated `objectName`, `groupName`), Properties (value types, and the walks over a nested value: `mapNested`, a struct field taken out or renamed), hierarchy, walk (generic parent/child walks), instance (container content resolved from its template), usages (where an asset is used), container (the cycle guard), placement (what may be dropped where), texture (frames, the slice grid, a frame's collision outlines, and the nine-slice and sort line of any picture, #308), cutTarget (which picture a nine-slice or sort line is set on: a texture frame, or pixel art and vector art as a whole, #308), frameOutline (#193: a frame's outlines as a collider wears them, centred, a pixel to a unit, cut into pieces once per drawn list), traceCollision (#161: a frame's outlines read off its picture — the pixels from an alpha threshold on are solid, each 4-connected island is walked round along the pixel edges and cut down to a few corners without ever crossing itself; crumbs below 1 % of the frame drop out), generated (pictures that are drawn rather than uploaded, #185: the key `gen:<assetId>@<revision>`, the register of readers that tell the picture path an asset's canvas size and revision, and the `fingerprint` pixel art and vector art make their revision with), vectorart (#129: the canvas as a property, which ring is worth drawing, and the revision as a fingerprint of the drawing rather than a counter, a texture fill's picture included) + vectorPath (what a shape draws, as plain commands: closed rings fill, every ring strokes, a segment is a line while neither of its ends carries a handle; a paint resolved to sorted stops or the picture it names) + vectorPaint (#186: gradients and texture fills — where a paint lies when it is switched on, the colour between two stops, adding, moving and removing a stop, a paint moved with its shape, and the rule that a texture fill takes uploaded pictures only) + vectorBoolean (#187: union, subtract, intersect and exclude on the sampled outlines, each shape read by the even-odd rule; the result rings in the order Pixi's hole detection needs, every outline followed by its holes and preceded by the islands inside them) + vectorCurves (#208: every sampled point remembers its cubic and its `t`, so a run of result points along one cubic becomes that cubic again, cut with de Casteljau), pixelart (#130: the palette a picture is painted in, how the layers of a frame come together, the sheet of all frames, a frame id read as a cut of it, and the revision) + pixelCel (the file of one layer on one frame, and its SHA-256 name worked out in the browser) + pixelDraw (what the tools do to the indices: brush, line, rectangle, ellipse, fill, resize about an anchor, merge, a palette colour taken out) + pixelEdit (every edit of layers, frames and cels as a function from one state to the next), polygon (an outline checked, cut into convex pieces and clipped to a rectangle), tile (the three kinds and their block shapes, reading a tile's pictures, the animation step), autotile (which quarter tile a neighbourhood asks for, the 47/16 tiles a block produces, 1 for a plain tile), tilemap (the cells of a layer, which neighbours a cell is joined to, the cells a stroke or a rectangle covers), tilemapCollision (the solid cells of a map, drawn in or out by their tile's collision scale and merged into rectangles, one group per one-way angle and per surface (`tileMaterials`, #193), the outlined cells as polygons — an autotile's outlines cut into its quarters and pieced together per cell like its picture —, where one sits in the world, and which cells of a placed map a world rectangle can reach, in cells (`cellsWithin`, #184)), tilemapMemo (what a map's cells work out to, kept while they hold the same: a version per cell map compared cell by cell, since strokes paint in place), animation (which frame at time t, a row's value there, what a row may aim at, the players on an object; KeyRef and its lookups) + animationPreview (the root at a frame, written into copies), curve (#247: a drawn easing evaluated at t — each segment a cubic solved for t by bisection, held to its rules by `sanitizedCurve`: ends at 0 and 1, no point overtaking another, no handle past its neighbour — and which keys and `Lerp` nodes use one) + curvePresets (the built-in eases traced as curves, a segment halved only where it strays), graphLookup (what a graph sees of the project: behaviors to run, state machines to read, curves to ease along), structTypes (#253: Struct assets as types — every typed struct variable, struct field and `Pack`/`Expand` found and brought in line with its asset, a renamed field carried through every value first, the cycle rule), Scope (how long a shared value lives: per instance, one for the run, or one per scene and rebuilt with every scene that loads, #164 — for a state machine's current state and for the values of a Variables asset), video (#402: a video or a clip of it by id, the stretch a clip Line truncated
src/core/properties/ PropertySchema, kinds (one row per value kind), listItems (an item's kind, read off its value), resolve (the only override merge), deviation (what is gold), collider/camera/bounds geometry, clip (the region clip areas cut each object to, a convex polygon, #260) (with the side a one-way collider blocks from, and the rectangle around a shape a broad phase looks at first, #184), convex (capsules and polygons: rounded convex pieces against each other), ray (where a ray meets a shape, in double precision), rigidbody (what the engine reads off a rigidbody, a collider's material and the scene), joint (what it reads off a joint: its settings, where its far end is, its length and a hinge's limits, #154), aspect, enabled, editorRun, assetRef/textureRef (how a reference reads), declaredRows (the row a Property node declares in a shader or particle graph, and the params that node has in both) src/core/properties/ PropertySchema, kinds (one row per value kind), listItems (an item's kind, read off its value), resolve (the only override merge), deviation (what is gold), collider/camera/bounds geometry, clip (the region clip areas cut each object to, a convex polygon, #260) (with the side a one-way collider blocks from, and the rectangle around a shape a broad phase looks at first, #184), convex (capsules and polygons: rounded convex pieces against each other), ray (where a ray meets a shape, in double precision), rigidbody (what the engine reads off a rigidbody, a collider's material and the scene), joint (what it reads off a joint: its settings, where its far end is, its length and a hinge's limits, #154), aspect, enabled, editorRun, assetRef/textureRef (how a reference reads), videos (#402/#404: a video's rows and a sprite's Video clock, time and volume), compositions (#417: a composition's rows, apart from its model), declaredRows (the row a Property node declares in a shader or particle graph, and the params that node has in both)
src/core/util/ list (take out, put back and move an item — what a command's undo is made of), vec (dot, the closest point on a segment — shared by the collider maths, the outline hit area and the polygon grips; a cubic Bezier at `t` and cut in two at `t` — shared by vector art, its Boolean operations and the curve grips), color (`mixColor`, channel by channel — keys of an animation, stops of a gradient, the particles' Mix colour), recorder (#253: assignments taken back last first — the undo of an edit whose reach is not known in advance) src/core/util/ list (take out, put back and move an item — what a command's undo is made of), vec (dot, the closest point on a segment — shared by the collider maths, the outline hit area and the polygon grips; a cubic Bezier at `t` and cut in two at `t` — shared by vector art, its Boolean operations and the curve grips), color (`mixColor`, channel by channel — keys of an animation, stops of a gradient, the particles' Mix colour), recorder (#253: assignments taken back last first — the undo of an edit whose reach is not known in advance), bytes (`concatBytes`, shared by the Ogg and Matroska writers)
src/core/commands/ undoable commands (pixelArtCommands: one command runs any pixel art edit and keeps the state before it, #130), CommandStack, SetBagValueCommand base, RenameCommand base (undone by renaming back: variable, struct field, port), MoveCommand base (undone by moving back: tile picture, tilemap layer, vector shape), vectorArtCommands (#129: the shapes of a drawing, one gesture one command), one import command shape for texture/font/sound, require.ts (validated lookups, and what an instance may not change), naming.ts src/core/commands/ undoable commands (pixelArtCommands: one command runs any pixel art edit and keeps the state before it, #130), CommandStack, SetBagValueCommand base, RenameCommand base (undone by renaming back: variable, struct field, port), MoveCommand base (undone by moving back: tile picture, tilemap layer, vector shape), vectorArtCommands (#129: the shapes of a drawing, one gesture one command), compositionCommands (#417: tracks, items and clips written whole once the pointer lets go, an item together with its object) + compositionSprites (#419: the sprites a composition keeps to itself, held to that after every edit), one import command shape for texture/font/sound, require.ts (validated lookups, and what an instance may not change), naming.ts
src/core/graph/ graph model, NodeRegistry/NodeContext/values (a travelling list may hold live objects, #157; src/core/graph/ graph model, NodeRegistry/NodeContext/values (a travelling list may hold live objects, #157;
liveObjects' `withoutObjects` empties them on every way out of the run, #238), interpreter, dropTarget, nested (behaviors as nodes), liveObjects' `withoutObjects` empties them on every way out of the run, #238), interpreter, dropTarget, nested (behaviors as nodes),
emitGraph (the walk both graph compilers share: each node once, in dependency order; cycles and property names reported), emitGraph (the walk both graph compilers share: each node once, in dependency order; cycles and property names reported),
@@ -180,16 +180,29 @@ src/core/music/ time (ticks, 480 to the quarter, tempo and meter, a posit
ogg (#340: Opus in Ogg, the pages around an encoder's packets and back, also read as ogg (#340: Opus in Ogg, the pages around an encoder's packets and back, also read as
the bytes come in, #349), streams (#349: which names stream from which copy, which the bytes come in, #349), streams (#349: which names stream from which copy, which
clips decode from their own, what copies are missing, how a played sound walks its copy) + streamQueue (#349: the clips decode from their own, what copies are missing, how a played sound walks its copy) + streamQueue (#349: the
samples a streamed sound plays from on the worklet, read at the rate of the context) samples a streamed sound plays from on the worklet, read at the rate of the context),
compositionAudio (#418: the audio items of a composition as sequences on the audio
clock, each on a bus of its own, its fades ramps of that bus' level)
src/core/recording/ recording (#405: what Start recording asks for and the rules a recording is made by —
size, name, H.264 profile, when a frame is taken, the steady pace of one not in real
time, #423), matroska (the `.mkv` writer: the encoders' frames and Opus packets in
clusters as they come, the head at the end) + avcColour (the colour written into
the stream's SPS, where a player that reads only the stream finds it),
editorRecording (main menu → Start recording…: what the dialog offers and the size
and sharpness a choice comes out at), cursors + cursors/ (the mouse pointer an editor
recording draws, one SVG per shape with its hot spot)
src/core/site.ts the path the site is served under (`/feuerwerk/`, #422) and the data paths built from it
src/core/soundfx/ the sound FX graph (#311): nodes (every effect and what it adds to a plan), compile (the src/core/soundfx/ the sound FX graph (#311): nodes (every effect and what it adds to a plan), compile (the
graph walked back from the Output to a plan; a parameter stays open until a voice graph walked back from the Output to a plan; a parameter stays open until a voice
starts; a tapped node gets a `tap` in front and behind, #374), parametricEq (#367: starts; a tapped node gets a `tap` in front and behind, #374), parametricEq (#367:
the bands, the curve Web Audio plays of them, and its axes); the the bands, the curve Web Audio plays of them, and its axes); the
effects the FX worklet runs, plain classes tested in Node: pitchPlayer (#317/#346, a effects the FX worklet runs, plain classes tested in Node: pitchPlayer (#317/#346, a
phase vocoder), chip (#329), crusher (#322), phaser (#341: Phaser and Flanger), phase vocoder), chip (#329), crusher (#322), phaser (#341: Phaser and Flanger),
dynamics (#326), lfo (#320: Tremolo and Vibrato); reverb (#328) and saturation (#323) dynamics (#326), lfo (#320: Tremolo and Vibrato), acid (#421: the
Acid's saw or square through a resonant low-pass, sample by sample); reverb (#328) and saturation (#323)
for the Web Audio nodes that do theirs for the Web Audio nodes that do theirs
src/core/instrument/ the instrument graph (#331): nodes (Notes, Sample, Parameters, Sound FX, Envelope), src/core/instrument/ the instrument graph (#331): nodes (Notes, Sample, Parameters, Sound FX, Envelope,
Chip, Acid),
compile (one note walked back from the Output, its triggers and sources), notes (MIDI compile (one note walked back from the Output, its triggers and sources), notes (MIDI
numbers and names), envelope (#335), chipPresets (#329: Preset, Randomize and Mutate the numbers and names), envelope (#335), chipPresets (#329: Preset, Randomize and Mutate the
way sfxr makes its sounds) way sfxr makes its sounds)
@@ -203,7 +216,11 @@ src/runtime/ GameRun (one run: start, tick, `Load scene` — shared by
order, state changes and saves) + behaviorPulses (the pulses one frame's events send into an order, state changes and saves) + behaviorPulses (the pulses one frame's events send into an
instance: keys, timers, collisions, finished animations) + behaviorContext (the `NodeContext` instance: keys, timers, collisions, finished animations) + behaviorContext (the `NodeContext`
a node is handed: world, collisions and rays, physics, sound, the clock), a node is handed: world, collisions and rays, physics, sound, the clock),
Audio (the AudioSink a run plays into — the counterpart of Input on the way out) Audio (the AudioSink a run plays into — the counterpart of Input on the way out),
audioSwitch (#423: the run's sound goes to the live sink until a recording not in real
time diverts it into its own), CompositionSystem (#417: the compositions playing, the
objects of their items and the videos they drive) + compositionSound (#418: the sound
of one composition, started again where the picture is after a hitch)
src/runtime/physics/ engine (loads Rapier once, reports its state, converts between pixels and metres), src/runtime/physics/ engine (loads Rapier once, reports its state, converts between pixels and metres),
PhysicsSystem (Play's collisions: one engine body per rigidbody, free collider and tilemap, PhysicsSystem (Play's collisions: one engine body per rigidbody, free collider and tilemap,
the fixed step, the poses handed back, the contact pairs sorted into events and their the fixed step, the poses handed back, the contact pairs sorted into events and their
@@ -217,7 +234,8 @@ src/runtime/physics/ engine (loads Rapier once, reports its state, converts be
src/ui/ widget toolkit (generic, knows nothing about assets); fonts (the faces the editor ships: src/ui/ widget toolkit (generic, knows nothing about assets); fonts (the faces the editor ships:
Source Sans 3 in 400, 500 and 600, Source Code Pro 400, Latin only, #202/#214/#273), icons + Source Sans 3 in 400, 500 and 600, Source Code Pro 400, Latin only, #202/#214/#273), icons +
Icon (the menu's tick boxes and current-entry dot as SVG files, and a widget that shows one file Icon (the menu's tick boxes and current-entry dot as SVG files, and a widget that shows one file
on its own: a symbol the Latin subset lacks is never written as a character, #214); SortableList + sortable (the layer list of every editor that has one: rows dragged into order, eye, duplicate, cross, rename in place; the index arithmetic of a list shown upside down, of a drop in the tile strip and of blocks of rows of any height, kept apart so it is measured without a canvas); blockDrag (`sortBlocks`: the inspector's own rows dragged into order by a `Grip` (the row's mark, wrapped: dots once it drags, lit under the pointer while the block is washed), a block being every row it covers, #310); Knob + knob (#378: a slider bent into a circle, its name above and a number field below, or a chrome dial of any size, #379; where a value sits on the turn and what a drag or the wheel makes of it, kept apart so it is measured without a canvas) on its own: a symbol the Latin subset lacks is never written as a character, #214); SortableList + sortable (the layer list of every editor that has one: rows dragged into order, eye, duplicate, cross, rename in place; the index arithmetic of a list shown upside down, of a drop in the tile strip and of blocks of rows of any height, kept apart so it is measured without a canvas); blockDrag (`sortBlocks`: the inspector's own rows dragged into order by a `Grip` (the row's mark, wrapped: dots once it drags, lit under the pointer while the block is washed), a block being every row it covers, #310); TextPool (the texts of a ruler or a row of names: made as they are wanted, a text that
already shows a string keeps it, #360), download; Knob + knob (#378: a slider bent into a circle, its name above and a number field below, or a chrome dial of any size, #379; where a value sits on the turn and what a drag or the wheel makes of it, kept apart so it is measured without a canvas)
src/viewport/ WorldViewport (the drawing of a world or a holder, the base of every view; it draws from src/viewport/ WorldViewport (the drawing of a world or a holder, the base of every view; it draws from
a `ViewSource` — the project and word of a change — so a released game draws without the a `ViewSource` — the project and word of a change — so a released game draws without the
editor, #266; a view through a camera keeps only what that camera `Sees` and lays one editor, #266; a view through a camera keeps only what that camera `Sees` and lays one
@@ -247,6 +265,14 @@ src/viewport/ WorldViewport (the drawing of a world or a holder, the ba
the video has shown its first frame (`openVideo`), a clip sent back to its start at the video has shown its first frame (`openVideo`), a clip sent back to its start at
its end, a run that starts every player over and hears it through the master, a its end, a run that starts every player over and hears it through the master, a
player nobody asked for in 2 s let go) + the poster library of the video picker, player nobody asked for in 2 s let go) + the poster library of the video picker,
videoFollow (#404: how a driven video keeps up with the time its wearer asks for, playing
at that speed and nudged, holding and seeking only where it stands or jumps) + videoSeek
(only the newest wish waits while a seek runs),
GameRecorder (#405: the game view recorded by a behavior — the picture read back from
the GPU, `PictureReader`, encoded in a `RecordingTake`, the sound from a tap of the
master or, not in real time, from `SteadySound` on an offline context, #423) +
backgroundBeat + backgroundTimers + timerWorker (a recording goes on behind another
tab: a worker's beat ticks the editor and a worker's timers keep their pace),
PixelCels (the pixels of pixel art in memory: a painted cel is named at once, the ones the PixelCels (the pixels of pixel art in memory: a painted cel is named at once, the ones the
server lacks are uploaded before a save, #130) + pixelArtPicture (every frame composed on the server lacks are uploaded before a save, #130) + pixelArtPicture (every frame composed on the
CPU and laid side by side onto one canvas, so a frame is cut out like a texture frame), CPU and laid side by side onto one canvas, so a frame is cut out like a texture frame),
@@ -304,7 +330,7 @@ src/editor/ App → Editor (layout + ticker), PlaySession (the run),
the commands are `core/commands/groupCommands`), the commands are `core/commands/groupCommands`),
debugHook (installs `window.__gm`; debugHook (installs `window.__gm`;
the hooks are grouped by area in debug/: ui, scene, graph, documents, pixel art, vector art, the hooks are grouped by area in debug/: ui, scene, graph, documents, pixel art, vector art,
render — `tools/` sees one flat object as before), render, sound, pattern, song, routing, bake, video, curve — `tools/` sees one flat object),
textProbe (finding widgets by their text — the ground floor of the test hook, shared with the sign-in screen), textProbe (finding widgets by their text — the ground floor of the test hook, shared with the sign-in screen),
auth/LoginScreen + auth/PasswordDialog + auth/loginRules + auth/FormStatus (the sign-in screen and the change-password dialog in the canvas, what either may complain about, and the warning line and busy state both show, #177/#182), autosave, auth/LoginScreen + auth/PasswordDialog + auth/loginRules + auth/FormStatus (the sign-in screen and the change-password dialog in the canvas, what either may complain about, and the warning line and busy state both show, #177/#182), autosave,
polygonEdit (points of an outline: what is under the pointer, whether a point is inside, polygonEdit (points of an outline: what is under the pointer, whether a point is inside,
@@ -318,6 +344,10 @@ src/editor/ App → Editor (layout + ticker), PlaySession (the run),
the video one shows a conversion on its way and asks again until it is done, #402), the video one shows a conversion on its way and asks again until it is done, #402),
video/ (#402: VideoEditor + VideoCanvas, the Video tab — preview, ruler, clip strip and video/ (#402: VideoEditor + VideoCanvas, the Video tab — preview, ruler, clip strip and
track on the time axis of the Sound tab's `waveView`; videoInfo, what a video is in words), track on the time axis of the Sound tab's `waveView`; videoInfo, what a video is in words),
EditorRecorder + EditorRecordingDialog + editorRecordingSettings + recordingUploads
(main menu → Start recording…: the whole editor recorded with the pointer drawn in,
the last choice kept in the browser, the file's way into the project),
editorCursors (the editor's pointer from the files a recording draws),
framing (fit/marquee/snap maths), FormDialog (the small modal forms: label column, Cancel + confirm, one open at a time; `dialogButtons` is the closing row every dialog shares, the pickers' included), AssetTabEditor (the shared shell of the asset tabs), TabHeader (the bar across the top of a tab — asset tabs, the plugins and accounts lists, NodeBoard; drawn by `drawHeaderBar` like the toolbar and the breadcrumb), framing (fit/marquee/snap maths), FormDialog (the small modal forms: label column, Cancel + confirm, one open at a time; `dialogButtons` is the closing row every dialog shares, the pickers' included), AssetTabEditor (the shared shell of the asset tabs), TabHeader (the bar across the top of a tab — asset tabs, the plugins and accounts lists, NodeBoard; drawn by `drawHeaderBar` like the toolbar and the breadcrumb),
TabStrip + tabRow (the tab row and what it does when the tabs outgrow it; plugin tabs are inserted at run time), TabStrip + tabRow (the tab row and what it does when the tabs outgrow it; plugin tabs are inserted at run time),
assetTabs (which asset kind opens into which tab, and so which kind has an editor at all), assetTabs (which asset kind opens into which tab, and so which kind has an editor at all),
@@ -360,7 +390,7 @@ src/editor/inspector/ Inspector panel, host (what a section builds into, and `e
every variable), shapeSection (the shapes of a vector drawing: the list, the four order every variable), shapeSection (the shapes of a vector drawing: the list, the four order
buttons and the style of the picked one, #129; Fill type and Line type with the stop bar, buttons and the style of the picked one, #129; Fill type and Line type with the stop bar,
the picked stop's rows or the texture, #186), portSection, aspectAction, the picked stop's rows or the texture, #186), portSection, aspectAction,
objectQueries/vectorRows/parentRow, cutSection (the Nine-slice and Sorting rows, shared by the frame and the drawing inspectors, #308), objectQueries/vectorRows/parentRow, cutSection (the Nine-slice and Sorting rows, shared by the frame and the drawing inspectors, #308), compositionSection (#417: a track, an item with its timing and audio, a clip),
SpritePreview (a sprite as `syncSpriteMesh` draws it in the scene) + previewFit (whole device SpritePreview (a sprite as `syncSpriteMesh` draws it in the scene) + previewFit (whole device
pixels per unit, the corner on one) pixels per unit, the corner on one)
src/editor/panels/ AssetPanel, assetGroups (the categories, the type groups in them and their order, #176), assetIcons (one SVG per src/editor/panels/ AssetPanel, assetGroups (the categories, the type groups in them and their order, #176), assetIcons (one SVG per
@@ -404,6 +434,11 @@ src/editor/vectorart/ VectorArtEditor (header: the three tools, the picked poin
src/editor/animation/ AnimationEditor (header, preview over timeline), PreviewCanvas (the root at the playhead, a FreeViewport src/editor/animation/ AnimationEditor (header, preview over timeline), PreviewCanvas (the root at the playhead, a FreeViewport
over animationPreview.ts), TimelineCanvas (rows, keys, ruler, clipboard), timelineView (its geometry), over animationPreview.ts), TimelineCanvas (rows, keys, ruler, clipboard), timelineView (its geometry),
RowDialog + FramesDialog (FormDialogs) RowDialog + FramesDialog (FormDialogs)
src/editor/composition/ CompositionEditor (#417: header with Add track and Play, the picture above the timeline),
CompositionCanvas (what is alive at the playhead, drawn and edited like a container's
template), CompositionTimeline (heads, ruler, items and clips in one widget, assets
dropped in, the gestures and keys) + compositionView (its geometry, the Song tab's with
frames for ticks)
src/editor/curve/ CurveEditor (header: Preset, the picked point's type, Preview, #247), CurveCanvas (the curve as a src/editor/curve/ CurveEditor (header: Preset, the picked point's type, Preview, #247), CurveCanvas (the curve as a
graph drawn from curveValue, points and handles edited with the vector art gestures, the graph drawn from curveValue, points and handles edited with the vector art gestures, the
preview dot and its rail) + curveView (the curve laid onto a picture for those gestures and preview dot and its rail) + curveView (the curve laid onto a picture for those gestures and
@@ -414,7 +449,8 @@ src/editor/pattern/ PatternEditor (header: Play, Grid, Bake; plays through th
src/editor/music/ timeView (the time axis: ticks to pixels, zoom, the lines of bars, beats and grid) + TimeRuler src/editor/music/ timeView (the time axis: ticks to pixels, zoom, the lines of bars, beats and grid) + TimeRuler
(bars, loop, start and playhead) — for the piano roll and the song tab — + transport (one (bars, loop, start and playhead) — for the piano roll and the song tab — + transport (one
piece plays at a time: a song or a pattern, #334) + BakeButton (#340: bakes the pattern piece plays at a time: a song or a pattern, #334) + BakeButton (#340: bakes the pattern
or song shown, lit while its bake holds) or song shown, lit while its bake holds) + dropWhenSaved (a file a bake or a stream copy
left behind, deleted once no saved project names it)
src/editor/song/ SongEditor (header: Play, Grid, Bake; plays through the scheduler, sets the tracks' buses and src/editor/song/ SongEditor (header: Play, Grid, Bake; plays through the scheduler, sets the tracks' buses and
follows edits, #334), SongTimeline (heads, ruler and lanes in one widget, dropping assets follows edits, #334), SongTimeline (heads, ruler and lanes in one widget, dropping assets
in, the gestures and keys) + songView (its geometry: tracks, items and their ends, the in, the gestures and keys) + songView (its geometry: tracks, items and their ends, the
@@ -423,7 +459,8 @@ src/editor/song/ SongEditor (header: Play, Grid, Bake; plays through the s
the level meters of the heads), TakeMeter (#342: the input's level while recording), the level meters of the heads), TakeMeter (#342: the input's level while recording),
ownFx (#355: a sound FX the song keeps for a song, a track or an item) ownFx (#355: a sound FX the song keeps for a song, a track or an item)
src/editor/sound/ SoundEditor (#343: header with Play, the clip's direction and fades), WaveCanvas (the src/editor/sound/ SoundEditor (#343: header with Play, the clip's direction and fades), WaveCanvas (the
waveform, the clips as bands, the cut) + waveView (its time axis), SoundPreview (play waveform, the clips as bands, the cut) + waveView (its time axis) + clipStrip (the
clips' names in their bands, shared with the Video tab), SoundPreview (play
and length in the inspector), SoundPicker (the "+ → Sound" rows with their play mark), and length in the inspector), SoundPicker (the "+ → Sound" rows with their play mark),
StreamKeeper (#349: the copies streamed sounds and every clip play from, made in the StreamKeeper (#349: the copies streamed sounds and every clip play from, made in the
browser and let go once no longer wanted) browser and let go once no longer wanted)
@@ -439,24 +476,26 @@ src/editor/soundfx/ SoundFxEditor (#311: the graph, a sound to try it on, Pla
ratio to drag, and the levels in and out tinted where it squeezes), CompressorPanel + ratio to drag, and the levels in and out tinted where it squeezes), CompressorPanel +
hardwareView (#379: the Compressor as a device, its meter, LEDs and plate worked hardwareView (#379: the Compressor as a device, its meter, LEDs and plate worked
out apart from the drawing), CompressorFace + nodeFaces (#380: the panel as what a out apart from the drawing), CompressorFace + nodeFaces (#380: the panel as what a
Compressor node shows in the graph, #381 the EQ's as well), KnobPanel + KnobFace (#384: Compressor node shows in the graph, #381 the EQ's as well), deviceParts (what every
the Gain as an orange plate with one knob, `drawPlate` shared with the Compressor; device is built of: the brushed plate and its engraved names, a row of chrome knobs
#390 the Pitch in green and the Mix in blue with a lever, #392 the Pan in cyan, with their captions, the bezel, lamps, levers and type buttons) + deviceFace (what
each a `KnobDevice`), every face does with its node: finds it, tells what a link feeds, turns a knob as
one undo step, hears its tap, loads its sound's picture), KnobPanel + KnobFace (#384:
the Gain as an orange plate with one knob; #390 the Pitch in green and the Mix in
blue with a lever, #392 the Pan in cyan, each a `KnobDevice`),
ChipPanel + ChipFace + chipView (#386: the Chip of an instrument as a device, its ChipPanel + ChipFace + chipView (#386: the Chip of an instrument as a device, its
wave and its pitch over a note worked out apart from the drawing, the wave and its pitch over a note worked out apart from the drawing), EnvelopePanel +
Compressor's `Lever` for "follow note"), EnvelopePanel + EnvelopeFace + envelopeView EnvelopeFace + envelopeView (#388: the Envelope as a device, its curve over a note
(#388: the Envelope as a device, its curve over a note with squeezed time worked with squeezed time worked out apart from the drawing), ReverbPanel + ReverbFace +
out apart from the drawing), ReverbPanel + ReverbFace + reverbView (#389: the reverbView (#389: the Reverb as a device, its tail as rings on a round screen
Reverb as a device, its tail as rings on a round screen worked out apart from worked out apart from the drawing), DelayPanel + DelayFace + delayView (#393: the
the drawing), DelayPanel + DelayFace + delayView (#393: the Delay as a device, Delay as a device, its echoes as bars on a screen and the light that runs over them
its echoes as bars on a screen and the light that runs over them at their beat at their beat worked out apart from the drawing), SaturationPanel +
worked out apart from the drawing), SaturationPanel + SaturationFace + SaturationFace + saturationView (#396: the Saturation as a device, the wave a sine
saturationView (#396: the Saturation as a device, the wave a sine comes out as comes out as and the heat it glows with worked out apart from the drawing),
and the heat it glows with worked out apart from the drawing; its type buttons LimiterPanel + LimiterFace + limiterView (#397: the Limiter as a device, what it
are the Reverb's `PickButton`), LimiterPanel + LimiterFace + limiterView (#397: takes away read from its taps and caught from the start of a sound, held once it
the Limiter as a device, what it takes away read from its taps and caught from ends, worked out apart from the drawing),
the start of a sound, held once it ends, worked out apart from the drawing),
ModulationPanel + ModulationFace + modulationView (#398: the Tremolo, the ModulationPanel + ModulationFace + modulationView (#398: the Tremolo, the
Vibrato, the Phaser and the Flanger as one kind of device, the volume or the Vibrato, the Phaser and the Flanger as one kind of device, the volume or the
pitch over time, or the response with a lane of where it goes, worked out pitch over time, or the response with a lane of where it goes, worked out
@@ -467,7 +506,10 @@ src/editor/soundfx/ SoundFxEditor (#311: the graph, a sound to try it on, Pla
SamplePanel + SampleFace + sampleView (#400: the Sample as a device, the SamplePanel + SampleFace + sampleView (#400: the Sample as a device, the
waveform of its sound or clip from the library's peaks, cut into what is waveform of its sound or clip from the library's peaks, cut into what is
played once, looped, played after the note and never heard, worked out played once, looped, played after the note and never heard, worked out
apart from the drawing), apart from the drawing), AcidPanel + AcidFace + acidView (#421: the Acid as
a device, the filter where it rests and at the top of a note's sweep),
`knobGroups` in hardwareView (the row of grouped small knobs the Chip, the Delay
and the Acid share),
nodeParamDrag (a knob's drag as one undo step, for the tab and the nodeParamDrag (a knob's drag as one undo step, for the tab and the
node, several settings at once since #389), nodeTabs (which nodes open a tab of node, several settings at once since #389), nodeTabs (which nodes open a tab of
their own) their own)
+2 -1
@@ -23,9 +23,10 @@ Live: <https://nockal.com/feuerwerk/> · Widget playground: <https://nockal.com/
| [Pixel art](Pixel-Art) | The pixel art asset and its palette, the tools, layers and frames, onion skin and the preview, resizing, how frames are worn and where the pixels are stored | | [Pixel art](Pixel-Art) | The pixel art asset and its palette, the tools, layers and frames, onion skin and the preview, resizing, how frames are worn and where the pixels are stored |
| [Fonts](Fonts) | Uploading a typeface, what a text wears, what the editor falls back to | | [Fonts](Fonts) | Uploading a typeface, what a text wears, what the editor falls back to |
| [Sounds](Sounds) | Uploading a sound, what the asset says, its tab, the cut and clips, `Play sound` and `Stop sound`, buses, the master and the Master routing, sound FX and their nodes (filters, EQs, delay, reverb, dynamics, modulation, Bitcrusher) and how long a voice rings on, what a pause and a stop do to a voice | | [Sounds](Sounds) | Uploading a sound, what the asset says, its tab, the cut and clips, `Play sound` and `Stop sound`, buses, the master and the Master routing, sound FX and their nodes (filters, EQs, delay, reverb, dynamics, modulation, Bitcrusher) and how long a voice rings on, what a pause and a stop do to a voice |
| [Instruments](Instruments) | The instrument asset: Notes, Sample, Parameters, Sound FX, Envelope and Output, triggers, zones and layers, the keys of the Instrument tab, `Play note` | | [Instruments](Instruments) | The instrument asset: Notes, Sample, Parameters, Sound FX, Envelope, Chip, Acid and Output, triggers, zones and layers, the keys of the Instrument tab, `Play note` |
| [Patterns](Patterns) | The pattern asset and its piano roll: drawing, moving and sizing notes, the grid, the ruler with start and loop, velocities, playing it in a loop | | [Patterns](Patterns) | The pattern asset and its piano roll: drawing, moving and sizing notes, the grid, the ruler with start and loop, velocities, playing it in a loop |
| [Songs](Songs) | The song asset: tracks with volume, pan, mute and solo, pattern and sound items laid out, moved, cut and split, its routing, recording a take, embedded assets, playing it in a loop and from a game | | [Songs](Songs) | The song asset: tracks with volume, pan, mute and solo, pattern and sound items laid out, moved, cut and split, its routing, recording a take, embedded assets, playing it in a loop and from a game |
| [Videos](Videos) | Getting a video in and converted, the Video tab and its clips, wearing one on a sprite, an animation driving it, recording the game view and the whole editor |
| [Animations](Animations) | Animation assets, the Animation tab, how they run | | [Animations](Animations) | Animation assets, the Animation tab, how they run |
| [Curves](Curves) | Easings drawn by hand, the Curve tab, using one on a key or a `Lerp` | | [Curves](Curves) | Easings drawn by hand, the Curve tab, using one on a key or a `Lerp` |
| [Tiles](Tiles) | The tile asset, plain tiles and the two autotile kinds, the pictures as animation steps, the Tile tab | | [Tiles](Tiles) | The tile asset, plain tiles and the two autotile kinds, the pictures as animation steps, the Tile tab |