public void MoveResource(MadScience.Wrappers.ResourceKey oldKey, MadScience.Wrappers.ResourceKey newKey) { if (this.Stream.CanWrite == false) { throw new NotSupportedException(); } if (this._Entries.ContainsKey(oldKey) == false) { throw new KeyNotFoundException(); } else if (this._Entries.ContainsKey(newKey) == true) { throw new ArgumentException("database already contains the new resource key", "newKey"); } Entry entry = this._Entries[oldKey]; if (entry is StreamEntry) { this.OriginalEntries[oldKey] = (StreamEntry)entry; } this._Entries.Remove(oldKey); this._Entries.Add(newKey, entry); }
private void button6_Click(object sender, EventArgs e) { if (String.IsNullOrEmpty(textBox1.Text)) { textBox1.Text = "key:00000000:00000000:0000000000000000"; } if (MadScienceSmall.Helpers.validateKey(textBox1.Text)) { MadScience.Wrappers.ResourceKey rKey = new MadScience.Wrappers.ResourceKey(textBox1.Text); MadScience.Wrappers.VPXYEntry entry = new MadScience.Wrappers.VPXYEntry(); entry.type = 1; entry.tgiList.Add(rKey); vpxyFile.vpxy.seprEntries.Add(entry); ListViewItem item = new ListViewItem(); item.Text = (listView3.Items.Count).ToString(); item.SubItems.Add(rKey.ToString()); listView3.Items.Add(item); item = null; entry = null; //rKey = null; } }
private void loadFromStream(Stream input) { BinaryReader reader = new BinaryReader(input); this.version = reader.ReadUInt32(); this.keytable.offset = reader.ReadUInt32(); this.keytable.size = reader.ReadUInt32(); byte nameLength = reader.ReadByte(); this.partName = MadScience.StreamHelpers.ReadStringUTF16(input, false, (uint)nameLength); this.blendType = reader.ReadUInt32(); this.blendTgi = new MadScience.Wrappers.ResourceKey(input, (int)MadScience.Wrappers.ResourceKeyOrder.TGI); uint geomCount = reader.ReadUInt32(); for (int i = 0; i < geomCount; i++) { FacialBlendGeomBoneEntry geomBoneEntry = new FacialBlendGeomBoneEntry(input); this.geomBoneEntries.Add(geomBoneEntry); geomBoneEntry = null; } this.keytable.Load(input); reader = null; }
public static Stream findPattern(patternDetails pattern) { Wrappers.ResourceKey rKey = new MadScience.Wrappers.ResourceKey(0x00B2D882, 0x0, StringHelpers.HashFNV64(pattern.name)); Stream patternThumb = KeyUtils.findKey(rKey); return(patternThumb); }
public static Stream findKey(MadScience.Wrappers.ResourceKey resourceKey, int fullBuildNum, Wrappers.Database db) { List <MadScience.Wrappers.ResourceKey> resourceKeys = new List <MadScience.Wrappers.ResourceKey>(); resourceKeys.Add(resourceKey); return(findKey(resourceKeys, fullBuildNum, db)[0]); }
public void SetResourceStream(MadScience.Wrappers.ResourceKey key, Stream stream) { byte[] data = new byte[stream.Length]; long oldPosition = stream.Position; stream.Seek(0, SeekOrigin.Begin); stream.Read(data, 0, data.Length); stream.Seek(oldPosition, SeekOrigin.Begin); this.SetResource(key, data); }
public byte[] GetRawResource(MadScience.Wrappers.ResourceKey key) { if (this._Entries.ContainsKey(key) == false || !(this._Entries[key] is StreamEntry)) { throw new KeyNotFoundException(); } StreamEntry entry = (StreamEntry)this._Entries[key]; this.Stream.Seek(this.BaseOffset + entry.Offset, SeekOrigin.Begin); byte[] data = new byte[entry.CompressedSize]; this.Stream.Read(data, 0, data.Length); return(data); }
public void DeleteResource(MadScience.Wrappers.ResourceKey key) { if (this.Stream.CanWrite == false) { throw new NotSupportedException(); } if (this._Entries.ContainsKey(key) == false) { throw new KeyNotFoundException(); } if (this._Entries[key] is StreamEntry) { this.OriginalEntries[key] = (StreamEntry)this._Entries[key]; } this._Entries.Remove(key); }
public void SetResource(MadScience.Wrappers.ResourceKey key, byte[] data) { if (this.Stream.CanWrite == false) { throw new NotSupportedException(); } if (this._Entries.ContainsKey(key) && this._Entries[key] is StreamEntry) { this.OriginalEntries[key] = (StreamEntry)this._Entries[key]; } MemoryEntry entry = new MemoryEntry(); entry.Compressed = false; entry.CompressedSize = entry.DecompressedSize = (uint)data.Length; entry.Data = (byte[])(data.Clone()); this._Entries[key] = entry; }
public byte[] GetResource(MadScience.Wrappers.ResourceKey key) { if (this._Entries.ContainsKey(key) == false) { throw new KeyNotFoundException(); } if (this._Entries[key] is StreamEntry) { StreamEntry entry = (StreamEntry)this._Entries[key]; this.Stream.Seek(this.BaseOffset + entry.Offset, SeekOrigin.Begin); byte[] data; if (entry.Compressed == true) { data = MadScience.RefPack.Decompression.Decompress(this.Stream); //data = MadScience.RefPack.ByteHelpers.RefPackDecompress(this.Stream); if (data.Length != entry.DecompressedSize) { throw new InvalidOperationException("decompressed data not same length as specified in index"); } } else { data = new byte[entry.DecompressedSize]; this.Stream.Read(data, 0, data.Length); } return(data); } else if (this._Entries[key] is MemoryEntry) { return((byte[])(((MemoryEntry)this._Entries[key]).Data.Clone())); } else { throw new InvalidOperationException(); } }
private void loadFromStream(Stream input) { BinaryReader reader = new BinaryReader(input); this.version = reader.ReadUInt32(); this.keytable.offset = reader.ReadUInt32(); this.keytable.size = reader.ReadUInt32(); this.localeHash = reader.ReadUInt64(); uint indexersCount = reader.ReadUInt32(); List <uint> indexers = new List <uint>(); for (int i = 0; i < indexersCount; i++) { indexers.Add(reader.ReadUInt32()); } this.bidirectional = reader.ReadByte(); this.casPanelGroup = reader.ReadUInt32(); this.casPanelSubGroup = reader.ReadUInt32(); reader.ReadUInt32(); uint tgiCount = reader.ReadUInt32(); for (int i = 0; i < tgiCount; i++) { MadScience.Wrappers.ResourceKey temp = new MadScience.Wrappers.ResourceKey(input); this.keytable.keys.Add(temp); //temp = null; } for (int i = 0; i < indexersCount; i++) { this.blendLinks.Add(this.keytable.keys[(int)indexers[i]]); } reader = null; }
private void saveBlendUnit(Stream saveFile) { // Save everything to the class // Clear down the indexers and tgi lists blendunit.indexers.Clear(); blendunit.keytable.keys.Clear(); if (!String.IsNullOrEmpty(txtSlideLeft.Text) && !String.IsNullOrEmpty(txtSlideRight.Text)) { if (MadScienceSmall.Helpers.validateKey(txtSlideLeft.Text) && MadScienceSmall.Helpers.validateKey(txtSlideRight.Text)) { // Both sliders blendunit.indexers.Add(0); blendunit.indexers.Add(1); MadScience.Wrappers.ResourceKey kTempLeft = new MadScience.Wrappers.ResourceKey(txtSlideLeft.Text); MadScience.Wrappers.ResourceKey kTempRight = new MadScience.Wrappers.ResourceKey(txtSlideRight.Text); blendunit.keytable.keys.Add(kTempLeft); blendunit.keytable.keys.Add(kTempRight); kTempLeft = null; kTempRight = null; } } else { // Only one blendunit.indexers.Add(0); if (!String.IsNullOrEmpty(txtSlideLeft.Text) && MadScienceSmall.Helpers.validateKey(txtSlideLeft.Text)) { MadScience.Wrappers.ResourceKey kTemp = new MadScience.Wrappers.ResourceKey(txtSlideLeft.Text); blendunit.keytable.keys.Add(kTemp); kTemp = null; } if (!String.IsNullOrEmpty(txtSlideRight.Text) && MadScienceSmall.Helpers.validateKey(txtSlideRight.Text)) { MadScience.Wrappers.ResourceKey kTemp = new MadScience.Wrappers.ResourceKey(txtSlideRight.Text); blendunit.keytable.keys.Add(kTemp); kTemp = null; } } if (!chkBiDirectional.Checked) { blendunit.bidirectional = 0; } else { blendunit.bidirectional = 1; } blendunit.localeHash = MadScienceSmall.StringHelpers.ParseHex64("0x" + txtStringLocaleHash.Text); blendunit.casPanelSubGroup = Convert.ToUInt32(txtSortIndex.Text); if (chkListCasPanelGroup.GetItemChecked(0) == true) blendunit.casPanelGroup = 2; if (chkListCasPanelGroup.GetItemChecked(1) == true) blendunit.casPanelGroup = 8; if (chkListCasPanelGroup.GetItemChecked(2) == true) blendunit.casPanelGroup = 16; if (chkListCasPanelGroup.GetItemChecked(3) == true) blendunit.casPanelGroup = 64; if (chkListCasPanelGroup.GetItemChecked(4) == true) blendunit.casPanelGroup = 128; blendunit.Save(saveFile); }
public casPart Load(Stream casFile, bool parseXML) { BinaryReader reader = new BinaryReader(casFile); cFile.version = reader.ReadUInt32(); cFile.offset = reader.ReadUInt32(); cFile.numParts = reader.ReadUInt32(); for (int i = 0; i < cFile.numParts; i++) { uint xmlSize = reader.ReadUInt32(); cFile.xmlChunkRaw.Add(MadScience.StreamHelpers.ReadStringUTF16(casFile, (xmlSize * 2))); if (parseXML) this.parseRawXML(cFile.xmlChunkRaw.Count); uint xmlNum = reader.ReadUInt32(); } byte meshStringSize = reader.ReadByte(); cFile.meshName = MadScience.StreamHelpers.ReadStringUTF16(casFile, false, (uint)meshStringSize); cFile.clothingOrder = reader.ReadSingle(); cFile.unk2 = reader.ReadByte(); cFile.clothingType = reader.ReadUInt32(); cFile.typeFlag = reader.ReadUInt32(); cFile.ageGenderFlag = reader.ReadUInt32(); // Pre-populate the age/gender values this.ageGender(cFile.ageGenderFlag); cFile.clothingCategory = reader.ReadUInt32(); cFile.tgiIndexBodyPart1 = reader.ReadByte(); cFile.tgiIndexBodyPart2 = reader.ReadByte(); cFile.tgiIndexBlendInfoFat = reader.ReadByte(); cFile.tgiIndexBlendInfoFit = reader.ReadByte(); cFile.tgiIndexBlendInfoThin = reader.ReadByte(); cFile.tgiIndexBlendInfoSpecial = reader.ReadByte(); cFile.unk5 = reader.ReadUInt32(); byte hasIndexVPXY = reader.ReadByte(); if (hasIndexVPXY == 1) { cFile.tgiIndexVPXY = reader.ReadByte(); } cFile.count2 = reader.ReadByte(); for (int i = 0; i < cFile.count2; i++) { unkRepeat uR = new unkRepeat(); uR.unkNum = reader.ReadByte(); uR.unk2 = reader.ReadUInt32(); uR.unkRepeatInnerCount = reader.ReadByte(); for (int j = 0; j < uR.unkRepeatInnerCount; j++) { intTriple iT = new intTriple(); iT.one = reader.ReadUInt32(); iT.two = reader.ReadUInt32(); iT.three = reader.ReadUInt32(); uR.unkRepeatInnerLoop.Add(iT); } cFile.count2repeat.Add(uR); } byte hasIndexDiffuse = reader.ReadByte(); if (hasIndexDiffuse == 1) { cFile.tgiIndexDiffuse = reader.ReadByte(); } byte hasIndexSpecular = reader.ReadByte(); if (hasIndexSpecular == 1) { cFile.tgiIndexSpecular = reader.ReadByte(); } cFile.count3 = reader.ReadByte(); for (int i = 0; i < cFile.count3; i++) { cFile.count3repeat.Add(reader.ReadByte()); } cFile.count4 = reader.ReadByte(); for (int i = 0; i < cFile.count4; i++) { cFile.count4repeat.Add(reader.ReadByte()); } cFile.count5 = reader.ReadByte(); for (int i = 0; i < cFile.count5; i++) { cFile.count5repeat.Add(reader.ReadByte()); } byte len = reader.ReadByte(); cFile.unkString = MadScience.StreamHelpers.ReadStringUTF16(casFile, false, (uint)len); cFile.count6 = reader.ReadByte(); for (int i = 0; i < cFile.count6; i++) { MadScience.Wrappers.ResourceKey tgi = new MadScience.Wrappers.ResourceKey(casFile, (int)MadScience.Wrappers.ResourceKeyOrder.IGT); cFile.tgi64list.Add(tgi); } reader.Close(); return this.cFile; }
private void button1_Click(object sender, EventArgs e) { TextReader r = new StreamReader(@"P:\Stuart\Desktop\fullPatternList.xml"); XmlSerializer s = new XmlSerializer(typeof(files)); files lookupList = (files)s.Deserialize(r); r.Close(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < lookupList.Items.Count; i++) { Stream mem = File.OpenRead(@"P:\Stuart\Desktop\FullBuild0\config\xml\root\" + lookupList.Items[i].fullCasPartname + ".xml"); Patterns.patternDetails pDetails = Patterns.parsePatternComplate(mem); if (String.IsNullOrEmpty(pDetails.category)) { continue; } patternsFile cPattern = new patternsFile(); MadScience.Wrappers.ResourceKey rKey = new MadScience.Wrappers.ResourceKey("key:" + lookupList.Items[i].typeid.Remove(0, 2) + ":" + lookupList.Items[i].groupid.Remove(0, 2) + ":" + lookupList.Items[i].instanceid.Remove(0, 2)); cPattern.key = rKey.ToString(); if (!StreamHelpers.isValidStream(KeyUtils.findKey("key:00B2D882:00000000:" + StringHelpers.HashFNV64(pDetails.name.Substring(pDetails.name.LastIndexOf("\\") + 1)).ToString("X16")))) { cPattern.texturename = pDetails.BackgroundImage; } else { cPattern.texturename = "key:00B2D882:00000000:" + StringHelpers.HashFNV64(pDetails.name.Substring(pDetails.name.LastIndexOf("\\") + 1)).ToString("X16"); } cPattern.casPart = pDetails.name.Substring(pDetails.name.LastIndexOf("\\") + 1); switch (pDetails.category) { case "Old": break; default: //string fullName = pDetails.Substring(patternTexture.LastIndexOf("\\") + 1); string category = pDetails.filename; category = category.Replace(@"($assetRoot)\InGame\Complates\", ""); category = category.Replace(@"Materials\", ""); category = category.Replace(@".tga", ""); category = category.Replace(@".dds", ""); if (category.IndexOf("\\") > -1) { category = category.Substring(0, category.IndexOf("\\")); } else { category = pDetails.category; } string subCategory = pDetails.filename; subCategory = subCategory.Replace(@"($assetRoot)\InGame\Complates\", ""); subCategory = subCategory.Replace(@"Materials\", ""); subCategory = subCategory.Replace(@".tga", ""); subCategory = subCategory.Replace(@".dds", ""); if (subCategory.IndexOf("\\") > -1) { subCategory = subCategory.Substring(subCategory.IndexOf("\\") + 1); } if (subCategory.Contains("\\")) { subCategory = subCategory.Remove(subCategory.IndexOf("\\")); } else { subCategory = ""; } if (subCategory == pDetails.name) { subCategory = ""; } cPattern.category = category; cPattern.subcategory = subCategory; Console.WriteLine(pDetails.name + " " + category + " " + subCategory); sb.AppendLine("<pattern key=\"" + cPattern.key + "\" texturename=\"\" category=\"" + category + "\" subcategory=\"" + subCategory + "\">" + pDetails.name + "</file>"); break; } //xtr.Close(); mem.Close(); } Clipboard.SetText(sb.ToString()); Console.WriteLine("Done"); }
private void button1_Click(object sender, EventArgs e) { TextReader r = new StreamReader(@"P:\Stuart\Desktop\fullPatternList.xml"); XmlSerializer s = new XmlSerializer(typeof(files)); files lookupList = (files)s.Deserialize(r); r.Close(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < lookupList.Items.Count; i++) { Stream mem = File.OpenRead(@"P:\Stuart\Desktop\FullBuild0\config\xml\root\" + lookupList.Items[i].fullCasPartname + ".xml"); Patterns.patternDetails pDetails = Patterns.parsePatternComplate(mem); if (String.IsNullOrEmpty(pDetails.category)) continue; patternsFile cPattern = new patternsFile(); MadScience.Wrappers.ResourceKey rKey = new MadScience.Wrappers.ResourceKey("key:" + lookupList.Items[i].typeid.Remove(0, 2) + ":" + lookupList.Items[i].groupid.Remove(0, 2) + ":" + lookupList.Items[i].instanceid.Remove(0,2)); cPattern.key = rKey.ToString(); if (!StreamHelpers.isValidStream(KeyUtils.findKey("key:00B2D882:00000000:" + StringHelpers.HashFNV64(pDetails.name.Substring(pDetails.name.LastIndexOf("\\") + 1)).ToString("X16")))) { cPattern.texturename = pDetails.BackgroundImage; } else { cPattern.texturename = "key:00B2D882:00000000:" + StringHelpers.HashFNV64(pDetails.name.Substring(pDetails.name.LastIndexOf("\\") + 1)).ToString("X16"); } cPattern.casPart = pDetails.name.Substring(pDetails.name.LastIndexOf("\\") + 1); switch (pDetails.category) { case "Old": break; default: //string fullName = pDetails.Substring(patternTexture.LastIndexOf("\\") + 1); string category = pDetails.filename; category = category.Replace(@"($assetRoot)\InGame\Complates\", ""); category = category.Replace(@"Materials\", ""); category = category.Replace(@".tga", ""); category = category.Replace(@".dds", ""); if (category.IndexOf("\\") > -1) { category = category.Substring(0, category.IndexOf("\\")); } else { category = pDetails.category; } string subCategory = pDetails.filename; subCategory = subCategory.Replace(@"($assetRoot)\InGame\Complates\", ""); subCategory = subCategory.Replace(@"Materials\", ""); subCategory = subCategory.Replace(@".tga", ""); subCategory = subCategory.Replace(@".dds", ""); if (subCategory.IndexOf("\\") > -1) { subCategory = subCategory.Substring(subCategory.IndexOf("\\") + 1); } if (subCategory.Contains("\\")) { subCategory = subCategory.Remove(subCategory.IndexOf("\\")); } else { subCategory = ""; } if (subCategory == pDetails.name) subCategory = ""; cPattern.category = category; cPattern.subcategory = subCategory; Console.WriteLine(pDetails.name + " " + category + " " + subCategory); sb.AppendLine("<pattern key=\"" + cPattern.key + "\" texturename=\"\" category=\"" + category + "\" subcategory=\"" + subCategory + "\">" + pDetails.name + "</file>"); break; } //xtr.Close(); mem.Close(); } Clipboard.SetText(sb.ToString()); Console.WriteLine("Done"); }
private void loadFromStream(Stream input) { BinaryReader reader = new BinaryReader(input); this.version = reader.ReadUInt32(); this.keytable.offset = reader.ReadUInt32(); this.keytable.size = reader.ReadUInt32(); this.localeHash = reader.ReadUInt64(); uint indexersCount = reader.ReadUInt32(); List<uint> indexers = new List<uint>(); for (int i = 0; i < indexersCount; i++) { indexers.Add(reader.ReadUInt32()); } this.bidirectional = reader.ReadByte(); this.casPanelGroup = reader.ReadUInt32(); this.casPanelSubGroup = reader.ReadUInt32(); reader.ReadUInt32(); uint tgiCount = reader.ReadUInt32(); for (int i = 0; i < tgiCount; i++) { MadScience.Wrappers.ResourceKey temp = new MadScience.Wrappers.ResourceKey(input); this.keytable.keys.Add(temp); //temp = null; } for (int i = 0; i < indexersCount; i++) { this.blendLinks.Add(this.keytable.keys[(int)indexers[i]]); } reader = null; }
public Stream GetResourceStream(MadScience.Wrappers.ResourceKey key) { return(new MemoryStream(this.GetResource(key))); }
public static Stream findPattern(patternDetails pattern) { Wrappers.ResourceKey rKey = new MadScience.Wrappers.ResourceKey(0x00B2D882, 0x0, StringHelpers.HashFNV64(pattern.name)); Stream patternThumb = KeyUtils.findKey(rKey); return patternThumb; }
public static Stream findKey(MadScience.Wrappers.ResourceKey resourceKey) { return(findKey(resourceKey, 2)); }
private void saveBlendUnit(Stream saveFile) { // Save everything to the class // Clear down the indexers and tgi lists blendunit.indexers.Clear(); blendunit.keytable.keys.Clear(); if (!String.IsNullOrEmpty(txtSlideLeft.Text) && !String.IsNullOrEmpty(txtSlideRight.Text)) { if (MadScienceSmall.Helpers.validateKey(txtSlideLeft.Text) && MadScienceSmall.Helpers.validateKey(txtSlideRight.Text)) { // Both sliders blendunit.indexers.Add(0); blendunit.indexers.Add(1); MadScience.Wrappers.ResourceKey kTempLeft = new MadScience.Wrappers.ResourceKey(txtSlideLeft.Text); MadScience.Wrappers.ResourceKey kTempRight = new MadScience.Wrappers.ResourceKey(txtSlideRight.Text); blendunit.keytable.keys.Add(kTempLeft); blendunit.keytable.keys.Add(kTempRight); kTempLeft = null; kTempRight = null; } } else { // Only one blendunit.indexers.Add(0); if (!String.IsNullOrEmpty(txtSlideLeft.Text) && MadScienceSmall.Helpers.validateKey(txtSlideLeft.Text)) { MadScience.Wrappers.ResourceKey kTemp = new MadScience.Wrappers.ResourceKey(txtSlideLeft.Text); blendunit.keytable.keys.Add(kTemp); kTemp = null; } if (!String.IsNullOrEmpty(txtSlideRight.Text) && MadScienceSmall.Helpers.validateKey(txtSlideRight.Text)) { MadScience.Wrappers.ResourceKey kTemp = new MadScience.Wrappers.ResourceKey(txtSlideRight.Text); blendunit.keytable.keys.Add(kTemp); kTemp = null; } } if (!chkBiDirectional.Checked) { blendunit.bidirectional = 0; } else { blendunit.bidirectional = 1; } blendunit.localeHash = MadScienceSmall.StringHelpers.ParseHex64("0x" + txtStringLocaleHash.Text); blendunit.casPanelSubGroup = Convert.ToUInt32(txtSortIndex.Text); if (chkListCasPanelGroup.GetItemChecked(0) == true) { blendunit.casPanelGroup = 2; } if (chkListCasPanelGroup.GetItemChecked(1) == true) { blendunit.casPanelGroup = 8; } if (chkListCasPanelGroup.GetItemChecked(2) == true) { blendunit.casPanelGroup = 16; } if (chkListCasPanelGroup.GetItemChecked(3) == true) { blendunit.casPanelGroup = 64; } if (chkListCasPanelGroup.GetItemChecked(4) == true) { blendunit.casPanelGroup = 128; } blendunit.Save(saveFile); }