コード例 #1
0
ファイル: DirectDrawSurface.cs プロジェクト: Frassle/Ibasa
        private void ReadHeader(Ibasa.IO.BinaryReader reader)
        {
            HeaderFlags = (HeaderFlagsEnum)reader.ReadInt32();
            Height = reader.ReadInt32();
            Width = reader.ReadInt32();
            Pitch = reader.ReadInt32();
            Depth = reader.ReadInt32();
            MipmapCount = reader.ReadInt32();
            reader.ReadBytes(44); //skip padding

            int pixelSize = reader.ReadInt32();
            if (pixelSize != 32)
                throw new InvalidDataException(string.Format("Pixel format size {0} does not match 32.", pixelSize));

            PixelFlags = (PixelFlagsEnum)reader.ReadInt32();
            FourCC = new FourCC(reader.ReadInt32());
            RGBBitCount = reader.ReadInt32();
            RBitMask = reader.ReadInt32();
            GBitMask = reader.ReadInt32();
            BBitMask = reader.ReadInt32();
            ABitMask = reader.ReadInt32();

            SurfaceFlags = (SurfaceFlagsEnum)reader.ReadInt32();
            CubemapFlags = (CubemapFlagsEnum)reader.ReadInt32();

            reader.ReadBytes(12); //skip padding
        }
コード例 #2
0
ファイル: DirectDrawSurface.cs プロジェクト: Frassle/Ibasa
        private void ReadDx10Header(Ibasa.IO.BinaryReader reader)
        {
            if (!IsDX10Mode)
                return;

            DxgiFormat = (DxgiFormat)reader.ReadInt32();
            ResourceDimension = (ResourceDimensionEnum)reader.ReadInt32();
            MiscFlags = (MiscFlagsEnum)reader.ReadInt32();
            ArraySize = reader.ReadInt32();
            reader.ReadBytes(4); //skip padding
        }
コード例 #3
0
ファイル: Vtf.cs プロジェクト: Frassle/Ibasa
 private void ReadHeader70(Ibasa.IO.BinaryReader reader)
 {
     Width = reader.ReadUInt16();
     Height = reader.ReadUInt16();
     Flags = (TextureFlags)reader.ReadInt32();
     Frames = reader.ReadUInt16();
     StartFrame = reader.ReadUInt16();
     reader.ReadBytes(4); //skip padding
     Reflectivity = new Vector3f(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
     reader.ReadBytes(4); //skip padding
     BumpmapScale = reader.ReadSingle();
     ImageFormat = (ImageFormat)reader.ReadInt32();
     MipmapCount = reader.ReadByte();
     LowResImageFormat = (ImageFormat)reader.ReadInt32();
     LowResImageWidth = reader.ReadByte();
     LowResImageHeight = reader.ReadByte();
 }
コード例 #4
0
ファイル: Vtf.cs プロジェクト: Frassle/Ibasa
        private void ReadHeader73(Ibasa.IO.BinaryReader reader)
        {
            if (VersionMinor >= 3)
            {
                reader.ReadBytes(3); //skip padding
                int resourceCount = reader.ReadInt32();
                reader.ReadBytes(8); //skip padding

                var resources = new Resource[resourceCount];

                for (int res = 0; res < resourceCount; ++res)
                {
                    int type = reader.ReadInt32();
                    resources[res] = new Resource(
                        (ResourceType)type & ResourceType.Mask,
                        (ResourceFlags)type & ResourceFlags.Mask, 
                        reader.ReadInt32());
                }

                Resources = new ImmutableArray<Resource>(resources);
            }
            else if(VersionMinor == 2)
            {
                //skip padding
                reader.ReadBytes(15); //skip padding

                Resources = new ImmutableArray<Resource>(0);
            }
        }
コード例 #5
0
ファイル: Mdl.cs プロジェクト: Frassle/Ibasa
        ImmutableArray<Mesh> LoadMeshes(Ibasa.IO.BinaryReader reader, int count)
        {
            long offset = reader.BaseStream.Position;

            Mesh[] meshes = new Mesh[count];
            for (int i = 0; i < count; ++i)
            {
                reader.BaseStream.Position = offset;

                int material = reader.ReadInt32();
                int modelIndex = reader.ReadInt32();

                int vertexCount = reader.ReadInt32();
                int vertexOffset = reader.ReadInt32();

                int flexCount = reader.ReadInt32();
                long flexOffset = offset + reader.ReadInt32();

                int materialType = reader.ReadInt32();
                int materialParam = reader.ReadInt32();

                int meshId = reader.ReadInt32();

                Vector3f center = new Vector3f(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());

                int modelvertexdata = reader.ReadInt32();

                int[] numLODVertexes = new int[8];
                for (int l = 0; l < 8; ++l)
                {
                    numLODVertexes[l] = reader.ReadInt32();
                }
                ImmutableArray<int> lods = new ImmutableArray<int>(numLODVertexes);

                reader.Seek(8 * 4, SeekOrigin.Current); //skip 8 ints

                offset = reader.BaseStream.Position;

                reader.BaseStream.Position = flexOffset;
                ImmutableArray<Flex> flexes = LoadFlexes(reader, flexCount);

                meshes[i] = new Mesh(material, vertexCount, vertexOffset, flexes, materialType, materialParam, meshId, center, lods);
            }
            return new ImmutableArray<Mesh>(meshes);
        }
コード例 #6
0
ファイル: Mdl.cs プロジェクト: Frassle/Ibasa
 ImmutableArray<string> LoadStringTable(Ibasa.IO.BinaryReader reader, int count, long baseOffset)
 {
     long[] offsets = new long[count];
     for (int i = 0; i < count; ++i)
     {
         offsets[i] = baseOffset + reader.ReadInt32();
     }
     string[] strings = new string[count];
     for (int i = 0; i < count; ++i)
     {
         reader.BaseStream.Position = offsets[i];
         strings[i] = LoadString(reader);
     }
     return new ImmutableArray<string>(strings);
 }
コード例 #7
0
ファイル: Mdl.cs プロジェクト: Frassle/Ibasa
        ImmutableArray<BodyPart> LoadBodyParts(Ibasa.IO.BinaryReader reader, int count)
        {
            long offset = reader.BaseStream.Position;

            BodyPart[] bodyParts = new BodyPart[count];
            for (int i = 0; i < count; ++i)
            {
                reader.BaseStream.Position = offset;

                long nameOffset = offset + reader.ReadInt32();
                int modelCount = reader.ReadInt32();
                int @base = reader.ReadInt32();
                long modelOffset = offset + reader.ReadInt32();

                offset = reader.BaseStream.Position;

                reader.BaseStream.Position = nameOffset;
                string name = LoadString(reader);

                reader.BaseStream.Position = modelOffset;
                ImmutableArray<Model> models = LoadModels(reader, modelCount);

                bodyParts[i] = new BodyPart(name, @base, models);
            }
            return new ImmutableArray<BodyPart>(bodyParts);
        }
コード例 #8
0
ファイル: Mdl.cs プロジェクト: Frassle/Ibasa
        ImmutableArray<Model> LoadModels(Ibasa.IO.BinaryReader reader, int count)
        {
            long offset = reader.BaseStream.Position;

            Model[] models = new Model[count];
            for (int i = 0; i < count; ++i)
            {
                reader.BaseStream.Position = offset;

                string name = Encoding.ASCII.GetString(reader.ReadBytes(64)).Trim('\0');
                int type = reader.ReadInt32();
                float boundingRadius = reader.ReadSingle();

                int meshCount = reader.ReadInt32();
                long meshOffset = offset + reader.ReadInt32();

                int vertexCount = reader.ReadInt32();
                int vertexIndex = reader.ReadInt32();
                int tangentIndex = reader.ReadInt32();

                int numattachments = reader.ReadInt32();
                int attachmentindex = reader.ReadInt32();

                int eyeballCount = reader.ReadInt32();
                long eyeballOffset = offset + reader.ReadInt32();

                int vertexData = reader.ReadInt32();
                int indexData = reader.ReadInt32();

                reader.Seek(8 * 4, SeekOrigin.Current); //skip 8 ints

                offset = reader.BaseStream.Position;

                reader.BaseStream.Position = meshOffset;
                ImmutableArray<Mesh> meshes = LoadMeshes(reader, meshCount);

                reader.BaseStream.Position = meshOffset;
                ImmutableArray<Eyeball> eyeballs = LoadEyeballs(reader, meshCount);

                models[i] = new Model(name, type, boundingRadius, meshes, vertexCount, vertexIndex, tangentIndex, eyeballs);
            }
            return new ImmutableArray<Model>(models);
        }
コード例 #9
0
ファイル: Mdl.cs プロジェクト: Frassle/Ibasa
        ImmutableArray<Texture> LoadTextures(Ibasa.IO.BinaryReader reader, int count)
        {
            long offset = reader.BaseStream.Position;

            Texture[] textures = new Texture[count];
            for (int i = 0; i < count; ++i)
            {
                reader.BaseStream.Position = offset;

                long nameOffset = offset + reader.ReadInt32();
                int flags = reader.ReadInt32();
                int used = reader.ReadInt32();
                int unused = reader.ReadInt32();

                reader.Seek(12 * 4, SeekOrigin.Current); //skip 12 ints

                offset = reader.BaseStream.Position;

                reader.BaseStream.Position = nameOffset;
                string name = LoadString(reader);

                textures[i] = new Texture(name, flags);
            }
            return new ImmutableArray<Texture>(textures);
        }
コード例 #10
0
ファイル: Mdl.cs プロジェクト: Frassle/Ibasa
        ImmutableArray<HitBox> LoadHitBoxes(Ibasa.IO.BinaryReader reader, int count)
        {
            long offset = reader.BaseStream.Position;

            HitBox[] hitBoxes = new HitBox[count];
            for (int i = 0; i < count; ++i)
            {
                reader.BaseStream.Position = offset;

                int bone = reader.ReadInt32();
                int group = reader.ReadInt32();
                Boxf box = new Boxf(
                    new Point3f(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()),
                    new Size3f(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()));
                long nameOffset = offset + reader.ReadInt32();

                reader.Seek(8*4, SeekOrigin.Current); //skip 8 ints

                offset = reader.BaseStream.Position;

                reader.BaseStream.Position = nameOffset;
                string name = LoadString(reader);

                hitBoxes[i] = new HitBox(bone, group, box, name);
            }
            return new ImmutableArray<HitBox>(hitBoxes);
        }
コード例 #11
0
ファイル: Mdl.cs プロジェクト: Frassle/Ibasa
        ImmutableArray<HitBoxSet> LoadHitBoxSets(Ibasa.IO.BinaryReader reader, int count)
        {
            long offset = reader.BaseStream.Position;

            HitBoxSet[] hitBoxSets = new HitBoxSet[count];
            for (int i = 0; i < count; ++i)
            {
                reader.BaseStream.Position = offset;

                long nameOffset = offset + reader.ReadInt32();
                int hitBoxCount = reader.ReadInt32();
                long hitBoxOffset = offset + reader.ReadInt32();

                offset = reader.BaseStream.Position;

                reader.BaseStream.Position = nameOffset;
                string name = LoadString(reader);
                reader.BaseStream.Position = hitBoxOffset;
                ImmutableArray<HitBox> hitBoxes = LoadHitBoxes(reader, hitBoxCount);
                hitBoxSets[i] = new HitBoxSet(name, hitBoxes);
            }
            return new ImmutableArray<HitBoxSet>(hitBoxSets);
        }
コード例 #12
0
ファイル: Mdl.cs プロジェクト: Frassle/Ibasa
 ImmutableArray<BoneController> LoadBoneControllers(Ibasa.IO.BinaryReader reader, int count)
 {
     BoneController[] boneControllers = new BoneController[count];
     for (int i = 0; i < count; ++i)
     {
         boneControllers[i] = new BoneController(
             reader.ReadInt32(),
             (BoneControllerType)reader.ReadInt32(),
             reader.ReadSingle(),
             reader.ReadSingle(),
             reader.ReadInt32(),
             reader.ReadInt32());
         reader.Seek(8 * 4, SeekOrigin.Current); //skip 8 ints
     }
     return new ImmutableArray<BoneController>(boneControllers);
 }
コード例 #13
0
ファイル: Mdl.cs プロジェクト: Frassle/Ibasa
        ImmutableArray<Bone> LoadBones(Ibasa.IO.BinaryReader reader, int count)
        {
            long offset = reader.BaseStream.Position;

            Bone[] bones = new Bone[count];
            for (int i = 0; i < count; ++i)
            {
                reader.BaseStream.Position = offset;

                long nameOffset = offset + reader.ReadInt32();
                int parent = reader.ReadInt32();
                ImmutableArray<int> boneControllers = new ImmutableArray<int>(new int[] {
                    reader.ReadInt32(),reader.ReadInt32(),reader.ReadInt32(),
                    reader.ReadInt32(),reader.ReadInt32(),reader.ReadInt32()});

                Vector3f position = new Vector3f(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
                Quaternionf quaternion = new Quaternionf(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
                Vector3f rotation = new Vector3f(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());

                Vector3f positionScale = new Vector3f(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
                Vector3f rotationScale = new Vector3f(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());

                Matrix4x4f poseToBone = new Matrix4x4f(
                    reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(),
                    reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(),
                    reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(),
                    0, 0, 0, 1);
                Quaternionf alignment = new Quaternionf(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
                int flags = reader.ReadInt32();
                int procType = reader.ReadInt32();
                int procIndex = reader.ReadInt32();
                int physicsBone = reader.ReadInt32();
                int surfacePropIdx = reader.ReadInt32();
                int contents = reader.ReadInt32();

                reader.Seek(8 * 4, SeekOrigin.Current); //skip 8 ints

                offset = reader.BaseStream.Position;

                reader.BaseStream.Position = nameOffset;
                string name = LoadString(reader);

                bones[i] = new Bone(name, parent, boneControllers, position, quaternion, rotation,
                    positionScale, rotationScale, poseToBone, alignment, flags,
                    procType, procIndex, physicsBone, surfacePropIdx, contents);
            }
            return new ImmutableArray<Bone>(bones);
        }