Skip to content
Carlo Miguel Dy
← Back to the specimen catalogue

Acc. XXIII · Lignum arcanum — P2P voxel combat arena, cultivated 2026

Voxel Warlock Brawl Arena — P2P voxel combat arena with synthesised audio

Systems R&D engineer · 2026 · Independent studio

A Three.js voxel arena brawler with host-authoritative WebRTC multiplayer, twenty spells, and fully synthesised audio with no asset files — built through multi-agent orchestration with explicit model tiering.

Lignum arcanum — P2P voxel combat arena, cultivated 2026

Field notes

The context

The studio wanted a real-time multiplayer combat system that didn't depend on a game server — a P2P arena brawler forced hard decisions on simulation authority, network synchronisation, and procedural audio that a single-player prototype never surfaces.

Cultivation

What I built

  • Built knockback-based combat with damage scaling and charge accumulation, and a shrinking arena with a lava elimination hazard.
  • Implemented host-authoritative P2P multiplayer over WebRTC data channels via PeerJS, with room codes, invite links, and QR joins.
  • Designed twenty spells with distinct cooldowns and effects, plus chain-lightning and particle effects with screen shake.
  • Built a fully procedural audio layer through the Web Audio API with no asset files — every sound is synthesised at runtime.
  • Separated the codebase into a pure simulation module independent of rendering, ability/warlock-state modules, a Three.js renderer with interpolation, a PeerJS/WebRTC networking module, and a Web Audio synthesis module — the split that makes the simulation testable without a browser.
  • Shipped a service worker with offline support and a PWA manifest on browser-native ES modules with zero build step.

Root system

How it works

The simulation runs as a pure module decoupled from rendering, with a Three.js renderer layered on top for interpolated presentation. Networking runs host-authoritative over PeerJS/WebRTC data channels. Supabase Postgres backs region matchmaking and accounts, currently in progress. Hosting is static on Vercel with service-worker caching, and assets come out of a Blender Python pipeline. The project was initiated with Sakana AI Fugu Ultra, then maintained through multi-agent orchestration with explicit model-tier declarations — planning and review on the strongest tier, implementation on the middle tier, reconnaissance on the cheapest — plus an unattended issue-progression loop converting feature-gap analysis into a structured backlog.

Harvest

Outcomes

  • A working P2P combat arena with twenty spells, host-authoritative netcode, and zero-asset procedural audio, verified with Vitest.
  • Region matchmaking, leaderboards, and accounts remain in progress against the Supabase backend.
  • The repository's own rules mandate model-tier declarations on agent calls and ban AI attribution in commits — an internal governance pattern proven out here.
  • No players claimed — this is a technical prototype.

Herbarium

The work itself

Main menu of Voxel Warlock Brawl Arena at 1600 by 1000 pixels, on a near-black indigo background sprinkled with tiny coloured star specks. A left rail opens with a thin outlined pill reading "ARENA BRAWLER · P2P", under which a three-line blocky pixel wordmark stacks "VOXEL" in white, "WARLOCK" in orange, and "BRAWL" in violet, each letterform glowing faintly. Beneath it a two-line tagline reads "Blast rivals off the platform. Last warlock standing wins." Next comes the small caps label "WARLOCK NAME" above an empty rounded text field with the placeholder "Name your warlock". Below that a vertical navigation list runs ONLINE, PRIVATE, CHARACTERS, RANKS, ACCOUNT, TUTORIAL, CREDITS in monospaced caps, each with a small icon; ONLINE is the active row, rendered in orange on a lighter panel with an orange marker bar at its left edge, the rest in pale lavender. The centre column is headed "ONLINE PLAY" in the same pixel type, with the supporting line "Queue into a hidden 1v1. We start in your home region, then widen automatically." Under the label "REGION" sits a dark dropdown reading "Southeast Asia", then a large orange gradient button labelled "Quick Match", then a bordered panel headed "QUEUE STATUS" containing the text "Search your home region first. We widen the queue automatically." Behind these panels stands a tall pale low-poly warlock in a smooth hooded robe and a wide drooping pointed hat, posed on a broad grey circular dais ringed with a faint red glowing circle. Along the bottom-left edge, control hints read "Move WASD · Aim Mouse" and "Cast 1-8 / QERFCVXZTGBH" with the keys in small key-cap chips, followed by "Crafted by carlomigueldy.dev".
Fig. 1The menu shell fronts the P2P matchmaking layer — region selection, quick-match queueing and queue status — with the warlock model rendered live in Three.js rather than as a static art asset.
In-match capture at 1600 by 1000, viewed from a high overhead camera. A large blue-violet hexagonal voxel platform, built from stepped rectangular tiles at slightly different heights, floats in the centre of a flat glowing red-orange lava field that fills the rest of the frame; small orange embers drift across the lava. Scattered across the platform are low-poly props — grey boulders, a dark stone pillar, two dark green conifers, a small dark statue — and floating orange-tipped rune wands hover both on and around the platform. On the left half of the platform a red-orange jagged meteor is impacting the ground inside a bright pink circular telegraph ring drawn on the tiles. Three small voxel warlock figures carry floating name labels: "Smart Bot 1" in cyan at upper right, "Smart Bot 3" in yellow at centre right, and "Smart Bot 2" in green at lower centre right, with pale pink star-shaped impact bursts popping next to two of them and a short orange projectile streak in flight. HUD overlays: top centre, a dark pill reads "ROUND 1 — BRAWL!" beside a large digital timer showing 0:10. Top right, a panel headed "WARLOCKS" lists four rows — "MIGUEL (you)" greyed out and struck through, then Smart Bot 1, Smart Bot 2 and Smart Bot 3 in white with coloured dots, small K/D readouts of 1/0, 0/0 and 0/0 and an orange 0 score column; two toggle buttons above it read "SFX: On" and "Music: On". Bottom centre, a six-slot ability bar shows keycaps and names Q Lightning, E Meteor, R FireSpray, Z Splitter, X Homing and V Drain, each tile with a spell icon and a small circular cooldown glyph, Lightning outlined in cyan as the selected slot. Below the bar a green-to-yellow health bar reads 119/180 with an empty dark mana bar beneath it. Bottom right, four dark slots each labelled "Empty" stand for unfilled rune sockets.
Fig. 2A live round showing the arena hazard loop — meteor with a ground telegraph ring landing on the voxel platform over lava while three bot warlocks trade spells — with the round timer, K/D scoreboard, cooldown-tracked ability bar and health/mana bars all driven off the simulation module.
A later frame of the same match at 1600 by 1000, again from the overhead spectator camera. The blue-violet hexagonal voxel platform sits over the same flat red-orange lava field, with the meteor and its telegraph ring gone and the burnt scar of a dark rock left near the left edge. Terrain tiers are clearly visible — raised blocks casting hard shadows onto the tiles below, and a sunken dark trench cutting through the middle of the platform. Props include two grey boulders, a dark green conifer, a stone pillar, a dark statue and several floating orange-tipped rune wands. Three voxel warlocks are clustered across the lower middle of the platform under floating labels: "Smart Bot 1" in cyan at centre left with a bright orange diamond-shaped projectile bursting directly on it, "Smart Bot 2" in dimmed white to its right, and "Smart Bot 3" in yellow at lower centre, also wrapped in an orange burst. Four pale pink and white star-shaped spell impacts pop across the platform, and a long red-orange beam streaks diagonally on the right side. HUD overlays are unchanged in layout: top centre a pill reading "ROUND 1 — BRAWL!" with the timer at 0:15; top right the "WARLOCKS" panel with "MIGUEL (you)" struck through and greyed and the three bots active at K/D 1/0, 0/0 and 0/0 with orange 0 scores, plus "SFX: On" and "Music: On" toggles; bottom centre the six-slot ability bar with Q Lightning (outlined cyan), E Meteor, R FireSpray, Z Splitter, X Homing and V Drain; below it a green health bar reading 119/180 over an empty mana bar; bottom right four dark rune slots each labelled "Empty".
Fig. 3Mid-round combat with several spell impacts resolving at once across the voxel platform — the frame where the particle, projectile and beam effects all run concurrently against the same host-authoritative simulation state.
Late-round capture at 1600 by 1000 from the overhead spectator camera. The blue-violet voxel platform has visibly contracted — it is now a noticeably smaller hexagon than in the earlier frames, ringed on every side by a wide expanse of glowing red-orange lava dotted with drifting embers. On the right side of the platform a warlock is mid chain-lightning cast, surrounded by an arc of scattered pale blue voxel cubes and a curved cyan shockwave, with a small white four-pointed spark floating to its left. At upper left, a figure labelled "Smart Bot 3" in yellow is engulfed in a spray of orange-gold voxel shards over a faint purple ring. Near the top of the platform, "Smart Bot 2" in green stands beside a grey stone pillar. Two grey boulders, a dark green conifer, a small dark statue and a sunken dark trench occupy the rest of the surface, with orange-tipped rune wands floating around the edges. Just off the platform on the right, a pickup labelled "Blast Tome" in orange hovers inside a pink glowing ring. HUD overlays: top centre, a pill reading "ROUND 1 — BRAWL!" with the timer at 0:26. Top right, the "WARLOCKS" panel now shows both "MIGUEL (you)" and "Smart Bot 1" greyed out and struck through as eliminated, while Smart Bot 2 and Smart Bot 3 remain white and active at K/D 0/0 with orange 0 scores; "SFX: On" and "Music: On" toggles sit above. Bottom centre, the six-slot ability bar shows Q Lightning outlined cyan alongside E Meteor, R FireSpray, Z Splitter, X Homing and V Drain. Below it a green health bar reads 119/180 over an empty mana bar, and bottom right four dark rune slots each read "Empty".
Fig. 4The shrinking-arena pressure mechanic late in the round — a compressed platform ringed by the lava elimination hazard, two warlocks already struck off the scoreboard, and a chain-lightning cast resolving as an exploding voxel burst.
Pressed leaf — what it taught
Decoupling simulation from rendering is what makes P2P netcode testable at all; and model tiering across planning, implementation, and reconnaissance is a cost and quality lever that a single-model workflow doesn't have available.