Skip to content
Tech News
← Back to articles

Reverse Engineering Crazy Taxi, Part 2

read original more articles
Why This Matters

This article highlights the importance of reverse engineering techniques in understanding and recreating classic game assets, which can inspire developers to create web-based interactive versions of vintage games like Crazy Taxi. It demonstrates how detailed analysis of proprietary file formats can unlock 3D models and game data, fostering innovation and preservation in game development. For consumers and developers alike, these insights enable deeper engagement with classic titles and the potential for custom modifications or recreations.

Key Takeaways

Table of Contents [+]

This is the second of a series of posts detailing how I put interactive, 3D versions of Crazy Taxi’s levels onto the web. If you haven’t read the first post, I’d highly recommend it, since this builds off many of the ideas developed there. Part 1: Introduction & archive reversing

Part 2: Reversing shape files

In part 1, we covered some basic elements of reverse engineering in order to decode Crazy Taxi’s .all file format, which turned out to be an archive format used to bundle thousands of the game’s asset files. I also stressed a couple lessons I’ve learned while reverse engineering, which I’ll go ahead and recap here:

Take detailed notes as you’re reversing. You never know when that random offset you noticed 2 hours ago will come in handy again. As early as possible, test your theories with actual code. Writing a quick script that checks your assumption across hundreds of files will save you tons of time compared to manually scanning, and that code can serve as a testbed for further discovery and theorizing.

In this post, we’ll build on these lessons with a couple new techniques in order to puzzle out the .shp file format, which I suspected might have something to do with the game’s 3D models.

What’s in a name?

But why do I think .shp files have anything to do with models? Well for one, .shp looks a lot like the word “shape”, doesn’t it? Admittedly, this is fairly weak evidence by itself, but it was enough to give me my initial hunch and was luckily bolstered by a number of other observations:

Prior to expanding the .all archives, the only .shp file in the game files is called cube0.shp , and cubes are famously a kind of shape. It also seemed roughly the size I’d expect for a cube’s geometry (i.e. small)

archives, the only file in the game files is called , and cubes are famously a kind of shape. It also seemed roughly the size I’d expect for a cube’s geometry (i.e. small) Besides cube0.shp , all the other .shp files live in archive files with names like polDC0.all , polDC1.all , etc., whose prefix pol kinda suggests the word “polygon”

... continue reading