chopstickshq.com / arena
ARENA icon — pixel skull

ARENA

Doom-style arena FPS for macOS. Raw OpenGL, software ray tracing, five guns, escalating waves — in a 1.7 MB download.

Download for macOS

macOS 11+ · Apple Silicon · 1.7 MB · no accounts, no telemetry, no network

First launch: the app is self-signed, so macOS will warn on first open. Right-click ARENA.appOpenOpen once; after that it launches normally. The terminal install below handles this for you.

// TERMINAL INSTALL

One line, no Xcode or dev tools — downloads the prebuilt app to ~/Applications, clears quarantine and launches:

curl -fsSL https://chopstickshq.com/arena-fps/install.sh | bash

Prefer to read it first? install.sh — 30 lines, curl + ditto + xattr, nothing else.

// WHAT IT IS

Wave combat

Grunts rush you, imps lob fireballs with a glowing wind-up. Clear the arena, catch your breath, the next wave hits harder. Quit anytime — your run auto-saves. Die and it's gone.

Five weapons + shop

Kills pay credits. Press Esc (or B) for the shop: SMG, shotgun, machine gun, chaingun, armor, heals. Credits and gear reset on death — spend or lose it.

Software ray tracing

The whole level is traced per pixel in the fragment shader: sun shadows on High, plus floor reflections and point-light shadows on Ultra. No shadow maps, no screen-space hacks.

Procedural everything

Brick, tile, wood and metal are generated in-shader (zero texture files), the sound effects and music loop are synthesized WAVs, and the icon is rendered by a stdlib-only Python script.

Customise + presets

Crosshair colors, gun finishes, Low→Ultra graphics presets with an FPS counter to compare them. Everything persists between runs.

Explosive barrels

They chain. Fight near them at your own risk.

// CONTROLS

InputAction
WASD + mousemove / look
Left clickfire (shotgun per-click, the rest full-auto)
1–5pistol / SMG / shotgun / machine gun / chaingun
Spacejump
Rreload
Escpause menu — Resume / Shop / Customise / Settings
Bstraight into the shop

// GRAPHICS PRESETS

PresetWhat you get
LOWflat shading, 2 lights — runs on anything
MEDIUMprocedural textures, 4 lights, 4x MSAA
HIGHfull textures, 8 lights, 8x MSAA, ray-traced sun shadows
ULTRA+ ray-traced floor reflections and point-light shadows

// TECH

C++17 · OpenGL 4.1 Core (macOS max) · GLFW + GLM · miniaudio · no engine, no texture assets, ~3k lines. The ray tracing is real rays against the level's AABB soup, traced per pixel in GLSL — because the arena is a box soup, a slab test per box is all it takes.