A Saturation in the graph was a stack of rows. The user wanted a device of its own style and size, like the Delay and the Reverb, that shows warmth and heat the harder the sound is driven. - The node is a copper plate of 720x280 with a button per type, the auto-gain lever, a big drive knob and small knobs for tone, output and wet. Each change is one undo step, wired numbers lock their knob. - The screen draws a sine at -12 dBFS, the level auto-gain is reckoned at, as a grey ghost. Over it is the wave that comes out: bent by the type, its DC taken out, auto-gain and output after it, blended by wet. Under it stand the auto-gain and the peak. - The heat is the drive over 48 dB, as far as wet lets it be heard. The wave goes from cold steel through ember red to white, a glow rises from below and flickers, and embers fly up from about 8 dB on. A lamp beside the name glows with it. - The node keeps the editor drawing only while there is heat. Without drive it draws nothing, unlike the Delay, which always animates. - The Reverb's private type button is now PickButton with its own colours, and the Saturation's type buttons use it as well. - No instrument preset uses a Saturation, so no preset needs more columns. Tests: - Unit saturation-view: 14 new tests. - Counter-check: without taking out the DC, exactly the DC test fails. - e2e 34 (atx): ALL PASSED, 137 checks, one new for type, lever and drive with undo. - Gate (atx): CHECK EXIT 0, 289 files, 4431 tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
100 lines
7.6 KiB
Markdown
100 lines
7.6 KiB
Markdown
# Game Maker
|
||
|
||
[](https://git.nockal.com/meleki/game-maker/actions?workflow=ci.yml)
|
||
|
||
A browser-based tool "one step before a game engine": create **assets** (scenes, cameras,
|
||
sprites), place them into scenes, tweak their properties in an inspector and press **Play** –
|
||
all in one program, all drawn inside a single WebGL canvas.
|
||
|
||

|
||
|
||
Live: <https://nockal.com/game-maker/> · Widget playground: <https://nockal.com/game-maker/?playground>
|
||
|
||
**The documentation is the wiki:** <https://git.nockal.com/meleki/game-maker/wiki> – every concept,
|
||
node, tab and shortcut, plus the architecture and the development workflow. This file is the short
|
||
way in.
|
||
|
||
## In one screen
|
||
|
||
- An **asset** is a named, typed thing (scene, camera, sprite, text, behavior, variables, struct,
|
||
collider, rigidbody, joint, container, clip area, texture, vector art, pixel art, palette,
|
||
animation, curve, tile, tilemap, state machine, shader, shader function, font, sound, sound FX,
|
||
instrument, pattern, song, bus, particles) with properties and no position.
|
||
- A **scene object** places an asset: position, sparse **overrides** of its properties, an optional
|
||
parent. Only what differs from the asset is stored; the inspector paints it gold and offers ↺ / ↑.
|
||
- A **container** is a reusable group edited once and placed many times; its content is resolved
|
||
from the template on every read. A **screen** is a container switched on and off.
|
||
- A **behavior** is logic as a node graph, placed like anything else and parented to the object it
|
||
acts on. Play has no built-in behaviour – everything that happens is a graph.
|
||
- An **account** owns projects: the editor asks for a user name and a password first, and each
|
||
account sees only its own projects. The Account menu at the far right of the toolbar changes
|
||
the password and signs out.
|
||
- **Play** runs a throwaway copy of the project; every panel stays usable and Stop brings back
|
||
exactly what was saved. **Release…** shares a link that plays the saved game on its own, without
|
||
the editor and without signing in.
|
||
|
||
## Quick start
|
||
|
||
Node 22 is required.
|
||
|
||
```bash
|
||
npm install
|
||
npm run dev # http://localhost:5175/game-maker/dist/ – API calls are proxied to production
|
||
npm run check # typecheck + lint + format:check + unit tests – the gate CI runs too
|
||
npm run build # writes dist/ and regenerates index.html; the folder is what nginx serves
|
||
```
|
||
|
||
The browser suite and the three example games need a machine with a GPU:
|
||
|
||
```bash
|
||
node tools/seed-e2e.mjs && node tools/e2e.mjs # the editor, 1969 checks (GM_STEPS=20 for one step)
|
||
# every tool signs in first – see the Accounts page
|
||
node tools/seed-jumprun.mjs && node tools/smoke-jumprun.mjs
|
||
node tools/seed-tetris.mjs && node tools/smoke-tetris.mjs
|
||
node tools/seed-actor.mjs && node tools/smoke-actor.mjs
|
||
```
|
||
|
||
Every push runs all of it on the Gitea runners – the gate as one job, build and suite as another
|
||
beside it – so locally take the gate plus the step your change touches and leave the full run to
|
||
CI. Details, the GPU requirement and the detached runner are in
|
||
[Development](https://git.nockal.com/meleki/game-maker/wiki/Development).
|
||
|
||
## Documentation
|
||
|
||
| Page | What it covers |
|
||
|---|---|
|
||
| [Concepts](https://git.nockal.com/meleki/game-maker/wiki/Concepts) | Assets, scene objects, overrides, play mode, the camera, the console |
|
||
| [Accounts](https://git.nockal.com/meleki/game-maker/wiki/Accounts) | Signing in and out, the accounts, who a project belongs to, what the check tools need |
|
||
| [Scenes](https://git.nockal.com/meleki/game-maker/wiki/Scenes) | The edited scene, the start scene, and switching scenes from a graph |
|
||
| [Scene editing](https://git.nockal.com/meleki/game-maker/wiki/Scene-editing) | Placing, z-order, hierarchy, the editor offset |
|
||
| [Behaviors](https://git.nockal.com/meleki/game-maker/wiki/Behaviors) | Node graphs: variables, the node set, structs and lists, loops, nesting, editing |
|
||
| [Structs](https://git.nockal.com/meleki/game-maker/wiki/Structs) | Struct assets: a named shape that struct variables, fields and `Pack`/`Expand` follow |
|
||
| [Colliders](https://git.nockal.com/meleki/game-maker/wiki/Colliders) | Shapes (box, circle, capsule, polygon), collision events, blocking movement, one-way colliders and raycasts |
|
||
| [Physics](https://git.nockal.com/meleki/game-maker/wiki/Physics) | Rigidbodies, the collider material, gravity, the fixed step, joints |
|
||
| [Textures](https://git.nockal.com/meleki/game-maker/wiki/Textures) | Images, frames, nine-slice, the filter, upload limits |
|
||
| [Vector art](https://git.nockal.com/meleki/game-maker/wiki/Vector-Art) | Pictures drawn from shapes: the pen, curves, gradients and texture fills, combining shapes |
|
||
| [Pixel art](https://git.nockal.com/meleki/game-maker/wiki/Pixel-Art) | Pictures painted pixel by pixel: the palette, the tools, layers and frames |
|
||
| [Fonts](https://git.nockal.com/meleki/game-maker/wiki/Fonts) | Font assets, the picker, what a text falls back to |
|
||
| [Sounds](https://git.nockal.com/meleki/game-maker/wiki/Sounds) | Sound assets and clips, `Play sound`, buses and the Master routing, sound FX |
|
||
| [Instruments](https://git.nockal.com/meleki/game-maker/wiki/Instruments) | Instruments as node graphs, Chips and presets, the keys of the Instrument tab, `Play note` |
|
||
| [Patterns](https://git.nockal.com/meleki/game-maker/wiki/Patterns) | Patterns and the piano roll, playing one in a loop or from a game |
|
||
| [Songs](https://git.nockal.com/meleki/game-maker/wiki/Songs) | Songs, their tracks and items, routing, recording, playing one from a game |
|
||
| [Animations](https://git.nockal.com/meleki/game-maker/wiki/Animations) | Animation assets and the Animation tab |
|
||
| [Curves](https://git.nockal.com/meleki/game-maker/wiki/Curves) | Easings drawn by hand, the Curve tab, using one on a key or a `Lerp` |
|
||
| [Shaders](https://git.nockal.com/meleki/game-maker/wiki/Shaders) | Shader graphs that sprites, texts, particle fields and cameras wear, their node set, passes, shader functions |
|
||
| [Particles](https://git.nockal.com/meleki/game-maker/wiki/Particles) | Particle graphs: a particle as a function of its age |
|
||
| [State machines](https://git.nockal.com/meleki/game-maker/wiki/State-machines) | The asset, named transitions, `State branch`, `Set state` and `State transition` |
|
||
| [Containers](https://git.nockal.com/meleki/game-maker/wiki/Containers) | Templates, instances, screens |
|
||
| [Tiles](https://git.nockal.com/meleki/game-maker/wiki/Tiles) | The tile asset, plain tiles and the two autotile kinds, the pictures as animation steps, the Tile tab |
|
||
| [Tilemaps](https://git.nockal.com/meleki/game-maker/wiki/Tilemaps) | The tilemap asset, painting in the scene view, layers, what it looks like in the game |
|
||
| [Plugins](https://git.nockal.com/meleki/game-maker/wiki/Plugins) | Extending the editor: the plugin file, how it is loaded, switching one on and off, API v1 |
|
||
| [Keyboard](https://git.nockal.com/meleki/game-maker/wiki/Keyboard) | Every shortcut |
|
||
| [Architecture](https://git.nockal.com/meleki/game-maker/wiki/Architecture) | Stack, source layout, the rules that keep it organised |
|
||
| [Development](https://git.nockal.com/meleki/game-maker/wiki/Development) | Commands, the e2e suite, the example games, CI |
|
||
| [API](https://git.nockal.com/meleki/game-maker/wiki/API) | The PHP JSON API and the project document |
|
||
|
||
## Ideas, gaps and bugs
|
||
|
||
They live in the issue tracker: <https://git.nockal.com/meleki/game-maker/issues>. What is not
|
||
there yet is listed on the wiki's [Home](https://git.nockal.com/meleki/game-maker/wiki) page.
|