Blog Home

Reverse Engineering WipEout (PSX)

In 1995 one of my all time favorite video games was released: the original WipEout for PlayStation. The brand new PlayStation produced 3D graphics previously unseen on living room TVs and WipEout exploited its capabilities like no other game at the time. It was one of the pioneering titles of the fifth generation console era.

WipEout's art style was distinctively different from other games too. With the help of the UK based design studio The Designers Republic the game achieved a mature look that was in stark contrast to the comic style found in most other games.

I remember poking around on the CD of the PC Version of WipEout back in the day, looking for ways to modify the game. I was thrilled to find .pcx images of all textures and tried to change one of the in-game billboard graphics to show my name. I wasn't able to get it working.

Now, almost 20 years later, I thought I'd give it another shot.

WipEout Model Viewer – A WebGL Experiment

Extracting 3D Models

I didn't have much experience with reverse engineering any data formats, but given the game's age, I expected the 3D format to be quite simple and straight forward. What surprised me was the many different nuances in which scene models were stored. The track itself was stored separately with a different format, spanning multiple files, yet again.

Knowing the PlayStation didn't have a Floating Point Unit (FPU) I assumed vertex data had to be stored as Integers. Using JavaScript and the three.js 3D Library I quickly whipped up a page that would load one the games's .PRM files that I thought would contain the 3D objects. I loaded all data in the file as coordinates of 3 Integers (x, y, z) and rendered them as a point cloud. This allowed me to quickly shift the stride (the spacing between distinct coordinates in the file) and look for patterns.

What I found was indeed chunks of raw vertex data, along with an object header specifying the object's internal name and number of vertices and polygons in that object. Each polygon is preceded by a polygon header and a chunk of index pointers into the object's vertices. These polygon headers is where I probably spent most of my time. I identified 11 different polygon types used by the game – triangles, quads, sprites, textured or flat, having vertex colors or face colors etc. Two types are still ignored because I couldn't figure out what they were.

The track itself is stored in several distinct files. The most interesting of which are TRACK.TRV, containing raw vertices, and TRACK.TRF containing the track faces as quads of 4 index pointers into the vertices. Pretty straight forward.

Reading textures

Most textures in early PSX games were stored in the TIM image format, containing data straight in the PSX' native frame buffer format. A TIM file stores pixels either directly as 16 BPP colors, or as 8 BPP or 4 BPP indices into a color palette. And indeed, you can find a number of TIM files on the original WipEout CD: the start splash screen, background images, loading images etc. However, the images I was most interested in – the textures used for 3D models - were missing.

Some googling revealed that textures are stored in the compressed SCENE.CMP files. These files contain a very simple header that specifies the number of TIM images in the file, along with the uncompressed sizes of each image. The data itself is compressed using LZ77. I even found some C code in a reverse engineering wiki, that would uncompress these files. With this code quickly ported to JavaScript and poking around in the polygon data to find the texture index and coordinates, I was finally be able to draw textured models.

The textures for the track however were an entirely different beast. Along with the vertex and face data (TRACK.TRV and TRACK.TRF) each track comes with an additional TRACK.TRS, containing Track Sections of some sort, and a TRACK.VEW, containing visibility lists (I think). I spent a lot of time trying to find the texture index for each track face in any of these files.

In fact, the unhelpfully named TRACK.CMP did not contain the track textures. Instead, track textures were stored in a file called LIBRARY.CMP, which seemed to be compiled from a set of source images.

As I painstakingly found out, the tracks in WipEout had a Level of Detail (LOD) system, subdividing each track face in up to 4x4 quads when they're near the camera. This was probably done to lessen the impact of the PSX' missing perspective correction when drawing textures. These subdivided faces also used higher resolution textures.

Now, here's the kicker the LIBRARY.CMP file contains about 300 images, but only 19 distinct textures - each in 3 different LOD levels: 4x4, 2x2 and 1x1 tiles, each tile being 32x32 pixels in size. And, as if that wasn't complicated enough, these 4x4 and 2x2 tiles are not stored in the right order. Instead, yet another file, LIBRARY.TTF, stores indices into the LIBRARY.CMP to compose these 4x4 and 2x2 versions.

Knowing that the texture index has to be between 0 and 18, I found it stored as a single byte along with each track face. I also found that another single byte for each track face specifies a few flags for that face. The most important one for drawing: whether to draw with flipped X texture coordinates.

Wrapping up

Finally, I had a complete, textured, vertex-lit scene and track. Using three.js drawing everything was a no-brainer, as it happily lets you create models of all kinds of different polygon data. I also wanted to have a simple fly-through animation for each track. three.js was tremendously helpful to create a smooth camera spline along the track. The optional orbit controls for three.js are top notch, too. They just work without any modifications on mobile and touch devices.

With all the work that went into this project, handling the WebGL drawing with three.js turned out to be one of the simplest parts.

The finished WipEout Model Viewer loads all the original data files and does all the binary file reading, unpacking and scene creation in JavaScript.

All in all, I wrote about 800 lines of JavaScript to load and draw 3D scenes for a 20 year old game. I wonder how big the original WipEout sorurce is. It's quite sad that probably nobody will ever see it again, considering that it now belongs to Sony.

Full source on github:

Tuesday, April 14th 2015
— Dominic Szablewski, @phoboslab


#1 – Arthur Roussel – Tuesday, April 14th 2015, 13:20

Impressive work!

#2matt – Tuesday, April 14th 2015, 13:26

Amazing work. Well done.

#3Nick Burcombe – Tuesday, April 14th 2015, 13:47

Very Cool

#4 – phi – Tuesday, April 14th 2015, 13:58

What a great project. It looks fantastic.

I would even pay some real money for a full WebGL conversion of the game (do you hear that Sony?!).

#5Mint – Tuesday, April 14th 2015, 14:50

Totally incredible. Fantastic stuff! <3

#6CoLD SToRAGE – Tuesday, April 14th 2015, 15:03

Emulate the PS One - all you need is...

#7 – Baker – Tuesday, April 14th 2015, 15:29

Brilliant work! - Any chance you could do Destruction Derby next? :-)

#8 – Craig – Tuesday, April 14th 2015, 15:39

Absolutely excellent work, what a great new way to look at an old classic! Can you do Wipeout 2097/XL and Wipeout 3? It would be very interesting to look at those tracks the same way!

#9Aleks Dorohovich – Tuesday, April 14th 2015, 17:46

That's impressive. Looks absolutely stunning in full screen.

#10Brian – Tuesday, April 14th 2015, 17:51

This is great, and it even plays well on mobile. I threw together a WebVR mod, which I will gladly share if anyone wants it. But it is guaranteed to make you want to throw up.

#11 – jackie – Tuesday, April 14th 2015, 17:54

This is exactly what I want them to do with PS1 classics, simply make them look like they should in the correct resolution (doesn't even have to be widescreen (60fps and no warping)

However, the warping needs to be an option to turn off and on, but atleast fix the resolution problem. these and ps2 games look so much worse on an hdtv.

would be nice if they coud fix fog and draw distance. while adding in thins to fix the barrier issues. amazin.

#12mo – Tuesday, April 14th 2015, 20:19

This is really great. Not only were you efficient w/ only 800 lines! But the fly-through runs smooth, and ColdStorage himself commented!! Open WipeOut 2015.

#13 – Dave Rose – Tuesday, April 14th 2015, 20:52

Excellent work, brings back a few memories

#14Robert – Tuesday, April 14th 2015, 20:57

Respect, a very high work project. ( and btw a very nifty game ;))

#15Lukaszeq – Tuesday, April 14th 2015, 21:23

A blast from the past! 20 years on the clock and it still looks fresh. Thank you a lot!

#16 – i386 – Tuesday, April 14th 2015, 21:28

Totally awesome!
Cold Storage - Tentative, possible for audio?

#17 – tronic – Tuesday, April 14th 2015, 21:56

Outstanding work. I would love to view this with a VR headset!

#18 – JudaX – Tuesday, April 14th 2015, 23:47

Simply awesome to be able to revive this game on a browser. Great job!

#19Thomas Beagle – Tuesday, April 14th 2015, 23:59

Oh god, my hands are twitching with the desire to play this.

Impressive work.

(Wipeout is one of my favourite games of all time, I played it obsessively until I could finally beat it.)

#20 – MDX – Wednesday, April 15th 2015, 01:05

Well done man...

#21 – Anderson – Wednesday, April 15th 2015, 03:00

Wow! Impressive. And what are you waiting for? Go write your name on the billboard!

#22Lazokaen – Wednesday, April 15th 2015, 04:05

Awesome. I'm blown away. Gorgeous work.

I too was amazed and felt this was one of those series at the start that just "sat right" the whole package. Although 2097 was my favourite, I respect the whole series.

That era of gaming just brings back so many memories. I have 3 distinct eras I can close my eyes and fly back to. The Megadrive times that I just used to love as a child, the Wipeout, Tekken, Destruction Derby and to an extent the MGS / Gran Turismo later PSX time and the Battlefield times when I first played BF2 and literally thought "this is everything". Although, 2142 is still my favourite.. again, something with a fond futuristic love must be inside me.

Did you ever get your name in the billboard here? - I've looked, but can't find it :)

#23 – Alex – Wednesday, April 15th 2015, 06:47

Holy crap that brought back memories. I played that level over and over in a Wipeout demo.

#24 – Revoltman – Wednesday, April 15th 2015, 08:04

Świetna robota, pozdrowienia z Polski.

#25morris – Wednesday, April 15th 2015, 11:16

Awesome work! It's always good to see there's more PSX reverse engineering :-) I did a similar project for Vagrant Story: - it supports character models, map files, and (partly) animations.

#26dfluke – Wednesday, April 15th 2015, 11:39

This is amazing, great work

<3 Wipeout <3

#27Rob – Wednesday, April 15th 2015, 16:29

That is fantastic. great work, It brought me back as well as this was one of my all time fave games that stil stands the test of time. 2097 was great as well. Remember they also made a game called rollcage which was great too. Not many games like that any more.

Thanks foe making my week.

#28 – virtua75 – Wednesday, April 15th 2015, 19:26

This is awesome! Congratulations for your work.

#29 – PAETH CLAUDIUSRAPHAEL – Wednesday, April 15th 2015, 20:45

A wonderful piece of art ...

of hacking you did there; and i fully agree with your opinions.

Although i would push it further:
Besides the stark contrast to comparable games at that time, i would state it Generic and Unique at once.
WipeOut ever was a masterpiece and what Designers Republic created, was an atmosphere that punched the whole industry and any potential player straight into the face;
Like Blade Runner impacted at cinemas and blasted viewers with its reinvention of a classical tale, if in terms of modelling, showcasing or just 'the inbetween'.
To me WipeOut was 'THE INBETWEEN', that ( before it was released ) to the world wasn't imagineable at all.
The perfectionism and love to detail, especially when kitting and fitting components that can't be glued neatly, remembered me of creations like Turrican on Commodore 64, or Katakis; It looked to me as if the designers have used similar techniques, to span the arch over gaps given by the architecture of the platform.

Not many games have been constructed with that love for 'too new to be understandable' and 'too old to reconsider retrofitting';

But WipeOut was not just a fascinating 'Otherwise Perspective' to the Racing Genre.
It grewed emotions ( in my opinion ) , based on a not-anywhere-ever-again-reached 'FEEL OF FUNCTION' by an unbelievably realistic/humanoid traction to the Analogue JoySticks of the Dual-Shock-Controller. Though that was the most disturbing thing for most players, as the masses were used to play straight digital. If you ever played a paddle-controlled PONG you might understand what i try to describe. The sumpy feel, the swampy reaction, the drifting decay of Velocity ... With that you could even beat and wipeout those hemp-fueled racers who prefer to play days in row until reaching perfection, with nothing but most-efficient minimal ticks to the digital-cross, steering blind-flight.

- Not to mention, the SoundDesign and -Tracks, the artwork, the UserInterfaces ( especially in Part III of this Epic Series ).

On point ? Perfect .

Not many titles have been that hilarious at giving a feel of Speed and nervously tremending hope of please-do-not-crip-at-that-corner. And though shocking to the max, when fully cracking up in the midst of superb Turbo-per-Turbo-per-Turbo-Boost, it ( in comparison to other racing games ) never spend the feel of 'now you can forget it at all' - it trimmed players to try to go on from crash-site instead of heavily practicing restart-game-combo-techniques.

Woah, sorry; That was a load. It seems i ran wet just by reminiscing that masterpiece.

Let me say thanks to you for a creative work on something that deserves to be held alive.

S466531257 BOSS

#30 – flashback – Wednesday, April 15th 2015, 21:36

Man sorry if I sound like a pussy but I'm getting teary eyes. Just one week ago I remembered about this game (well, the three PSX entries of the series) and a lot of curiosity about its development came to me. So I started digging for interviews and stuff like this. And today someone posted this in a forum and I'm just blown away, it's a lot more than what I expected to find. Big Kudos to you for making this, it's absolutely cool. Also greets to the Wipeout devs wherever they are (CS seems to be here you rock man).
Thanks everyone..

#31 – Hybrid Divide – Thursday, April 16th 2015, 02:01

This was amazing to look at.

The only things I could possibly request are to do the same with 2097's assets, and to make windows screensavers out of them both.

I'm loving this so much!

Come introduce yourself over at!

#32 – Salim Siwani – Thursday, April 16th 2015, 11:07

Well done sir. As one of the developers (I was actually on Krazy Ivan but helped a little on the tech for Wipeout here and there and I worked on Wipeout Fusion for PS2) and a keen reverse engineer, I must say you have done an extremely good job.

Fathoming out how to store and render the (in those days) large data sets required us to get quite creative in how we stored stuff as we tried to cram as much as we could into every last bit and byte.

Most of us were fresh out of university too so it was all very new to us but the fact you've managed to figure out every twist and turn is impressive to say the least.

Thank you for that excellent blast from the past. :)

#33jumpstartr – Thursday, April 16th 2015, 11:39

Now that we're finally able to render the textures in real time on any device, I'd love to see someone mod WipEout 1-3 with some sexy HD texturing for emulator-play.

Ohhhhh man that would be fantastic.

#34Nick Burcombe – Thursday, April 16th 2015, 13:03

PAETH CLAUDIUSRAPHAEL - FYI Designers Republic didn't design this game they just provided the Graphic Design direction - it was made in Liverpool UK, by a team of awesome people at Psygnosis, which later went on to become Studio Liverpool for SCEE.

#35 – flashback – Thursday, April 16th 2015, 13:49

Hello, I'd like to point out that the fly-view sometimes goes under the track on Firefox 37, under Linux Mint (uname -a: Linux 3.13.0-37-generic #64-Ubuntu SMP x86_64 x86_64 x86_64 GNU/Linux) (I am using the open source radeon (r600) drivers on a Radeon HD 5670 if that matters)

#36 – Chris – Thursday, April 16th 2015, 14:47

Awesome work, thanks

#37 – Chris – Thursday, April 16th 2015, 15:58

This is our generation's version of making ships in a bottle, isn't it? Technically impressive and perhaps to an outsider a waste of time. To those for whom it meant a lot, incredibly evocative and powerful. Thank you so much for this.

#38 – Oliver – Thursday, April 16th 2015, 16:43

Wow, thank you so much. I loved the game and I was very impressed to see the graphics from DR back in my Browser!

#39 – Zod – Thursday, April 16th 2015, 17:09

Have you considered taking a look at the tracks from the Windows port of Wipeout XL to see if the format is the same? It would be interesting to be able to swap in the tracks from the original to XL in that fashion.

#40 – Knifa – Thursday, April 16th 2015, 18:39

Complete guess, but maybe the last two polygon types specify where the power-up pickups are?

#41 – washone – Friday, April 17th 2015, 03:24

Amazing this is one my favorite games and to see it like this made me feel young again. Great job thanks for sharing

#42ivodopiviz – Friday, April 17th 2015, 05:05

Currently exploring Wipeout 3's files to see if I can use your work on that game too.

Excellent job!

#43 – Aybe – Friday, April 17th 2015, 21:33

Hello from C# :

Thanks for sharing this !

#44Shawn M. Crawford – Monday, April 20th 2015, 21:01

Nice work!

#45 – Hutch – Tuesday, April 21st 2015, 09:16

Very sick. nostalgia all over my face

#46 – basetta – Tuesday, April 21st 2015, 17:56

mega thumbs up for you!

#47 – 2097 – Tuesday, April 21st 2015, 21:42


#48 – Alex Power – Wednesday, April 22nd 2015, 08:37

I wonder if the wipeout 2097 files from the Amiga version (which was higher resolution and was releasee in 2002) arr of help. I have a copy of the Amiga version.

#49 – Aybe – Thursday, April 23rd 2015, 00:43

I have started working on a remake in C# (

Anything relating to the game is welcome, so @Alex Power, feel free to get in touch.

#50 – Alex Power – Thursday, April 23rd 2015, 10:23

Here's the Amiga version:

#51 – Alex Power – Thursday, April 23rd 2015, 10:31

Check out the WIPEOUT2097_Amiga/PICS/HI-RES folder - it has TGA files which you can open in photoshop.

#52 – Aybe – Thursday, April 23rd 2015, 17:30

Thank you, once I've made significant progress on my project, peeking into WOXL is clearly the next target :)

#53Spectrum – Thursday, April 23rd 2015, 19:24

precioso trabajo!

#54 – Steve – Friday, April 24th 2015, 01:02

Amazing stuff!

So... any way to edit textures an re-insert them back into the game? :)

#55 – Aybe – Friday, April 24th 2015, 01:28

Basically yes, as long as you know which file they are being picked from, as laid out Dominic they're not necessarily from the file you think they do.

Another issue is rebuilding a valid PSX image, simply creating an ISO image out of files will not work. There are tools for that but by lack of time/interest I haven't really tried ...

Maybe you could open a modding thread at ? It'll be easier than discussing this here.

For the PSX CD issues, forum @ might be of help. (also check this

#56 – Aybe – Friday, April 24th 2015, 01:29

PS : the comment system picked the closing parenthesis above as part of the link, remove it.

#57Tigrou – Friday, April 24th 2015, 21:18

This wipeout model viewer is 100% compatible with Wipeout 2097/XL tracks (without changes), because both original Wipeout and the second one use exact same file formats.

The only things that need to be fixed is camera paths junctions (which are hardcoded as ranges in the wipeout.js file). What about using the curve path inside the TRACK.TRS files instead ?

#58 – Aybe – Sunday, April 26th 2015, 02:41

Bump from

Seems like Wipeout 3 data is on its way, though there's still a long way to go ... your help (Dominic) will be greatly appreciated ! I can come back and let you know when I've tackled the most obvious layers so you can take a look at the core of the problem, or better, just follow my topic at the forum !

#59Dominic – Monday, April 27th 2015, 01:46

I have added all tracks from WipEout 2097/XL to the viewer now, including an unfinished track not seen in the game.

Big thanks to Tigrou and Aybe! Great to see this game still has an awesome community :)

#60 – PAETH CLAUDIUSRAPHAEL – Tuesday, April 28th 2015, 12:17

@Nick Burcombe - Thanks that you mentioned it and corrected me; For sure, the most relevant part was not named; The team behind, those that did the work;

I wonder why, well maybe because it is like standing in front of the forest and find no tree to pee ...

--- I think what i originally wanted to say with: ''' ... what Designers Republic created, was an atmosphere that punched the whole industry ''' was in sense of ''' ... without this it would have JUST been A perfect RACING GAME.

But, yeah you're absolutely right, and i wonder, too, why no owl came to mind and boohooed me. Maybe because Psygnosis was ever elite? ( ... my saying 'bout trees );

By the way: Would you ( Dominic Szablewski ) - mind thinking about creating a game-engine out of it? - In sense of a framework with small apps to edit tracks, etc. ? Or to say it in other words:

Do you have an interest in going on further with this open in source ?

Are there any known regulations/laws/infringements hindering you or one interested in doing it ?

S466531257 BOSS

#61 – Aybe – Wednesday, April 29th 2015, 19:57

@Dominic: I've released the first version of the PBP unpacker, here :

I've also put an Excel sheet laying out my discoveries on one of the files, they are likely to all harbor this structure.

The interesting / hard work is coming now !


#62 – Aybe – Friday, May 1st 2015, 05:23

@Dominic : first steps of RE-ing WO3 ->


#63 – SinglePixel – Saturday, May 2nd 2015, 02:54

Have you seen Formula Fusion on kick starter :-D ?
Also, perhaps the polygons you can't identify are for denoting triggers?

#64 – John – Sunday, May 3rd 2015, 21:59

Oh my god just found this, this is so cool :) Best game ever :)

#65 – Aybe – Thursday, May 7th 2015, 23:14


Here are my final version of the tools for the games:
They can extract PBPs and deal with CMPs and TIMs.

So when you have a minute :D

#66 – Filip – Tuesday, May 12th 2015, 23:26

WOW!! Excellent work! This is very important for any modern high-quality remake of the game. Even the Viewer is very impressive. Thanks!

#67 – Cole Stilson – Thursday, May 14th 2015, 00:16

Love this work, though I notice that several of the 2097/XL tracks have the checkered track textures everywhere.

Can this be fixed? Thanks!

#68 – Enot – Tuesday, May 19th 2015, 11:44

And why there are billboard in russian? The "слизь создание" sign... It translates to "slime creature" in english, but how the hell it get there?

#69Leo2236 – Wednesday, June 10th 2015, 05:04

Impressive work @Dominic!!!

I'm also fascinated by reverse engineering PSX games formats. Even have made few dozen tools mostly for PSX games, among them there's a 3D viewers for Gran Turismo tracks and cars.

Here's the site link with all my tools if you or someone else is interesting:

#70 – dtt doj – Thursday, July 16th 2015, 11:04

wow. amazing draw distance. hope a playable version is comming soon. still have the original psx disc

#71 – plude2015 – Sunday, July 19th 2015, 22:00

HI, maybe shooting in the dark here but im looking to download the sound effecs from Wipeout like announcers and ship sounds/ weapons. Just love this game. Is there a place that i can do that? Im not a hacker or programmer or have access to sophisitcated software. if so please mail me at

#72 – Aybe – Monday, July 27th 2015, 14:31

@Enot : that track is located in Russia,

@Leo2236 : your site is really great and these tools are fantastic !

@dtt doj : I am actually working on a remake using Unity, so keep your CD at hand !

@plude2015 : grab PSound @ then scan/convert SOUNDS/WIPEOUT.VB to WAVs.

#73Daniel – Thursday, August 13th 2015, 10:56

@Dominic - Incredible work.
I have copied the entire directory from my ATI 3D Rage PC edition and it too loads up fine in the model viewer. I suspect the DOS wipeout data will also work :)

#74 – Daniels – Sunday, August 23rd 2015, 03:42

Awesome! i can watch it for hours.

#75 – George – Friday, November 6th 2015, 22:16

Oh god please make a patch to enable the PC game to run on modern hardware :D

#76 – SirDude0Lot – Monday, November 9th 2015, 13:46

Would it be possible to convert the model and texture data to something that was readable by modern software? (3ds, dae, fbx etc), would love to do some modding of the models (higher poly versions etc).

#77 – MyUsernamePls – Tuesday, December 29th 2015, 22:59

Greate work, loved those "weird ships"!

#78 – KMiller – Thursday, February 11th 2016, 01:30

This is wicked! This game - I spent hours playing it on a hand-me-down Sega Saturn. Great work.

#79 – Cosogor – Monday, June 20th 2016, 17:27

Hello! I'm working on a pseudo-emulator PSX in Unity Engine. I want to get a 3D models from the old PSX games and use them in my project. You did a wonderful viewer 3D models from WipeOut game. To my regret, they can be viewed, but can not be converted into a popular 3D-formats (eg .OBJ). I need this to convert the WipeOut in my project. Can you give me the models from the WipeOut in a format suitable for import into any 3D editor (such as Blender or 3D Max)? I will be very grateful for the help.

#80 – reverser – Saturday, September 10th 2016, 23:04

I got the idea many times but I thought nobody would ever be able to reverse engineer this... it is absolutely outstanding. Much respect and Kudos to you !

#81 – Jackson – Wednesday, October 5th 2016, 23:35


#82 – Tropixx – Thursday, October 13th 2016, 22:34

It would be cool if you can make this into a game as well!

Post a Comment:

Comment: (Required)

(use <code> tags for preformatted text; URLs are recognized automatically)

Name: (Required)

Please type phoboslab into the following input field or enable Javascript. This is an anti-spam measure. Sorry for the inconvenience.