SHADOW RUN
A dark, atmospheric 3D survival runner. Swipe, jump, slide and escape the shadow.
Offline edition: there are no accounts, leaderboards or ads, and the game makes no network requests. Progress is saved only in your own browser. Code for an optional online server and for a mobile wrapper exists in the file but is switched off, and neither has been built or tested. It has been tested only in a desktop browser, not on real phones.
01Project overview
A small 3D runner game with a 10-level story, an endless mode and a daily challenge. Dodge walls and pits, collect crystals, find secret routes and unlock characters. It runs offline in the browser.
Key features
- Story mode with 10 levels, from The Forgotten Forest to The Final Escape
- Endless Survival and a Daily Challenge with its own seed each day
- Swipe or keyboard controls: change lane, jump and slide
- Crystals, secret routes, missions, achievements and unlockable characters
- 3D graphics in WebGL, generated sound, and vibration feedback on phones
- Works fully offline; progress is saved only on your device and can be erased in Settings
02Problem being solved
A small game is a good way to practise real-time graphics, input, sound and game design in one place. The goal was a runner that feels good with a single swipe and needs nothing but a browser.
03Technical architecture
- One self-contained HTML file with plain JavaScript and no game engine or framework.
- A deterministic simulation: level layouts come from a seeded random generator, so the daily challenge is the same for everyone on the same day.
- WebGL draws the 3D scene; the Web Audio API generates sound effects and music.
- Progress is stored in the browser's local storage under one key, with a version number so saves can be upgraded.
- A configuration object switches the game between the offline edition (used here) and a future online one.
Technical documentation
Controls
Keyboard: arrow keys or A, D, W, S and Space. Touch: swipe left or right to change lane, up to jump and down to slide. Played in landscape.
Your data
The game stores your progress in your browser under one key. It has no login. Reset progress in Settings, or clearing this site's data in your browser, removes it.
Screenshots
Captured from the real game in a desktop browser at phone size, from the first level.
04Technologies used
- HTML
- CSS
- JavaScript
- WebGL
- Web Audio API
05Development process
- Built the core run first: lanes, jump, slide, obstacles and collisions.
- Added level generation from a seed, then the story levels, endless mode and the daily challenge.
- Added crystals, missions, achievements and characters to give runs a reason to repeat.
- Chose an offline edition for this site so visitors need no account and nothing leaves their device.
- Cleaned up before publishing: any stored sign-in data is removed when the game starts, and a style clash that hid the Reset progress button and blocked the Privacy link was fixed.
06Interactive demonstration
This is the real game, running in your browser. Move with the arrow keys or W A S D (or swipe on a touch screen). On a phone it is played in landscape, so use the button below to open it full screen and turn the phone sideways. Progress is saved on this device only. There are no accounts and no network requests.
Open the game in its own window ↗07Screenshots





08Challenges and solutions
Challenge
Controls have to feel instant on a phone, where a swipe is not a button press.
Solution
A swipe fires its action as soon as it crosses a threshold, without waiting for the finger to lift, and chained swipes work in one gesture.
Challenge
A daily challenge should be fair without needing a server.
Solution
The level is generated from a seed built from the date, so the same day gives the same layout on every device.
Challenge
Players should not lose progress, but the game should not collect personal data.
Solution
Everything is kept in local storage on the player's own device, and Settings has a Reset progress button that erases it.
09Future improvements
- Test on real Android and iPhone devices
- Optional online leaderboards and accounts, only if a secure server is built
- Wrap it as a mobile app
- More levels, characters and sounds
10Source code
Source code is not public yet
This project has no public repository. When one exists, add its URL as repo in data/projects.ts and the link appears here.