# About the Project
GTA.js (gta-js) is a
reimplementation of the original 1997
Grand Theft Auto engine written in TypeScript and
Three.js. It parses the unaltered binary and text files from the
original 1997 PC shareware demo and brings Liberty
City to life directly in a WebGL canvas.
# Not an Emulator
This project is not a DOSBox wrapper, not an emulator, nor is it decompiled from the original executable. Because the engine was rebuilt from scratch using developer documentation and community specifications, there are differences compared to the original 1997 game in certain physics behaviors, animations, and unimplemented systems.
# Implementation Status
A high-level overview of what is currently playable in GTA.js versus features from the 1997 game that are not implemented.
✓ Implemented
- 3D City & Map Rendering: Stacked block city geometry, 40 slope types, animated water, traffic lights, and 24-bit palette-remapped sprites.
- Vehicles & Handling: Custom per-car handling profiles, 4-corner collisions, directional dent and door deltas, skidmarks, and car explosions.
- Weapons & Crates: Fist, Pistol, Machine Gun, Rocket Launcher, Flamethrower, armor, extra lives, and destructible barrels.
-
MISSION.INIEngine: Multi-process script interpreter, ringing payphones, objective guidance arrows, timers, and HUD briefings. - NPC Traffic & Pedestrians: Ambient traffic cars, carjacking, pedestrian walking/panicking/fleeing AI, and spatial Web Audio effects.
- Dock Cranes: Functional harbour cranes that hoist, swing, and crush vehicles for cash bonuses.
✕ Not Implemented
- Cops & Wanted Levels: Police patrol cars, roadblocks, wanted level heads, and getting Busted!
- Emergency Services: Ambulances responding to injured pedestrians and firetrucks extinguishing burning vehicles.
- Respray & Bomb Shops: Drive-in paint shops and bomb shops for rigging vehicles with timed explosives.
- Trains & Trams: Elevated/subway trains and streetcar trams along railway blocks.
- Full Campaign & Multiplayer: Scoped to the 1997 Liberty City demo level (no San Andreas, Vice City, or network play).
# Play the Demo
Click Start Demo inside the viewport below to load the assets and start playing, or use the button in the top-right corner to switch the game to fullscreen.
# Keyboard Controls
Press ? or Esc at any time inside the game to open the full controls reference, options, and testing overrides.
# References & Acknowledgements
Standing on the shoulders of giants: Recreating a 1997 game engine from its raw binary files would have been impossible without the official technical specs published by DMA Design and the extraordinary documentation, modding tools, and open-source research shared by the GTA community over the past three decades.
DMA Design & Core Specs
-
CityScape Data Structure (
cds.doc) & GTA Mission Template Description (mtd.doc) by DMA Design. - The Unofficial GTA Reference Handbook by Michael Mendelsohn.
- Corrections to CDS & palette/delta notes by Jeff Mathews (GTACars).
Engines & Prior Recreations
- gta-webgl (WebGL-GTA) by Niklas von Hertzen — the pioneering WebGL map renderer that sparked this project.
- carnage3d & OpenGTA C++ engine reimplementations.
- gta1-webedition by Mickaeligo.
Classic Community Tools
- Junction 25 & M1 map and city editors.
- GTACars, Cops, and FXT2TXT modding utilities.
Mission Scripting Tutorials
- Gouranga! mission scripting guides (Luke’s How to Write a Mission in 7 Days).
- Project Cerbera GTA 1 tutorials and documentation by Ben Millard.
-
All archived docs and tools collected in
bramus/webgl-gta-resources.