示例#1
0
文件: NCGR.cs 项目: MetLob/tinke
        public override void Read(string fileIn)
        {
            BinaryReader br = new BinaryReader(File.OpenRead(fileIn));
            ncgr = new sNCGR();

            // Read the common header
            ncgr.header.id = br.ReadChars(4);
            ncgr.header.endianess = br.ReadUInt16();
            if (ncgr.header.endianess == 0xFFFE)
                ncgr.header.id.Reverse<char>();
            ncgr.header.constant = br.ReadUInt16();
            ncgr.header.file_size = br.ReadUInt32();
            ncgr.header.header_size = br.ReadUInt16();
            ncgr.header.nSection = br.ReadUInt16();

            // Read the first section: CHAR (CHARacter data)
            ncgr.rahc.id = br.ReadChars(4);
            ncgr.rahc.size_section = br.ReadUInt32();
            ncgr.rahc.nTilesY = br.ReadUInt16();
            ncgr.rahc.nTilesX = br.ReadUInt16();
            ncgr.rahc.depth = (ColorFormat)br.ReadUInt32();
            ncgr.rahc.unknown1 = br.ReadUInt16();
            ncgr.rahc.unknown2 = br.ReadUInt16();
            ncgr.rahc.tiledFlag = br.ReadUInt32();
            if ((ncgr.rahc.tiledFlag & 0xFF) == 0x0)
                ncgr.order = TileForm.Horizontal;
            else
                ncgr.order = TileForm.Lineal;

            ncgr.rahc.size_tiledata = br.ReadUInt32();
            ncgr.rahc.unknown3 = br.ReadUInt32();
            ncgr.rahc.data = br.ReadBytes((int)ncgr.rahc.size_tiledata);

            if (ncgr.rahc.nTilesX != 0xFFFF)
            {
                ncgr.rahc.nTilesX *= 8;
                ncgr.rahc.nTilesY *= 8;
            }

            if (ncgr.header.nSection == 2 && br.BaseStream.Position < br.BaseStream.Length)   // If there isn't SOPC section
            {
                // Read the second section: SOPC
                ncgr.sopc.id = br.ReadChars(4);
                ncgr.sopc.size_section = br.ReadUInt32();
                ncgr.sopc.unknown1 = br.ReadUInt32();
                ncgr.sopc.charSize = br.ReadUInt16();
                ncgr.sopc.nChar = br.ReadUInt16();
            }

            br.Close();
            Set_Tiles(ncgr.rahc.data, ncgr.rahc.nTilesX, ncgr.rahc.nTilesY, ncgr.rahc.depth, ncgr.order, true);

            if (ncgr.rahc.nTilesX == 0xFFFF)
            {
                System.Drawing.Size size = Actions.Get_Size((int)ncgr.rahc.size_tiledata, BPP);
                ncgr.rahc.nTilesX = (ushort)size.Width;
                ncgr.rahc.nTilesY = (ushort)size.Height;
                Height = size.Height;
                Width = size.Width;
            }
        }
示例#2
0
        public override void Read(string fileIn)
        {
            BinaryReader br = new BinaryReader(File.OpenRead(fileIn));

            ncgr = new sNCGR();

            // Read the common header
            ncgr.header.id        = br.ReadChars(4);
            ncgr.header.endianess = br.ReadUInt16();
            if (ncgr.header.endianess == 0xFFFE)
            {
                ncgr.header.id.Reverse <char>();
            }
            ncgr.header.constant    = br.ReadUInt16();
            ncgr.header.file_size   = br.ReadUInt32();
            ncgr.header.header_size = br.ReadUInt16();
            ncgr.header.nSection    = br.ReadUInt16();

            // Read the first section: CHAR (CHARacter data)
            ncgr.rahc.id           = br.ReadChars(4);
            ncgr.rahc.size_section = br.ReadUInt32();
            ncgr.rahc.nTilesY      = br.ReadUInt16();
            ncgr.rahc.nTilesX      = br.ReadUInt16();
            ncgr.rahc.depth        = (ColorFormat)br.ReadUInt32();
            ncgr.rahc.unknown1     = br.ReadUInt16();
            ncgr.rahc.unknown2     = br.ReadUInt16();
            ncgr.rahc.tiledFlag    = br.ReadUInt32();
            if ((ncgr.rahc.tiledFlag & 0xFF) == 0x0)
            {
                ncgr.order = TileForm.Horizontal;
            }
            else
            {
                ncgr.order = TileForm.Lineal;
            }

            ncgr.rahc.size_tiledata = br.ReadUInt32();
            ncgr.rahc.unknown3      = br.ReadUInt32();
            ncgr.rahc.data          = br.ReadBytes((int)ncgr.rahc.size_tiledata);

            if (ncgr.rahc.nTilesX != 0xFFFF)
            {
                ncgr.rahc.nTilesX *= 8;
                ncgr.rahc.nTilesY *= 8;
            }

            if (ncgr.header.nSection == 2 && br.BaseStream.Position < br.BaseStream.Length)   // If there isn't SOPC section
            {
                // Read the second section: SOPC
                ncgr.sopc.id           = br.ReadChars(4);
                ncgr.sopc.size_section = br.ReadUInt32();
                ncgr.sopc.unknown1     = br.ReadUInt32();
                ncgr.sopc.charSize     = br.ReadUInt16();
                ncgr.sopc.nChar        = br.ReadUInt16();
            }

            br.Close();
            Set_Tiles(ncgr.rahc.data, ncgr.rahc.nTilesX, ncgr.rahc.nTilesY, ncgr.rahc.depth, ncgr.order, true);

            if (ncgr.rahc.nTilesX == 0xFFFF)
            {
                System.Drawing.Size size = Actions.Get_Size((int)ncgr.rahc.size_tiledata, BPP);
                ncgr.rahc.nTilesX = (ushort)size.Width;
                ncgr.rahc.nTilesY = (ushort)size.Height;
                Height            = size.Height;
                Width             = size.Width;
            }
        }