Gallery
The four games below are one engine playing four genres. Each frame is the live game, running on the same WebGL2 backend as its own demo page.
Click a frame first, because the keyboard goes to whatever was clicked last. Each game takes a few seconds to fetch its textures and models before the first frame draws.
Opening a run #
A downloaded .f3drun opens in the desktop level editor
(apps/flutter3d_editor, flutter run -d macos), on the timeline panel
described in the level editor. There you can pause, step and
scrub to any recorded moment.
You can't open a run from this page, or from any browser. The editor is desktop-only by design: it writes a level document back to the disk it came from, which a browser will not do. So unlike the four games above it has no web build, and a downloaded run opens on whichever desktop has the editor installed.
Recording your own #
The shooter's sample above came from a real, headless run of the simulation:
a second process, driven over a socket, stepped sixty times a second and
written out as a .f3drun. Nobody edited the file by hand. The platformer's
and racing's samples are the same idea in a smaller shape. Each genre's
test/demo_test.dart already proves that a shipped level replays byte for
byte, and each has a tool/record_sample.dart that runs the same route and
writes the result to site/assets/samples/ as well as asserting against it.
Strategy has no sample, and a recorder is not what it lacks. The tape in a
.f3drun is a GameAction's continuous press, release and analogue state,
sampled every fixed step, which is the shape a shooter's aim or a car's
throttle already has. A strategy match is played through discrete orders
(CommandPost.restock, a TrainOrder), and main.dart never turns those into
an InputState; there is no InputState anywhere in that file. Recording a
match would mean teaching the tape format a second kind of frame, which is
more than writing a third tool/record_sample.dart.
Next #
- Quickstart: build these four yourself, from a fresh checkout
- The level editor: what opens the run you just downloaded
- Testing: how a run's checkpoints are recorded and compared