In this forum a few questions keep being asked. Is there a CG rip? Are there differential updates? Why do old saves not work? Is there a translation to language X?
A few week back I posted here a proof of concept in creating binary patches with the bsdiff tool. The resulting patch is about the same size as the increment from previous to current version. This suggests that the files are very organized and that probably new stuff is added at the end with some minor changes at the front -- usually a header. The procedure works, but it needs to be automated into a nice GUI tool for at least Windows and Mac users. The Visionaire developers are skeptical about the procedure, but if the bsdiff code is correct -- and it has been used quite a long time by many people -- it should work. Plus we can check if the patched files are the same as made by the official export through checksums...
About two long days ago I started examining the files with hexdump. The first four bytes in the savegameXX.dat, .vis, .vc and .vs files are always VIS3. That let me to the Unpakke tools which has a DLL for handling this game files. On the website of this author I found an article about the
You must be registered to see the links
. That can easily be cracked and for this game the key is 485f13a285b3f109 for the game files and
32e617da0a210263 for the savegames. Only the header is encrypted, but that contains pointers to were individual files start and end in the overall file.
So the files can be exploded to the original -- no names, so those are just numbered -- PNG, WEBP and some other files. However thos can't be shown because Visionaire mangled the width and height. However PNG files have a CRC32 and because most images are at the most say 2000 by 2000 pixels only 4 million combinations have to be checked. On modern day computers that is seconds at most
See
You must be registered to see the links
from the author of Unpakke.
As said the savegames have the same structure. I suspect the image shown in the interface and the actual game state. Rumors suggested that the last were XML files and everybody who plays Man of the House know how easily those can be hacked
Unfortunatly I didn't get a gzipped XML but a VBIN(U?) file. There is not a lot of information about Visionaire on the internet. But by pure chance (?) I searched for the key above and that led me to two other programs -- both with source code!
You must be registered to see the links
(abn.zip) is still maintained and is written in Delphi. That one extracts all the images and can also umangle the PNG ones. For the WEBP it needs the original file name and those should be present in the VBIN in the main .vis file. However its seems Visionaire did some things which isn't implemented in VisExt yet...
The VBIN files are partially translated and I can see text in them. But also a lot of binary data as well.
So now I can give a better answer to the above questions. First the CG rip. Most of the files are WEBP but the found PNG ones confirm what Nenad always told us. For example the jerk off mouse pointer in Willy's bedroom when hovering over the ugly painting is nine PNGs. Yes, you can convert them to a GIF but automaicly for all other animations? Don't think so. If the purpose of the rip is checking if everything is seen, scanning trough multiple almost identical files will be tedious, but possible. If someone can hack the VBIN file for the original names. Or comes up with some other way to unmagle the file headers...
My conclusion that the files are highly organized is correct. So differential updates -- either trough bsdiff or VisExt -- can be done. Don't understand why the Visionaire developers don't give game developers that option. It should be very easy to do. Both routes I've found now are too complex for most users so either route means a nice little GUI program that uses one of the tricks. For patching it doesn't matter that the WEBP and VBIN can't be recovered completely. For patching it is better to use the mangled versions and add the newe ones to the previous version of the file and recreate the header. Pretty straight forward...
Then the old savegames. Even if new conditions are added or changed in the next episode, those are known. So a clever -- XML for example -- state description could be updated. I've seen this done in Ren'py games which already have a clever mechanism, but could be broken if the programmer does some radical changes. A game state is just variables and constants to use in the program. Period. Old saves should be possible. Period. However because I can't convert the VBIN completely I can't check if it is a clever state description or a very stupid one which makes the process much harder. So for the moment I don't have a definite answer to this one...
Then the translations. Visionaire doesn't have a good system in place it seems. The Unpakke for example was made years ago just for people to translate games themselves. Again I now have clues -- see the source code -- that the .vis has a large VBIN which is an compressed or packed XML. It is logical that it contains all the dialogue and if it is an XML translations should be possible. They did it in the past for older versions and regular games. Again at the moment this strands on the VBIN problems.
Hope that someone checks all of the above and can help me with finding more answers.