public void SetActiveResource(IffChunk chunk, GameIffResource res) { GraphicChunk = (SPR2)chunk; ActiveIff = res; FrameList.Items.Clear(); for (int i = 0; i < GraphicChunk.Frames.Length / 3; i++) { FrameList.Items.Add("Rotation " + i); } bool hasFrames = (FrameList.Items.Count > 0); Graphics = null; if (hasFrames) { FrameList.SelectedIndex = 0; } else { SPRBox1.Image = null; SPRBox2.Image = null; SPRBox3.Image = null; } DeleteButton.Enabled = hasFrames; ImportButton.Enabled = hasFrames; ExportButton.Enabled = hasFrames; ImportAll.Enabled = hasFrames; ExportAll.Enabled = hasFrames; }
public override void Draw(GraphicsDevice device, WorldState world) { if (_Dirty) { if (_Floor == null) { _Floor = Content.Get().WorldFloors.Get((ulong)_FloorID); if (_Floor != null) { _Sprite = new _2DSprite { RenderMode = _2DBatchRenderMode.NO_DEPTH }; } } if (_DirtyTexture && _Floor != null) { SPR2 sprite = null; switch (world.Zoom) { case WorldZoom.Far: sprite = _Floor.Far; _Sprite.DestRect = DESTINATION_FAR; break; case WorldZoom.Medium: sprite = _Floor.Medium; _Sprite.DestRect = DESTINATION_MED; break; case WorldZoom.Near: sprite = _Floor.Near; _Sprite.DestRect = DESTINATION_NEAR; break; } if (world.Rotation == WorldRotation.TopRight || world.Rotation == WorldRotation.BottomRight) { _Sprite.FlipVertically = true; } if ((int)world.Rotation > 1) { _Sprite.FlipHorizontally = true; //todo - find out why these don't work (really it is a mystery) } _Sprite.Pixel = world._2D.GetTexture(sprite.Frames[0]); _Sprite.SrcRect = new Microsoft.Xna.Framework.Rectangle(0, 0, _Sprite.Pixel.Width, _Sprite.Pixel.Height); } _DirtyTexture = false; _Dirty = false; } if (_Sprite != null) { world._2D.Draw(_Sprite); } }
private _2DSprite GetFloorSprite(Floor pattern, int rotation, WorldState world) { var _Sprite = new _2DSprite() { RenderMode = _2DBatchRenderMode.Z_BUFFER }; if (pattern == null) { return(_Sprite); } SPR2 sprite = null; bool vertFlip = world.Rotation == WorldRotation.TopRight || world.Rotation == WorldRotation.BottomRight; int bufOff = (vertFlip) ? 3 : 0; switch (world.Zoom) { case WorldZoom.Far: sprite = pattern.Far; _Sprite.DestRect = FLOORDEST_FAR; _Sprite.Depth = ArchZBuffers[14 + bufOff]; break; case WorldZoom.Medium: sprite = pattern.Medium; _Sprite.DestRect = FLOORDEST_MED; _Sprite.Depth = ArchZBuffers[13 + bufOff]; break; case WorldZoom.Near: sprite = pattern.Near; _Sprite.DestRect = FLOORDEST_NEAR; _Sprite.Depth = ArchZBuffers[12 + bufOff]; break; } if (sprite != null) { _Sprite.Pixel = world._2D.GetTexture(sprite.Frames[rotation]); _Sprite.SrcRect = new Microsoft.Xna.Framework.Rectangle(0, 0, _Sprite.Pixel.Width, _Sprite.Pixel.Height); if (vertFlip) { _Sprite.FlipVertically = true; } if ((int)world.Rotation > 1) { _Sprite.FlipHorizontally = true; } } return(_Sprite); }
private void PrintSPR2(SPR2 spr) { Printer.H2("#" + spr.ChunkID + " (" + spr.ChunkLabel + ")"); var table = Printer.CreateTable(new string[] { "Index", "Pixel" }); var frameIndex = 0; foreach (var frame in spr.Frames) { table.AddRow(new object[] { frameIndex, frame }); frameIndex++; } Printer.Add(table); }
private void AutoOffset(DGRPSprite dgrpSpr, SPR2 spr, float zFactor) { dgrpSpr.Flip = false; var frameN = dgrpSpr.SpriteFrameIndex; //generate a default offset using the cage setup in the SPR2. //68 is half width of cage //348 is distance from baseline to top of cage; var frame = spr.Frames[frameN]; dgrpSpr.SpriteOffset = new Microsoft.Xna.Framework.Vector2( (int)((-68 * zFactor) + frame.Position.X), (-348 * zFactor) + frame.Height + frame.Position.Y ); }
public override void Draw(GraphicsDevice device, WorldState world) { if (_Dirty) { if (_Floor == null) { _Floor = Content.Get().WorldFloors.Get((ulong)_FloorID); if (_Floor != null) { _Sprite = new _2DSprite { RenderMode = _2DBatchRenderMode.NO_DEPTH }; } } if (_DirtyTexture && _Floor != null) { SPR2 sprite = null; switch (world.Zoom) { case WorldZoom.Far: sprite = _Floor.Far; _Sprite.DestRect = DESTINATION_FAR; break; case WorldZoom.Medium: sprite = _Floor.Medium; _Sprite.DestRect = DESTINATION_MED; break; case WorldZoom.Near: sprite = _Floor.Near; _Sprite.DestRect = DESTINATION_NEAR; break; } _Sprite.Pixel = world._2D.GetTexture(sprite.Frames[0]); _Sprite.SrcRect = new Microsoft.Xna.Framework.Rectangle(0, 0, _Sprite.Pixel.Width, _Sprite.Pixel.Height); } _DirtyTexture = false; _Dirty = false; } if (_Sprite != null) { world._2D.Draw(_Sprite); } }
public override void Draw(GraphicsDevice device, WorldState world) { if (ArchZBuffers == null) { ArchZBuffers = TextureGenerator.GetWallZBuffer(device); } var pxOffset = world.WorldSpace.GetScreenOffset(); var floorContent = Content.Content.Get().WorldFloors; Rectangle db; if (DrawBound == null) { db = new Rectangle(0, 0, blueprint.Width, blueprint.Height); } else { db = DrawBound.Value; } for (sbyte level = 1; level <= world.Level; level++) { for (short y = (short)db.Top; y < db.Bottom; y++) { //ill decide on a reasonable system for components when it's finished ok pls :( for (short x = (short)db.Left; x < db.Right; x++) { var comp = blueprint.GetFloor(x, y, level); if (comp.Pattern != 0) { ushort room = (ushort)blueprint.RoomMap[level - 1][x + y * blueprint.Width]; var tilePosition = new Vector3(x, y, (level - 1) * 2.95f); world._2D.OffsetPixel(world.WorldSpace.GetScreenFromTile(tilePosition)); world._2D.OffsetTile(tilePosition); if (comp.Pattern > 65533) { //determine adjacent pool tiles int poolAdj = 0; for (int i = 0; i < PoolDirections.Length; i++) { var testTile = new Point(x, y) + PoolDirections[i]; if ((testTile.X <= 0 || testTile.X >= blueprint.Width - 1) || (testTile.Y <= 0 || testTile.Y >= blueprint.Height - 1) || blueprint.GetFloor((short)testTile.X, (short)testTile.Y, level).Pattern == comp.Pattern) { poolAdj |= 1 << i; } } var adj = RotatePoolSegs((PoolSegments)poolAdj, (int)world.Rotation); //get and draw the base tile int spriteNum = 0; if ((adj & PoolSegments.TopRight) > 0) { spriteNum |= 1; } if ((adj & PoolSegments.TopLeft) > 0) { spriteNum |= 2; } if ((adj & PoolSegments.BottomLeft) > 0) { spriteNum |= 4; } if ((adj & PoolSegments.BottomRight) > 0) { spriteNum |= 8; } var _Sprite = world._2D.NewSprite(_2DBatchRenderMode.Z_BUFFER); SPR2 sprite = null; int baseSPR; int frameNum = 0; switch (world.Zoom) { case WorldZoom.Far: baseSPR = (comp.Pattern == 65535) ? 0x400 : 0x800; frameNum = (comp.Pattern == 65535) ? 0 : 2; sprite = floorContent.GetGlobalSPR((ushort)(baseSPR + spriteNum)); _Sprite.DestRect = FLOORDEST_FAR; _Sprite.Depth = ArchZBuffers[14]; break; case WorldZoom.Medium: baseSPR = (comp.Pattern == 65535) ? 0x410 : 0x800; frameNum = (comp.Pattern == 65535) ? 0 : 1; sprite = floorContent.GetGlobalSPR((ushort)(baseSPR + spriteNum)); _Sprite.DestRect = FLOORDEST_MED; _Sprite.Depth = ArchZBuffers[13]; break; case WorldZoom.Near: baseSPR = (comp.Pattern == 65535) ? 0x420 : 0x800; sprite = floorContent.GetGlobalSPR((ushort)(baseSPR + spriteNum)); _Sprite.DestRect = FLOORDEST_NEAR; _Sprite.Depth = ArchZBuffers[12]; break; } _Sprite.Pixel = world._2D.GetTexture(sprite.Frames[frameNum]); _Sprite.SrcRect = new Microsoft.Xna.Framework.Rectangle(0, 0, _Sprite.Pixel.Width, _Sprite.Pixel.Height); _Sprite.Room = room; _Sprite.Floor = level; world._2D.Draw(_Sprite); //draw any corners on top if (comp.Pattern == 65535) { PoolSegments[] CornerChecks = { (PoolSegments.TopLeft | PoolSegments.TopRight), (PoolSegments.TopLeft | PoolSegments.BottomLeft), (PoolSegments.BottomLeft | PoolSegments.BottomRight), (PoolSegments.TopRight | PoolSegments.BottomRight) }; if ((adj & CornerChecks[0]) == CornerChecks[0] && (adj & PoolSegments.Top) == 0) { //top corner var tcS = world._2D.NewSprite(_2DBatchRenderMode.Z_BUFFER); //base sprite position on base tile sprite = floorContent.GetGlobalSPR((ushort)(0x430 + ((int)world.Zoom - 1) * 4)); tcS.Pixel = world._2D.GetTexture(sprite.Frames[0]); tcS.DestRect = new Rectangle(_Sprite.DestRect.Center.X - tcS.Pixel.Width / 2, _Sprite.DestRect.Y, tcS.Pixel.Width, tcS.Pixel.Height); tcS.SrcRect = new Microsoft.Xna.Framework.Rectangle(0, 0, tcS.Pixel.Width, tcS.Pixel.Height); tcS.Depth = ArchZBuffers[21 + (3 - (int)world.Zoom)]; tcS.Room = room; tcS.Floor = level; world._2D.Draw(tcS); } if ((adj & CornerChecks[1]) == CornerChecks[1] && (adj & PoolSegments.Left) == 0) { //left corner var tcS = world._2D.NewSprite(_2DBatchRenderMode.Z_BUFFER); //base sprite position on base tile sprite = floorContent.GetGlobalSPR((ushort)(0x431 + ((int)world.Zoom - 1) * 4)); tcS.Pixel = world._2D.GetTexture(sprite.Frames[0]); tcS.DestRect = new Rectangle(_Sprite.DestRect.X, _Sprite.DestRect.Center.Y + 1 - tcS.Pixel.Height / 2, tcS.Pixel.Width, tcS.Pixel.Height); tcS.SrcRect = new Microsoft.Xna.Framework.Rectangle(0, 0, tcS.Pixel.Width, tcS.Pixel.Height); tcS.Depth = ArchZBuffers[24 + (3 - (int)world.Zoom)]; tcS.Room = room; tcS.Floor = level; world._2D.Draw(tcS); } if ((adj & CornerChecks[2]) == CornerChecks[2] && (adj & PoolSegments.Bottom) == 0) { //bottom corner var tcS = world._2D.NewSprite(_2DBatchRenderMode.Z_BUFFER); //base sprite position on base tile sprite = floorContent.GetGlobalSPR((ushort)(0x432 + ((int)world.Zoom - 1) * 4)); tcS.Pixel = world._2D.GetTexture(sprite.Frames[0]); tcS.DestRect = new Rectangle(_Sprite.DestRect.Center.X - tcS.Pixel.Width / 2, _Sprite.DestRect.Bottom - tcS.Pixel.Height, tcS.Pixel.Width, tcS.Pixel.Height); tcS.SrcRect = new Microsoft.Xna.Framework.Rectangle(0, 0, tcS.Pixel.Width, tcS.Pixel.Height); tcS.Depth = ArchZBuffers[27 + (3 - (int)world.Zoom)]; tcS.Room = room; tcS.Floor = level; world._2D.Draw(tcS); } if ((adj & CornerChecks[3]) == CornerChecks[3] && (adj & PoolSegments.Right) == 0) { //right corner var tcS = world._2D.NewSprite(_2DBatchRenderMode.Z_BUFFER); //base sprite position on base tile sprite = floorContent.GetGlobalSPR((ushort)(0x433 + ((int)world.Zoom - 1) * 4)); tcS.Pixel = world._2D.GetTexture(sprite.Frames[0]); tcS.DestRect = new Rectangle(_Sprite.DestRect.Right - tcS.Pixel.Width, _Sprite.DestRect.Center.Y + 1 - tcS.Pixel.Height / 2, tcS.Pixel.Width, tcS.Pixel.Height); tcS.SrcRect = new Microsoft.Xna.Framework.Rectangle(0, 0, tcS.Pixel.Width, tcS.Pixel.Height); tcS.Depth = ArchZBuffers[24 + (3 - (int)world.Zoom)]; tcS.Room = room; tcS.Floor = level; world._2D.Draw(tcS); } } } else { var floor = GetFloorSprite(floorContent.Get(comp.Pattern), 0, world); floor.Room = room; floor.Floor = level; if (floor.Pixel != null) { world._2D.Draw(floor); } } } else if (world.BuildMode > 1 && level > 1 && blueprint.Supported[level - 2][y * blueprint.Height + x]) { var tilePosition = new Vector3(x, y, (level - 1) * 2.95f); world._2D.OffsetPixel(world.WorldSpace.GetScreenFromTile(tilePosition)); world._2D.OffsetTile(tilePosition); var floor = GetAirSprite(world); floor.Room = 65535; floor.Floor = level; if (floor.Pixel != null) { world._2D.Draw(floor); } } } } } }
public void ProcessSPR2(string Path) { List<IffChunk> SPR2s = new List<IffChunk>(); foreach (IffChunk Chunk in m_Chunks) { if (Chunk.Type == "SPR2") SPR2s.Add(Chunk); } foreach (IffChunk Chunk in SPR2s) { BinaryReader ChunkReader = new BinaryReader(new MemoryStream(Chunk.Data)); SPR2 Spr = new SPR2(); Spr.Version1 = ChunkReader.ReadInt16(); if (Spr.Version1 == 0) Spr.Version2 = ReadBigShort(ChunkReader); else Spr.Version2 = ChunkReader.ReadInt16(); Spr.FrameCount = ChunkReader.ReadInt32(); MessageBox.Show("Framecount: " + Spr.FrameCount); Spr.PaletteID = ChunkReader.ReadInt32(); Spr.OffsetTable = new int[Spr.FrameCount]; for (int i = 0; i < Spr.FrameCount; i++ ) Spr.OffsetTable[i] = ChunkReader.ReadInt32(); for (int i = 0; i < Spr.FrameCount; i++) { SpriteFrame Frame = new SpriteFrame(); Frame.Width = ChunkReader.ReadInt16(); Frame.Height = ChunkReader.ReadInt16(); Frame.Flags = ChunkReader.ReadInt16(); Frame.Unknown = ChunkReader.ReadInt16(); Frame.PaletteID = ChunkReader.ReadInt16(); Frame.TransparentPixel = ChunkReader.ReadInt16(); Frame.XPos = ChunkReader.ReadInt16(); Frame.YPos = ChunkReader.ReadInt16(); BinaryWriter SpriteWriter = new BinaryWriter(Frame.SpriteData); for (int l = 0; l <= Frame.Height; l++) { SpriteWriter.Write(ChunkReader.ReadBytes(2)); SpriteWriter.Write(ChunkReader.ReadBytes(Frame.Width)); } SpriteWriter.Flush(); //SpriteWriter.Close(); Spr.AddFrame(Frame); //Each SPR2 resource contains a reference to a PALT chunk/resource. Spr.Pal = new Palette(); IffChunk TmpChunk = new IffChunk(); foreach (IffChunk C in m_Chunks) { if (C.TypeNum == Spr.PaletteID) { //Guess what? The typenumber of each chunk is //NOT unique, so you have to check on type as //well! if (C.Type == "PALT") { TmpChunk = C; break; } } } BinaryReader PaltReader = new BinaryReader(new MemoryStream(TmpChunk.Data)); Spr.Pal.AlwaysOne = PaltReader.ReadInt32(); Spr.Pal.Always256 = PaltReader.ReadInt32(); PaltReader.ReadBytes(8); //The PALT header has 8 additional bytes of 0. Spr.Pal.RGBTable = new Palette.RGB[Spr.Pal.Always256]; for (int l = 0; l < Spr.Pal.Always256; l++) { Spr.Pal.RGBTable[l] = new Palette.RGB(); Spr.Pal.RGBTable[l].Red = PaltReader.ReadByte(); Spr.Pal.RGBTable[l].Green = PaltReader.ReadByte(); Spr.Pal.RGBTable[l].Blue = PaltReader.ReadByte(); } PaltReader.Close(); } for (int i = 0; i < Spr.FrameCount; i++) { SpriteFrame Frame = Spr.GetFrame(i); BinaryReader SpriteReader = new BinaryReader(new MemoryStream(Frame.SpriteData.ToArray())); int X = 0, Y = 0; bool Stop = false; Bitmap BM = new Bitmap(Frame.Width, Frame.Height); Color Transparent = Color.FromArgb(Spr.Pal.RGBTable[Frame.TransparentPixel].Red, Spr.Pal.RGBTable[Frame.TransparentPixel].Green, Spr.Pal.RGBTable[Frame.TransparentPixel].Blue); Graphics Gfx = Graphics.FromImage(BM); while (SpriteReader.BaseStream.Position < (SpriteReader.BaseStream.Length - 1) && !Stop) { byte Opcode = SpriteReader.ReadByte(); byte Data = SpriteReader.ReadByte(); switch (Opcode) { case 1: //Transparent pixels. for (int Dat = 0; Dat < Data; Dat++) { if(X < Frame.Width) BM.SetPixel(X, Y, Transparent); X++; } break; case 2: byte Col = SpriteReader.ReadByte(); for (int Dat = 0; Dat < Data; Dat++) { if (X < Frame.Width) BM.SetPixel(X, Y, GetColorFromPalette(Col, Spr)); X++; } break; case 3: //Pixels. byte Pixel = SpriteReader.ReadByte(); for (int Dat = 0; Dat < Data; Dat++) { if (X < Frame.Width && Y < Frame.Height) BM.SetPixel(X, Y, GetColorFromPalette(Pixel, Spr)); X++; } break; case 4: //New line. for (; X < BM.Width; X++) BM.SetPixel(X, Y, Transparent); Y++; //Next line. X = 0; break; case 5: //End of sprite. Stop = true; break; case 9: //Transparent rows. Gfx.FillRectangle(Brushes.Transparent, new Rectangle(0, Y, BM.Width, (Y + (Data - 1)))); X = 0; Y = Y + (Data - 1); break; } } Random Rnd = new Random(DateTime.Now.Millisecond); BM.Save(Path + "\\" + i.ToString() + Rnd.Next() + ".png", System.Drawing.Imaging.ImageFormat.Png); } } }
private Color GetColorFromPalette(int PaletteIndex, SPR2 Sprite) { return Color.FromArgb(Sprite.Pal.RGBTable[PaletteIndex].Red, Sprite.Pal.RGBTable[PaletteIndex].Green, Sprite.Pal.RGBTable[PaletteIndex].Blue); }
public void ProcessSPR2(string Path) { List <IffChunk> SPR2s = new List <IffChunk>(); foreach (IffChunk Chunk in m_Chunks) { if (Chunk.Type == "SPR2") { SPR2s.Add(Chunk); } } foreach (IffChunk Chunk in SPR2s) { BinaryReader ChunkReader = new BinaryReader(new MemoryStream(Chunk.Data)); SPR2 Spr = new SPR2(); Spr.Version1 = ChunkReader.ReadInt16(); if (Spr.Version1 == 0) { Spr.Version2 = ReadBigShort(ChunkReader); } else { Spr.Version2 = ChunkReader.ReadInt16(); } Spr.FrameCount = ChunkReader.ReadInt32(); MessageBox.Show("Framecount: " + Spr.FrameCount); Spr.PaletteID = ChunkReader.ReadInt32(); Spr.OffsetTable = new int[Spr.FrameCount]; for (int i = 0; i < Spr.FrameCount; i++) { Spr.OffsetTable[i] = ChunkReader.ReadInt32(); } for (int i = 0; i < Spr.FrameCount; i++) { SpriteFrame Frame = new SpriteFrame(); Frame.Width = ChunkReader.ReadInt16(); Frame.Height = ChunkReader.ReadInt16(); Frame.Flags = ChunkReader.ReadInt16(); Frame.Unknown = ChunkReader.ReadInt16(); Frame.PaletteID = ChunkReader.ReadInt16(); Frame.TransparentPixel = ChunkReader.ReadInt16(); Frame.XPos = ChunkReader.ReadInt16(); Frame.YPos = ChunkReader.ReadInt16(); BinaryWriter SpriteWriter = new BinaryWriter(Frame.SpriteData); for (int l = 0; l <= Frame.Height; l++) { SpriteWriter.Write(ChunkReader.ReadBytes(2)); SpriteWriter.Write(ChunkReader.ReadBytes(Frame.Width)); } SpriteWriter.Flush(); //SpriteWriter.Close(); Spr.AddFrame(Frame); //Each SPR2 resource contains a reference to a PALT chunk/resource. Spr.Pal = new Palette(); IffChunk TmpChunk = new IffChunk(); foreach (IffChunk C in m_Chunks) { if (C.TypeNum == Spr.PaletteID) { //Guess what? The typenumber of each chunk is //NOT unique, so you have to check on type as //well! if (C.Type == "PALT") { TmpChunk = C; break; } } } BinaryReader PaltReader = new BinaryReader(new MemoryStream(TmpChunk.Data)); Spr.Pal.AlwaysOne = PaltReader.ReadInt32(); Spr.Pal.Always256 = PaltReader.ReadInt32(); PaltReader.ReadBytes(8); //The PALT header has 8 additional bytes of 0. Spr.Pal.RGBTable = new Palette.RGB[Spr.Pal.Always256]; for (int l = 0; l < Spr.Pal.Always256; l++) { Spr.Pal.RGBTable[l] = new Palette.RGB(); Spr.Pal.RGBTable[l].Red = PaltReader.ReadByte(); Spr.Pal.RGBTable[l].Green = PaltReader.ReadByte(); Spr.Pal.RGBTable[l].Blue = PaltReader.ReadByte(); } PaltReader.Close(); } for (int i = 0; i < Spr.FrameCount; i++) { SpriteFrame Frame = Spr.GetFrame(i); BinaryReader SpriteReader = new BinaryReader(new MemoryStream(Frame.SpriteData.ToArray())); int X = 0, Y = 0; bool Stop = false; Bitmap BM = new Bitmap(Frame.Width, Frame.Height); Color Transparent = Color.FromArgb(Spr.Pal.RGBTable[Frame.TransparentPixel].Red, Spr.Pal.RGBTable[Frame.TransparentPixel].Green, Spr.Pal.RGBTable[Frame.TransparentPixel].Blue); Graphics Gfx = Graphics.FromImage(BM); while (SpriteReader.BaseStream.Position < (SpriteReader.BaseStream.Length - 1) && !Stop) { byte Opcode = SpriteReader.ReadByte(); byte Data = SpriteReader.ReadByte(); switch (Opcode) { case 1: //Transparent pixels. for (int Dat = 0; Dat < Data; Dat++) { if (X < Frame.Width) { BM.SetPixel(X, Y, Transparent); } X++; } break; case 2: byte Col = SpriteReader.ReadByte(); for (int Dat = 0; Dat < Data; Dat++) { if (X < Frame.Width) { BM.SetPixel(X, Y, GetColorFromPalette(Col, Spr)); } X++; } break; case 3: //Pixels. byte Pixel = SpriteReader.ReadByte(); for (int Dat = 0; Dat < Data; Dat++) { if (X < Frame.Width && Y < Frame.Height) { BM.SetPixel(X, Y, GetColorFromPalette(Pixel, Spr)); } X++; } break; case 4: //New line. for (; X < BM.Width; X++) { BM.SetPixel(X, Y, Transparent); } Y++; //Next line. X = 0; break; case 5: //End of sprite. Stop = true; break; case 9: //Transparent rows. Gfx.FillRectangle(Brushes.Transparent, new Rectangle(0, Y, BM.Width, (Y + (Data - 1)))); X = 0; Y = Y + (Data - 1); break; } } Random Rnd = new Random(DateTime.Now.Millisecond); BM.Save(Path + "\\" + i.ToString() + Rnd.Next() + ".png", System.Drawing.Imaging.ImageFormat.Png); } } }
private Color GetColorFromPalette(int PaletteIndex, SPR2 Sprite) { return(Color.FromArgb(Sprite.Pal.RGBTable[PaletteIndex].Red, Sprite.Pal.RGBTable[PaletteIndex].Green, Sprite.Pal.RGBTable[PaletteIndex].Blue)); }
public void AddSprite(SPR2 Sprite) { m_Sprite = Sprite; m_Frame = (SPR2Frame)m_Sprite.GetFrame(0); //Floors only have 1 frame. }