// prefabToggle: prefab of the toggles to instanciate // content: father of the toggle (subcontent created in CreateSubContent) // variantsContent: transform or materials content // variants: list of variants names corresponding to the subcontent float InsertVariantsInContent <T, U>(GameObject prefabToggle, GameObject content, RectTransform variantsContent, T switchObject, List <U> variants) { float offset = 30.0f; foreach (var variant in variants) { GameObject m_Toggle = Instantiate(toggle, content.transform); if (variant == null) { continue; } string name = variant.GetPropertyValue <string>("name"); m_Toggle.name = name; m_Toggle.GetComponentInChildren <Text>().text = name; m_Toggle.GetComponent <RectTransform>().localPosition = new Vector3(5, -offset); m_Toggle.GetComponent <Toggle>().group = content.GetComponent <ToggleGroup>(); m_Toggle.GetComponent <Toggle>().onValueChanged.AddListener(delegate { ToggleValueChanged(m_Toggle.GetComponent <Toggle>(), variantsContent); }); GenericKeyValue switchVariant = new GenericKeyValue(); switchVariant.setKeyValue <T, U> (switchObject, variant); dict.Add(m_Toggle.GetComponent <Toggle>(), switchVariant); offset += m_Toggle.GetComponent <RectTransform>().rect.height; } return(offset - 20); }
protected GenericDataFile CreateInfo(int slot) { var root = new GenericKeyValue(GFF.FieldType.Structure, null); root.StructureId = 0; root[16511] = new GenericKeyValue(GFF.FieldType.String, "Save created with Gibbed's Dragon Age Save Generator.\n\n" + "*** DO NOT LOAD THIS SAVE IN DRAGON AGE: ORIGINS ***"); root[16800] = new GenericKeyValue(GFF.FieldType.String, "Dragon Age 2"); root[16801] = new GenericKeyValue(GFF.FieldType.Int32, 4271); root[16802] = new GenericKeyValue(GFF.FieldType.Int32, -1); root[16803] = new GenericKeyValue(GFF.FieldType.Int32, (int)this.Result.PlayerClass); root[16804] = new GenericKeyValue(GFF.FieldType.Int32, (int)this.Result.PlayerGender); root[16805] = new GenericKeyValue(GFF.FieldType.Int32, (int)this.Result.PlayerRace); root[16806] = new GenericKeyValue(GFF.FieldType.Int32, (int)this.Result.PlayerBackground); root[16807] = new GenericKeyValue(GFF.FieldType.String, this.Result.PlayerName); root[16808] = new GenericKeyValue(GFF.FieldType.String, string.Format("Generated #{0}", slot)); root[16809] = new GenericKeyValue(GFF.FieldType.String, "single player;"); root[16810] = new GenericKeyValue(GFF.FieldType.String, "SP;"); var gff = new GenericDataFile(); using (var data = new MemoryStream(BinaryResources.InfoGFF)) { gff.Deserialize(data); } gff.Import(root); return(gff); }
void ToggleValueChanged(Toggle m_Toggle, RectTransform variantsContent) { if (m_Toggle.isOn) { GenericKeyValue pair = dict[m_Toggle]; var switchObject = pair.key as VariantsManager.Switch; var variant = pair.value; switchObject.selectVariant(variant); } }
private static void SetPlotFlag(List <GenericKeyValue> plotList, string guid, int flag) { GenericKeyValue plot = plotList.FirstOrDefault( p => p[16402].As <string>(null) == guid); if (plot == null) { plot = new GenericKeyValue(GFF.FieldType.Structure, null); plot[16402] = new GenericKeyValue(GFF.FieldType.String, guid); plot[16403] = new GenericKeyValue(GFF.FieldType.UInt32, 0u); plot[16404] = new GenericKeyValue(GFF.FieldType.UInt32, 0u); plot[16405] = new GenericKeyValue(GFF.FieldType.UInt32, 0u); plot[16406] = new GenericKeyValue(GFF.FieldType.UInt32, 0u); plotList.Add(plot); } if (flag < 32) { plot[16403].Value = plot[16403].As <uint>() | (1u << flag); } else if (flag < 64) { plot[16404].Value = plot[16404].As <uint>() | (1u << flag - 32); } else if (flag < 96) { plot[16405].Value = plot[16405].As <uint>() | (1u << flag - 64); } else if (flag < 128) { plot[16406].Value = plot[16406].As <uint>() | (1u << flag - 96); } else { throw new InvalidOperationException(); } }
private static void ExportXSLT(string name, Stream output, GenericKeyValue root) { Console.WriteLine("Decompiling data to XLSX..."); var columnDefinitions = root[10002].As <List <GenericKeyValue> >(); var rows = root[10003].As <List <GenericKeyValue> >(); var xml = XmlWriter.Create(output, new XmlWriterSettings() { Indent = true, Encoding = Encoding.ASCII, }); // workbook xml.WriteStartDocument(); xml.WriteStartElement("ss", "Workbook", "urn:schemas-microsoft-com:office:spreadsheet"); xml.WriteAttributeString("xmlns", "x", null, "urn:schemas-microsoft-com:office:excel"); xml.WriteAttributeString("xmlns", "o", null, "urn:schemas-microsoft-com:office:office"); // worksheet xml.WriteStartElement("ss", "Worksheet", "urn:schemas-microsoft-com:office:spreadsheet"); xml.WriteAttributeString("Name", "urn:schemas-microsoft-com:office:spreadsheet", name); // table xml.WriteStartElement("ss", "Table", "urn:schemas-microsoft-com:office:spreadsheet"); // column definitions // name xml.WriteStartElement("ss", "Row", "urn:schemas-microsoft-com:office:spreadsheet"); for (int i = 0; i < columnDefinitions.Count; i++) { var columnDefinition = columnDefinitions[i]; var nameHash = columnDefinition[10001].As <uint>(0xFFFFFFFF); xml.WriteStartElement("ss", "Cell", "urn:schemas-microsoft-com:office:spreadsheet"); xml.WriteStartElement("ss", "Data", "urn:schemas-microsoft-com:office:spreadsheet"); xml.WriteAttributeString("ss", "Type", "urn:schemas-microsoft-com:office:spreadsheet", "String"); xml.WriteString(GetColumnName(nameHash)); xml.WriteEndElement(); xml.WriteEndElement(); } xml.WriteEndElement(); // type xml.WriteStartElement("ss", "Row", "urn:schemas-microsoft-com:office:spreadsheet"); for (int i = 0; i < columnDefinitions.Count; i++) { var columnDefinition = columnDefinitions[i]; var type = (G2DAColumnType)columnDefinition[10999].As <byte>(0xFF); xml.WriteStartElement("ss", "Cell", "urn:schemas-microsoft-com:office:spreadsheet"); xml.WriteStartElement("ss", "Data", "urn:schemas-microsoft-com:office:spreadsheet"); xml.WriteAttributeString("ss", "Type", "urn:schemas-microsoft-com:office:spreadsheet", "String"); xml.WriteString(type.ToString()); xml.WriteEndElement(); xml.WriteEndElement(); } xml.WriteEndElement(); // write rows if (rows != null) { foreach (var kv in rows) { xml.WriteStartElement("ss", "Row", "urn:schemas-microsoft-com:office:spreadsheet"); for (int i = 0; i < kv.Values.Count; i++) { var columnDefinition = columnDefinitions[i]; var type = (G2DAColumnType)columnDefinition[10999].As <byte>(0xFF); var column = kv[10005 + i]; xml.WriteStartElement("ss", "Cell", "urn:schemas-microsoft-com:office:spreadsheet"); xml.WriteStartElement("ss", "Data", "urn:schemas-microsoft-com:office:spreadsheet"); switch (type) { case G2DAColumnType.@string: { xml.WriteAttributeString("ss", "Type", "urn:schemas-microsoft-com:office:spreadsheet", "String"); xml.WriteString((string)column.Value); break; } case G2DAColumnType.@int: { xml.WriteAttributeString("ss", "Type", "urn:schemas-microsoft-com:office:spreadsheet", "Number"); xml.WriteString(((int)column.Value).ToString()); break; } case G2DAColumnType.@float: { xml.WriteAttributeString("ss", "Type", "urn:schemas-microsoft-com:office:spreadsheet", "Number"); xml.WriteString(((float)column.Value).ToString()); break; } case G2DAColumnType.@bool: { throw new NotSupportedException(); /* * xml.WriteAttributeString("ss", "Type", "urn:schemas-microsoft-com:office:spreadsheet", * "Boolean"); * xml.WriteString(((int)column.Value).ToString()); * break;*/ } case G2DAColumnType.@resource: { xml.WriteAttributeString("ss", "Type", "urn:schemas-microsoft-com:office:spreadsheet", "String"); xml.WriteString((string)column.Value); break; } default: { throw new FormatException("unsupported variable type"); } } xml.WriteEndElement(); xml.WriteEndElement(); } xml.WriteEndElement(); } } xml.WriteEndElement(); xml.WriteEndElement(); xml.WriteEndElement(); xml.WriteEndDocument(); xml.Flush(); }
private static void ExportCSV(string name, Stream output, GenericKeyValue root) { Console.WriteLine("Decompiling data to CSV..."); var columnDefinitions = root[10002].As <List <GenericKeyValue> >(); var rows = root[10003].As <List <GenericKeyValue> >(); using (var writer = new StreamWriter(output, Encoding.Unicode)) { // names writer.WriteLine(columnDefinitions.Implode( c => EscapeCSV(GetColumnName(c[10001].As <uint>(0xFFFFFFFF))), ",")); // types writer.WriteLine(columnDefinitions.Implode( c => EscapeCSV(((G2DAColumnType)c[10999].As <byte>(0xFF)).ToString()), ",")); // write rows if (rows != null) { foreach (var kv in rows) { for (int i = 0; i < kv.Values.Count; i++) { var columnDefinition = columnDefinitions[i]; var type = (G2DAColumnType)columnDefinition[10999].As <byte>(0xFF); var column = kv[10005 + i]; switch (type) { case G2DAColumnType.@string: { writer.Write((string)column.Value); break; } case G2DAColumnType.@int: { writer.Write((int)column.Value); break; } case G2DAColumnType.@float: { writer.Write((float)column.Value); break; } case G2DAColumnType.@bool: { writer.Write((byte)column.Value); break; } case G2DAColumnType.@resource: { writer.Write((string)column.Value); break; } default: { throw new FormatException("unsupported variable type"); } } if (i + 1 < kv.Values.Count) { writer.Write(","); } } writer.WriteLine(); } } } }
protected GenericDataFile CreateSave() { var root = new GenericKeyValue(GFF.FieldType.Structure, null); root.StructureId = 0; var campaign = new GenericKeyValue(GFF.FieldType.Structure, null); campaign[23] = new GenericKeyValue(GFF.FieldType.Int32, 1); campaign[16014] = new GenericKeyValue(GFF.FieldType.String, "single player"); campaign[16450] = new GenericKeyValue(GFF.FieldType.Structure, null); campaign[16499] = new GenericKeyValue(GFF.FieldType.Int32, 120000); var journal = new GenericKeyValue(GFF.FieldType.Structure, null); journal[16505] = new GenericKeyValue(GFF.FieldType.Structure, null); journal[16506] = new GenericKeyValue(GFF.FieldType.Structure, null); journal[16510] = new GenericKeyValue(GFF.FieldType.String, ""); journal[16511] = new GenericKeyValue(GFF.FieldType.TalkString, new GFF.Builtins.TalkString()); journal[16513] = new GenericKeyValue(GFF.FieldType.Structure, null); journal[16516] = new GenericKeyValue(GFF.FieldType.Structure, null); journal[16522] = new GenericKeyValue(GFF.FieldType.Structure, null); journal[16525] = new GenericKeyValue(GFF.FieldType.Structure, null); campaign[16504] = journal; campaign[16530] = new GenericKeyValue(GFF.FieldType.Structure, null); var worldmap = new GenericKeyValue(GFF.FieldType.Structure, null); worldmap[16781] = new GenericKeyValue(GFF.FieldType.String, "denerim"); worldmap[16782] = new GenericKeyValue(GFF.FieldType.String, "wide_open_world"); worldmap[16783] = new GenericKeyValue(GFF.FieldType.Structure, null); worldmap[16790] = new GenericKeyValue(GFF.FieldType.UInt32, 2u); worldmap[16791] = new GenericKeyValue(GFF.FieldType.UInt32, 5u); campaign[16780] = worldmap; var plotActions = new GenericKeyValue(GFF.FieldType.Structure, null); plotActions[16841] = new GenericKeyValue(GFF.FieldType.UInt16, (ushort)1); plotActions[16842] = new GenericKeyValue(GFF.FieldType.UInt16, (ushort)0); plotActions[16843] = new GenericKeyValue(GFF.FieldType.Structure, null); campaign[16840] = plotActions; campaign[17000] = new GenericKeyValue(GFF.FieldType.Structure, null); campaign[17100] = new GenericKeyValue(GFF.FieldType.String, "den02al_den_market"); campaign[17101] = new GenericKeyValue(GFF.FieldType.String, "den200ar_market"); campaign[17102] = new GenericKeyValue(GFF.FieldType.Vector3, new GFF.Builtins.Vector3(11.0f, 22.0f, 33.0f)); campaign[17103] = new GenericKeyValue(GFF.FieldType.Vector3, new GFF.Builtins.Vector3(44.0f, 55.0f, 66.0f)); root[16000] = campaign; root[16001] = new GenericKeyValue(GFF.FieldType.Structure, null); var playerChar = new GenericKeyValue(GFF.FieldType.Structure, null); var character = new GenericKeyValue(GFF.FieldType.Structure, null); character[3] = new GenericKeyValue(GFF.FieldType.String, "default_player"); character[4] = new GenericKeyValue(GFF.FieldType.Vector3, new GFF.Builtins.Vector3()); character[5] = new GenericKeyValue(GFF.FieldType.Quaternion, new GFF.Builtins.Quaternion()); character[23] = new GenericKeyValue(GFF.FieldType.Int32, 1234); character[16201] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)1); character[16203] = new GenericKeyValue(GFF.FieldType.Int8, (sbyte)1); var creatureStats = new GenericKeyValue(GFF.FieldType.Structure, null); creatureStats[16305] = new GenericKeyValue(GFF.FieldType.Structure, null); creatureStats[16306] = new GenericKeyValue(GFF.FieldType.Structure, null); creatureStats[16307] = new GenericKeyValue(GFF.FieldType.Structure, null); creatureStats[16308] = new GenericKeyValue(GFF.FieldType.Structure, null); creatureStats[16313] = new GenericKeyValue(GFF.FieldType.Structure, null); creatureStats[16314] = new GenericKeyValue(GFF.FieldType.Structure, null); creatureStats[16315] = new GenericKeyValue(GFF.FieldType.Structure, null); creatureStats[16316] = new GenericKeyValue(GFF.FieldType.Structure, null); creatureStats[16317] = new GenericKeyValue(GFF.FieldType.UInt32, (uint)0); creatureStats[16318] = new GenericKeyValue(GFF.FieldType.Int8, (sbyte)0); creatureStats[16329] = new GenericKeyValue(GFF.FieldType.Int8, (sbyte)0); creatureStats[16339] = new GenericKeyValue(GFF.FieldType.String, "single player;"); creatureStats[16340] = new GenericKeyValue(GFF.FieldType.String, "SP;SP;SP;SP;SP;SP;SP;SP;SP;SP;SP;"); creatureStats[16350] = new GenericKeyValue(GFF.FieldType.Structure, null); creatureStats[16351] = new GenericKeyValue(GFF.FieldType.Structure, null); creatureStats[16352] = new GenericKeyValue(GFF.FieldType.Structure, null); creatureStats[16468] = new GenericKeyValue(GFF.FieldType.Structure, null); character[16209] = creatureStats; character[16210] = new GenericKeyValue(GFF.FieldType.Structure, null); character[16211] = new GenericKeyValue(GFF.FieldType.Structure, null); character[16212] = new GenericKeyValue(GFF.FieldType.Int32, -1); character[16218] = new GenericKeyValue(GFF.FieldType.UInt32, (uint)0); character[16219] = new GenericKeyValue(GFF.FieldType.Structure, null); character[16220] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)0); character[16221] = new GenericKeyValue(GFF.FieldType.String, ""); character[16222] = new GenericKeyValue(GFF.FieldType.String, "player"); character[16226] = new GenericKeyValue(GFF.FieldType.Int32, -1); character[16227] = new GenericKeyValue(GFF.FieldType.Structure, null); character[16250] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)0); character[16254] = new GenericKeyValue(GFF.FieldType.Int32, 0); character[16255] = new GenericKeyValue(GFF.FieldType.TalkString, new GFF.Builtins.TalkString(215786, this.Result.PlayerName)); character[16256] = new GenericKeyValue(GFF.FieldType.UInt32, (uint)1); character[16262] = new GenericKeyValue(GFF.FieldType.Single, 0.0f); character[16263] = new GenericKeyValue(GFF.FieldType.Int32, 0); character[16279] = new GenericKeyValue(GFF.FieldType.Int8, (sbyte)0); character[16280] = new GenericKeyValue(GFF.FieldType.Int32, 0); character[16281] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)0); character[16282] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)0); var appearance = new GenericKeyValue(GFF.FieldType.Structure, null); appearance[16321] = new GenericKeyValue(GFF.FieldType.UInt16, (ushort)this.Result.PlayerGender); appearance[16322] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)this.Result.PlayerGender); appearance[16324] = new GenericKeyValue(GFF.FieldType.Single, 0.0f); appearance[16325] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)0); appearance[16326] = new GenericKeyValue(GFF.FieldType.Structure, null); appearance[16327] = new GenericKeyValue(GFF.FieldType.UInt16, (ushort)this.Result.PlayerGender); appearance[16328] = new GenericKeyValue(GFF.FieldType.String, ""); character[16320] = appearance; character[16332] = new GenericKeyValue(GFF.FieldType.Single, 0.0f); character[16333] = new GenericKeyValue(GFF.FieldType.Single, 0.0f); character[16334] = new GenericKeyValue(GFF.FieldType.Single, 0.0f); character[16335] = new GenericKeyValue(GFF.FieldType.Single, 0.0f); character[16336] = new GenericKeyValue(GFF.FieldType.Single, 0.0f); character[16337] = new GenericKeyValue(GFF.FieldType.Single, 0.0f); character[16338] = new GenericKeyValue(GFF.FieldType.Single, 0.0f); character[16451] = new GenericKeyValue(GFF.FieldType.UInt32, (uint)0); character[16453] = new GenericKeyValue(GFF.FieldType.Int32, -1); character[16454] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)0); character[16455] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)0); character[16456] = new GenericKeyValue(GFF.FieldType.Int8, (sbyte)-1); character[16457] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)1); character[16458] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)1); character[16459] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)1); character[16460] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)this.Result.PlayerRace); character[16463] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)1); character[16464] = new GenericKeyValue(GFF.FieldType.Structure, null); character[16467] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)0); character[16469] = new GenericKeyValue(GFF.FieldType.Int8, (sbyte)0); character[16470] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)0); character[16471] = new GenericKeyValue(GFF.FieldType.Structure, null); character[16472] = new GenericKeyValue(GFF.FieldType.Structure, null); character[16474] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)0); character[16475] = new GenericKeyValue(GFF.FieldType.Single, 1.0f); character[16600] = new GenericKeyValue(GFF.FieldType.UInt32, (uint)0xFFFFFFFF); character[16612] = new GenericKeyValue(GFF.FieldType.UInt32, (uint)100); character[16623] = new GenericKeyValue(GFF.FieldType.Structure, null); character[16721] = new GenericKeyValue(GFF.FieldType.Structure, null); var actionQueue = new GenericKeyValue(GFF.FieldType.Structure, null); actionQueue[16720] = new GenericKeyValue(GFF.FieldType.Structure, null); actionQueue[16730] = new GenericKeyValue(GFF.FieldType.Structure, null); character[16740] = actionQueue; character[16821] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)1); var tacticsTable = new GenericKeyValue(GFF.FieldType.Structure, null); tacticsTable[16823] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)1); tacticsTable[16824] = new GenericKeyValue(GFF.FieldType.Structure, null); tacticsTable[16832] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)0); tacticsTable[16833] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)2); tacticsTable[16834] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)0); tacticsTable[16835] = new GenericKeyValue(GFF.FieldType.Structure, null); tacticsTable[16836] = new GenericKeyValue(GFF.FieldType.Structure, null); character[16822] = tacticsTable; character[16950] = new GenericKeyValue(GFF.FieldType.Structure, null); character[16951] = new GenericKeyValue(GFF.FieldType.String, null); character[16952] = new GenericKeyValue(GFF.FieldType.String, null); character[17000] = new GenericKeyValue(GFF.FieldType.Structure, null); playerChar[16208] = character; playerChar[16295] = new GenericKeyValue(GFF.FieldType.Single, 1.0f); playerChar[16296] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)0); playerChar[16298] = new GenericKeyValue(GFF.FieldType.Int32, 1); root[16002] = playerChar; var partyList = new GenericKeyValue(GFF.FieldType.Structure, null); partyList[23] = new GenericKeyValue(GFF.FieldType.Int32, 2); partyList[16204] = new GenericKeyValue(GFF.FieldType.Structure, null); partyList[16210] = new GenericKeyValue(GFF.FieldType.Structure, null); partyList[16211] = new GenericKeyValue(GFF.FieldType.Structure, null); partyList[16212] = new GenericKeyValue(GFF.FieldType.Int32, 1); partyList[16226] = new GenericKeyValue(GFF.FieldType.Int32, 100); partyList[16227] = new GenericKeyValue(GFF.FieldType.Structure, null); partyList[16270] = new GenericKeyValue(GFF.FieldType.Int32, 0u); partyList[16274] = new GenericKeyValue(GFF.FieldType.Int32, 0u); partyList[16275] = new GenericKeyValue(GFF.FieldType.Structure, null); partyList[16278] = new GenericKeyValue(GFF.FieldType.Int32, 0u); partyList[16288] = new GenericKeyValue(GFF.FieldType.Structure, null); partyList[16290] = new GenericKeyValue(GFF.FieldType.Structure, null); partyList[16291] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)0); partyList[16292] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)0); partyList[16293] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)0); partyList[16294] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)0); partyList[16299] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)0); partyList[16310] = new GenericKeyValue(GFF.FieldType.Single, 0.0f); var plotManager = new GenericKeyValue(GFF.FieldType.Structure, null); var plotList = new List <GenericKeyValue>(); plotManager[16401] = new GenericKeyValue(GFF.FieldType.Structure, plotList); partyList[16400] = plotManager; partyList[16503] = new GenericKeyValue(GFF.FieldType.Structure, null); root[16003] = partyList; var version = new GenericKeyValue(GFF.FieldType.Structure, null); version[16007] = new GenericKeyValue(GFF.FieldType.UInt8, (byte)0); version[16770] = new GenericKeyValue(GFF.FieldType.Int32, 12393); version[16771] = new GenericKeyValue(GFF.FieldType.Int32, 1); root[16004] = version; var gameState = new GenericKeyValue(GFF.FieldType.Structure, null); gameState[16626] = new GenericKeyValue(GFF.FieldType.Int32, 12345); var aiMaster = new GenericKeyValue(GFF.FieldType.Structure, null); aiMaster[16630] = new GenericKeyValue(GFF.FieldType.Structure, null); gameState[16636] = aiMaster; var worldTimer = new GenericKeyValue(GFF.FieldType.Structure, null); worldTimer[16701] = new GenericKeyValue(GFF.FieldType.Int32, 12345); worldTimer[16702] = new GenericKeyValue(GFF.FieldType.Int32, 12345); gameState[16700] = worldTimer; root[16005] = gameState; root[16006] = new GenericKeyValue(GFF.FieldType.Structure, null); var storySoFar = new GenericKeyValue(GFF.FieldType.Structure, null); storySoFar[16970] = new GenericKeyValue(GFF.FieldType.Structure, null); storySoFar[16975] = new GenericKeyValue(GFF.FieldType.Structure, null); root[16008] = storySoFar; root[16500] = new GenericKeyValue(GFF.FieldType.Structure, null); // Background switch (this.Result.PlayerBackground) { case Game.PlayerBackground.Magi: { SetPlotFlag(plotList, "C9736A91F42440758E570D9ECD796597", 0); break; } case Game.PlayerBackground.DwarfCommoner: { SetPlotFlag(plotList, "C9736A91F42440758E570D9ECD796597", 1); break; } case Game.PlayerBackground.DwarfNoble: { SetPlotFlag(plotList, "C9736A91F42440758E570D9ECD796597", 2); break; } case Game.PlayerBackground.ElfCity: { SetPlotFlag(plotList, "C9736A91F42440758E570D9ECD796597", 3); break; } case Game.PlayerBackground.ElfDalish: { SetPlotFlag(plotList, "C9736A91F42440758E570D9ECD796597", 4); break; } case Game.PlayerBackground.HumanNoble: { SetPlotFlag(plotList, "C9736A91F42440758E570D9ECD796597", 7); break; } } // The Arl of Redcliffe switch (this.Result.ArlConnorResult) { case Game.ArlConnorResult.ConnorFreed: { SetPlotFlag(plotList, "245482960AA04DB58C90E40C8354B6B5", 19); break; } case Game.ArlConnorResult.IsoldeKilledConnor: { SetPlotFlag(plotList, "245482960AA04DB58C90E40C8354B6B5", 20); break; } case Game.ArlConnorResult.IsoldeKnockedOutPCKilledConnor: { SetPlotFlag(plotList, "245482960AA04DB58C90E40C8354B6B5", 18); break; } case Game.ArlConnorResult.PCKilledConnor: { SetPlotFlag(plotList, "245482960AA04DB58C90E40C8354B6B5", 32); break; } } switch (this.Result.ArlRitualResult) { case Game.ArlRitualResult.JowanDoesRitual: { SetPlotFlag(plotList, "245482960AA04DB58C90E40C8354B6B5", 21); break; } case Game.ArlRitualResult.CircleDoesRitual: { SetPlotFlag(plotList, "245482960AA04DB58C90E40C8354B6B5", 28); break; } } if (this.Result.ArlDemonOptions.HasFlag(Game.ArlDemonOptions.Intimidated) == true) { SetPlotFlag(plotList, "80D1FC2FA12E457896C0F1B64E51EEBC", 17); } if (this.Result.ArlDemonOptions.HasFlag(Game.ArlDemonOptions.AcceptedOffer) == true) { SetPlotFlag(plotList, "80D1FC2FA12E457896C0F1B64E51EEBC", 7); } if (this.Result.ArlSiegeOptions.HasFlag(Game.ArlSiegeOptions.Abandoned) == true) { SetPlotFlag(plotList, "C8BD51CF3BC0414192BFF6BC6BF8247C", 12); } if (this.Result.ArlSiegeOptions.HasFlag(Game.ArlSiegeOptions.Over) == true) { SetPlotFlag(plotList, "C8BD51CF3BC0414192BFF6BC6BF8247C", 0); } // Broken Circle switch (this.Result.CircleResult) { case Game.CircleResult.SidedWithMages: { SetPlotFlag(plotList, "C232DA078A044178AA9FCBC6E537FA75", 5); break; } case Game.CircleResult.SidedWithTemplars: { SetPlotFlag(plotList, "C232DA078A044178AA9FCBC6E537FA75", 4); break; } } // Nature of the Beast switch (this.Result.BeastResult) { case Game.BeastResult.SidedWithElves: { SetPlotFlag(plotList, "63DD3FD0AE584D59877B55269963459D", 0); break; } case Game.BeastResult.SidedWithWerewolves: { SetPlotFlag(plotList, "63DD3FD0AE584D59877B55269963459D", 13); break; } } if (this.Result.BeastOptions.HasFlag(Game.BeastOptions.ZathrianSacrified) == true) { SetPlotFlag(plotList, "63DD3FD0AE584D59877B55269963459D", 14); } // The Urn of Sacred Ashes if (this.Result.UrnOptions.HasFlag(Game.UrnOptions.GenitiviReturnedToDenerim) == true) { SetPlotFlag(plotList, "8B254175421D48E1B47FC915E8750228", 3); } switch (this.Result.LelianaResult) { case Game.LelianaResult.LeftForever: { SetPlotFlag(plotList, "919B6591AA754F5E8B871766F25A68AB", 19); break; } case Game.LelianaResult.Killed: { SetPlotFlag(plotList, "919B6591AA754F5E8B871766F25A68AB", 41); break; } } // A Paragon of Her Kind switch (this.Result.ParagonKingResult) { case Game.ParagonKingResult.KingIsBhelen: { SetPlotFlag(plotList, "B571814CBBA44127B605740BD5483A69", 7); break; } case Game.ParagonKingResult.KingIsHarrowmont: { SetPlotFlag(plotList, "B571814CBBA44127B605740BD5483A69", 8); break; } } switch (this.Result.ParagonAnvilResult) { case Game.ParagonAnvilResult.Caridin: { SetPlotFlag(plotList, "86FBBD4CB45D47FF885B0B2BB5407D1E", 26); break; } case Game.ParagonAnvilResult.BrankaAlive: { SetPlotFlag(plotList, "86FBBD4CB45D47FF885B0B2BB5407D1E", 4); break; } case Game.ParagonAnvilResult.BrankaSuicided: { SetPlotFlag(plotList, "86FBBD4CB45D47FF885B0B2BB5407D1E", 10); break; } } // The Landsmeet switch (this.Result.LandsmeetKingResult) { case Game.LandsmeetKingResult.AlistairEngagedToAnora: { SetPlotFlag(plotList, "841A4E6E0CDD43D3BA3BA484D9A2771F", 3); break; } case Game.LandsmeetKingResult.AlistairIsKing: { SetPlotFlag(plotList, "841A4E6E0CDD43D3BA3BA484D9A2771F", 1); break; } case Game.LandsmeetKingResult.AlistairEngagedToPlayer: { SetPlotFlag(plotList, "841A4E6E0CDD43D3BA3BA484D9A2771F", 56); break; } case Game.LandsmeetKingResult.AnoraIsQueen: { SetPlotFlag(plotList, "841A4E6E0CDD43D3BA3BA484D9A2771F", 4); break; } case Game.LandsmeetKingResult.PlayerIsKing: { SetPlotFlag(plotList, "841A4E6E0CDD43D3BA3BA484D9A2771F", 5); break; } } switch (this.Result.LandsmeetAlistairResult) { case Game.LandsmeetAlistairResult.Drunkard: { SetPlotFlag(plotList, "841A4E6E0CDD43D3BA3BA484D9A2771F", 16); break; } case Game.LandsmeetAlistairResult.Executed: { SetPlotFlag(plotList, "841A4E6E0CDD43D3BA3BA484D9A2771F", 17); break; } } switch (this.Result.LandsmeetLoghainResult) { case Game.LandsmeetLoghainResult.Warden: { SetPlotFlag(plotList, "841A4E6E0CDD43D3BA3BA484D9A2771F", 8); break; } case Game.LandsmeetLoghainResult.Executed: { SetPlotFlag(plotList, "841A4E6E0CDD43D3BA3BA484D9A2771F", 6); break; } } // The Battle for Denerim switch (this.Result.ClimaxArchdemonResult) { case Game.ClimaxArchdemonResult.AlistairKilledArchdemon: { SetPlotFlag(plotList, "A5FA53EF3C24463693440319F1D564B2", 2); break; } case Game.ClimaxArchdemonResult.LoghainKilledArchdemon: { SetPlotFlag(plotList, "A5FA53EF3C24463693440319F1D564B2", 5); break; } case Game.ClimaxArchdemonResult.PlayerKilledArchdemon: { SetPlotFlag(plotList, "A5FA53EF3C24463693440319F1D564B2", 4); break; } } switch (this.Result.ClimaxRitualResult) { case Game.ClimaxRitualResult.RitualWithAlistair: { SetPlotFlag(plotList, "764C8DAFF2274DFEBC7C7B32FA2BB0CD", 2); SetPlotFlag(plotList, "C354FB10309D4569A325BD82C047E812", 10); break; } case Game.ClimaxRitualResult.RitualWithLoghain: { SetPlotFlag(plotList, "764C8DAFF2274DFEBC7C7B32FA2BB0CD", 12); SetPlotFlag(plotList, "C354FB10309D4569A325BD82C047E812", 11); break; } case Game.ClimaxRitualResult.RitualWithPlayer: { SetPlotFlag(plotList, "764C8DAFF2274DFEBC7C7B32FA2BB0CD", 4); SetPlotFlag(plotList, "C354FB10309D4569A325BD82C047E812", 12); break; } } // Epliogue switch (this.Result.EpilogueBoonResult) { case Game.EpilogueBoonResult.Chancellor: { SetPlotFlag(plotList, "7F50C9E955D6461BB34B1A21A88CD4AD", 0); break; } case Game.EpilogueBoonResult.Circle: { SetPlotFlag(plotList, "7F50C9E955D6461BB34B1A21A88CD4AD", 13); break; } case Game.EpilogueBoonResult.Dalish: { SetPlotFlag(plotList, "7F50C9E955D6461BB34B1A21A88CD4AD", 8); break; } } // Companions if (this.Result.FollowerOptions.HasFlag(Game.FollowerOptions.DogRecruited) == true) { SetPlotFlag(plotList, "25BC6F5E8DA847938245071233433332", 1); } if (this.Result.FollowerOptions.HasFlag(Game.FollowerOptions.LelianaRecruited) == true) { SetPlotFlag(plotList, "25BC6F5E8DA847938245071233433332", 4); } if (this.Result.FollowerOptions.HasFlag(Game.FollowerOptions.ZevranRecruited) == true) { SetPlotFlag(plotList, "25BC6F5E8DA847938245071233433332", 9); } // Romance // Alistair if (this.Result.RomanceOptions.HasFlag(Game.RomanceOptions.AlistairRomance) == true) { SetPlotFlag(plotList, "840C666EA1FE48CBA260AB1FE42FCFA7", 21); } if (this.Result.RomanceOptions.HasFlag(Game.RomanceOptions.AlistairLove) == true) { SetPlotFlag(plotList, "840C666EA1FE48CBA260AB1FE42FCFA7", 29); } // Leliana if (this.Result.RomanceOptions.HasFlag(Game.RomanceOptions.LelianaRomance) == true) { SetPlotFlag(plotList, "E8CEBFA6EB2345EBB704DF06D794C803", 21); } if (this.Result.RomanceOptions.HasFlag(Game.RomanceOptions.LelianaLove) == true) { SetPlotFlag(plotList, "E8CEBFA6EB2345EBB704DF06D794C803", 29); } // Morrigan if (this.Result.RomanceOptions.HasFlag(Game.RomanceOptions.MorriganRomance) == true) { SetPlotFlag(plotList, "E8E833AC06C04BF2A3261A7937542D75", 21); } if (this.Result.RomanceOptions.HasFlag(Game.RomanceOptions.MorriganLove) == true) { SetPlotFlag(plotList, "E8E833AC06C04BF2A3261A7937542D75", 29); } // Zevran if (this.Result.RomanceOptions.HasFlag(Game.RomanceOptions.ZevranRomance) == true) { SetPlotFlag(plotList, "68F1B23EB3EA42F5B363ABE7FEB86A50", 21); } if (this.Result.RomanceOptions.HasFlag(Game.RomanceOptions.ZevranLove) == true) { SetPlotFlag(plotList, "68F1B23EB3EA42F5B363ABE7FEB86A50", 29); } // Isabella switch (this.Result.IsabellaResult) { case Game.IsabellaResult.SleptWith: { SetPlotFlag(plotList, "417FCFECF184466D83210AB7CD9B8077", 27); break; } case Game.IsabellaResult.IsabelaAndAlistairThreesome: { SetPlotFlag(plotList, "417FCFECF184466D83210AB7CD9B8077", 23); break; } case Game.IsabellaResult.IsabelaAndLelianaThreesome: { SetPlotFlag(plotList, "417FCFECF184466D83210AB7CD9B8077", 24); break; } case Game.IsabellaResult.IsabelaAndZevranThreesome: { SetPlotFlag(plotList, "417FCFECF184466D83210AB7CD9B8077", 26); break; } case Game.IsabellaResult.IsabelaInFoursome: { SetPlotFlag(plotList, "417FCFECF184466D83210AB7CD9B8077", 28); break; } } switch (this.Result.ZevranResult) { case Game.ZevranResult.KilledBeforeIntroduction: { SetPlotFlag(plotList, "1763DEA8045E4B1F911B44E51CA314D1", 34); break; } case Game.ZevranResult.GoesHostile: { SetPlotFlag(plotList, "1763DEA8045E4B1F911B44E51CA314D1", 14); break; } case Game.ZevranResult.LeavesAfterKissingFarewell: { SetPlotFlag(plotList, "1763DEA8045E4B1F911B44E51CA314D1", 37); break; } case Game.ZevranResult.LeavesForGood: { SetPlotFlag(plotList, "1763DEA8045E4B1F911B44E51CA314D1", 19); break; } } // Downloadable Content // Return to Ostagar switch (this.Result.CailanResult) { case Game.CailanResult.Burned: { SetPlotFlag(plotList, "3647F8987C154EC3879BC9D6C39F0FB9", 5); break; } case Game.CailanResult.Darkspawn: { SetPlotFlag(plotList, "3647F8987C154EC3879BC9D6C39F0FB9", 7); break; } case Game.CailanResult.Wolves: { SetPlotFlag(plotList, "3647F8987C154EC3879BC9D6C39F0FB9", 6); break; } } // The Stone Prisoner switch (this.Result.ShaleResult) { case Game.ShaleResult.Left: { SetPlotFlag(plotList, "028CD0B7B4054E8C8A1C5151DDAEAFB7", 6); break; } case Game.ShaleResult.Recruited: { SetPlotFlag(plotList, "028CD0B7B4054E8C8A1C5151DDAEAFB7", 7); break; } case Game.ShaleResult.Killed: { SetPlotFlag(plotList, "028CD0B7B4054E8C8A1C5151DDAEAFB7", 8); break; } } // Awakening switch (this.Result.AwakeningArchitectResult) { case Game.AwakeningArchitectResult.DealWithArchitect: { SetPlotFlag(plotList, "865CD1C26920459CAD2C670099CE8FBE", 2); break; } case Game.AwakeningArchitectResult.KilledArchitect: { SetPlotFlag(plotList, "865CD1C26920459CAD2C670099CE8FBE", 3); break; } } switch (this.Result.AwakeningDefenseResult) { case Game.AwakeningDefenseResult.Roads: { SetPlotFlag(plotList, "2B2A42D365084FA2A082449D8E397A1C", 3); break; } case Game.AwakeningDefenseResult.Farms: { SetPlotFlag(plotList, "2B2A42D365084FA2A082449D8E397A1C", 2); break; } } if (this.Result.AwakeningOptions.HasFlag(Game.AwakeningOptions.Orlesian) == true) { SetPlotFlag(plotList, "E3F7CA9BE9C543378764CD4D5AFC00A3", 0); } if (this.Result.AwakeningOptions.HasFlag(Game.AwakeningOptions.AndersRecruited) == true) { SetPlotFlag(plotList, "E3F7CA9BE9C543378764CD4D5AFC00A3", 6); } if (this.Result.AwakeningOptions.HasFlag(Game.AwakeningOptions.NathanielRecruited) == true) { SetPlotFlag(plotList, "E3F7CA9BE9C543378764CD4D5AFC00A3", 9); } if (this.Result.AwakeningOptions.HasFlag(Game.AwakeningOptions.NathanielFriendly) == true) { SetPlotFlag(plotList, "5DABBE1A8F3A440592A9F3078D3ABE16", 22); } if (this.Result.AwakeningOptions.HasFlag(Game.AwakeningOptions.AmaranthineSaved) == true) { SetPlotFlag(plotList, "1C7395DEAAC14F889A5D41F86854F48B", 7); } if (this.Result.AwakeningOptions.HasFlag(Game.AwakeningOptions.VigilsKeepSiegeCompleted) == true) { SetPlotFlag(plotList, "923E283E44DB4F48BA557085F77D1152", 7); } if (this.Result.AwakeningOptions.HasFlag(Game.AwakeningOptions.HerrenCompletedSilverite) == true) { SetPlotFlag(plotList, "217BD5BDBB814D2DB41E32F8A05FFC05", 5); } if (this.Result.AwakeningOptions.HasFlag(Game.AwakeningOptions.AndersDiedInSiege) == true) { SetPlotFlag(plotList, "80370AD2555A4CFDB33A1288F75CFC2D", 13); } if (this.Result.AwakeningOptions.HasFlag(Game.AwakeningOptions.NathanielDiedInSiege) == true) { SetPlotFlag(plotList, "F29B4323C13049BABE1D2E3007C6AD1D", 12); } // Warden's Keep switch (this.Result.KeepResult) { case Game.KeepResult.AvernusDoingBadExperiments: { SetPlotFlag(plotList, "14D501EF13CE49559111ED9DC9C44457", 5); break; } case Game.KeepResult.AvernusDoingGoodExperiments: { SetPlotFlag(plotList, "14D501EF13CE49559111ED9DC9C44457", 3); break; } } if (this.Result.KeepOptions.HasFlag(Game.KeepOptions.Completed) == true) { SetPlotFlag(plotList, "2F247F5F5B1C41F7845E3D09F20D5144", 13); } if (this.Result.KeepOptions.HasFlag(Game.KeepOptions.AvernusKilled) == true) { SetPlotFlag(plotList, "2F247F5F5B1C41F7845E3D09F20D5144", 17); } if (this.Result.KeepOptions.HasFlag(Game.KeepOptions.SophiaKilled) == true) { SetPlotFlag(plotList, "2F247F5F5B1C41F7845E3D09F20D5144", 2); } // Witch Hunt switch (this.Result.WitchResult) { case Game.WitchResult.Left: { SetPlotFlag(plotList, "731EAE9148E94CE3B80B903A24C46E4A", 0); break; } case Game.WitchResult.Followed: { SetPlotFlag(plotList, "731EAE9148E94CE3B80B903A24C46E4A", 1); break; } case Game.WitchResult.Stabbed: { SetPlotFlag(plotList, "731EAE9148E94CE3B80B903A24C46E4A", 2); break; } } // DLC: The Golems of Amgarrak if (this.Result.GolemStarted == true) { SetPlotFlag(plotList, "49F71F4764424E1C813E83651B4D3734", 0); } var gff = new GenericDataFile(); using (var data = new MemoryStream(BinaryResources.SaveGFF)) { gff.Deserialize(data); } gff.Import(root); return(gff); }