Ironworks
The studio’s own game in the factory-building genre: from a drill on an ore field to production lines. Written in Swift with no third-party libraries, buildings drawn through Blender.

The brief
Factory games on phones usually either simplify the mechanics or start to stutter as the factory grows. The goal is a full simulation that holds 120 frames per second on ProMotion displays.
Architecture
The simulation is plain Swift with no SpriteKit. It advances in fixed steps, 60 times a second, and computes the same result on any device. Rendering is separate: SpriteKit draws up to 120 frames and smooths motion between steps.
The world is generated from a seed with GameplayKit noise and stored in chunks. Each chunk has its own tile map, so only what is visible is on screen. The camera zooms from 0.25 to 2× with inertia.
What already works
Placing and rotating buildings, inventory and hand crafting, fuel-burning drills, two-lane belts, underground belts and splitters, arms and crates. 112 automated tests and zero compiler warnings, which is a project rule. Smelters and assemblers come next.
Art
Buildings are modelled in Blender, rendered from above and turned into pixel art in the game’s palette: ochre, graphite and turquoise.
A simulation step and a rendered frame
The whole line, from drill to crate, is driven by one escapement wheel with 60 teeth: that is the simulation step. The flywheel beside it spins smoothly, like rendering at 120 frames.
Screens
Under the hood
- A fixed step 60 times a second, rendering up to 120 frames on ProMotion.
- A drill yields a piece of ore every 150 steps, a belt lane carries up to 7 items a second, an arm cycle takes 54 steps.
- A world from a seed: GameplayKit noise, chunks with tile maps, a 0.25–2× camera with inertia and pinch.
- Game data lives in JSON: items, recipes, buildings and the starting kit.
- Swift 6 and SpriteKit with no third-party dependencies, 112 tests in Swift Testing.
Swift 6 · SpriteKit · SwiftUI · GameplayKit · Blender