Shadow of the Watchers

June 13, 2026 · View on GitHub

An ancient-apocalyptic, browser-based real-time strategy game. Command one of three asymmetric factions across a mythic, pre-flood wasteland — build an economy, raise an army, and shatter your enemy before they shatter you.

Deploy Three.js Vite License: CC0-1.0 Assets

▶ Play it in your browser


Overview

Shadow of the Watchers is a complete, StarCraft-style RTS built from scratch with Three.js and Vite — set in a mythic, pre-flood world of fallen Watchers, giant clans, and bronze-age city-states. There is no game engine, no external art, no audio files, and no copyrighted IP — only the genre's bones: a worker economy, fog of war, tech trees, asymmetric factions, and an AI that comes for your base. Every model, every sound, and the entire map are generated procedurally in code.

The Three Factions

Each faction is genuinely asymmetric — different units, buildings, upgrade trees, costs, and a distinct path to victory.

FactionIdentityPlays toward
The Covenant CitiesPriest-king city-statesBalanced economy, defense, and counters
The Watcher RemnantDisciples of the fallen WatchersElite units and forbidden tech
The Nephilim ClansGiant-blooded raidersBrutal melee and base-breaking

Features

  • Asymmetric 3-faction design — unique rosters, buildings, and balance per faction
  • Full economy & production — resource gathering, build queues, tech upgrades, supply
  • A pathfinding* with line-of-sight smoothing and soft, physics-based unit separation
  • Fog of war — persistent discovery with real-time visibility and minimap integration
  • Procedural terrain — deterministic noise, flattened base sites, a central ridge with passes, and mountainous borders
  • Reactive AI opponent — manages workers, follows build orders, scouts, defends, and escalates attacks
  • Procedural low-poly models with emissive accents for faction identity
  • Synth audio — UI and combat sounds generated live via the WebAudio API (zero audio files)
  • Neutral guard posts — leashed units that defend resource nodes, then return home

Controls

InputAction
Left-clickSelect a unit or building
Left-click + dragBox-select your units (prefers soldiers over workers)
Right-clickMove / gather / attack / set rally / resume construction
WASD, arrow keys, or screen edgePan the camera
Q / E or middle-dragRotate the camera
Mouse wheelZoom
FAttack-move
XStop
BBuild menu (workers) · Esc cancels
HCenter on your base
Ctrl + numberAssign a control group · number recalls it

Right-click the minimap to order moves; left-click/drag it to pan the camera.

Run locally

git clone https://github.com/atxgreene/Ugh-Guys-.git
cd Ugh-Guys-
npm install
npm run dev      # Vite prints a local URL to open

Build a production bundle:

npm run build    # outputs static files to dist/
npm run preview  # serve the built bundle locally

The build output in dist/ is plain static files, so it also deploys to Vercel, Netlify, or any static host.

Project structure

PathResponsibility
src/main.jsMain menu, faction selection, game lifecycle
src/game.jsCore engine — entities, combat, economy, production, win/loss
src/data.jsFaction definitions: units, buildings, upgrade trees
src/models.jsProcedural low-poly meshes
src/terrain.jsProcedural map generation
src/pathfinding.jsA* pathfinding + line-of-sight smoothing
src/controls.jsCamera rig, selection, orders, placement
src/ai.jsEnemy AI — economy, army, scouting, attack waves
src/ui.jsHUD, minimap, selection panels, command buttons
src/audio.jsWebAudio synth

Deployment

Every push to main triggers the GitHub Actions workflow, which builds the Vite bundle and publishes it to GitHub Pages at https://atxgreene.github.io/Ugh-Guys-/.

License

Released under the CC0-1.0 license — public domain. Do anything you like with it.