Xbox emulation is getting better … video.html

Cxbx, the Xbox emulator, is now able to run Panzer Dragoon Orta with 3D graphics, albeit with a few bad glitches and at an unplayable speed. But still, impressive progress.

it is good enough to rip models from!

Sure it is! But I don’t think the emulator has such functionality yet.

Speaking of ripping content… a few weeks ago I wrote a few programs to rip Orta’s models, animations, textures and sounds. I will put them on Dropbox if there’s interest, but only after a major refactoring work (right now the code’s a huge mess!). They’re written in Java, since my skills with C++ are so poor I had trouble doing simple tasks such as reading files. :anjou_embarassed:

Animations need some work, most of them are being incorrectly indexed and I can’t load bone-based model animations yet, only morph-point-based.
Models seem to be imported correctly, except for maps; I think it has to do with the way I’m processing the triangle strip indices.
A few textures need some tweaking, but most of them are exporting perfectly (including mip-map levels). There’s a small issue with texture swizzling on 32-bit textures.
I’m not exporting those files to any known 3D file format yet, but I have all the necessary data to do so.

I can extract all sounds without problems, but most of them need a special Xbox-only ADPCM codec. Luckily, I found a tool which can convert those files into something our PCs can understand.

A few of those files are compressed with what seems to be a RLE compression algorithm. I disassembled the game executable to search for the decompression routine, and I actually found it, among many other interesting things.

After disassembling the executable, I’m actually thinking about the crazy idea of porting Orta to the PC. The catch is: I have no class definitions, no data structures, no function prototypes, absolutely nothing but a handful of Xbox kernel, OS and standard C library functions, which means understading the code is hard as hell. Although I figured out a few common code patterns (such as class initialization, member accesses and exception handling), I believe it’ll take some time to see some results.

if the emulator is direct x or open gl, there are ‘rippers’ that will capture the scene data like a screen capture. They don’t work w/ emulated saturn games because of the way everything is considered a sprite and not a vertex-based model (you just get a bunch of squares) . I would assume everything on xbox would be 3-D vertex data.

direct x

open gl

Good to see some progress. I think this deserves a mention on the microblog.


Do you know if the movies are encrypted somehow? I extracted all of them, but only a few are playable… well, all are playable, but only the PD1 intro/outro, the demo movie and some others can be seen correctly. The game movies seems to be encrypted because while the brightness information seems to be correct, the color it is not.

For the audio, there is a decoder for XBOX compressed sound somewhere in form of a directshow filter.

Movies are not encrypted, they’re just plain old MPEG. The problem is: they’re not standard MPEG. Instead, they’re Sofdec containers which have multiple audio and video streams and might have a few tricks up their sleeves which makes them incompatible with our average media player.

I’ll take a deeper look at videos after I play a bit with the new version of Cxbx.

EDIT: With FFmpeg I managed to convert successfully all but three of the movies: ins1_bs, ins2_bs and opening_bs. I noticed that these are the only videos split in two files with sfd and aix extensions. FFmpeg did convert them into something watchable, but the result was very blocky and oversaturated.

The audio comes out perfectly, without needing codecs.

Here are some examples:

I didn’t tune any settings, so the video quality might not be the best possible.

I guess this means i?ll soon be able to play Orta :anjou_embarassed:

Not so easy. There are a lot of issues on the emulation. I tried running the game myself but it nearly always freezes on a black screen when starting the game.

Yes, I was able to do the same. And those three are the ones that are encrypted (basically, the main movies). The luma is correct, but the chroma it is not (if you have a chance, try to copy a normal DVD .vob to your PC without using any software, just drag an drop, and then try to watch it using FFmpeg. You will see the same artifacts).

It seems that the key is stored somewhere inside the executable, as the DVD does not has any keys… Maybe when the emulator is working a bit better I would be able to rip the movies by capturing them frame by frame…

Ah, yes… I remember seeing a bunch of “random” numbers somewhere in the executable, referenced by the video functions.

I’m still having a lot of issues with the emulator, but finally got it to run the tutorials and a short section of the first mission. The intro video doesn’t play, unfortunately.

I knew it!..

Do you know where, or are you able to tell me the numbers? I remember that there was an old DVD decrypting software that lets you input the decryption keys instead of searching it on the DVD… maybe that works…

I’ll take a look at it and send you a PM when I find these numbers again. If you know the key length it would help a lot.

Oh, and please share the results! :anjou_happy:

If they are using a straight DVD encryption method, the key length is 5 bytes. Hope that helps! I will try to find the program (I believed it was DVD Decrypter, but while I can manually add the key, I can not open a VOB/MPEG file directly… will do some research on that).

I had no success finding a key of 5 bytes. It probably uses a longer key. I found stuff ranging from 24 bytes to 48 bytes, but that’s probably out of question.

By the way, I am now somewhat involved with Cxbx. You can track my findings and updates here.

I remember getting the intro as promo from Atari/Infogrames. The MPG had a pretty weird color matrix that was not understood by all players - maybe it is the same problem here?