My Three.js homage to Deathchase by Mervyn Estcourt (Micromega, 1983), the pseudo-3D motorcycle chase that was a Spectrum smash hit and one of my earliest games.
First-person cockpit view, you and two AI bikes weaving through a procedural forest at speed, photon-bolt cannon, day/night cycle that advances during stage transitions.
CodePen: https://codepen.io/the-red-reddington/full/ZYBLxdp
GitHub Pages: https://red-reddington.github.io/web-demos/deathchase-3d
Source: https://github.com/red-reddington/web-demos/blob/4085ef8837f2e74772aea099e0819e2c23197946/deathchase-3d/index.html
Single HTML file plus a few GLB models and short audio clips. No build, no framework, no bundler.
Dependencies
- Three.js (GLTFLoader + DRACOLoader + KTX2Loader + MeshoptDecoder for compressed GLBs)
- Howler.js for spatial WebAudio (HRTF panner, listener in world space)
- nipplejs for touch controls
Core visual subsystems are adapted from some of my earlier posts:
Two things I intentionally left out from the original (hopefully, game purists will forgive me):
- Horizon choppers/tanks… because in proper 3D, and with my stage/score/odometer/day-night, there’s no need for additional progression “motivators”
- Guided photons (bullet bending)… because locked-direction-at-fire-time feels like the better choice to me.
A few things I had a lot of fun working out:
- Infinite forest via disc recycling. Bike at scene origin, world moves around it. Trees outside the disc relocate to fresh deterministic spots. Constant count, zero allocations. Player sees a stable forest with trees firmly planted in world coords.
- World-locked ground. Fixed disc at scene origin; motion is normal-map UV scrolled by bike position, rotated by heading.
- Cockpit HUD. Canvas texture on a plane flush with the dash bezel, parented to the bike group so it bobs/leans naturally.
- Enemy suit hue rotation in the fragment shader
- Enemy tree avoidance
- Two-zone tree collision: kill inner + graze outer
Performance: stable, maximum fps on any mid-tier device (incl. mobile) from the past 5 years, with full forest, dynamic shadows, two AI bikes running tree-avoidance, and spatial audio for three engines plus per-kill explosions.
Play Deatchchase 3D →
Feedback welcome, especially on gameplay feel. I spent a lot of time tuning it.
Enjoy!
4 Likes
I just saw this. The game aged well. I used to play these kinds of 3D games. There was one on the Amiga that involved tanks on the north pole. I like that your speed is limited to 126 (8-bits).
2 Likes
I’m glad you like! Yes, I wanted to add the tanks (even had some placeholders in one of the early cuts), but I decided to not do it, thinking they’d look tacky and unnecessary. In the original, the game needed multiple “props” to draw the player forward, towards the pseudo-3d horizon line. In my Three.js version, the depth is much more believable and I don’t think there’s a need for extra “motivators” (as I noted in my original post when listing the things I decided to leave out).
Yes, no need for tanks. (The tank game I am remembering was called Artic Fox. It is simply too painful to watch right nowadays.)
It appears that you have the enemy appear in front of you no matter what direction you are headed. If not, I would suggest a compass of some kind.
Since you are riding a motorcycle (or is it a snowmobile), did they implement tilting? I always wished (and still wish) that the hardware guys would have implemented screen z-rotation.
You’ve done a good job of giving the game a sense of motion. That was always a challenge. Back around 1988, I had the opportunity to discuss 3D flight sims with a programmer for Broderbund. We were both impressed by an air combat sim that had recently released. It was totally unrealistic, but it simulated motion by having you fly at low level, where you would fly past random dark rocks and the horizon would slowly cycle up and down. The combination was pretty effective.
1 Like
@phil_crowther there is a tolerance threshold (both time and distance) after which the enemy bikes get teleported to the front. So, if you ride past them, once a time T elapses and/or they’re farther than distance D, they’ll get slingshotted to the front. Just so that the player doesn’t get frustrated looking for them for too long. A UX feature, if you will.
Initially, I thought compass as well (even had a reusable plug-and-play one available from a different codebase), but then changed my mind and came up with this as my way of keeping the UI clutter-free and “pure”, as close as I could to the original.
It’s a motorbike.
The original didn’t have tilting, that’s one of my additions, for an extra bit of realism and immersion.
Thanks for the feedback, as always 

2 Likes
Muito massa esse projeto, parabéns… me fez ter algumas ideais para o meu!
1 Like