Skip to content

Latest commit

 

History

189 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Loco

A single-player, browser-based 3D action-MOBA built solo. You play Randy of the Nature faction against a PvE Hell army: three lanes, barracks, a jungle with mini-bosses, and a commander to kill. One match runs 10–15 minutes.

Status: playable MVP. Not feature-complete, and the balance is still moving.

Non-commercial study project, inspired by the mechanics of Land of Chaos Online. All art and 3D assets in this repository were generated for this project.

Gameplay

Why this repo may be interesting

The gameplay is only half of it. The other half is the architecture, which was the actual design goal:

  • The simulation is pure. src/sim holds every game rule and runs on a fixed 30 Hz tick with zero imports from the renderer or any browser API. It runs headless — which means the same code can become the authoritative server if this ever goes online.
  • No magic numbers in code. Every balance value — hero, creeps, buildings, jungle, economy, items, map layout — lives in src/data/*.json. Tuning the game never means touching logic.
  • Balance is verified by simulation, not by feel. npm run sim plays full 10–15 minute matches headless and reports the outcome, so a balance change can be checked in seconds instead of played by hand.
  • Rendering interpolates between ticks, so a 30 Hz simulation still presents at 60 fps.

Architecture

src/sim      pure game logic — fixed 30 Hz tick, headless, no Babylon, no DOM
src/render   Babylon.js scene, models, animation, interpolation between ticks
src/ui       DOM layer — lobby, HUD, end screens
src/data     JSON balance data — the single source of truth for every number

The dependency rule is one-directional: render and ui may read sim, never the reverse. Pathfinding is a waypoint graph living inside sim, so navigation works headless too.

Stack

TypeScript · Vite · Babylon.js 7 · Vitest · Playwright · glTF/GLB assets

Running it

npm install
npm run dev     # dev server
npm run build   # typecheck + production build
npm test        # unit tests (Vitest)
npm run sim     # headless autosimulation of a full match

Node 20+ required.

Scale

~18 500 lines of TypeScript across 32 source files, 66 test files, 187 commits of real history. Built by one person, with AI used as an implementation layer — architecture, review, and every design decision stayed manual.

Screenshots

Lobby Randy
Lobby Randy

Development

The project was built spec-first: a written design document defined all mechanics and numbers before implementation, and each iteration ended with a review pass against reference screenshots. Twenty such iterations are captured in progress-iter-*.png.

Contributor notes and the naming glossary live in CLAUDE.md; the full design spec is under docs/.

About

Browser-based 3D action-MOBA built solo — TypeScript, Babylon.js, headless deterministic simulation, JSON-driven balance

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages