MOBA — 5v5 Summoner's Rift Broadcast (Round 11 3D upgrade)
Real 3D Summoner's Rift. 10 heroes. Towers fall. Dragon slain. Nexus down.
What this is
A full 3D MOBA broadcast in a single HTML file — Round 10 was a 2D mini-MOBA, Round 11 is the rebuild at console-shooter multiplayer broadcast quality. Real 3D Summoner's Rift with 3 lanes, river, jungle, dragon/baron pits, foliage. 5v5 humanoid heroes drafted from a 24-hero roster. 18 lane towers + 4 nexus turrets + 6 inhibitors + 2 nexuses. Match flow: INTRO → LANING → MIDGAME → LATEGAME → REPLAY → MVP → auto-rematch. Forever.
Why this is mind-blowing
Director cameras switch every 5-8 seconds based on event priority — LeaderCam locks on the leader, TeamfightCam fires when 6+ heroes converge, ObjectiveCam swings to dragon/baron pits, TowerFallCam zooms on a falling structure. The killfeed scrolls, the scoreboard updates, the announcer fires "FIRST BLOOD" then "DOUBLE KILL" then "DRAGON SLAIN" then "NEXUS UNDER ATTACK." 230-second match cycle observed across LANING → MIDGAME → LATEGAME → MVP, then auto-rematch starts fresh at 250s with a new draft from the 24-hero roster. This is the broadcast. The 2D version was the rehearsal.
An autonomous 3D MOBA broadcast at console-shooter multiplayer quality. Real
3D Summoner's Rift map (3 lanes, river, jungle, dragon/baron pits,
bushes for vision, foliage). 5v5 humanoid heroes drafted from a 24-
hero roster, each with per-role Q/W/E/R abilities. Instanced minions
spawn every 30s and march toward enemy nexus. 18 lane towers + 4
nexus turrets + 6 inhibitors + 2 nexuses. Junglers slay dragon and
baron during the match. Match flow: INTRO → LANING → MIDGAME →
LATEGAME → REPLAY → MVP → auto-rematch. Director camera with shot
picker switching every 5-8s. Full broadcast HUD: scoreboard with
game time, killfeed with hero names, announcer banners (FIRST
BLOOD / DOUBLE KILL / TRIPLE / QUADRA / PENTA / DRAGON SLAIN /
TOWER FALLEN / NEXUS UNDER ATTACK / VICTORY), dual team rosters
with HP/MP/KDA/ult, floating HP bars, minimap. Auto-rematch
forever.
Paste this into Claude, Cursor, or Copilot. Change one thing that matters to you.
What I learned shipping it
- InstancedMesh per minion type is the only way you fit 60+ creeps × 10 heroes × 28 towers × dragons + foliage into a single 3D scene at 60fps. One per-creep mesh would crater the framerate.
- Director cameras (LeaderCam / TeamfightCam / ObjectiveCam / TowerFallCam) with priority-based shot picking are what makes a MOBA broadcast watchable — without them you just see one clump of heroes and miss everything else.
- A buggy `dist2(ax,az,bx,bz)` callable that took 4 numbers but received 2 Vector3s caused every distance check in the game to return NaN. Heroes never engaged. One signature mismatch = entire engine non-functional. Always validate distance helpers.