예제 #1
0
        public override void Read(ResourceDataReader reader, params object[] parameters)
        {
            base.Read(reader, parameters);

            // read structure data
            this.Width       = reader.ReadUInt16();
            this.Height      = reader.ReadUInt16();
            this.Depth       = reader.ReadUInt16();
            this.Stride      = reader.ReadUInt16();
            this.Format      = (TextureFormat)reader.ReadUInt32();
            this.Unknown_5Ch = reader.ReadByte();
            this.Levels      = reader.ReadByte();
            this.Unknown_5Eh = reader.ReadUInt16();
            this.Unknown_60h = reader.ReadUInt32();
            this.Unknown_64h = reader.ReadUInt32();
            this.Unknown_68h = reader.ReadUInt32();
            this.Unknown_6Ch = reader.ReadUInt32();
            this.DataPointer = reader.ReadUInt64();
            this.Unknown_78h = reader.ReadUInt32();
            this.Unknown_7Ch = reader.ReadUInt32();
            this.Unknown_80h = reader.ReadUInt32();
            this.Unknown_84h = reader.ReadUInt32();
            this.Unknown_88h = reader.ReadUInt32();
            this.Unknown_8Ch = reader.ReadUInt32();

            // read reference data
            this.Data = reader.ReadBlockAt <TextureData>(this.DataPointer, this.Format, this.Width, this.Height, this.Levels, this.Stride);
        }
예제 #2
0
        public override void Read(ResourceDataReader reader, params object[] parameters)
        {
            base.Read(reader, parameters);

            ContentFlags         = (NavMeshFlags)reader.ReadUInt32();
            VersionUnk1          = reader.ReadUInt32();
            Unused_018h          = reader.ReadUInt32();
            Unused_01Ch          = reader.ReadUInt32();
            Transform            = reader.ReadMatrix();
            AABBSize             = reader.ReadVector3();
            AABBUnk              = reader.ReadSingle();
            VerticesPointer      = reader.ReadUInt64();
            Unused_078h          = reader.ReadUInt32();
            Unused_07Ch          = reader.ReadUInt32();
            IndicesPointer       = reader.ReadUInt64();
            AdjPolysPointer      = reader.ReadUInt64();
            AdjPolysIndicesCount = reader.ReadUInt32();
            AdjAreaIDs           = reader.ReadStruct <NavMeshUintArray>();
            PolysPointer         = reader.ReadUInt64();
            SectorTreePointer    = reader.ReadUInt64();
            PortalsPointer       = reader.ReadUInt64();
            PortalLinksPointer   = reader.ReadUInt64();
            VerticesCount        = reader.ReadUInt32();
            PolysCount           = reader.ReadUInt32();
            AreaID           = reader.ReadUInt32();
            TotalBytes       = reader.ReadUInt32();
            SectorUnkCount   = reader.ReadUInt32();
            PortalsCount     = reader.ReadUInt32();
            PortalLinksCount = reader.ReadUInt32();
            Unused_154h      = reader.ReadUInt32();
            Unused_158h      = reader.ReadUInt32();
            Unused_15Ch      = reader.ReadUInt32();
            VersionUnk2      = reader.ReadUInt32();
            Unused_164h      = reader.ReadUInt32();
            Unused_168h      = reader.ReadUInt32();
            Unused_16Ch      = reader.ReadUInt32();



            Vertices    = reader.ReadBlockAt <NavMeshList <NavMeshVertex> >(VerticesPointer);
            Indices     = reader.ReadBlockAt <NavMeshList <ushort> >(IndicesPointer);
            AdjPolys    = reader.ReadBlockAt <NavMeshList <NavMeshAdjPoly> >(AdjPolysPointer);
            Polys       = reader.ReadBlockAt <NavMeshList <NavMeshPoly> >(PolysPointer);
            SectorTree  = reader.ReadBlockAt <NavMeshSector>(SectorTreePointer);
            Portals     = reader.ReadStructsAt <NavMeshPortal>(PortalsPointer, PortalsCount);
            PortalLinks = reader.ReadUshortsAt(PortalLinksPointer, PortalLinksCount);
        }
예제 #3
0
        public override void Read(ResourceDataReader reader, params object[] parameters)
        {
            AABBMin         = reader.ReadVector4();
            AABBMax         = reader.ReadVector4();
            CellAABB        = reader.ReadStruct <NavMeshAABB>();
            DataPointer     = reader.ReadUInt64();
            SubTree1Pointer = reader.ReadUInt64();
            SubTree2Pointer = reader.ReadUInt64();
            SubTree3Pointer = reader.ReadUInt64();
            SubTree4Pointer = reader.ReadUInt64();
            Unused_54h      = reader.ReadUInt32();
            Unused_58h      = reader.ReadUInt32();
            Unused_5Ch      = reader.ReadUInt32();

            Data     = reader.ReadBlockAt <NavMeshSectorData>(DataPointer);
            SubTree1 = reader.ReadBlockAt <NavMeshSector>(SubTree1Pointer);
            SubTree2 = reader.ReadBlockAt <NavMeshSector>(SubTree2Pointer);
            SubTree3 = reader.ReadBlockAt <NavMeshSector>(SubTree3Pointer);
            SubTree4 = reader.ReadBlockAt <NavMeshSector>(SubTree4Pointer);
        }
예제 #4
0
        /// <summary>
        /// Reads the data-block from a stream.
        /// </summary>
        public override void Read(ResourceDataReader reader, params object[] parameters)
        {
            // read structure data
            this.FileVFT              = reader.ReadUInt32();
            this.FileUnknown          = reader.ReadUInt32();
            this.FilePagesInfoPointer = reader.ReadUInt64();

            // read reference data
            this.FilePagesInfo = reader.ReadBlockAt <ResourcePagesInfo>(
                this.FilePagesInfoPointer // offset
                );
        }
예제 #5
0
        public override void Read(ResourceDataReader reader, params object[] parameters)
        {
            VFT                = reader.ReadUInt32();
            Unknown_04h        = reader.ReadUInt32();
            ItemCount          = reader.ReadUInt32();
            Unknown_0Ch        = reader.ReadUInt32();
            ListPartsPointer   = reader.ReadUInt64();
            ListOffsetsPointer = reader.ReadUInt64();
            ListPartsCount     = reader.ReadUInt32();
            Unknown_24h        = reader.ReadUInt32();
            Unknown_28h        = reader.ReadUInt32();
            Unknown_2Ch        = reader.ReadUInt32();

            ListParts   = reader.ReadBlockAt <ResourceSimpleArray <NavMeshListPart <T> > >(ListPartsPointer, ListPartsCount);
            ListOffsets = reader.ReadUintsAt(ListOffsetsPointer, ListPartsCount);
        }
예제 #6
0
        public override void Read(ResourceDataReader reader, params object[] parameters)
        {
            base.Read(reader, parameters);

            this.Unknown_10h    = reader.ReadUInt32();
            this.Unknown_14h    = reader.ReadUInt32();
            this.EntriesPointer = reader.ReadUInt64();
            this.EntriesCount   = reader.ReadUInt32();
            this.Unknown_24h    = reader.ReadUInt32();
            this.Unknown_28h    = reader.ReadUInt32();
            this.Unknown_2Ch    = reader.ReadUInt32();

            this.Entries = reader.ReadBlockAt <ResourceSimpleArray <WaypointRecordEntry> >(
                this.EntriesPointer, // offset
                this.EntriesCount
                );
        }
예제 #7
0
        public override void Read(ResourceDataReader reader, params object[] parameters)
        {
            this.EntriesPointer  = reader.ReadUInt64();
            this.EntriesCount    = reader.ReadUInt16();
            this.EntriesCapacity = reader.ReadUInt16();
            reader.Position     += 4;

            //this.Entries = reader.ReadBlockAt<ResourcePointerArray64<T>>(
            //    this.EntriesPointer, // offset
            //    this.EntriesCount
            //);

            data_pointers = reader.ReadUlongsAt(EntriesPointer, EntriesCount);
            data_items    = new T[EntriesCount];
            for (int i = 0; i < EntriesCount; i++)
            {
                data_items[i] = reader.ReadBlockAt <T>(data_pointers[i]);
            }
        }
예제 #8
0
        public override void Read(ResourceDataReader reader, params object[] parameters)
        {
            int numElements = Convert.ToInt32(parameters[0]);

            // read structure data
            //data_pointers = new List<ulong>();
            //for (int i = 0; i < numElements; i++)
            //{
            //    data_pointers.Add(reader.ReadUInt64());
            //}

            data_pointers = reader.ReadUlongsAt((ulong)reader.Position, (uint)numElements);


            //foreach (var dp in data_pointers)
            //{
            //    if (dp == 0)
            //    {

            //    }
            //}

            // read reference data
            //data_items = new List<T>();
            //for (int i = 0; i < numElements; i++)
            //{
            //    data_items.Add(
            //        reader.ReadBlockAt<T>(data_pointers[i])
            //        );
            //}

            data_items = new T[numElements];
            for (int i = 0; i < numElements; i++)
            {
                data_items[i] = reader.ReadBlockAt <T>(data_pointers[i]);
            }
        }
예제 #9
0
        public override void Read(ResourceDataReader reader, params object[] parameters)
        {
            base.Read(reader, parameters);

            // read structure data
            this.UsageData   = reader.ReadUInt32();
            this.Unknown_44h = reader.ReadUInt32();
            this.ExtraFlags  = reader.ReadUInt32();
            this.Unknown_4Ch = reader.ReadUInt32();
            this.Width       = reader.ReadUInt16();
            this.Height      = reader.ReadUInt16();
            this.Depth       = reader.ReadUInt16();
            this.Stride      = reader.ReadUInt16();
            this.Format      = (TextureFormat)reader.ReadUInt32();
            this.Unknown_5Ch = reader.ReadByte();
            this.Levels      = reader.ReadByte();
            this.Unknown_5Eh = reader.ReadUInt16();
            this.Unknown_60h = reader.ReadUInt32();
            this.Unknown_64h = reader.ReadUInt32();
            this.Unknown_68h = reader.ReadUInt32();
            this.Unknown_6Ch = reader.ReadUInt32();
            this.DataPointer = reader.ReadUInt64();
            this.Unknown_78h = reader.ReadUInt32();
            this.Unknown_7Ch = reader.ReadUInt32();
            this.Unknown_80h = reader.ReadUInt32();
            this.Unknown_84h = reader.ReadUInt32();
            this.Unknown_88h = reader.ReadUInt32();
            this.Unknown_8Ch = reader.ReadUInt32();

            // read reference data
            this.Data = reader.ReadBlockAt <TextureData>(this.DataPointer, this.Format, this.Width, this.Height, this.Levels, this.Stride);


            switch (Usage)
            {
            case TextureUsage.UNKNOWN:            // = 0,
            case TextureUsage.DEFAULT:            // = 1,
            case TextureUsage.TERRAIN:            // = 2,
            case TextureUsage.CLOUDDENSITY:       // = 3,
            case TextureUsage.CLOUDNORMAL:        // = 4,
            case TextureUsage.CABLE:              // = 5,
            case TextureUsage.FENCE:              // = 6,
            case TextureUsage.SCRIPT:             // = 8,
            case TextureUsage.WATERFLOW:          // = 9,
            case TextureUsage.WATERFOAM:          // = 10,
            case TextureUsage.WATERFOG:           // = 11,
            case TextureUsage.WATEROCEAN:         // = 12,
            case TextureUsage.FOAMOPACITY:        // = 14,
            case TextureUsage.DIFFUSEMIPSHARPEN:  // = 16,
            case TextureUsage.DIFFUSEDARK:        // = 18,
            case TextureUsage.DIFFUSEALPHAOPAQUE: // = 19,
            case TextureUsage.DIFFUSE:            // = 20,
            case TextureUsage.DETAIL:             // = 21,
            case TextureUsage.NORMAL:             // = 22,
            case TextureUsage.SPECULAR:           // = 23,
            case TextureUsage.EMISSIVE:           // = 24,
            case TextureUsage.TINTPALETTE:        // = 25,
            case TextureUsage.SKIPPROCESSING:     // = 26,
                break;

            case TextureUsage.ENVEFF:        // = 7, //unused by V
            case TextureUsage.WATER:         // = 13, //unused by V
            case TextureUsage.FOAM:          // = 15,  //unused by V
            case TextureUsage.DIFFUSEDETAIL: // = 17, //unused by V
            case TextureUsage.DONOTOPTIMIZE: // = 27, //unused by V
            case TextureUsage.TEST:          // = 28,  //unused by V
            case TextureUsage.COUNT:         // = 29, //unused by V
                break;

            default:
                break;
            }

            var uf = UsageFlags;

            if ((uf & TextureUsageFlags.EMBEDDEDSCRIPTRT) > 0) // .ydr embedded script_rt textures, only 3 uses
            {
            }
            if ((uf & TextureUsageFlags.UNK19) > 0)
            {
            }
            if ((uf & TextureUsageFlags.UNK20) > 0)
            {
            }
            if ((uf & TextureUsageFlags.UNK21) > 0)
            {
            }
            if ((uf & TextureUsageFlags.UNK24) == 0)//wtf isthis? only 0 on special resident(?) textures and some reused ones
            {
            }
        }
예제 #10
0
        public override void Read(ResourceDataReader reader, params object[] parameters)
        {
            // read structure data
            this.VFT            = reader.ReadUInt32();
            this.Unknown_4h     = reader.ReadUInt32();
            this.Unknown_8h     = reader.ReadUInt32();
            this.Unknown_Ch     = reader.ReadUInt32();
            this.Unknown_10h    = reader.ReadUInt32();
            this.Unknown_14h    = reader.ReadUInt32();
            this.Unknown_18h    = reader.ReadUInt32();
            this.Unknown_1Ch    = reader.ReadUInt32();
            this.Unknown_20h    = reader.ReadBlock <ResourcePointerList64 <ExpressionUnk1> >();
            this.BoneTracks     = reader.ReadBlock <ResourceSimpleList64_s <ExpressionBoneTrack> >();
            this.Unknown_40h    = reader.ReadBlock <ResourceSimpleList64 <ExpressionUnk2> >();
            this.Unknown_50h    = reader.ReadBlock <ResourceSimpleList64_s <MetaHash> >();
            this.NamePointer    = reader.ReadUInt64();
            this.NameLength     = reader.ReadUInt16();
            this.NameCapacity   = reader.ReadUInt16();
            this.Unknown_6Ch    = reader.ReadUInt32();
            this.Unknown_70h    = reader.ReadUInt32();
            this.Unknown_74h    = reader.ReadUInt32();
            this.Unk1ItemLength = reader.ReadUInt16();
            this.Unknown_7Ah    = reader.ReadUInt16();
            this.Unknown_7Ch    = reader.ReadUInt32();
            this.Unknown_80h    = reader.ReadUInt32();
            this.Unknown_84h    = reader.ReadUInt32();
            this.Unknown_88h    = reader.ReadUInt32();
            this.Unknown_8Ch    = reader.ReadUInt32();

            // read reference data
            this.Name = reader.ReadBlockAt <string_r>(
                this.NamePointer // offset
                );

            //if (Unknown_50h?.data_items?.Length > 0)
            //{ } // faceinit.expr, independent_mover.expr

            BuildBoneTracksDict();

            #region testing
            //long tlen = 0;
            //if (Unknown_20h?.data_items != null) foreach (var item in Unknown_20h.data_items) tlen = Math.Max(tlen, item.BlockLength);
            //if (Unk1ItemLength != tlen)
            //{ }//no hit

            //if (Unknown_4h != 1)
            //{ }//no hit
            //if (Unknown_8h != 0)
            //{ }//no hit
            //if (Unknown_Ch != 0)
            //{ }//no hit
            //if (Unknown_10h != 0)
            //{ }//no hit
            //if (Unknown_14h != 0)
            //{ }//no hit
            //if (Unknown_18h != 0)
            //{ }//no hit
            //if (Unknown_1Ch != 0)
            //{ }//no hit
            //if (NameLength != (Name?.Value?.Length ?? 0))
            //{ }//no hit
            //if (NameCapacity != (NameLength + 1))
            //{ }//no hit
            //if (Unknown_6Ch != 0)
            //{ }//no hit
            //if (Unknown_70h != 1)
            //{ }//no hit
            //switch (Unknown_74h)
            //{
            //    default:
            //        break;
            //}
            //if (Unknown_7Ah != 0)
            //{ }//no hit
            //switch (Unknown_7Ch)
            //{
            //    case 3:
            //    case 2:
            //        break;
            //    default:
            //        break;//no hit
            //}
            //if (Unknown_80h != 0)
            //{ }//no hit
            //if (Unknown_84h != 0)
            //{ }//no hit
            //if (Unknown_88h != 0)
            //{ }//no hit
            //if (Unknown_8Ch != 0)
            //{ }//no hit
            #endregion
        }
예제 #11
0
        public override void Read(ResourceDataReader reader, params object[] parameters)
        {
            base.Read(reader, parameters);

            ContentFlags       = (NavMeshFlags)reader.ReadUInt32();
            VersionUnk1        = reader.ReadUInt32();
            Unused_018h        = reader.ReadUInt32();
            Unused_01Ch        = reader.ReadUInt32();
            Transform          = reader.ReadMatrix();
            AABBSize           = reader.ReadVector3();
            AABBUnk            = reader.ReadUInt32();
            VerticesPointer    = reader.ReadUInt64();
            Unused_078h        = reader.ReadUInt32();
            Unused_07Ch        = reader.ReadUInt32();
            IndicesPointer     = reader.ReadUInt64();
            EdgesPointer       = reader.ReadUInt64();
            EdgesIndicesCount  = reader.ReadUInt32();
            AdjAreaIDs         = reader.ReadStruct <NavMeshUintArray>();
            PolysPointer       = reader.ReadUInt64();
            SectorTreePointer  = reader.ReadUInt64();
            PortalsPointer     = reader.ReadUInt64();
            PortalLinksPointer = reader.ReadUInt64();
            VerticesCount      = reader.ReadUInt32();
            PolysCount         = reader.ReadUInt32();
            AreaID             = reader.ReadUInt32();
            TotalBytes         = reader.ReadUInt32();
            PointsCount        = reader.ReadUInt32();
            PortalsCount       = reader.ReadUInt32();
            PortalLinksCount   = reader.ReadUInt32();
            Unused_154h        = reader.ReadUInt32();
            Unused_158h        = reader.ReadUInt32();
            Unused_15Ch        = reader.ReadUInt32();
            VersionUnk2        = reader.ReadUInt32();
            Unused_164h        = reader.ReadUInt32();
            Unused_168h        = reader.ReadUInt32();
            Unused_16Ch        = reader.ReadUInt32();



            Vertices    = reader.ReadBlockAt <NavMeshList <NavMeshVertex> >(VerticesPointer);
            Indices     = reader.ReadBlockAt <NavMeshList <ushort> >(IndicesPointer);
            Edges       = reader.ReadBlockAt <NavMeshList <NavMeshEdge> >(EdgesPointer);
            Polys       = reader.ReadBlockAt <NavMeshList <NavMeshPoly> >(PolysPointer);
            SectorTree  = reader.ReadBlockAt <NavMeshSector>(SectorTreePointer);
            Portals     = reader.ReadStructsAt <NavMeshPortal>(PortalsPointer, PortalsCount);
            PortalLinks = reader.ReadUshortsAt(PortalLinksPointer, PortalLinksCount);



            ////testing!
            //if (VersionUnk1 != 0x00010011)
            //{ }
            //if (Unused_018h != 0)
            //{ }
            //if (Unused_01Ch != 0)
            //{ }
            //if (AABBUnk != 0x7F800001)
            //{ }
            //if (Unused_078h != 0)
            //{ }
            //if (Unused_07Ch != 0)
            //{ }
            //if (Unused_154h != 0)
            //{ }
            //if (Unused_158h != 0)
            //{ }
            //if (Unused_15Ch != 0)
            //{ }
            //if (Unused_164h != 0)
            //{ }
            //if (Unused_168h != 0)
            //{ }
            //if (Unused_16Ch != 0)
            //{ }
            //switch (VersionUnk2.Hash)
            //{
            //    case 0: //vehicle
            //        break;
            //    case 0x85CB3561: //grid
            //        break;
            //    default:
            //        break;
            //}
            //UpdateCounts();
        }
예제 #12
0
        /// <summary>
        /// Reads the data-block from a stream.
        /// </summary>
        public override void Read(ResourceDataReader reader, params object[] parameters)
        {
            base.Read(reader, parameters);

            // read structure data
            this.Unknown_10h             = reader.ReadInt32();
            this.Unknown_14h             = reader.ReadInt16();
            this.HasEncryptedStrings     = reader.ReadByte();
            this.Unknown_17h             = reader.ReadByte();
            this.Unknown_18h             = reader.ReadInt32();
            this.RootBlockIndex          = reader.ReadInt32();
            this.StructureInfosPointer   = reader.ReadInt64();
            this.EnumInfosPointer        = reader.ReadInt64();
            this.DataBlocksPointer       = reader.ReadInt64();
            this.NamePointer             = reader.ReadInt64();
            this.EncryptedStringsPointer = reader.ReadInt64();
            this.StructureInfosCount     = reader.ReadInt16();
            this.EnumInfosCount          = reader.ReadInt16();
            this.DataBlocksCount         = reader.ReadInt16();
            this.Unknown_4Eh             = reader.ReadInt16();
            this.Unknown_50h             = reader.ReadUInt32();
            this.Unknown_54h             = reader.ReadUInt32();
            this.Unknown_58h             = reader.ReadUInt32();
            this.Unknown_5Ch             = reader.ReadUInt32();
            this.Unknown_60h             = reader.ReadUInt32();
            this.Unknown_64h             = reader.ReadUInt32();
            this.Unknown_68h             = reader.ReadUInt32();
            this.Unknown_6Ch             = reader.ReadUInt32();

            // read reference data
            this.StructureInfos = reader.ReadBlockAt <ResourceSimpleArray <MetaStructureInfo> >(
                (ulong)this.StructureInfosPointer, // offset
                this.StructureInfosCount
                );

            this.EnumInfos = reader.ReadBlockAt <ResourceSimpleArray <MetaEnumInfo> >(
                (ulong)this.EnumInfosPointer, // offset
                this.EnumInfosCount
                );

            this.DataBlocks = reader.ReadBlockAt <ResourceSimpleArray <MetaDataBlock> >(
                (ulong)this.DataBlocksPointer, // offset
                this.DataBlocksCount
                );

            this.Name = reader.ReadStringAt( //BlockAt<string_r>(
                (ulong)this.NamePointer      // offset
                );

            if (!string.IsNullOrEmpty(Name))
            {
            }

            //Strings = MetaTypes.GetStrings(this);

#if DEBUG
            EncryptedStrings = reader.ReadBlockAt <MetaEncryptedStringsBlock>((ulong)EncryptedStringsPointer);

            Analyzer = new ResourceAnalyzer(reader);
#endif
        }