A complete scripted match. 35 seconds, no sound. Download the MP4.Read a description of the video
Coloured pieces turn and slide into a falling-block well. Completed rows disappear, throwing matching sparks sideways as the score and line count rise. The hold slot keeps one piece in reserve, and the next five pieces appear beside the board. Later the stack reaches the top: a “TOPPED OUT” banner appears and thousands of coloured particles burst across the screen, then fade. The game has no sound or spoken commentary.
A match in progress.Four lines cleared, eight frames later: about nine hundred sparks from a field of up to ten thousand.
Watch the pieces lock, the rows clear and the sparks fade. The stills below the video are exact
frames read back from the graphics device; the video is compressed for playback.
The Examples page says how the game is built.
Labrador is a small engine with firm opinions. Each one below helps some games and gets in the
way of others, so each comes with its price.
Ordinary C++ and standard tools
A game is a C++ program that links two static libraries. Its build file is a dozen lines of
CMake. There is no project format, no code generator and no macro dialect between your source
and the compiler.
The cost: all behaviour is C++, and every change to it is a compile. There is no visual editor, no scripting language and no hot reload.
The engine meets a game at a few small interfaces, and what stands behind them is the
game’s choice: one class per entity, or one object holding ten thousand particles in a flat
array.
The cost: storage and ownership are your decisions. The engine does not manage objects for you, and those interfaces are virtual calls.
A scene can be drawn through several cameras into several viewports in one frame, which is
what split-screen is. Gamepads come with deadzones, press edges and menu navigation.
The cost: online play and 3D are out of scope for good, not just for now.
The falling-block sample keeps its whole game in a library that links nothing from the
engine, so its tests play complete matches with no window and compare them byte for byte.
The cost: that separation is a design you choose and keep. The engine makes it possible; it does not make it automatic.
This is main.cpp from the minimal sample, the project you copy to start a game. It names
the window, loads the content and hands the engine a first state. Everything it leaves out
belongs to the engine.
samples/minimal/main.cpp
int WINAPI wWinMain(_In_HINSTANCEinstance, _In_opt_HINSTANCE, _In_LPWSTR,