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; } }
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; } }