public Texture2D BuildTexture2D( RagnarokAnimationPalette Palette, GraphicsDevice Device ) { byte[] data = DecodedData(); Texture2D tex = new Texture2D( Device, Width, Height ); Color[] colors = new Color[ Width * Height ]; /*int index; for( int x = 0; x < Width; x++ ) { for( int y = 0; y < Height; y++ ) { index = ( x + ( y * Width ) ); if( index >= data.Length ) colors[ index ] = Color.TransparentWhite; else colors[ index ] = Palette[ data[ index ] ]; } }*/ for( int i = 0; i < colors.Length; i++ ) { // make first index transparent if( i >= data.Length || data[ i ] == 0 ) colors[ i ] = Color.Transparent; else colors[ i ] = Palette[ data[ i ] ]; } tex.SetData<Color>( colors ); data = null; colors = null; return tex; }
public bool Read( Stream stream ) { mReader = new BinaryReader( stream ); int imgCount = Reader.ReadUInt16(); // Image Data \\ mImages = new List<RagnarokAnimationImage>(); for( int i = 0; i < imgCount; i++ ) { mImages.Add( new RagnarokAnimationImage() ); mImages[ i ].Width = Reader.ReadUInt16(); mImages[ i ].Height = Reader.ReadUInt16(); int size = Reader.ReadInt32(); mImages[ i ].Data = Reader.ReadBytes( size ); } // Palette \\ mPalette = new RagnarokAnimationPalette( 256 ); for( int i = 0; i < 256; i++ ) mPalette.ReadColor( Reader ); // Actions \\ mActions = new RagnarokAnimationActionList(); int actCount = mReader.ReadUInt16(); for( int i = 0; i < actCount; i++ ) { RagnarokAnimationAction action = new RagnarokAnimationAction(); action.Frames = new RagnarokAnimationActionFrameList(); int frameCount = mReader.ReadUInt16(); for( int f = 0; f < frameCount; f++ ) { RagnarokAnimationActionFrame frame = new RagnarokAnimationActionFrame(); frame.Images = new RagnarokAnimationActionFrameImageList(); frame.Palette1 = mReader.ReadUInt32(); frame.Palette2 = mReader.ReadUInt32(); frame.Audio = mReader.ReadInt32(); frame.Numxxx = mReader.ReadInt32(); if( frame.Numxxx == 1 ) { frame.Ext1 = mReader.ReadInt32(); frame.ExtX = mReader.ReadInt32(); frame.ExtY = mReader.ReadInt32(); frame.Terminate = mReader.ReadInt32(); } int imageCount = mReader.ReadUInt16(); for( int s = 0; s < imageCount; s++ ) { RagnarokAnimationActionFrameImage img = new RagnarokAnimationActionFrameImage() { X = mReader.ReadInt16(), Y = mReader.ReadInt16(), Number = mReader.ReadUInt16(), Mirror = mReader.ReadBoolean(), Color = new Color( mReader.ReadByte(), mReader.ReadByte(), mReader.ReadByte(), mReader.ReadByte() ), ScaleX = mReader.ReadSingle(), ScaleY = mReader.ReadSingle(), Rotation = mReader.ReadInt16(), Type = mReader.ReadInt16(), Width = mReader.ReadUInt16(), Height = mReader.ReadUInt16(), }; frame.Images.Add( img ); } action.Frames.Add( frame ); } mActions.Add( action ); } // Sounds \\ mActionSounds = new List<string>(); int soundCount = Reader.ReadUInt16(); for( int i = 0; i < soundCount; i++ ) mActionSounds.Add( Reader.ReadString() ); return true; }