The Offender Engine
Our cabinets run on our own engine — a lightweight, cross-platform engine scripted in OffenderScript. Built for fast 2D, it also does 3D: BSP-based levels with a first-person camera and PhysX collision & physics. One codebase, native backends, the same game everywhere.
+ Direct3D 12 and Vulkan backends coming soon.
// An Offender game is just a handful of hooks.
func main() -> Int { /* load assets */ }
func tick(dt: Float) -> Int { // per-frame logic }
func handleEvent(e: AGD_Event) -> Int { ... }
func render() -> Int {
canvasBegin()
spriteDraw(hero, x, y)
canvasEnd()
return 0
}
// Typed structs, no boilerplate.
struct Enemy {
var x: Float = 0.0
var hp: Int = 3
var alive: Bool = true
}
// Load + animate a sprite — same call on every platform.
let sheet: SpriteSheetHandle = spriteSheetLoad("hero.spr")
let hero: SpriteHandle = spriteCreate(sheet)
spritePlay(hero, "run")
Write once, ship native
Direct3D 11 on Windows, Metal on macOS & iOS, OpenGL ES on Android — one codebase, no per-platform gameplay code.
OffenderScript (OES)
Gameplay in a clean, statically-typed language. Compiles to compact bytecode with an arm64 JIT for near-native speed.
2D, batteries included
Sprites & animation, animated tilemaps, an entity runtime with AABB collision, particle effects, audio, and SQLite saves — built in.
3D, BSP & PhysX
Not just 2D — render BSP-based 3D levels with a first-person camera and full PhysX collision & physics when a project calls for it.
Instant iteration
Edit a script, recompile in milliseconds, relaunch. Tune gameplay without ever rebuilding the engine.
Tiny footprint
A built game is a few-megabyte bytecode file plus assets — fast to load and easy to ship anywhere.
Real tooling
OffenderEdit, our visual editor, plus a compiler & validator, a cutscene director, and a sprite pipeline — the tools we build our own games with.