Thursday, August 11, 2011

Virtual On: MARZ [PS2]

VO:MARZ and a number of other games use the ROFS archive format developed by CRI Middleware. A lot of these archives have unencrypted data but an encrypted TOC so they are kind of useless as they are. I had a bright idea and ran the game in emulation, made a save state and loaded the EE RAM in a hex editor to find the unencrypted TOC. I found it, patched it in to the ROFS file and ripped everything out of it. How's that for resourceful :D

They really went all out with the CRI stuff too; not surprising for a Sega game. It uses ADX for sound and music, NINJA format model and texture containers. NINJA models and PVR textures. This might be a lot of fun to finish ripping apart :D


  1. Awesome!!!
    How to extract NINJA models and PVR textures from cvm file?

    Could you explain it so I can understand more easily?

  2. Like I said on Xentax. Look at this.
    Blue is the size in bytes of the file. Red is the offset to the file. Yellow is the filename including padding. Multiply the offset by 0x800 then add 0x1800 to it and that is the offset to the beginning of the file in the CVM. Read out file with the size and you're done. Lather, rinse, repeat.

  3. Thank you for your explanation.
    I'm afraid I don't understand.
    I'm a beginner.
    If you have enough time,could you give us some more details on that.
    Here is my eeMemory.bin files.

  4. Are you familiar with hex editors? Open that file in a hex editor and look at 0x00A54614. That is the beginning of the TOC. The end of the last entry is at 0x00A96780. It looks like it has different offsets than mine(probably the US or EU release. I am working from the JP release) but the same math should apply. Take, in the first example, 0xA8 and multiply by 0x800 then add 0x1800. This is the offset into the CVM file you need to seek to. Then read 0x003ad800 bytes out of the CVM from that offset. This is the first file in the CVM. Each file follows this same structure. If you look at the file name, count back 9 bytes, that is the offset. Count back 25 bytes and that is the file size. If you can copy everything from 0x00A54614 to 0x00A96780 into another file I can probably provide you the source code for a tool that will rip the data out of the CVM file. It will be written in C.

    I won't help you with anything else for now. If that is too difficult to understand you might consider starting with an easier archive first to learn how this sort of thing works. I started simple too, it helps to get a handle on things. If you haven't used or don't have a hex editor, I recommend Hex Workshop for Windows.

  5. This comment has been removed by the author.