public NXTL ReadTextureList(ExtendedBinaryReader reader, long pos) { TextureList = new NXTL() { TextureListNode = new string(reader.ReadChars(4)), NodeLength = reader.ReadUInt32() }; pos = reader.BaseStream.Position; //Save Position reader.JumpTo(reader.ReadUInt32(), false); TextureList.TextureCount = reader.ReadUInt32(); uint textureListOffset = reader.ReadUInt32(); reader.JumpTo(textureListOffset, false); for (int i = 0; i < TextureList.TextureCount; i++) { reader.JumpAhead(0x4); uint textureNameOffset = reader.ReadUInt32(); long texturePos = reader.BaseStream.Position; //Save Position reader.JumpTo(textureNameOffset, false); TEXFILE tex = new TEXFILE(); tex.Filename = reader.ReadNullTerminatedString(); reader.JumpTo(texturePos); tex.Filters = reader.ReadUInt32(); reader.JumpAhead(0x8); TextureList.Textures.Add(tex); } reader.JumpTo(pos); reader.JumpAhead(TextureList.NodeLength); return(TextureList); }
public override void Load(Stream fileStream) { ExtendedBinaryReader reader = new ExtendedBinaryReader(fileStream) { Offset = 0x20 }; long pos = 0; // NINJA INFO [N*IF] InfoList = new NXIF() { HeaderInfoNode = new string(reader.ReadChars(4)), NodeLength = reader.ReadUInt32(), NodeCount = reader.ReadUInt32() }; reader.JumpTo(InfoList.NodeLength + 8); for (int i = 0; i < InfoList.NodeCount; i++) { string nodeName = new string(reader.ReadChars(4)); uint nodeLength = reader.ReadUInt32(); reader.JumpBehind(8); switch (nodeName) { case "NXTL": case "NZTL": // NINJA TEXTURE LIST [N*TL] TextureList = ReadTextureList(reader, pos); break; case "NXEF": // NINJA EFFECTS [N*EF] EffectList = ReadEffectList(reader, pos); break; case "NXNN": // NINJA NODE NAMES [N*NN] NodeTree = ReadNodeNames(reader, pos); break; case "NXOB": case "NZOB": ObjectList = ReadNodes(reader, pos); break; default: reader.JumpAhead(8); reader.JumpAhead(nodeLength); Console.WriteLine($"Block {nodeName} Not Implemented!"); break; } } }