private static bool LoadSprites(ChunkReader chunkIO, ChunkId idOuter, Wad2 wad, ref Dictionary <long, WadSprite> outSprites) { if (idOuter != Wad2Chunks.Sprites) { return(false); } var sprites = new Dictionary <long, WadSprite>(); long obsoleteIndex = 0; // Move this into each chunk once we got rid of old style *.wad2 files. chunkIO.ReadChunks((id, chunkSize) => { if (id != Wad2Chunks.Sprite) { return(false); } int width = LEB128.ReadInt(chunkIO.Raw); int height = LEB128.ReadInt(chunkIO.Raw); byte[] imageData = null; RectangleInt2 rect = new RectangleInt2(); chunkIO.ReadChunks((id2, chunkSize2) => { if (id2 == Wad2Chunks.SpriteIndex) { obsoleteIndex = chunkIO.ReadChunkLong(chunkSize2); } else if (id2 == Wad2Chunks.SpriteData) { imageData = chunkIO.ReadChunkArrayOfBytes(chunkSize2); } else if (id2 == Wad2Chunks.SpriteSides) { rect.X0 = chunkIO.Raw.ReadInt32(); rect.Y0 = chunkIO.Raw.ReadInt32(); rect.X1 = chunkIO.Raw.ReadInt32(); rect.Y1 = chunkIO.Raw.ReadInt32(); } else { return(false); } return(true); }); sprites.Add(obsoleteIndex++, new WadSprite { Texture = new WadTexture(ImageC.FromByteArray(imageData, width, height)), Alignment = rect }) ; return(true); }); outSprites = sprites; return(true); }
private static bool LoadTextures(ChunkReader chunkIO, ChunkId idOuter, Wad2 wad, ref Dictionary <long, WadTexture> outTextures) { if (idOuter != Wad2Chunks.Textures) { return(false); } Dictionary <long, WadTexture> textures = new Dictionary <long, WadTexture>(); long obsoleteIndex = 0; // Move this into each chunk once we got rid of old style *.wad2 files. chunkIO.ReadChunks((id, chunkSize) => { if (id != Wad2Chunks.Texture) { return(false); } var width = LEB128.ReadInt(chunkIO.Raw); var height = LEB128.ReadInt(chunkIO.Raw); byte[] textureData = null; chunkIO.ReadChunks((id2, chunkSize2) => { if (id2 == Wad2Chunks.TextureIndex) { obsoleteIndex = chunkIO.ReadChunkLong(chunkSize2); } if (id2 == Wad2Chunks.TextureData) { textureData = chunkIO.ReadChunkArrayOfBytes(chunkSize2); } else { return(false); } return(true); }); var texture = ImageC.FromByteArray(textureData, width, height); texture.ReplaceColor(new ColorC(255, 0, 255, 255), new ColorC(0, 0, 0, 0)); textures.Add(obsoleteIndex++, new WadTexture(texture)); return(true); }); outTextures = textures; return(true); }
private static bool LoadSamples(ChunkReader chunkIO, ChunkId idOuter, Wad2 wad, ref Dictionary <long, WadSample> outSamples, bool obsolete) { if (idOuter != Wad2Chunks.Samples) { return(false); } var samples = new Dictionary <long, WadSample>(); long obsoleteIndex = 0; // Move this into each chunk once we got rid of old style *.wad2 files. chunkIO.ReadChunks((id, chunkSize) => { if (id != Wad2Chunks.Sample) { return(false); } string FilenameObsolete = null; byte[] data = null; chunkIO.ReadChunks((id2, chunkSize2) => { if (id2 == Wad2Chunks.SampleIndex) { obsoleteIndex = chunkIO.ReadChunkLong(chunkSize2); } else if (id2 == Wad2Chunks.SampleFilenameObsolete) { FilenameObsolete = chunkIO.ReadChunkString(chunkSize2); } else if (id2 == Wad2Chunks.SampleData) { data = chunkIO.ReadChunkArrayOfBytes(chunkSize2); } else { return(false); } return(true); }); if (data == null && !string.IsNullOrEmpty(FilenameObsolete)) { string fullPath = Path.Combine(PathC.GetDirectoryNameTry(Assembly.GetEntryAssembly().Location), "Sounds\\TR4\\Samples", FilenameObsolete + ".wav"); data = File.ReadAllBytes(fullPath); } samples.Add(obsoleteIndex++, new WadSample("", WadSample.ConvertSampleFormat(data, sampleRate => obsolete ? new WadSample.ResampleInfo { Resample = false, SampleRate = WadSample.GameSupportedSampleRate } : new WadSample.ResampleInfo { Resample = true, SampleRate = sampleRate }))); return(true); }); outSamples = samples; return(true); }