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.
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.
| Faction | Identity | Plays toward |
|---|---|---|
| The Covenant Cities | Priest-king city-states | Balanced economy, defense, and counters |
| The Watcher Remnant | Disciples of the fallen Watchers | Elite units and forbidden tech |
| The Nephilim Clans | Giant-blooded raiders | Brutal 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
| Input | Action |
|---|---|
| Left-click | Select a unit or building |
| Left-click + drag | Box-select your units (prefers soldiers over workers) |
| Right-click | Move / gather / attack / set rally / resume construction |
| WASD, arrow keys, or screen edge | Pan the camera |
| Q / E or middle-drag | Rotate the camera |
| Mouse wheel | Zoom |
| F | Attack-move |
| X | Stop |
| B | Build menu (workers) · Esc cancels |
| H | Center on your base |
| Ctrl + number | Assign 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
| Path | Responsibility |
|---|---|
src/main.js | Main menu, faction selection, game lifecycle |
src/game.js | Core engine — entities, combat, economy, production, win/loss |
src/data.js | Faction definitions: units, buildings, upgrade trees |
src/models.js | Procedural low-poly meshes |
src/terrain.js | Procedural map generation |
src/pathfinding.js | A* pathfinding + line-of-sight smoothing |
src/controls.js | Camera rig, selection, orders, placement |
src/ai.js | Enemy AI — economy, army, scouting, attack waves |
src/ui.js | HUD, minimap, selection panels, command buttons |
src/audio.js | WebAudio 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.