/// <summary> /// After selecting game, we load the localization file. /// Deppends on the gameType selected. /// There are two Localization files from ffg, one for D2E and one for MoM /// </summary> private void loadLocalization() { // After content import, we load the localization file if (LocalizationRead.selectDictionary("ffg") == null) { DictionaryI18n ffgDict = new DictionaryI18n(); var localizationFiles = Directory.GetFiles(ContentData.ImportPath() + "/text", "Localization_*.txt"); foreach (string file in localizationFiles) { ffgDict.AddDataFromFile(file); } LocalizationRead.AddDictionary("ffg", ffgDict); // CoSH used for Dunwich Horror data DictionaryI18n cshDict = new DictionaryI18n(); foreach (string file in Directory.GetFiles(ContentData.ImportPath() + "/text", "SCENARIO_CULT_OF_SENTINEL_HILL_MAD22_*.txt")) { cshDict.AddDataFromFile(file); } LocalizationRead.AddDictionary("csh", cshDict); var game = Game.Get(); foreach (var packInfo in game.config.GetPackLanguages(game.gameType.TypeName()) .Where(kv => !string.IsNullOrWhiteSpace(kv.Value))) { LocalizationRead.SetGroupTranslationLanguage(packInfo.Key, packInfo.Value); } } }
// Unity fires off this function void Start() { // Find the common objects we use. These are created by unity. cc = GameObject.FindObjectOfType <CameraController>(); uICanvas = GameObject.Find("UICanvas").GetComponent <Canvas>(); boardCanvas = GameObject.Find("BoardCanvas").GetComponent <Canvas>(); tokenCanvas = GameObject.Find("TokenCanvas").GetComponent <Canvas>(); tokenBoard = GameObject.FindObjectOfType <TokenBoard>(); heroCanvas = GameObject.FindObjectOfType <HeroCanvas>(); monsterCanvas = GameObject.FindObjectOfType <MonsterCanvas>(); // Create some things uiScaler = new UIScaler(uICanvas); config = new ConfigFile(); GameObject go = new GameObject("audio"); audioControl = go.AddComponent <Audio>(); updateList = new List <IUpdateListener>(); if (config.data.Get("UserConfig") == null) { // English is the default current language config.data.Add("UserConfig", "currentLang", "English"); config.Save(); } currentLang = config.data.Get("UserConfig", "currentLang"); DictionaryI18n valDict = new DictionaryI18n(); foreach (string file in System.IO.Directory.GetFiles(Application.streamingAssetsPath + "/text", "Localization*.txt")) { valDict.AddDataFromFile(file); } LocalizationRead.AddDictionary("val", valDict); roundControl = new RoundController(); // Read the version and add it to the log TextAsset versionFile = Resources.Load("version") as TextAsset; version = versionFile.text.Trim(); // The newline at the end stops the stack trace appearing in the log ValkyrieDebug.Log("Valkyrie Version: " + version + System.Environment.NewLine); // Bring up the Game selector gameSelect = new GameSelectionScreen(); }
// This loads content from a pack by object // Duplicate content will be replaced by the higher priority value void LoadContent(ContentPack cp) { // Don't reload content if (loadedPacks.Contains(cp.id)) { return; } foreach (string ini in cp.iniFiles) { IniData d = IniRead.ReadFromIni(ini); // Bad ini file not a fatal error, just ignore (will be in log) if (d == null) { return; } // Add each section foreach (KeyValuePair <string, Dictionary <string, string> > section in d.data) { AddContent(section.Key, section.Value, Path.GetDirectoryName(ini), cp.id); } } foreach (KeyValuePair <string, List <string> > kv in cp.localizationFiles) { DictionaryI18n packageDict = DictionaryI18n.ReadFromFileList("", kv.Value, DictionaryI18n.DEFAULT_LANG, Game.Get().currentLang); if (packageDict == null) { // Unable to load dictionary return; } packageDict.setCurrentLanguage(Game.Get().currentLang); LocalizationRead.AddDictionary(kv.Key, packageDict); } loadedPacks.Add(cp.id); foreach (string s in cp.clone) { LoadContentID(s); } }
// This loads content from a pack by object // Duplicate content will be replaced by the higher priority value void LoadContent(ContentData.ContentPack cp) { // Don't reload content if (cd.loadedPacks.Contains(cp.id)) { return; } foreach (KeyValuePair <string, List <string> > kv in cp.localizationFiles) { DictionaryI18n packageDict = new DictionaryI18n(); foreach (string file in kv.Value) { packageDict.AddDataFromFile(file); } LocalizationRead.AddDictionary(kv.Key, packageDict); } foreach (string ini in cp.iniFiles) { IniData d = IniRead.ReadFromIni(ini); // Bad ini file not a fatal error, just ignore (will be in log) if (d == null) { return; } // Add each section foreach (KeyValuePair <string, Dictionary <string, string> > section in d.data) { LoadContent(section.Key, section.Value, Path.GetDirectoryName(ini), cp.id); } } cd.loadedPacks.Add(cp.id); foreach (string s in cp.clone) { LoadContentID(s); } }
/// <summary> /// After selecting game, we load the localization file. /// Deppends on the gameType selected. /// There are two Localization files from ffg, one for D2E and one for MoM /// </summary> private void loadLocalization() { // After content import, we load the localization file if (LocalizationRead.selectDictionary("ffg") == null) { DictionaryI18n ffgDict = new DictionaryI18n(); foreach (string file in Directory.GetFiles(ContentData.ImportPath() + "/text", "Localization_*.txt")) { ffgDict.AddDataFromFile(file); } LocalizationRead.AddDictionary("ffg", ffgDict); // CoSH used for Dunwich Horror data DictionaryI18n cshDict = new DictionaryI18n(); foreach (string file in Directory.GetFiles(ContentData.ImportPath() + "/text", "SCENARIO_CULT_OF_SENTINEL_HILL_MAD22_*.txt")) { cshDict.AddDataFromFile(file); } LocalizationRead.AddDictionary("csh", cshDict); } }
// Create a new quest public void NewQuest() { Game game = Game.Get(); string dataLocation = Game.AppData() + Path.DirectorySeparatorChar + Game.Get().gameType.TypeName() + "/Editor"; if (!Directory.Exists(dataLocation)) { Directory.CreateDirectory(dataLocation); } // Find an available unique directory name int i = 1; while (Directory.Exists(dataLocation + "/Editor" + game.gameType.QuestName().Translate() + i)) { i++; } string targetLocation = dataLocation + "/Editor" + game.gameType.QuestName().Translate() + i; try { Directory.CreateDirectory(targetLocation); List <string> questData = new List <string>(); // Create basic quest info questData.Add("[Quest]"); questData.Add("type=" + game.gameType.TypeName()); questData.Add("format=" + QuestData.Quest.currentFormat); questData.Add("defaultlanguage=" + game.currentLang); questData.Add(""); questData.Add("[QuestText]"); questData.Add("Localization." + game.currentLang + ".txt"); // Write quest file File.WriteAllLines(targetLocation + "/quest.ini", questData.ToArray()); // Create new dictionary DictionaryI18n newScenarioDict = new DictionaryI18n(new string[1] { ".," + game.currentLang }, game.currentLang); // Add quest name to dictionary newScenarioDict.AddEntry("quest.name", game.gameType.QuestName().Translate() + " " + i); // Add quest description to dictionary newScenarioDict.AddEntry("quest.description", game.gameType.QuestName().Translate() + " " + i + "..."); // Generate localization file Dictionary <string, List <string> > localization_files = newScenarioDict.SerializeMultiple(); foreach (string oneLang in localization_files.Keys) { // Write localization file File.WriteAllText( targetLocation + "/Localization." + oneLang + ".txt", string.Join(System.Environment.NewLine, localization_files[oneLang].ToArray())); } } catch (System.Exception e) { ValkyrieDebug.Log("Error: Failed to create new quest: " + e.Message); Application.Quit(); } // Back to edit selection new QuestEditSelection(); }
public SaveData(int num = 0) { Game game = Game.Get(); if (!File.Exists(SaveFile(num))) { return; } try { if (!Directory.Exists(Path.GetTempPath() + "/Valkyrie")) { Directory.CreateDirectory(Path.GetTempPath() + "/Valkyrie"); } if (!Directory.Exists(Path.GetTempPath() + "/Valkyrie/Load")) { Directory.CreateDirectory(Path.GetTempPath() + "/Valkyrie/Load"); } Directory.Delete(Path.GetTempPath() + "/Valkyrie/Load", true); ZipFile zip = ZipFile.Read(SaveFile(num)); zip.ExtractAll(Path.GetTempPath() + "/Valkyrie/Load"); zip.Dispose(); image = ContentData.FileToTexture(Path.GetTempPath() + "/Valkyrie/Load/image.png"); // Check that quest in save is valid QuestData.Quest q = new QuestData.Quest(Path.GetTempPath() + "/Valkyrie/Load/quest"); if (!q.valid) { ValkyrieDebug.Log("Warning: Save " + num + " contains unsupported quest version." + System.Environment.NewLine); return; } DictionaryI18n tmpDict = LocalizationRead.selectDictionary("qst"); LocalizationRead.AddDictionary("qst", q.localizationDict); quest = q.name.Translate(); LocalizationRead.AddDictionary("qst", tmpDict); string data = File.ReadAllText(Path.GetTempPath() + "/Valkyrie/Load/save.ini"); IniData saveData = IniRead.ReadFromString(data); saveData.Get("Quest", "valkyrie"); if (VersionNewer(game.version, saveData.Get("Quest", "valkyrie"))) { ValkyrieDebug.Log("Warning: Save " + num + " is from a future version." + System.Environment.NewLine); return; } if (!VersionNewerOrEqual(minValkyieVersion, saveData.Get("Quest", "valkyrie"))) { ValkyrieDebug.Log("Warning: Save " + num + " is from an old unsupported version." + System.Environment.NewLine); return; } saveTime = System.DateTime.Parse(saveData.Get("Quest", "time")); valid = true; } catch (System.Exception e) { ValkyrieDebug.Log("Warning: Unable to open save file: " + SaveFile(num) + " " + e.Message); } }
public void ReadManifest() { localizationDict = LocalizationRead.ReadFromString(download.text, DictionaryI18n.DEFAULT_LANG, game.currentLang); DrawList(); }
// Unity fires off this function void Awake() { // Find the common objects we use. These are created by unity. cc = GameObject.FindObjectOfType <CameraController>(); uICanvas = GameObject.Find("UICanvas").GetComponent <Canvas>(); boardCanvas = GameObject.Find("BoardCanvas").GetComponent <Canvas>(); tokenCanvas = GameObject.Find("TokenCanvas").GetComponent <Canvas>(); tokenBoard = GameObject.FindObjectOfType <TokenBoard>(); heroCanvas = GameObject.FindObjectOfType <HeroCanvas>(); monsterCanvas = GameObject.FindObjectOfType <MonsterCanvas>(); // Create some things uiScaler = new UIScaler(uICanvas); config = new ConfigFile(); GameObject go = new GameObject("audio"); audioControl = go.AddComponent <Audio>(); updateList = new List <IUpdateListener>(); stats = new StatsManager(); stats.DownloadStats(); if (config.data.Get("UserConfig") == null) { // English is the default current language config.data.Add("UserConfig", "currentLang", "English"); config.Save(); } currentLang = config.data.Get("UserConfig", "currentLang"); string vSet = config.data.Get("UserConfig", "editorTransparency"); if (vSet == "") { editorTransparency = 0.3f; } else { float.TryParse(vSet, out editorTransparency); } string s_debug_tests = config.data.Get("Debug", "tests"); if (s_debug_tests != "") { s_debug_tests = s_debug_tests.ToLower(); if (s_debug_tests == "true" || s_debug_tests == "1") { debugTests = true; } } // On android extract streaming assets for use if (Application.platform == RuntimePlatform.Android) { System.IO.Directory.CreateDirectory(ContentData.ContentPath()); using (ZipFile jar = ZipFile.Read(Application.dataPath)) { foreach (ZipEntry e in jar) { if (!e.FileName.StartsWith("assets")) { continue; } if (e.FileName.StartsWith("assets/bin")) { continue; } e.Extract(ContentData.ContentPath() + "../..", ExtractExistingFileAction.OverwriteSilently); } } } DictionaryI18n valDict = new DictionaryI18n(); foreach (string file in System.IO.Directory.GetFiles(ContentData.ContentPath() + "../text", "Localization*.txt")) { valDict.AddDataFromFile(file); } LocalizationRead.AddDictionary("val", valDict); roundControl = new RoundController(); // Read the version and add it to the log TextAsset versionFile = Resources.Load("version") as TextAsset; version = versionFile.text.Trim(); // The newline at the end stops the stack trace appearing in the log ValkyrieDebug.Log("Valkyrie Version: " + version + System.Environment.NewLine); #if UNITY_STANDALONE_WIN SetScreenOrientationToLandscape(); #endif // Bring up the Game selector gameSelect = new GameSelectionScreen(); }
// Create a new quest public void NewQuest() { Game game = Game.Get(); string dataLocation = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData) + "/Valkyrie"; // Find an available unique directory name int i = 1; while (Directory.Exists(dataLocation + "/Editor" + game.gameType.QuestName().Translate() + i)) { i++; } string targetLocation = dataLocation + "/Editor" + game.gameType.QuestName().Translate() + i; try { Directory.CreateDirectory(targetLocation); List <string> questData = new List <string>(); // Create basic quest info questData.Add("[Quest]"); questData.Add("type=" + game.gameType.TypeName()); questData.Add("format=" + QuestData.Quest.currentFormat); questData.Add("defaultlanguage=" + game.currentLang); questData.Add(""); questData.Add("[QuestText]"); questData.Add("Localization.txt"); // Write quest file File.WriteAllLines(targetLocation + "/quest.ini", questData.ToArray()); // Create new dictionary DictionaryI18n newScenarioDict = new DictionaryI18n( new string[1] { DictionaryI18n.FFG_LANGS }, game.currentLang, game.currentLang); // Add quest name to dictionary string nameKey = "quest.name"; EntryI18n nameEntry = new EntryI18n(nameKey, newScenarioDict); nameEntry.currentLanguageString = game.gameType.QuestName().Translate() + " " + i; newScenarioDict.Add(nameEntry); // Add quest description to dictionary string descriptionKey = "quest.description"; EntryI18n descriptionEntry = new EntryI18n(descriptionKey, newScenarioDict); descriptionEntry.currentLanguageString = game.gameType.QuestName().Translate() + " " + i + "..."; newScenarioDict.Add(descriptionEntry); // Generate localization file List <string> localization_file = newScenarioDict.Serialize(); // Write localization file File.WriteAllText( targetLocation + "/Localization.txt", string.Join(System.Environment.NewLine, localization_file.ToArray())); } catch (System.Exception e) { ValkyrieDebug.Log("Error: Failed to create new quest: " + e.Message); Application.Quit(); } // Back to edit selection new QuestEditSelection(); }
// Unity fires off this function void Start() { // Find the common objects we use. These are created by unity. cc = GameObject.FindObjectOfType <CameraController>(); uICanvas = GameObject.Find("UICanvas").GetComponent <Canvas>(); boardCanvas = GameObject.Find("BoardCanvas").GetComponent <Canvas>(); tokenCanvas = GameObject.Find("TokenCanvas").GetComponent <Canvas>(); tokenBoard = GameObject.FindObjectOfType <TokenBoard>(); heroCanvas = GameObject.FindObjectOfType <HeroCanvas>(); monsterCanvas = GameObject.FindObjectOfType <MonsterCanvas>(); // Create some things uiScaler = new UIScaler(uICanvas); config = new ConfigFile(); GameObject go = new GameObject("audio"); audioControl = go.AddComponent <Audio>(); updateList = new List <IUpdateListener>(); if (config.data.Get("UserConfig") == null) { // English is the default current language config.data.Add("UserConfig", "currentLang", "English"); config.Save(); } currentLang = config.data.Get("UserConfig", "currentLang"); // On android extract streaming assets for use if (Application.platform == RuntimePlatform.Android) { System.IO.Directory.CreateDirectory(ContentData.ContentPath()); using (ZipFile jar = ZipFile.Read(Application.dataPath)) { foreach (ZipEntry e in jar) { if (e.FileName.IndexOf("assets") != 0) { continue; } if (e.FileName.IndexOf("assets/bin") == 0) { continue; } e.Extract(ContentData.ContentPath() + "../..", ExtractExistingFileAction.OverwriteSilently); } } } DictionaryI18n valDict = new DictionaryI18n(); foreach (string file in System.IO.Directory.GetFiles(ContentData.ContentPath() + "../text", "Localization*.txt")) { valDict.AddDataFromFile(file); } LocalizationRead.AddDictionary("val", valDict); roundControl = new RoundController(); // Read the version and add it to the log TextAsset versionFile = Resources.Load("version") as TextAsset; version = versionFile.text.Trim(); // The newline at the end stops the stack trace appearing in the log ValkyrieDebug.Log("Valkyrie Version: " + version + System.Environment.NewLine); // Bring up the Game selector gameSelect = new GameSelectionScreen(); }