コード例 #1
0
        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;
        }
コード例 #2
0
        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;
        }