private tgi64 keyToTGI64(string keyString) { tgi64 tgi = new tgi64(); if (keyString == "") { tgi.typeid = 0; tgi.groupid = 0; tgi.instanceid = 0; return tgi; } keyString = keyString.Replace("key:", ""); string[] temp = keyString.Split(":".ToCharArray()); uint typeID = Gibbed.Helpers.StringHelpers.ParseHex32("0x" + temp[0]); uint groupID = Gibbed.Helpers.StringHelpers.ParseHex32("0x" + temp[1]); ulong instanceID = Gibbed.Helpers.StringHelpers.ParseHex64("0x" + temp[2]); tgi.typeid = typeID; tgi.groupid = groupID; tgi.instanceid = instanceID; Console.WriteLine("Returning tgi64 " + tgi.typeid.ToString("X8") + ":" + tgi.groupid.ToString("X8") + ":" + tgi.instanceid.ToString("X16")); return tgi; }
public casPart Load(Stream casFile) { 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(Gibbed.Helpers.StreamHelpers.ReadUTF16(casFile, (xmlSize * 2))); this.parseRawXML(cFile.xmlChunkRaw.Count); uint xmlNum = reader.ReadUInt32(); } byte meshStringSize = reader.ReadByte(); cFile.meshName = Gibbed.Helpers.StreamHelpers.ReadUTF16(casFile, (uint)meshStringSize, false); cFile.unk1 = reader.ReadSingle(); cFile.unk2 = reader.ReadByte(); cFile.unk3 = reader.ReadUInt32(); cFile.typeFlag = reader.ReadUInt32(); cFile.ageGenderFlag = reader.ReadUInt32(); 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 = Gibbed.Helpers.StreamHelpers.ReadUTF16(casFile, (uint)len, false); cFile.count6 = reader.ReadByte(); for (int i = 0; i < cFile.count6; i++) { tgi64 tgi = new tgi64(); tgi.instanceid = reader.ReadUInt64(); tgi.groupid = reader.ReadUInt32(); tgi.typeid = reader.ReadUInt32(); cFile.tgi64list.Add(tgi); } reader.Close(); return this.cFile; }