void SaveFactionsFile()
        {
            Directory.CreateDirectory(GamePath);

            using (WatcherStream ws = new WatcherStream(factionsFileWatcher, FileMode.Create, FileAccess.Write))
            {
                ws.Write((byte)freeFactionIndices.Count);
                freeFactionIndices.ForEach(i => ws.Write(i));

                ws.Write((byte)takenFactionIndices.Count);
                takenFactionIndices.ForEach(i => ws.Write(i));
            }
        }
        void SavePlayerInfo()
        {
            Directory.CreateDirectory(PlayerPath);

            using (FileStream fs = new FileStream(PlayerFile, FileMode.Create, FileAccess.Write, FileShare.None))
                using (WatcherStream ws = new WatcherStream(fs))
                {
                    // read once
                    ws.Write(GamePath);
                    ws.Write(installation);

                    // info
                    ws.Write(playerFactionIndex);
                }
        }
        void SaveGameInfo()
        {
            Directory.CreateDirectory(GamePath);

            // game infos & compressed save
            using (WatcherStream ws = new WatcherStream(sessionFileWatcher, FileMode.Create, FileAccess.Write))
            {
                ws.Write(version);
                ws.Write(modName);
                ws.Write(campaignName);

                // game info
                ws.Write(difficulty);
                ws.Write(autoSolve);
                ws.Write(autoManage);
                ws.Write(shortCampaign);
                ws.Write(arcadeBattles);
                ws.Write(noBattleTimeLimit);
                ws.Write(startFactionIndex);
                ws.Write(lastPlayedFactionIndex);
                ws.Write(turn);
            }
        }