Esempio n. 1
0
        private void LibraryTree_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (LibraryTree.SelectedNode.Level == 1)
            {
                SpriteLibrary.Sprites[index].SpriteData[frame].Data       = Editor.CurrentSprite.ImageData;
                SpriteLibrary.Sprites[index].SpriteData[frame].Compressed = false;

                index = LibraryTree.SelectedNode.Parent.Index;
                frame = LibraryTree.SelectedNode.Index;


                NSE_Framework.Data.Sprite sprite = new NSE_Framework.Data.Sprite(SpriteLibrary.Sprites[index].Width, SpriteLibrary.Sprites[index].Height, NSE_Framework.Data.Translator.PaletteToSpriteType(SpriteLibrary.Sprites[index].Palette.Type));
                sprite.Palette = SpriteLibrary.Sprites[index].Palette;

                sprite.ImageData = this.SpriteLibrary.Sprites[index].SpriteData[frame].Data;

                if (this.SpriteLibrary.Sprites[index].SpriteData[frame].Compressed)
                {
                    sprite.ImageData = NSE_Framework.Data.Lz77.DecompressBytes(sprite.ImageData);
                }

                Editor.Sprites[0]   = sprite;
                Editor.CurrentIndex = 0;
            }
        }
Esempio n. 2
0
        private void ButtonColorMatch_Click(object sender, EventArgs e)
        {
            OpenFileDialog iDialog = new OpenFileDialog();

            iDialog.Title           = "Select a file to import:";
            iDialog.CheckFileExists = true;
            iDialog.Filter          = "Importable Images|*.bmp;*.png*";

            if (iDialog.ShowDialog(this) == System.Windows.Forms.DialogResult.OK && !String.IsNullOrEmpty(iDialog.FileName))
            {
                if (System.IO.File.Exists(iDialog.FileName))
                {
                    oldName = Path.GetFileNameWithoutExtension(iDialog.FileName);
                    Bitmap bm = new Bitmap(iDialog.FileName);

                    NewSprite = new NSE_Framework.Data.Sprite(bm.Width / 8, bm.Height / 8, NSE_Framework.Data.Sprite.SpriteType.Color16);

                    NewSprite.Palette        = new NSE_Framework.Data.SpritePalette(NSE_Framework.Data.SpritePalette.PaletteType.Color16);
                    NewSprite.Palette.Colors = Colors;

                    Color getColor;
                    byte  index = 0;

                    for (int x = 0; x < NewSprite.Width * 8; x++)
                    {
                        for (int y = 0; y < NewSprite.Height * 8; y++)
                        {
                            index    = 0;
                            getColor = bm.GetPixel(x, y);
                            for (int i = 1; i < 16 && index == 0; i++)
                            {
                                if (Colors[i].Color == getColor)
                                {
                                    index = (byte)i;
                                }
                            }

                            SetByte(x, y, index);
                        }
                    }

                    Bitmap bs = new Bitmap(NewSprite.Width * 8, NewSprite.Height * 8);
                    NSE_Framework.Draw.uDrawSprite(ref bs, NewSprite);

                    PictureBoxSprite.Size  = new System.Drawing.Size(NewSprite.Width * 8 + 2, NewSprite.Height * 8 + 2);
                    PictureBoxSprite.Image = bs;
                    PictureBoxSprite.Refresh();

                    ButtonSave.Enabled = true;
                }
            }
        }
Esempio n. 3
0
        public EditorForm(NSE_Framework.Data.Sprite Sprite, string FileName)
        {
            InitializeComponent();
            this.WindowState          = FormWindowState.Maximized;
            this.Editor.CurrentSprite = Sprite;
            if (Sprite.Type == NSE_Framework.Data.Sprite.SpriteType.Color16)
            {
                this.Text = this.Text = FileName + " : @ " + (Sprite.Width * Sprite.Height * 32) + " bytes (4bpp)";
            }
            else if (Sprite.Type == NSE_Framework.Data.Sprite.SpriteType.Color256)
            {
                this.Text = this.Text = FileName + " : @ " + (Sprite.Width * Sprite.Height * 64) + " bytes (8bpp)";
            }
            this.Editor.CurrentSprite = Sprite;

            this.FileName = FileName;
        }
Esempio n. 4
0
 public EditorForm(NSE_Framework.Data.Sprite Sprite)
 {
     InitializeComponent();
     this.WindowState          = FormWindowState.Maximized;
     this.Editor.CurrentSprite = Sprite;
     if (Sprite.Type == NSE_Framework.Data.Sprite.SpriteType.Color16)
     {
         if (Sprite.UniqueImage)
         {
             if (Sprite.CompressedSprite != -1)
             {
                 this.Text = "Sprite: 0x" + Sprite.ImageOffset.ToString("X") + " Compressed @ " + Sprite.CompressedSprite.ToString() + " bytes (4bpp)";
             }
             else
             {
                 this.Text = "Sprite: 0x" + Sprite.ImageOffset.ToString("X") + " @ " + (Sprite.Width * Sprite.Height * 32) + " bytes (4bpp)";
             }
         }
         else
         {
             this.Text = "Sprite: @ " + (Sprite.Width * Sprite.Height * 32) + " bytes (4bpp)";
         }
     }
     else if (Sprite.Type == NSE_Framework.Data.Sprite.SpriteType.Color256)
     {
         if (Sprite.UniqueImage)
         {
             if (Sprite.CompressedSprite != -1)
             {
                 this.Text = "Sprite: 0x" + Sprite.ImageOffset.ToString("X") + " Compressed @ " + Sprite.CompressedSprite.ToString() + " bytes (8bpp)";
             }
             else
             {
                 this.Text = "Sprite: 0x" + Sprite.ImageOffset.ToString("X") + " @ " + (Sprite.Width * Sprite.Height * 64) + " bytes (8bpp)";
             }
         }
         else
         {
             this.Text = "Sprite: @ " + (Sprite.Width * Sprite.Height * 64) + " bytes (8bpp)";
         }
     }
     this.Editor.CurrentSprite = Sprite;
 }
Esempio n. 5
0
        public EditorForm(NSE_Framework.IO.SpriteLibrary SpriteLibrary, string FileName)
        {
            InitializeComponent();
            this.WindowState = FormWindowState.Maximized;
            NSE_Framework.Data.Sprite sprite = new NSE_Framework.Data.Sprite(SpriteLibrary.Sprites[0].Width, SpriteLibrary.Sprites[0].Height, NSE_Framework.Data.Translator.PaletteToSpriteType(SpriteLibrary.Sprites[0].Palette.Type));
            sprite.Palette = SpriteLibrary.Sprites[0].Palette;
            if (SpriteLibrary.Sprites[0].SpriteData[0].Compressed)
            {
                sprite.ImageData = NSE_Framework.Data.Lz77.DecompressBytes(SpriteLibrary.Sprites[0].SpriteData[0].Data);
            }
            else
            {
                sprite.ImageData = SpriteLibrary.Sprites[0].SpriteData[0].Data;
            }

            LibraryTree.Nodes.Clear();


            foreach (NSE_Framework.IO.SpriteSet sSet in SpriteLibrary.Sprites)
            {
                TreeNode node = new TreeNode(sSet.Name);
                foreach (NSE_Framework.IO.SpriteData sDat in sSet.SpriteData)
                {
                    node.Nodes.Add(new TreeNode(sDat.Name));
                }
                LibraryTree.Nodes.Add(node);
            }

            LibraryTree.SelectedNode = LibraryTree.Nodes[0].Nodes[0];


            this.Editor.CurrentSprite = sprite;
            this.SpriteLibrary        = SpriteLibrary;
            this.index             = 0;
            this.frame             = 0;
            this.Text              = SpriteLibrary.Origin + " - " + FileName;
            this.FileName          = FileName;
            this.SidePanel.Visible = true;
        }
Esempio n. 6
0
 public static void DrawSprite(ref Bitmap bitmap, NSE_Framework.Data.Sprite Sprite, Point Position, int scale = 1, int Length = -1)
 {
     DrawData(ref bitmap, Sprite.ImageData, Sprite.Palette, new Size(Sprite.Width, Sprite.Height), Position, scale, -1);
 }
Esempio n. 7
0
 public static void DrawSprite(ref Bitmap bitmap, NSE_Framework.Data.Sprite Sprite, int scale = 2, int Length = -1)
 {
     DrawSprite(ref bitmap, Sprite, Point.Empty, scale, Length);
 }
Esempio n. 8
0
        public static void ExportBitmap(string Filename, NSE_Framework.Data.Sprite Sprite)
        {
            if (Sprite.Type == Data.Sprite.SpriteType.Color16 || Sprite.Type == Data.Sprite.SpriteType.Color256)
            {
                //4bb bitmap http://en.wikipedia.org/wiki/BMP_file_format
                //header creation
                byte[] data; //= new byte[54 + 4 * Sprite.Palette.Colors.Length + (32 * (Sprite.Width * Sprite.Height))];

                byte[] ilength;
                if (Sprite.Type == Data.Sprite.SpriteType.Color16)
                {
                    data = new byte[118 + (32 * (Sprite.Width * Sprite.Height))];

                    //1
                    //0xF at offset 0x9 will mean 16 colors (this is not part of the bitmap format)
                    data[9]   = 0XF;
                    data[0xA] = 0x76;

                    //2
                    data[0x1C] = 4;
                    ilength    = BitConverter.GetBytes(32 * (Sprite.Width * Sprite.Height));
                }
                else if (Sprite.Type == Data.Sprite.SpriteType.Color256)
                {
                    data = new byte[1114 + (64 * (Sprite.Width * Sprite.Height))];
                    //1
                    //0xFF at offset 0x9 will mean 256 colors (this is not part of the bitmap format)
                    data[9]   = 0xFF;
                    data[0xA] = 0x5A;
                    data[0xB] = 0x4;

                    //2
                    data[0x1C] = 8;
                    ilength    = BitConverter.GetBytes(64 * (Sprite.Width * Sprite.Height));
                }
                else
                {
                    throw new Exception("Unsupported sprite.");
                }

                data[0] = 0x42;
                data[1] = 0x4D;

                //Write Length
                byte[] flength = BitConverter.GetBytes(data.Length);
                flength.CopyTo(data, 2);

                //Add "NSE" to the bitmap
                data[6] = 0x4E;
                data[7] = 0x53;
                data[8] = 0x45;

                //1
                data[0xE] = 40;

                byte[] width = BitConverter.GetBytes(Sprite.Width * 8);
                width.CopyTo(data, 0x12);

                byte[] height = BitConverter.GetBytes(Sprite.Height * 8);
                height.CopyTo(data, 0x16);

                data[0x1A] = 1;

                //2
                ilength.CopyTo(data, 0x22);

                // Write Palette Table
                int i = 0;
                foreach (NSE_Framework.Data.GBAcolor color in Sprite.Palette.Colors)
                {
                    data[0x36 + i * 4] = color.Blue;
                    data[0x37 + i * 4] = color.Green;
                    data[0x38 + i * 4] = color.Red;

                    i++;
                }

                if (Sprite.Type == Data.Sprite.SpriteType.Color16)
                {
                    for (int y = 0; y < Sprite.Height * 8; y++)
                    {
                        for (int x = 0; x < Sprite.Width * 4; x++)
                        {
                            data[118 + ((Sprite.Height * 8) - y - 1) * (Sprite.Width * 4) + x] = FlipByte(Sprite.ImageData[Position2Index(new Size(Sprite.Width * 8, Sprite.Height * 8), new Point(x * 2, y), Sprite.Type)]);
                        }
                    }
                }
                else if (Sprite.Type == Data.Sprite.SpriteType.Color256)
                {
                    for (int y = 0; y < Sprite.Height * 8; y++)
                    {
                        for (int x = 0; x < Sprite.Width * 8; x++)
                        {
                            data[1114 + ((Sprite.Height * 8) - y - 1) * (Sprite.Width * 8) + x] = Sprite.ImageData[Position2Index(new Size(Sprite.Width * 8, Sprite.Height * 8), new Point(x, y), Sprite.Type)];
                        }
                    }
                }



                Stream       stream = File.Open(Filename, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
                BinaryWriter bw     = new BinaryWriter(stream);

                bw.Write(data);
                bw.Close();
                stream.Close();
            }
        }
Esempio n. 9
0
        void navigate()
        {
            sHeaderOffset = BitConverter.ToInt32(read.ReadBytes(SpriteTable + 4 * Index, 4), 0) - 0x8000000;

            byte[] HeaderBytes = read.ReadBytes(sHeaderOffset, 36);

            sWidth = BitConverter.ToInt32(new byte[4] {
                HeaderBytes[8], HeaderBytes[9], 0, 0
            }, 0);
            sHeight = BitConverter.ToInt32(new byte[4] {
                HeaderBytes[10], HeaderBytes[11], 0, 0
            }, 0);

            sPaletteIndex = HeaderBytes[2];

            sPointer1 = BitConverter.ToInt32(new byte[4] {
                HeaderBytes[16], HeaderBytes[17], HeaderBytes[18], HeaderBytes[19]
            }, 0) - 0x8000000;
            sPointer2 = BitConverter.ToInt32(new byte[4] {
                HeaderBytes[20], HeaderBytes[21], HeaderBytes[22], HeaderBytes[23]
            }, 0) - 0x8000000;
            sPointer3 = BitConverter.ToInt32(new byte[4] {
                HeaderBytes[28], HeaderBytes[29], HeaderBytes[30], HeaderBytes[31]
            }, 0) - 0x8000000;

            ImageOffset = read.ReadPointer(sPointer3 + 8 * Frame);
            cFrameSize  = read.ReadBytes(sPointer3 + 8 * Frame + 4, 2);

            #region FindPalette
            PaletteOffset = read.ReadPointer(PaletteTable);

            byte indicator = 0x1;
            int  take      = 0;
            while (indicator != 0x0)
            {
                if (read.ReadByte(PaletteTable + 8 * take + 4) == sPaletteIndex)
                {
                    PaletteOffset = read.ReadPointer(PaletteTable + 8 * take);
                    indicator     = 0x0;
                }
                else
                {
                    indicator = read.ReadByte(PaletteTable + 8 * take + 5);
                    take++;
                }
            }
            #endregion

            NSE_Framework.Data.Sprite OW = new NSE_Framework.Data.Sprite(ImageOffset, PaletteOffset, sWidth / 8, sHeight / 8, NSE_Framework.Data.Sprite.SpriteType.Color16, read);

            Sprite     = new Bitmap(sWidth, sHeight);//new Bitmap(sWidth * 2, sHeight * 2);
            byteSprite = read.ReadBytes(ImageOffset, sWidth * sHeight / 2);

            SpritePalette = new NSE_Framework.Data.SpritePalette(NSE_Framework.Data.SpritePalette.PaletteType.Color16, read.ReadBytes(PaletteOffset, 32));

            NSE_Framework.Draw.uDrawData(ref Sprite, byteSprite, SpritePalette, new Size(sWidth / 8, sHeight / 8));
            PictureBoxSprite.Image     = Sprite;
            PictureBoxSprite.BackColor = SpritePalette.Colors[0].Color;
            PictureBoxSprite.Size      = new System.Drawing.Size(sWidth * 2, sHeight * 2);
            PictureBoxSprite.Invalidate();

            #region Labels
            LabelPaletteOffset.Text = "Palette " + sPaletteIndex.ToString("X2") + " Offset:";

            dLabelStarterBytes.Text = HeaderBytes[0].ToString("X2") + HeaderBytes[1].ToString("X2");
            // Byte 2 is the palette index
            // Byte 3 is always 0x11
            dLabelTypeSize.Text  = HeaderBytes[4].ToString("X2") + HeaderBytes[5].ToString("X2");
            dLabelFrameSize.Text = HeaderBytes[7].ToString("X2") + HeaderBytes[6].ToString("X2");
            // Bytes 8,9,10,11 are width and height
            dLabelWidth.Text  = sWidth.ToString();
            dLabelHeight.Text = sHeight.ToString();

            dLabelPalReg.Text   = HeaderBytes[12].ToString("X2") + "-" + HeaderBytes[13].ToString("X2") + " " + HeaderBytes[14].ToString("X2") + HeaderBytes[15].ToString("X2");
            dLabelPointer1.Text = HeaderBytes[19].ToString("X2") + HeaderBytes[18].ToString("X2") + HeaderBytes[17].ToString("X2") + HeaderBytes[16].ToString("X2");
            dLabelPointer2.Text = HeaderBytes[23].ToString("X2") + HeaderBytes[22].ToString("X2") + HeaderBytes[21].ToString("X2") + HeaderBytes[20].ToString("X2");
            dLabelAnim.Text     = HeaderBytes[27].ToString("X2") + HeaderBytes[26].ToString("X2") + HeaderBytes[25].ToString("X2") + HeaderBytes[24].ToString("X2");
            dLabelPointer3.Text = HeaderBytes[31].ToString("X2") + HeaderBytes[30].ToString("X2") + HeaderBytes[29].ToString("X2") + HeaderBytes[28].ToString("X2");

            dLabelSpriteOffset.Text  = "0x" + sHeaderOffset.ToString("X2");
            dLabelImageOffset.Text   = "0x" + ImageOffset.ToString("X2");
            dLabelPaletteOffset.Text = "0x" + PaletteOffset.ToString("X2");
            dLabelCFrameSize.Text    = cFrameSize[1].ToString("X2") + cFrameSize[0].ToString("X2");

            TextBoxPalette.Text = sPaletteIndex.ToString("X2");
            #endregion

            editBlock = 0;
            drawBlock();
            fillCanvas();
            fillPalette();

            iSelectedColor.BackColor = SpritePalette.Colors[editColorIndex].Color;
        }
Esempio n. 10
0
        private void ButtonImport_Click(object sender, EventArgs e)
        {
            OpenFileDialog iDialog = new OpenFileDialog();

            iDialog.Title           = "Select a file to import:";
            iDialog.CheckFileExists = true;
            iDialog.Filter          = "Importable Sprite|*.nslx;*.bmp;*.png*";

            if (iDialog.ShowDialog(this) == System.Windows.Forms.DialogResult.OK & iDialog.FileName != "")
            {
                string extension = Path.GetExtension(iDialog.FileName).Substring(1).ToLower();
                LibraryTree.Nodes.Clear();
                LibraryTree.Nodes.Add("No Sprite Library loaded");
                Library = null;
                Sprite  = null;

                if (extension == "png" || extension == "bmp")
                {
                    try
                    {
                        Sprite        = NSE_Framework.IO.Import.ImportImage(iDialog.FileName);
                        this.Text     = "Import - " + Path.GetFileName(iDialog.FileName);
                        previewBitmap = new Bitmap(Sprite.Width * 8, Sprite.Height * 8, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

                        NSE_Framework.Draw.uDrawSprite(ref previewBitmap, Sprite);
                        Preview.Image = previewBitmap;

                        DrawPalette();
                        LabelSize.Text = "Size: ( " + Sprite.Width.ToString() + ", " + Sprite.Height.ToString() + ")";

                        if (Sprite.Palette.Type == NSE_Framework.Data.SpritePalette.PaletteType.Color16)
                        {
                            LabelColors.Text = "Colors: 16";
                        }
                        else if (Sprite.Palette.Type == NSE_Framework.Data.SpritePalette.PaletteType.Color256)
                        {
                            LabelColors.Text = "Colors: 256";
                        }
                        ButtonSave.Enabled         = true;
                        ComboBoxMode.Enabled       = true;
                        ComboBoxMode.SelectedIndex = 0;
                        ButtonSave.Focus();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else if (extension == "nslx")
                {
                    LibraryTree.Nodes.Clear();

                    Library   = NSE_Framework.IO.Import.ImportSpriteLibrary(iDialog.FileName);
                    this.Text = "Import - " + this.Library.Origin;

                    foreach (NSE_Framework.IO.SpriteSet sSet in Library.Sprites)
                    {
                        TreeNode node = new TreeNode(sSet.Name);
                        foreach (NSE_Framework.IO.SpriteData sDat in sSet.SpriteData)
                        {
                            node.Nodes.Add(new TreeNode(sDat.Name));
                        }
                        LibraryTree.Nodes.Add(node);
                    }

                    LibraryTree.SelectedNode   = LibraryTree.Nodes[0].Nodes[0];
                    ButtonSave.Enabled         = true;
                    ComboBoxMode.Enabled       = true;
                    ComboBoxMode.SelectedIndex = 0;
                    ButtonSave.Focus();
                }
            }
        }