예제 #1
0
파일: NBM.cs 프로젝트: MetLob/tinke
        public override void Read(string file)
        {
            BinaryReader br = new BinaryReader(File.OpenRead(file));
            uint file_size = (uint)br.BaseStream.Length;

            // Read header values
            ushort depth = br.ReadUInt16();
            ushort width = br.ReadUInt16();
            ushort height = br.ReadUInt16();
            ushort unknown = br.ReadUInt16();
            ColorFormat format = (depth == 0x01) ? ColorFormat.colors256 : ColorFormat.colors16;

            // Palette
            int palette_length = (depth == 0x01) ? 0x200 : 0x20;
            Color[][] colors = new Color[1][];
            colors[0] = Actions.BGR555ToColor(br.ReadBytes(palette_length));
            palette = new RawPalette(colors, false, format);

            // Tiles
            int tiles_length = width * height;
            if (depth == 0)
                tiles_length /= 2;
            Byte[] tiles = br.ReadBytes(tiles_length);

            br.Close();
            Set_Tiles(tiles, width, height, format, TileForm.Lineal, true);
        }
예제 #2
0
파일: NSCR.cs 프로젝트: MetLob/tinke
        public override void Write(string fileOut, ImageBase image, PaletteBase palette)
        {
            Update_Struct();
            BinaryWriter bw = new BinaryWriter(File.OpenWrite(fileOut));

            // Common header
            bw.Write(nscr.header.id);
            bw.Write(nscr.header.endianess);
            bw.Write(nscr.header.constant);
            bw.Write(nscr.header.file_size);
            bw.Write(nscr.header.header_size);
            bw.Write(nscr.header.nSection);

            // SCRN section
            bw.Write(nscr.nrcs.id);
            bw.Write(nscr.nrcs.section_size);
            bw.Write(nscr.nrcs.width);
            bw.Write(nscr.nrcs.height);
            bw.Write(nscr.nrcs.padding);
            bw.Write(nscr.nrcs.data_size);

            for (int i = 0; i < nscr.nrcs.mapData.Length; i++)
            {
                int npalette = nscr.nrcs.mapData[i].nPalette << 12;
                int yFlip = nscr.nrcs.mapData[i].yFlip << 11;
                int xFlip = nscr.nrcs.mapData[i].xFlip << 10;
                int data = npalette + yFlip + xFlip + nscr.nrcs.mapData[i].nTile;
                bw.Write((ushort)data);
            }

            bw.Flush();
            bw.Close();
        }
예제 #3
0
        public Image Get_Image(ImageBase image, PaletteBase palette)
        {
            if (image.FormTile == TileForm.Lineal)
            {
                image.FormTile = TileForm.Horizontal;
            }

            Byte[] tiles, tile_pal;
            NTFS[] currMap = (NTFS[])map.Clone();
            tiles = Actions.Apply_Map(currMap, image.Tiles, out tile_pal, image.BPP, image.TileSize);

            ImageBase newImage = new TestImage();

            newImage.Set_Tiles(tiles, image.Width, image.Height, image.FormatColor, image.FormTile, image.CanEdit, image.TileSize);
            newImage.TilesPalette = tile_pal;
            newImage.Zoom         = image.Zoom;

            if (height != 0)
            {
                newImage.Height = height;
            }
            if (width != 0)
            {
                newImage.Width = width;
            }

            return(newImage.Get_Image(palette));
        }
예제 #4
0
        public override void Write(string fileOut, PaletteBase palette)
        {
            // MetLob edition 25/12/2015
            int dataSize = (post_data.Length == 0) ? Tiles.Length : Math.Min(Tiles.Length, ori_data.Length - StartByte);

            if (dataSize < Tiles.Length)
            {
                MessageBox.Show(
                    "Tiles data size exceeds the allowable length and will be trimmed.",
                    "Image import processing");
            }

            BinaryWriter bw = new BinaryWriter(File.OpenWrite(fileOut));

            bw.Write(prev_data);
            for (int i = 0; i < StartByte; i++)
            {
                bw.Write(ori_data[i]);
            }
            bw.Write(Tiles, 0, dataSize);
            for (int i = Tiles.Length + StartByte; i < ori_data.Length; i++)
            {
                bw.Write(ori_data[i]);
            }
            bw.Write(post_data);
            bw.Flush();
            bw.Close();
        }
예제 #5
0
        public PaletteControl(IPluginHost pluginHost, PaletteBase palette)
        {
            InitializeComponent();

            this.pluginHost = pluginHost;
            this.palette = palette;
            btnImport.Enabled = palette.CanEdit;

            ReadLanguage();
            Update_Info();
        }
예제 #6
0
        public PaletteControl(IPluginHost pluginHost, PaletteBase palette)
        {
            InitializeComponent();

            this.pluginHost   = pluginHost;
            this.palette      = palette;
            btnImport.Enabled = palette.CanEdit;

            ReadLanguage();
            Update_Info();
        }
예제 #7
0
        public SpriteControl(IPluginHost pluginHost)
        {
            InitializeComponent();

            this.pluginHost = pluginHost;
            this.sprite = pluginHost.Get_Sprite();
            this.image = pluginHost.Get_Image();
            this.palette = pluginHost.Get_Palette();

            Read_Language();
            Update_Info();
        }
예제 #8
0
        public SpriteControl(IPluginHost pluginHost, SpriteBase sprite, ImageBase image, PaletteBase palette)
        {
            InitializeComponent();

            this.sprite = sprite;
            this.image = image;
            this.palette = palette;
            this.pluginHost = pluginHost;

            Read_Language();
            Update_Info();
        }
예제 #9
0
        public SpriteControl(IPluginHost pluginHost)
        {
            InitializeComponent();

            this.pluginHost = pluginHost;
            this.sprite     = pluginHost.Get_Sprite();
            this.image      = pluginHost.Get_Image();
            this.palette    = pluginHost.Get_Palette();

            Read_Language();
            Update_Info();
        }
예제 #10
0
        public SpriteControl(IPluginHost pluginHost, SpriteBase sprite, ImageBase image, PaletteBase palette)
        {
            InitializeComponent();

            this.sprite     = sprite;
            this.image      = image;
            this.palette    = palette;
            this.pluginHost = pluginHost;

            Read_Language();
            Update_Info();
        }
예제 #11
0
        public SpriteControl(XElement lang, SpriteBase sprite, ImageBase image, PaletteBase palette)
        {
            InitializeComponent();

            this.sprite  = sprite;
            this.image   = image;
            this.palette = palette;
            this.lang    = lang;

            Read_Language(lang);
            Update_Info();
        }
예제 #12
0
파일: ASC.cs 프로젝트: MetLob/tinke
        public override void Write(string fileout, ImageBase image, PaletteBase palette)
        {
            BinaryWriter bw = new BinaryWriter(File.OpenWrite(fileout));

            bw.Write((ushort)(Width / 0x08));
            bw.Write((ushort)(Height / 0x08));

            for (int i = 0; i < Map.Length; i++)
                bw.Write(Actions.MapInfo(Map[i]));

            bw.Flush();
            bw.Close();
        }
예제 #13
0
        public override void Write(string fileOut, ImageBase image, PaletteBase palette)
        {
            BinaryWriter bw = new BinaryWriter(File.OpenWrite(fileOut));

            bw.Write(prev_data);
            for (int i = 0; i < Map.Length; i++)
            {
                bw.Write(Actions.MapInfo(Map[i]));
            }
            bw.Write(next_data);

            bw.Flush();
            bw.Close();
        }
예제 #14
0
        public void Set_Palette(PaletteBase new_pal)
        {
            this.palette = new_pal.Palette;
            this.depth   = new_pal.Depth;

            loaded = true;

            // Convert the palette to bytes, to store the original palette
            List <Color> colors = new List <Color>();

            for (int i = 0; i < palette.Length; i++)
            {
                colors.AddRange(palette[i]);
            }
            original  = Actions.ColorToBGR555(colors.ToArray());
            startByte = 0;
        }
예제 #15
0
        public ImageControl(IPluginHost pluginHost, ImageBase image, PaletteBase palette)
        {
            InitializeComponent();

            isMap = false;
            this.image = image;
            this.palette = palette;
            this.pluginHost = pluginHost;

            Update_Info();

            this.comboDepth.SelectedIndexChanged += new EventHandler(comboDepth_SelectedIndexChanged);
            this.numericWidth.ValueChanged += new EventHandler(numericSize_ValueChanged);
            this.numericHeight.ValueChanged += new EventHandler(numericSize_ValueChanged);
            this.numericStart.ValueChanged += new EventHandler(numericStart_ValueChanged);

            ReadLanguage();
            Update_Image();
        }
예제 #16
0
        public ImageControl(IPluginHost pluginHost, ImageBase image, PaletteBase palette)
        {
            InitializeComponent();

            isMap           = false;
            this.image      = image;
            this.palette    = palette;
            this.pluginHost = pluginHost;

            Update_Info();

            this.comboDepth.SelectedIndexChanged += new EventHandler(comboDepth_SelectedIndexChanged);
            this.numericWidth.ValueChanged       += new EventHandler(numericSize_ValueChanged);
            this.numericHeight.ValueChanged      += new EventHandler(numericSize_ValueChanged);
            this.numericStart.ValueChanged       += new EventHandler(numericStart_ValueChanged);

            ReadLanguage();
            Update_Image();
        }
예제 #17
0
        public ImageControl(XElement lang, ImageBase image, PaletteBase palette)
        {
            InitializeComponent();

            isMap        = false;
            this.image   = image;
            this.palette = palette;

            Update_Info();

            btnImport.Enabled = false;
            groupBox2.Enabled = false;
            this.comboDepth.SelectedIndexChanged += new EventHandler(comboDepth_SelectedIndexChanged);
            this.numericWidth.ValueChanged       += new EventHandler(numericSize_ValueChanged);
            this.numericHeight.ValueChanged      += new EventHandler(numericSize_ValueChanged);
            this.numericStart.ValueChanged       += new EventHandler(numericStart_ValueChanged);

            ReadLanguage(lang);
            Update_Image();
        }
예제 #18
0
        public override void Write(string fileOut, PaletteBase palette)
        {
            int image_size = Width * Height * BPP / 8;

            BinaryWriter bw = new BinaryWriter(File.OpenWrite(fileOut));

            bw.Write(prev_data);
            for (int i = 0; i < StartByte; i++)
            {
                bw.Write(ori_data[i]);
            }
            bw.Write(Tiles);
            for (int i = image_size + StartByte; i < ori_data.Length; i++)
            {
                bw.Write(ori_data[i]);
            }
            bw.Write(post_data);
            bw.Flush();
            bw.Close();
        }
예제 #19
0
파일: R00.cs 프로젝트: MetLob/tinke
        public override void Read(string fileIn)
        {
            BinaryReader br = new BinaryReader(File.OpenRead(fileIn));

            // Header
            uint paletaOffset = br.ReadUInt32() * 4;
            uint tileOffset = br.ReadUInt32() * 4;
            uint mapOffset = br.ReadUInt32() * 4;

            // Paleta
            br.BaseStream.Position = paletaOffset;
            uint pCabeceraSize = br.ReadUInt32() * 4;
            uint pSize = br.ReadUInt32() * 4;

            Color[][] colors = new Color[1][];
            colors[0] = Actions.BGR555ToColor(br.ReadBytes((int)(pSize - 0x08)));
            palette = new RawPalette(colors, false, ColorFormat.colors256);

            // Image data
            br.BaseStream.Position = tileOffset;
            uint tCabeceraSize = br.ReadUInt32() * 4;
            uint tSize = br.ReadUInt32() * 4;

            byte[] tiles = br.ReadBytes((int)(tSize - 0x08));
            image = new RawImage(tiles, TileForm.Horizontal, ColorFormat.colors256, 256, 192, false);

            // Map
            br.BaseStream.Position = mapOffset;
            uint mCabeceraSize = br.ReadUInt32() * 4;
            uint mSize = br.ReadUInt32() * 4;

            ushort width = br.ReadUInt16();
            ushort height = br.ReadUInt16();

            NTFS[] map = new NTFS[(mSize - 0x08) / 2];
            for (int i = 0; i < map.Length; i++)
                map[i] = Actions.MapInfo(br.ReadUInt16());

            br.Close();
            Set_Map(map, false, width * 8, height * 8);
        }
예제 #20
0
파일: SCx.cs 프로젝트: MetLob/tinke
        public override void Write(string fileOut, ImageBase image, PaletteBase palette)
        {
            BinaryWriter bw = new BinaryWriter(File.OpenWrite(fileOut));

            bw.Write(scx.type);
            bw.Write(scx.unknown1);
            bw.Write(scx.unknown2);
            bw.Write(scx.unknown3);
            bw.Write(scx.unknown4);

            bw.Write((ushort)Width);
            bw.Write((ushort)Height);
            bw.Write(Map.Length * 2);
            bw.Write(Map.Length * 2);

            for (int i = 0; i < Map.Length; i++)
                bw.Write(Actions.MapInfo(Map[i]));

            bw.Flush();
            bw.Close();
        }
예제 #21
0
        public ImageControl(IPluginHost pluginHost, bool isMap)
        {
            InitializeComponent();

            this.pluginHost = pluginHost;
            this.isMap = isMap;
            this.palette = pluginHost.Get_Palette();
            this.image = pluginHost.Get_Image();
            if (isMap)
                this.map = pluginHost.Get_Map();

            Update_Info();

            this.comboDepth.SelectedIndexChanged += new EventHandler(comboDepth_SelectedIndexChanged);
            this.numericWidth.ValueChanged += new EventHandler(numericSize_ValueChanged);
            this.numericHeight.ValueChanged += new EventHandler(numericSize_ValueChanged);
            this.numericStart.ValueChanged += new EventHandler(numericStart_ValueChanged);

            ReadLanguage();
            Update_Image();
        }
예제 #22
0
        public Image Get_Image(PaletteBase palette)
        {
            palette.Depth = format;
            Color[][] pal_colors = palette.Palette;

            Byte[] img_tiles;
            if (tileForm == Images.TileForm.Horizontal)
            {
                if (height < tile_size)
                {
                    height = tile_size;
                }
                img_tiles = Actions.LinealToHorizontal(tiles, width, height, bpp, tile_size);
                tilePal   = Actions.LinealToHorizontal(tilePal, width, height, 8, tile_size);
            }
            else
            {
                img_tiles = tiles;
            }

            return(Actions.Get_Image(img_tiles, tilePal, pal_colors, format, width, height));
        }
예제 #23
0
        public ImageControl(IPluginHost pluginHost, bool isMap)
        {
            InitializeComponent();

            this.pluginHost = pluginHost;
            this.isMap      = isMap;
            this.palette    = pluginHost.Get_Palette();
            this.image      = pluginHost.Get_Image();
            if (isMap)
            {
                this.map = pluginHost.Get_Map();
            }

            Update_Info();

            this.comboDepth.SelectedIndexChanged += new EventHandler(comboDepth_SelectedIndexChanged);
            this.numericWidth.ValueChanged       += new EventHandler(numericSize_ValueChanged);
            this.numericHeight.ValueChanged      += new EventHandler(numericSize_ValueChanged);
            this.numericStart.ValueChanged       += new EventHandler(numericStart_ValueChanged);

            ReadLanguage();
            Update_Image();
        }
예제 #24
0
        public ImageControl(XElement lang, ImageBase image, PaletteBase palette)
        {
            InitializeComponent();

            isMap = false;
            this.image = image;
            this.palette = palette;

            Update_Info();

            btnImport.Enabled = false;
            groupBox2.Enabled = false;
            this.comboDepth.SelectedIndexChanged += new EventHandler(comboDepth_SelectedIndexChanged);
            this.numericWidth.ValueChanged += new EventHandler(numericSize_ValueChanged);
            this.numericHeight.ValueChanged += new EventHandler(numericSize_ValueChanged);
            this.numericStart.ValueChanged += new EventHandler(numericStart_ValueChanged);

            ReadLanguage(lang);
            Update_Image();
        }
예제 #25
0
 public Image Get_Image(ImageBase image, PaletteBase pal, Bank bank, int width, int height,
                        bool grid, bool cell, bool number, bool trans, bool img, int currOAM)
 {
     return(Actions.Get_Image(bank, block_size, image, pal, width, height,
                              grid, cell, number, trans, img, currOAM));
 }
예제 #26
0
 public Image Get_Image(ImageBase image, PaletteBase pal, Bank bank, int width, int height,
     bool grid, bool cell, bool number, bool trans, bool img, int currOAM)
 {
     return Actions.Get_Image(bank, block_size, image, pal, width, height,
                              grid, cell, number, trans, img, currOAM);
 }
예제 #27
0
파일: MAP.cs 프로젝트: MetLob/tinke
 public override void Write(string fileOut, ImageBase image, PaletteBase palette)
 {
     throw new NotImplementedException();
 }
예제 #28
0
파일: RawData.cs 프로젝트: ShadeDBZ/tinke
        public override void Write(string fileOut, ImageBase image, PaletteBase palette)
        {
            BinaryWriter bw = new BinaryWriter(File.OpenWrite(fileOut));

            bw.Write(prev_data);
            for (int i = 0; i < Map.Length; i++)
                bw.Write(Actions.MapInfo(Map[i]));
            bw.Write(next_data);

            bw.Flush();
            bw.Close();
        }
예제 #29
0
 public override void Write(string fileOut, PaletteBase palette)
 {
     throw new NotImplementedException();
 }
예제 #30
0
        public AnimationControl(IPluginHost pluginHost, NANR ani)
        {
            InitializeComponent();
            Read_Language();

            this.pluginHost = pluginHost;
            this.palette = pluginHost.Get_Palette();
            this.image = pluginHost.Get_Image();
            this.sprite = pluginHost.Get_Sprite();
            this.ani = ani;
            isAni = true;

            if (ani.Struct.abnk.nBanks == 0)
            {
                MessageBox.Show("No animations.");
                isAni = false;
                tempo.Enabled = false;
                comboAni.Enabled = false;
                btnNext.Enabled = false;
                btnPlay.Enabled = false;
                btnPrevious.Enabled = false;
                btnSave.Enabled = false;
                btnStop.Enabled = false;
                txtTime.Enabled = false;
                checkCeldas.Enabled = false;
                checkEntorno.Enabled = false;
                checkImage.Enabled = false;
                checkNumeros.Enabled = false;
                checkTransparencia.Enabled = false;
            }

            for (int i = 0; i < ani.Names.Length; i++)
                comboAni.Items.Add(ani.Names[i]);
            if (isAni)
                comboAni.SelectedIndex = 0;

            ShowInfo();
            Get_Ani();

            tempo.Stop();
            tempo.Interval = Convert.ToInt32(txtTime.Text);

            if (isAni)
                aniBox.Image = bitAni[0];
        }
예제 #31
0
파일: ImageBase.cs 프로젝트: ShadeDBZ/tinke
        public Image Get_Image(PaletteBase palette)
        {
            palette.Depth = format;
            Color[][] pal_colors = palette.Palette;

            Byte[] img_tiles;
            if (tileForm == Images.TileForm.Horizontal)
            {
                if (height < tile_size) height = tile_size;
                img_tiles = Actions.LinealToHorizontal(tiles, width, height, bpp, tile_size);
                tilePal = Actions.LinealToHorizontal(tilePal, width, height, 8, tile_size);
            }
            else
                img_tiles = tiles;

            return Actions.Get_Image(img_tiles, tilePal, pal_colors, format, width, height);
        }
예제 #32
0
파일: MapBase.cs 프로젝트: ShadeDBZ/tinke
        public Image Get_Image(ImageBase image, PaletteBase palette)
        {
            if (image.FormTile == TileForm.Lineal)
                image.FormTile = TileForm.Horizontal;

            Byte[] tiles, tile_pal;
            NTFS[] currMap = (NTFS[])map.Clone();
            tiles = Actions.Apply_Map(currMap, image.Tiles, out tile_pal, image.BPP, image.TileSize);

            ImageBase newImage = new TestImage();
            newImage.Set_Tiles(tiles, image.Width, image.Height, image.FormatColor, image.FormTile, image.CanEdit, image.TileSize);
            newImage.TilesPalette = tile_pal;
            newImage.Zoom = image.Zoom;

            if (height != 0)
                newImage.Height = height;
            if (width != 0)
                newImage.Width = width;

            return newImage.Get_Image(palette);
        }
예제 #33
0
파일: RawData.cs 프로젝트: MetLob/tinke
        public override void Write(string fileOut, PaletteBase palette)
        {
            // MetLob edition 25/12/2015
            int dataSize = (post_data.Length == 0) ? Tiles.Length : Math.Min(Tiles.Length, ori_data.Length - StartByte);
            if (dataSize < Tiles.Length)
                MessageBox.Show(
                    "Tiles data size exceeds the allowable length and will be trimmed.",
                    "Image import processing");

            BinaryWriter bw = new BinaryWriter(File.OpenWrite(fileOut));
            bw.Write(prev_data);
            for (int i = 0; i < StartByte; i++)
                bw.Write(ori_data[i]);
            bw.Write(Tiles, 0, dataSize);
            for (int i = Tiles.Length + StartByte; i < ori_data.Length; i++)
                bw.Write(ori_data[i]);
            bw.Write(post_data);
            bw.Flush();
            bw.Close();
        }
예제 #34
0
파일: ImageBase.cs 프로젝트: ShadeDBZ/tinke
 public abstract void Write(string fileOut, PaletteBase palette);
예제 #35
0
파일: PCT.cs 프로젝트: MetLob/tinke
 public override void Write(string fileOut, ImageBase image, PaletteBase palette)
 {
 }
예제 #36
0
파일: ANA.cs 프로젝트: MetLob/tinke
        public override void Write(string fileout, PaletteBase palette)
        {
            BinaryWriter bw = new BinaryWriter(File.OpenWrite(fileout));

            ushort num_tiles = (ushort)(Tiles.Length / 0x20);
            if (FormatColor == ColorFormat.colors256)
                num_tiles /= 2;

            bw.Write(num_tiles);
            bw.Write((ushort)(FormatColor == Ekona.Images.ColorFormat.colors16 ? 0x00 : 0x01));
            bw.Write(Tiles);

            bw.Flush();
            bw.Close();
        }
예제 #37
0
 public Image Get_Image(ImageBase image, PaletteBase pal, int index, int width, int height,
                        bool grid, bool cell, bool number, bool trans, bool img, int currOAM, int[] draw_index)
 {
     return(Actions.Get_Image(banks[index], block_size, image, pal, width, height,
                              grid, cell, number, trans, img, currOAM, 1, draw_index));
 }
예제 #38
0
 public abstract void Write(string fileOut, PaletteBase palette);
예제 #39
0
파일: RawData.cs 프로젝트: ShadeDBZ/tinke
        public override void Write(string fileOut, PaletteBase palette)
        {
            int image_size = Width * Height * BPP / 8;

            BinaryWriter bw = new BinaryWriter(File.OpenWrite(fileOut));
            bw.Write(prev_data);
            for (int i = 0; i < StartByte; i++)
                bw.Write(ori_data[i]);
            bw.Write(Tiles);
            for (int i = image_size + StartByte; i < ori_data.Length; i++)
                bw.Write(ori_data[i]);
            bw.Write(post_data);
            bw.Flush();
            bw.Close();
        }
예제 #40
0
파일: Actions.cs 프로젝트: MetLob/tinke
        public static Bitmap Get_Image(Bank bank, uint blockSize, ImageBase img, PaletteBase pal, int max_width, int max_height,
            bool draw_grid, bool draw_cells, bool draw_numbers, bool trans, bool image, int currOAM = -1,
            int zoom = 1, int[] index = null)
        {
            Size size = new Size(max_width * zoom, max_height * zoom);
            Bitmap bank_img = new Bitmap(size.Width, size.Height);
            Graphics graphic = Graphics.FromImage(bank_img);

            if (bank.oams.Length == 0)
            {
                graphic.DrawString("No OAM", SystemFonts.CaptionFont, Brushes.Black, new PointF(max_width / 2, max_height / 2));
                return bank_img;
            }

            if (draw_grid)
            {
                for (int i = (0 - size.Width); i < size.Width; i += 8)
                {
                    graphic.DrawLine(Pens.LightBlue, (i + size.Width / 2) * zoom, 0, (i + size.Width / 2) * zoom, size.Height * zoom);
                    graphic.DrawLine(Pens.LightBlue, 0, (i + size.Height / 2) * zoom, size.Width * zoom, (i + size.Height / 2) * zoom);
                }
                graphic.DrawLine(Pens.Blue, (max_width / 2) * zoom, 0, (max_width / 2) * zoom, max_height * zoom);
                graphic.DrawLine(Pens.Blue, 0, (max_height / 2) * zoom, max_width * zoom, (max_height / 2) * zoom);
            }

            Image cell;
            for (int i = 0; i < bank.oams.Length; i++)
            {
                bool draw = false;
                if (index == null)
                    draw = true;
                else
                    for (int k = 0; k < index.Length; k++)
                        if (index[k] == i)
                            draw = true;
                if (!draw)
                    continue;

                if (bank.oams[i].width == 0x00 || bank.oams[i].height == 0x00)
                    continue;

                uint tileOffset = bank.oams[i].obj2.tileOffset;
                tileOffset = (uint)(tileOffset << (byte)blockSize);

                if (image)
                {
                    ImageBase cell_img = new TestImage();
                    cell_img.Set_Tiles((byte[])img.Tiles.Clone(), bank.oams[i].width, bank.oams[i].height, img.FormatColor,
                                       img.FormTile, false);
                    cell_img.StartByte = (int)(tileOffset * 0x20 + bank.data_offset);

                    byte num_pal = bank.oams[i].obj2.index_palette;
                    if (num_pal >= pal.NumberOfPalettes)
                        num_pal = 0;
                    for (int j = 0; j < cell_img.TilesPalette.Length; j++)
                        cell_img.TilesPalette[j] = num_pal;

                    cell = cell_img.Get_Image(pal);
                    //else
                    //{
                    //    tileOffset /= (blockSize / 2);
                    //    int imageWidth = img.Width;
                    //    int imageHeight = img.Height;

                    //    int posX = (int)(tileOffset % imageWidth);
                    //    int posY = (int)(tileOffset / imageWidth);

                    //    if (img.ColorFormat == ColorFormat.colors16)
                    //        posY *= (int)blockSize * 2;
                    //    else
                    //        posY *= (int)blockSize;
                    //    if (posY >= imageHeight)
                    //        posY = posY % imageHeight;

                    //    cells[i] = ((Bitmap)img.Get_Image(pal)).Clone(new Rectangle(posX * zoom, posY * zoom, bank.oams[i].width * zoom, bank.oams[i].height * zoom),
                    //                                                System.Drawing.Imaging.PixelFormat.DontCare);
                    //}

                    #region Flip
                    if (bank.oams[i].obj1.flipX == 1 && bank.oams[i].obj1.flipY == 1)
                        cell.RotateFlip(RotateFlipType.RotateNoneFlipXY);
                    else if (bank.oams[i].obj1.flipX == 1)
                        cell.RotateFlip(RotateFlipType.RotateNoneFlipX);
                    else if (bank.oams[i].obj1.flipY == 1)
                        cell.RotateFlip(RotateFlipType.RotateNoneFlipY);
                    #endregion

                    if (trans)
                        ((Bitmap)cell).MakeTransparent(pal.Palette[num_pal][0]);

                    graphic.DrawImageUnscaled(cell, size.Width / 2 + bank.oams[i].obj1.xOffset * zoom, size.Height / 2 + bank.oams[i].obj0.yOffset * zoom);
                }

                if (draw_cells)
                    graphic.DrawRectangle(Pens.Black, size.Width / 2 + bank.oams[i].obj1.xOffset * zoom, size.Height / 2 + bank.oams[i].obj0.yOffset * zoom,
                        bank.oams[i].width * zoom, bank.oams[i].height * zoom);
                if (i == currOAM)
                    graphic.DrawRectangle(new Pen(Color.Red, 3), size.Width / 2 + bank.oams[i].obj1.xOffset * zoom, size.Height / 2 + bank.oams[i].obj0.yOffset * zoom,
                        bank.oams[i].width * zoom, bank.oams[i].height * zoom);
                if (draw_numbers)
                    graphic.DrawString(bank.oams[i].num_cell.ToString(), SystemFonts.CaptionFont, Brushes.Black, size.Width / 2 + bank.oams[i].obj1.xOffset * zoom,
                        size.Height / 2 + bank.oams[i].obj0.yOffset * zoom);
            }

            return bank_img;
        }
예제 #41
0
파일: CGx.cs 프로젝트: MetLob/tinke
        public override void Read(string file)
        {
            BinaryReader br = new BinaryReader(File.OpenRead(file));

            char[] id = br.ReadChars(4);
            uint unknown1 = br.ReadUInt32();    // Usually is 0x00
            uint unknown2 = br.ReadUInt32();    // Usually is 0x00
            uint unknown3 = br.ReadUInt32();    // Usually is 0x00

            uint format = br.ReadUInt32();
            uint tile_size = br.ReadUInt32();
            uint header_size = br.ReadUInt32();
            uint palette_size = br.ReadUInt32();

            uint palette_offset = br.ReadUInt32();
            uint unknown4 = br.ReadUInt32();
            uint unknown_offset = br.ReadUInt32();
            uint unknown5 = br.ReadUInt32();

            transparency = (br.ReadUInt32() == 0x00 ? false : true);
            transparency = false;

            int width = (int)Math.Pow(2, (double)(br.ReadUInt16() + 3));
            int height = (int)Math.Pow(2, (double)(br.ReadUInt16() + 3));
            uint unknown6 = br.ReadUInt32();

            byte[] data = br.ReadBytes((int)tile_size);

            br.BaseStream.Position = palette_offset;
            Color[][] palette = new Color[1][];
            palette[0] = Actions.BGR555ToColor(br.ReadBytes((int)palette_size));

            br.Close();

            Set_Tiles(data, width, height, (ColorFormat)format, TileForm.Lineal, false);
            pb = new RawPalette(palette, false, ColorFormat.colors256);
        }
예제 #42
0
파일: BIN.cs 프로젝트: MetLob/tinke
        public void Read(string file)
        {
            BinaryReader br = new BinaryReader(File.OpenRead(file));

            // Header
            uint paletaOffset = br.ReadUInt32() * 4;
            uint tileOffset = br.ReadUInt32() * 4;
            uint mapOffset = br.ReadUInt32() * 4;
            ColorFormat depth;
            br.BaseStream.Position = mapOffset;
            if (br.ReadUInt32() == 0x01)
                depth = ColorFormat.colors256;
            else
                depth = ColorFormat.colors16;

            // Palette
            Color[][] colors;
            if (paletaOffset == 0x00) // No palette
            {
                depth = ColorFormat.colors16;
                colors = new Color[defaultPaletteData.Length / 0x20][];

                for (int i = 0; i < colors.Length; i++)
                {
                    Byte[] data = new Byte[0x20];
                    Array.Copy(defaultPaletteData, i * 0x20, data, 0, 0x20);
                    colors[i] = Actions.BGR555ToColor(data);
                }
                goto Tile;
            }

            br.BaseStream.Position = paletaOffset;
            uint pCabeceraSize = br.ReadUInt32() * 4;
            uint pSize = br.ReadUInt32() * 4;
            if (pSize - 0x08 == 0x0200)
                depth = ColorFormat.colors256;
            else if (pSize - 0x08 == 0x20)
                depth = ColorFormat.colors16;

            colors = new Color[depth == ColorFormat.colors16 ? (pSize - 0x08) / 0x20 : 1][];
            uint pal_length = (depth == ColorFormat.colors16) ? 0x20 : pSize - 0x08;
            for (int i = 0; i < colors.Length; i++)
                colors[i] = Actions.BGR555ToColor(br.ReadBytes((int)pal_length));

            // Tile data
            Tile:
            br.BaseStream.Position = tileOffset;
            uint tCabeceraSize = br.ReadUInt32() * 4;
            uint tSize = br.ReadUInt32() * 4;
            byte[] tiles = br.ReadBytes((int)(tSize - 0x08));
            image = new RawImage(tiles, TileForm.Horizontal, depth, 0x40, tiles.Length / 0x40, false, fileName);

            // Map
            if (mapOffset == 0x00)
            {
                hasMap = false;
                goto End;
            }

            hasMap = true;
            br.BaseStream.Position = mapOffset;
            uint mCabeceraSize = br.ReadUInt32() * 4;
            uint[] mSize = new uint[(int)mCabeceraSize / 4];
            for (int i = 0; i < mSize.Length; i++)
                mSize[i] = (br.ReadUInt32() * 4) - mCabeceraSize - 4;

            maps = new MapBase[mSize.Length];
            for (int i = 0; i < maps.Length; i++)
            {
                ushort width = (ushort)(br.ReadUInt16() * 8);
                ushort height = (ushort)(br.ReadUInt16() * 8);

                NTFS[] map;
                if (i != 0)
                    map = new NTFS[((mSize[i] - mSize[i - 1]) - 4) / 2];
                else
                    map = new NTFS[(mSize[i] - 4) / 2];

                for (int j = 0; j < map.Length; j++)
                    map[j] = Actions.MapInfo(br.ReadUInt16());

                maps[i] = new RawMap(map, width, height, false, fileName);
            }

            End:
            br.Close();

            palette = new RawPalette(colors, false, depth, fileName);
        }
예제 #43
0
파일: CGx.cs 프로젝트: MetLob/tinke
        public override void Write(string fileOut, PaletteBase palette)
        {
            if (depth != FormatColor)
                throw new NotImplementedException("The current file doesn't support this depth");

            // Update the struct
            cgx.size_tiles = (uint)Tiles.Length;
            if (depth == Ekona.Images.ColorFormat.colors16)
                cgx.num_tiles = cgx.size_tiles / 0x20;
            else
                cgx.num_tiles = cgx.size_tiles / 0x40;
            cgx.palColors = (uint)palette.NumberOfColors;
            cgx.palOffset = 0x30 + cgx.size_tiles;
            cgx.unknonwnOffset = cgx.palOffset + cgx.palColors * 2;

            BinaryWriter bw = new BinaryWriter(File.OpenWrite(fileOut));

            bw.Write(cgx.type);
            bw.Write(cgx.unknown1);
            bw.Write(cgx.unknown2);
            bw.Write(cgx.unknown3);

            bw.Write(cgx.unknown4);
            bw.Write(cgx.size_tiles);
            bw.Write(cgx.unknown5);
            bw.Write(cgx.num_tiles);

            bw.Write(cgx.palColors);
            bw.Write(cgx.tileOffset);
            bw.Write(cgx.palOffset);
            bw.Write(cgx.unknonwnOffset);

            bw.Write(Tiles);
            for (int i = 0; i < palette.NumberOfPalettes; i++)
                bw.Write(Actions.ColorToBGR555(palette.Palette[i]));

            bw.Flush();
            bw.Close();
        }
예제 #44
0
파일: PluginHost.cs 프로젝트: MetLob/tinke
 public void Set_Palette(PaletteBase palette)
 {
     this.palette = palette;
 }
예제 #45
0
        public SpriteControl(XElement lang, SpriteBase sprite, ImageBase image, PaletteBase palette)
        {
            InitializeComponent();

            this.sprite = sprite;
            this.image = image;
            this.palette = palette;
            this.lang = lang;

            Read_Language(lang);
            Update_Info();
        }
예제 #46
0
 public Image Get_Image(ImageBase image, PaletteBase pal, int index, int width, int height,
     bool grid, bool cell, bool number, bool trans, bool img, int currOAM, int[] draw_index)
 {
     return Actions.Get_Image(banks[index], block_size, image, pal, width, height,
                              grid, cell, number, trans, img, currOAM, 1, draw_index);
 }
예제 #47
0
파일: NBM.cs 프로젝트: MetLob/tinke
        public override void Write(string fileout, PaletteBase palette)
        {
            this.palette = palette;
            BinaryWriter bw = new BinaryWriter(File.OpenWrite(fileout));

            // Header
            bw.Write((ushort)(FormatColor == ColorFormat.colors256 ? 0x01 : 0x00));
            bw.Write((ushort)Width);
            bw.Write((ushort)Height);
            bw.Write((ushort)0x00);

            // Palette section
            bw.Write(Actions.ColorToBGR555(palette.Palette[0]));

            // Tile section
            if (FormatColor == ColorFormat.colors16)
                bw.Write(Ekona.Helper.BitsConverter.BytesToBit4(Tiles));
            else
                bw.Write(Tiles);

            bw.Flush();
            bw.Close();
        }