← Chris Sixsmith

Brickadia

Multiplayer sandbox and creation platform · Founding Developer, Partner & Director · Principal Programmer and Game Designer · 2017–present

Early Access launch trailer.

Clips from Devlog #7 and screenshots from the Steam store page.

Brickadia is a multiplayer building game made in Unreal Engine 5 and self-published on Steam for Windows and Linux. Players control an avatar in first or third person. It began in 2017 as an independent student project, entered Early Access in July 2025, and has more than 1,000 positive reviews and tens of thousands of copies sold.

I'm a founding developer, partner and director, a principal programmer and one of the game designers, and I help lead the team and manage the project. I take features from design through engine-level C++ and Blueprints, which the game uses heavily, in our custom Unreal Engine build to shipping, then watch players use them and iterate. I've submitted more than 3,500 changelists to the project since 2018. Alongside the systems work, I designed and built much of the game's UI, from the brick catalog and colour picker to the tutorial hints and server settings screens.

In Exhaustive Detail (no NDA since I'm a founder)

Leadership and project management

As a founding partner and a principal programmer, I help lead a small team and plan and ship its releases.

Game Designer

Rebuilding the building system around how players think

In Devlog #6 I set out what was wrong with the Alpha 5 building tools and how the redesign would fix it:

Point-to-reorient: the brick faces wherever you move the mouse. From Devlog #6.

Designing from playtests

As Devlog #7 describes, I went back to a single quickbar after playtests showed new players struggled with several, and added a starter car-building kit after watching convention visitors stall at an empty inventory.

Wires: making creations work, not just look right

I pitched wires in Interactive Brickadia: Next Steps (2021) so players could make things work without scripting. A switch can open a door, and logic gates handle cases like two switches fighting over one door. In the shipped design, covered in Devlog #7, wires are colour-coded by data type and convert between types automatically. Players have built Conway's Game of Life, Connect 4 and Othello with them.

A wire-logic build from the playtest showcase in Devlog #7.

Cars that drive the way they're built

For player-built vehicles, my aim in Devlog #7 was for the game to work out as much of the driving as possible from what the player builds, drawing on Robocraft and Spore. A seat sends controls to a wheel engine, which steers and powers whatever wheels are attached. Each part is optional and tunable. The same approach now extends to aircraft, which fly in a forgiving Arcade mode by default, with simulated handling available.

Game modes and rules

Game modes are made from small rules, such as rounds, lives, time limits, infection and restricted items, that admins combine and edit in game, with per-team overrides. I designed and built modes on top of them, from Bricktionary (a Pictionary-style building game with word lists and forfeit rules) to deathmatch with lives, allied teams and auto-balance. I also added Builder Mode, which lets an admin step outside the rules to fix a map mid-game.

Onboarding new players

We built the tutorial world on the game's own logic system. I made the Placer's features possible to switch on one room at a time, and rewrote the hint system with text ready for localisation. Advanced logic gates sit behind an "Advanced" catalogue view, with beginner-friendly tooltips. I also folded the hammer into the Placer and turned precision mode off by default after watching new players get lost.

Fair play without friction

Anti-griefing limits are tuned so normal players never notice them while spammers are slowed down. Examples are cooldowns that scale with prefab size, quotas and timeouts enforced inside transactions, and fire-rate caps for non-admins.

Principal Programmer

Replication

Brickadia streams bricks over a custom Unreal net channel (UChannel) rather than actor replication. Clients subscribe to world chunks prioritised by distance, and brick data is delta-compressed and bit-packed. On top of that channel I built replication for brick components, wires and entities, and moved brick owner tables into the same chunk subscriptions. Elsewhere, the game uses Unreal's Iris replication with custom NetSerializers, some of which I wrote, plus push-model dirty tracking. Edits go through a transaction system built by another developer, in which each action records its own inverse for per-player undo and redo. I wrote many of those actions.

A debug view of brick updates sent to clients. From Devlog #8, which I co-wrote.

Wire logic engine

My original implementation of wires was the successor to my Master's thesis project at Lancaster University, where I built a functional visual programming language. Wires run on the server as a change-driven directed acyclic graph. It keeps an incremental topological sort, splits into islands that merge and split as wires change, and only re-evaluates dirty nodes. Ports are statically typed with automatic conversion, cycles are rejected when a wire is connected, and microchips nest whole circuits inside one brick. In 2025 I rewrote it as Wires V2, adding event-driven execution flow, variables, branches, game-mode events (round start, player spawn, death and so on) and strongly typed custom events, with automatic migration of existing builds. The current version, Wires V4, improves on this design by moving gate logic back out of the graph into brick components while keeping the graph for execution order.

GPU wire renderer

Wires are drawn by Render Dependency Graph (RDG) passes injected with an FSceneViewExtension. The vertex shader builds each wire from its vertex and instance IDs as a Bézier ribbon, with no vertex buffer, and draws them instanced. Wire data lives in a GPU-keyed map over a structured buffer. Only changed entries are sent, as scatter uploads, and the buffer grows by committing reserved (tiled) memory. Updates are batched on the GPU with a compute shader, and drawing wires in screen space at four vertices per segment halved vertex throughput. It has been stress-tested with 8 million wires, and per-grid GPU transforms keep them attached to moving vehicles.

Moving gates and microchips without disconnecting their wires. From Devlog #8.

Procedural brick meshes

Resizable bricks are assembled from artist-made parts (corners, edges, faces and centre, 27-slice style) at any size. Each axis can stretch or repeat, UVs and normals are corrected after scaling, and the result is built with FMeshDescription. An editor import pipeline brings the parts in from Blender.

A procedurally generated, resizable picket fence. From Devlog #7.

Vehicles and flight

For background: Brickadia runs on PhysX 5 in our Unreal Engine build, with physics integration by another developer. Each brick grid is a single custom collision shape (PxCustomGeometry) with SIMD separating-axis contact tests and a loose-octree broad phase.

I built all the joints players use to make working machines on top of it: bearings, motors, sliders, wheel joints with suspension, and servos that switch from velocity to position control near their target, which makes lifts and sliding doors behave. Joints replicate to clients even before the bricks they attach to arrive.

A player-built mechanism using physics joints. From Devlog #7.

I built the Wheel Engine that drives player-built vehicles. It discovers what it should drive from the build (wheels, thrusters, gyroscopes and aerodynamic surfaces). It steers with Ackermann geometry and an automatic turning circle, or tank steering, and it flies aircraft with Arcade and simulated handling modes, a stall model and environmental wind. Problems with a vehicle are diagnosed on the server and shown as text above it in the world.

Tuning Ackermann steering on a test car. From Devlog #7.

Building tools and gizmos

I built nearly all of the game's building tools:

Gizmos use Unreal's Interactive Tools Framework, which is normally editor-only, running inside the game. Tools aim and preview on the client and send server-validated RPCs, which become undoable transactions. Ghost previews are replicated to other players.

Resize-dragging a brick as it's placed. From Devlog #6.

Game UI

I designed and built many of the game's interfaces, including:

Click a screenshot to see it full size.

Weapons and movement netcode

I wrote much of the current weapon prediction, building on a weapon system another developer created. Weapons simulate deterministically from a seeded random stream. The client predicts, and the server reconciles and resimulates. On top of it I added data-driven ammo and weapon resources with predicted counts, networked homing projectiles and server-side hit validation. In character movement, I made teleports keep players' orientation and velocity across the network without a frame of rotation flicker.

Server security, permissions and moderation

I built the roles and permissions system: hierarchical permissions on Gameplay Tags, role overrides that can grant or deny, and bans checked at authentication. I also built the in-game tools to manage roles and bans for players who aren't online. I hardened the server against abuse, fixing privilege-escalation bugs, validating and rate-limiting RPCs, capping expensive requests, and closing crash exploits.

Game modes

Game-mode rules are replicated objects that hook the game mode's events, stored per game mode and per team, and edited live in game. Old minigame saves migrate to the new format.

Items and inventory

I built Brickadia's current inventory system. The inventory is server-authoritative, item actors are pooled, and items are registered with Unreal's Asset Manager.

Remote browsing and prefabs

I built copy and paste as prefabs, with thumbnails generated in parallel, plus a converter that brings old saves into the new world format. Admins can browse, revise and transfer server worlds remotely over a chunked bulk-data channel.

R&D: the Behaviors scripting language

From 2019 to 2023 I designed and built Behaviors, a scripting language for bricks, through several rewrites. It had a lexer and parser, a static type system with native struct support, and an IR with compile-time evaluation. An emit-link compiler with a code generator and assembler targeted a register-style bytecode VM, and runtime errors gave stack traces from the bytecode's debug info. Scripts ran as brick components with wire inputs and outputs, and hot reload migrated live instances. Native bindings were first generated by a modified Unreal Header Tool, then by a template-based binding generator. It reached testers but was not released.

In development: voxel terrain

A networked, editable voxel terrain designed to extend to the horizon, with a planet-curved horizon. Terrain chunks replicate through subscriptions, like bricks. Edits are signed-distance-field (SDF) strokes written on worker threads into sparse, quantised chunks, then remeshed incrementally with surface nets, with collision built in parallel. Chunks use distance-based LOD with stitched seams and support Lumen and ray tracing. It has biomes, roads kept to drivable slopes, and a sculpting drill with crease, sharp and pinch modes. It's covered by Unreal automation tests.

The terrain tools in action, a crater blasted with dynamite, and generated caves.

Composer

I also wrote music for the game, including the tracks Thunderpunch, Custard, El Duo, Fountaintail, Morning Dream and Solution Not Forthcoming.

Links