Creating the first release candidate and its pitfalls
A successful weekend. I've finished the first release candidate for the pre alpha of my game gnoblins.This candidate is still part of the closed pre alpha phase, the public version will be released at the end of this week.
I've created the installer with NSIS, a nice little open source installation package. And I've encountered several pitfall of creating an installation package.
One is the right management under vista/win7. Instead of keeping your saved data in the program directory you need to put them in the common or user specific application data directories when you want to install your program in a protected area (i.e. standard programs directory). After some adjustment to my code I differ between read-only data and read-write data. The read-write data like configs, screenshots, and saved games are now written to the user specific AppData directory.
The second barrier was the multilanguage support for the installer. The game already supports multiple languages (for now only german and english). NSIS has some good support for this and I could come up with a passable solution, thought the uninstaller has some language artifacts, not really important, but I wasn't able to fix them yet.
An other headache was the modification of the configuration files in which the game language is set. The first approach, in which I let the installer replace a language string with the choosen language, was a dead end. The installer modified the file, but doesn't adjusted the rights, so that the configuration file was restricted to the admin only. The installer hasn't any trouble of setting the rights of installed files, just when you modify them afterwards. My solution is to install both language versions of the configuration file and rename the correct one.
And the last one, the side-by-side hell. This occurrs when you compile your game vs a certain lib version (i.e. msvc80) and the target computer has an other version installed, in this case you are in trouble. My current solution works so far, but I'm not happy with it. I think that I need to fix it in the future, but I'm not sure how to fix it yet.