コード例 #1
0
        public PacFileHandling(BinaryReader b)
        {
            pacFile        = new Pac();
            pacStream      = b;
            pacFile.header = ReadHeader();

            PacDirParse   dirParse     = new PacDirParse(pacStream, pacFile);
            PACHParser    pachParse    = new PACHParser();
            TextureParser textureParse = new TextureParser();

            if (pacFile.header.id == "PACH")
            {
                //You opened a free floating PACH file~!
                pacStream.BaseStream.Position = 0;
                pacFile.container             = pachParse.ReadPACHContainer(pacStream.ReadBytes((int)pacStream.BaseStream.Length));
            }
            else if (pacFile.header.id == "EPK8" || pacFile.header.id == "EPAC")
            {
                pacFile.dir = dirParse.ReadDir().ToArray();
            }
            else
            {
                //probably a texture archive...
                //pacFile.header.id = "Texture Archive";
                pacStream.BaseStream.Position = 0;
                pacFile.textures = textureParse.ReadTextures(pacStream);
            }
        }
コード例 #2
0
ファイル: PacParser.cs プロジェクト: zaq12345/WWE2K15-Tools
        public PacFileHandling(BinaryReader b)
        {
            pacFile = new Pac();
            pacStream = b;
            pacFile.header = ReadHeader();

            PacDirParse dirParse = new PacDirParse(pacStream, pacFile);
            PACHParser pachParse = new PACHParser();
            TextureParser textureParse = new TextureParser();

            if (pacFile.header.id == "PACH")
            {
                //You opened a free floating PACH file~!
                pacStream.BaseStream.Position = 0;
                pacFile.container = pachParse.ReadPACHContainer(pacStream.ReadBytes((int)pacStream.BaseStream.Length));
            }
            else if (pacFile.header.id == "EPK8" || pacFile.header.id == "EPAC")
            {
                pacFile.dir = dirParse.ReadDir().ToArray();
            }
            else
            {
                //probably a texture archive...
                //pacFile.header.id = "Texture Archive";
                pacStream.BaseStream.Position = 0;
                pacFile.textures = textureParse.ReadTextures(pacStream);
            }
        }
コード例 #3
0
        public List <PacDir> ReadDir()
        {
            var iOffset   = 16384; //Start of data chunk
            var dirList   = new List <PacDir>();
            var pachParse = new PACHParser();

            pacStream.BaseStream.Seek(2048, SeekOrigin.Begin);

            while (pacStream.BaseStream.Position < (2048 + pacFile.header.listSize))
            {
                var directory = new PacDir();
                directory.id = new string(pacStream.ReadChars(4));
                if (pacFile.header.id == "EPK8")
                {
                    directory.nfiles = (int)pacStream.ReadUInt16() / 4;
                }
                else
                {
                    directory.nfiles = (int)pacStream.ReadUInt16() / 3;
                }
                pacStream.ReadBytes(6);

                directory.PacFiles = new PacFile[directory.nfiles];
                for (int i = 0; i < directory.nfiles; i++)
                {
                    directory.PacFiles[i]        = ReadPacFile();
                    directory.PacFiles[i].offset = iOffset;

                    //Get Pach
                    var pos = pacStream.BaseStream.Position;
                    pacStream.BaseStream.Position = directory.PacFiles[i].offset;

                    directory.PacFiles[i].stream = pacStream.ReadBytes(directory.PacFiles[i].size);

                    directory.PacFiles[i].PACHContainer = pachParse.ReadPACHContainer(directory.PacFiles[i].stream);

                    pacStream.BaseStream.Position = pos;

                    //Need to 2048 byte align these chunks
                    iOffset += directory.PacFiles[i].size + ((2048 - (directory.PacFiles[i].size % 2048)) % 2048);
                }
                dirList.Add(directory);
            }

            return(dirList);
        }
コード例 #4
0
ファイル: PacDirParse.cs プロジェクト: zaq12345/WWE2K15-Tools
        public List<PacDir> ReadDir()
        {
            var iOffset = 16384; //Start of data chunk
            var dirList = new List<PacDir>();
            var pachParse = new PACHParser();
            pacStream.BaseStream.Seek(2048, SeekOrigin.Begin);

            while (pacStream.BaseStream.Position < (2048 + pacFile.header.listSize))
            {
                var directory = new PacDir();
                directory.id = new string(pacStream.ReadChars(4));
                if (pacFile.header.id == "EPK8")
                {
                    directory.nfiles = (int)pacStream.ReadUInt16() / 4;
                }
                else
                {
                    directory.nfiles = (int)pacStream.ReadUInt16() / 3;
                }
                pacStream.ReadBytes(6);

                directory.PacFiles = new PacFile[directory.nfiles];
                for (int i = 0; i < directory.nfiles; i++)
                {
                    directory.PacFiles[i] = ReadPacFile();
                    directory.PacFiles[i].offset = iOffset;

                    //Get Pach
                    var pos = pacStream.BaseStream.Position;
                    pacStream.BaseStream.Position = directory.PacFiles[i].offset;

                    directory.PacFiles[i].stream = pacStream.ReadBytes(directory.PacFiles[i].size);

                    directory.PacFiles[i].PACHContainer = pachParse.ReadPACHContainer(directory.PacFiles[i].stream);

                    pacStream.BaseStream.Position = pos;

                    //Need to 2048 byte align these chunks
                    iOffset += directory.PacFiles[i].size + ((2048 - (directory.PacFiles[i].size % 2048)) % 2048);
                }
                dirList.Add(directory);
            }

            return dirList;
        }