Originally the previous versions were using the following VIS3 file structure:
The structure now is the same, BUT this "type" value is now always 0, so all files are considered to be OGGs.
Code: Select all
DWORD data_offset; DWORD size_packed; // if size_packed != size_unpacked entry is packed DWORD size_unpacked; DWORD type; // 0x00000000 = OGG; 0x00000008 = PNG; 0x00000003 = XML; 0x00000012 = CXML
The file holding the texts is always the last one, so you will be interested in 00002172.ogg (it's around five megabytes).
Now, the previous versions were using a XML file (compressed (XML) or compressed in chunks (CXML)), but now there's something called VBIN.
It's actually a pretty simple file, with it's own structure:
So to get the texts out, you need to uncompress the "data" according to the given sizes, using zlib (or equal).
Code: Select all
DWORD header; DWORD unknown; DWORD size_unpacked; DWORD size_packed; byte data[size_packed];
The easiest way to do this is using PHP and since it's designed to dynamically allocate the space needed, open the file, get rid of the header, the unknown DWORD, and the two sizes (in other words, trim the first 16 bytes), so the only thing you will left in there is the data.
Then just extract it like so (CMD):
php -r "echo gzuncompress(file_get_contents('00002172.ogg'))"; > localization.bin
and you will get the localization file.
Unfortunately it's not a XML file anymore (maybe some sort of compiled XML), so you will need to either HEX edit the texts or make some additional parsing tool for easier editing.
To sum it up:
1. Use Unpakke to get the files out of data.vis
2. Do the VBIN decompression kung-fu
3. Edit the texts
4. Do step 3 in reverse (compress, add the header, the unknown dword and the two updated sizes according to your changes)
5. use Unpakke to pack back the data.vis
I've probably didn't explain that very good, but I think that will be useful information if someone have the time (and the skills) to make some sort of tool.