* Added RawImage, RawPalette and RawMap classes in plugin "Images"

* Fixed problem packing NARC files
* Added first four bytes as extension in unpacked files from some NARC files (ie: pokemon)
* Added pack method to PAC files in SFF
* Added new windows dialog: CallPlugin in menu "Open as->" to force a plugin to load a file.
* Fixed problem of cell priority in NCER files
* Fixed problem opening external files.
* Support some images from dwc.bin / utility.bin pack file (wifi settings)
This commit is contained in:
Benito Palacios 2011-12-30 14:04:02 +00:00
parent a4951ad0b7
commit 7ecfa9ab0c
37 changed files with 2290 additions and 394 deletions

View File

@ -24,6 +24,7 @@ using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
using System.IO;
using PluginInterface;
namespace Images
@ -65,7 +66,7 @@ namespace Images
{
this.pluginHost = pluginHost;
this.id = id;
this.fileName = System.IO.Path.GetFileName(file);
this.fileName = Path.GetFileName(file);
Read(file);
}
@ -113,7 +114,7 @@ namespace Images
public abstract void Write_Tiles(string fileOut);
public void Change_TileDepth(ColorDepth newDepth)
{
{
if (newDepth == depth)
return;
@ -214,10 +215,10 @@ namespace Images
TileOrder tileOrder, bool editable)
{
this.tiles = tiles;
this.width = width;
this.height = height;
this.depth = depth;
this.tileOrder = tileOrder;
Width = width;
Height = height;
this.canEdit = editable;
if (tileOrder == TileOrder.Horizontal)
tilePal = new byte[tiles.Length];
@ -274,7 +275,7 @@ namespace Images
}
public int Height
{
get { return height; }
get { return height * 8; }
set
{
height = value;
@ -286,7 +287,7 @@ namespace Images
}
public int Width
{
get { return width; }
get { return width * 8; }
set
{
width = value;
@ -344,4 +345,97 @@ namespace Images
throw new NotImplementedException();
}
}
public class RawImage : ImageBase
{
// Unknown data - Needed to write the file
byte[] prev_data;
byte[] next_data;
public RawImage(IPluginHost pluginHost, String file, int id,
TileOrder tileOrder, ColorDepth depth, bool editable,
int offset, int size)
: base(pluginHost)
{
this.pluginHost = pluginHost;
this.id = id;
this.fileName = Path.GetFileName(file);
Read(file, tileOrder, depth, editable, offset, size);
}
public override void Read(string fileIn)
{
Read(fileIn, TileOrder.Horizontal, ColorDepth.Depth4Bit, false, 0, -1);
}
public void Read(string fileIn, TileOrder tileOrder, ColorDepth depth, bool editable,
int offset, int fileSize)
{
BinaryReader br = new BinaryReader(File.OpenRead(fileIn));
prev_data = br.ReadBytes(offset); // Save the previous data to write them then.
if (fileSize <= 0)
fileSize = (int)br.BaseStream.Length;
// Read the tiles
Byte[][] tiles = new byte[0][];
if (tileOrder == TileOrder.NoTiled)
{
tiles = new byte[1][];
if (depth == ColorDepth.Depth4Bit)
tiles[0] = pluginHost.Bit8ToBit4(br.ReadBytes(fileSize));
else if (depth == ColorDepth.Depth8Bit)
tiles[0] = br.ReadBytes(fileSize);
else if (depth == ColorDepth.Depth32Bit) // 1 bpp
tiles[0] = pluginHost.BytesToBits(br.ReadBytes(fileSize));
}
else if (tileOrder == TileOrder.Horizontal)
{
if (depth == ColorDepth.Depth4Bit)
{
tiles = new byte[fileSize / 0x20][];
for (int i = 0; i < tiles.Length; i++)
tiles[i] = pluginHost.Bit8ToBit4(br.ReadBytes(0x20));
}
else if (depth == ColorDepth.Depth8Bit)
{
tiles = new byte[fileSize / 0x40][];
for (int i = 0; i < tiles.Length; i++)
tiles[i] = br.ReadBytes(0x40);
}
else if (depth == ColorDepth.Depth32Bit) // 1 bpp
{
tiles = new byte[fileSize / 0x08][];
for (int i = 0; i < tiles.Length; i++)
tiles[i] = pluginHost.BytesToBits(br.ReadBytes(0x08));
}
}
next_data = br.ReadBytes((int)(br.BaseStream.Length - fileSize)); // Save the next data to write them then
#region Calculate the image size
int width = (fileSize < 0x100 ? fileSize : 0x0100);
int height = fileSize / width;
if (height == 0)
height = 1;
if (fileSize == 512)
width = height = 32;
#endregion
br.Close();
Set_Tiles(tiles, width, height, depth, tileOrder, editable);
}
public override void Write_Tiles(string fileOut)
{
// TODO: Write raw images
throw new NotImplementedException();
}
}
}

View File

@ -112,15 +112,17 @@
<Compile Include="ImageControl.designer.cs">
<DependentUpon>ImageControl.cs</DependentUpon>
</Compile>
<Compile Include="iNCER.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="iNCER.designer.cs">
<DependentUpon>iNCER.cs</DependentUpon>
</Compile>
<Compile Include="MapBase.cs" />
<Compile Include="nbfc.cs" />
<Compile Include="nbfp.cs" />
<Compile Include="nbfs.cs" />
<Compile Include="NCCG.cs" />
<Compile Include="NCCL.cs" />
<Compile Include="NCE.cs" />
<Compile Include="NCSC.cs" />
<Compile Include="ntfp.cs" />
<Compile Include="ntft.cs" />
<Compile Include="PaletteBase.cs" />
<Compile Include="PaletteControl.cs">
<SubType>UserControl</SubType>
@ -140,6 +142,9 @@
<EmbeddedResource Include="ImageControl.resx">
<DependentUpon>ImageControl.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="iNCER.resx">
<DependentUpon>iNCER.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="PaletteControl.resx">
<DependentUpon>PaletteControl.cs</DependentUpon>
</EmbeddedResource>

View File

@ -35,6 +35,7 @@ namespace Images
PaletteBase palette;
ImageBase image;
MapBase map;
NCER ncer; // TEMPORALY
public void Initialize(IPluginHost pluginHost)
{
@ -56,6 +57,8 @@ namespace Images
return Format.Palette;
if (name.EndsWith(".NBFP"))
return Format.Palette;
if (name.EndsWith(".NCL.L") && magic[0] != 0x10)
return Format.Palette;
// Tiles
if (ext == "NCCG")
@ -64,13 +67,21 @@ namespace Images
return Format.Tile;
if (name.EndsWith(".NBFC"))
return Format.Tile;
if (name.EndsWith(".NCG.L") && magic[0] != 0x10)
return Format.Tile;
// Map
if (ext == "NCSC")
return Format.Map;
if (name.EndsWith(".NBFS"))
return Format.Map;
if (name.EndsWith(".NSC.L") && magic[0] != 0x10)
return Format.Map;
// Cells
if (name.EndsWith(".NCE.L") && magic[0] != 0x10)
return Format.Cell;
return Format.Unknown;
}
@ -87,6 +98,10 @@ namespace Images
if (format == Format.Map && palette.Loaded && image.Loaded)
return new ImageControl(pluginHost, image, palette, map);
// TEMPORALY
if (format == Format.Cell && palette.Loaded && image.Loaded)
return new iNCER(ncer, image.Get_NCGR(), palette.Get_NCLR(), pluginHost);
return new Control();
}
public void Read(string file, int id)
@ -113,12 +128,17 @@ namespace Images
}
else if (file.ToUpper().EndsWith(".NTFP") || file.ToUpper().EndsWith(".PLT"))
{
palette = new ntfp(pluginHost, file, id);
palette = new RawPalette(pluginHost, file, id, false, 0, -1);
return Format.Palette;
}
else if (file.ToUpper().EndsWith(".NBFP"))
{
palette = new nbfp(pluginHost, file, id);
palette = new RawPalette(pluginHost, file, id, false, 0, -1);
return Format.Palette;
}
else if (file.ToUpper().EndsWith(".NCL.L") && ext[0] != '\x10')
{
palette = new RawPalette(pluginHost, file, id, false, 0, -1);
return Format.Palette;
}
@ -128,17 +148,28 @@ namespace Images
image = new NCCG(pluginHost, file, id);
return Format.Tile;
}
else if (file.ToUpper().EndsWith(".NTFT") || file.ToUpper().EndsWith(".CHAR"))
else if (file.ToUpper().EndsWith(".NTFT"))
{
image = new ntft(pluginHost, file, id);
image = new RawImage(pluginHost, file, id, TileOrder.NoTiled, ColorDepth.Depth8Bit, false,
0, -1);
if (palette.Depth == ColorDepth.Depth4Bit)
image.Depth = ColorDepth.Depth4Bit;
return Format.Tile;
}
else if (file.ToUpper().EndsWith(".NBFC"))
else if (file.ToUpper().EndsWith(".NBFC") || file.ToUpper().EndsWith(".CHAR"))
{
image = new nbfc(pluginHost, file, id);
image = new RawImage(pluginHost, file, id, TileOrder.Horizontal, ColorDepth.Depth8Bit, false,
0, -1);
if (palette.Depth == ColorDepth.Depth4Bit)
image.Depth = ColorDepth.Depth4Bit;
return Format.Tile;
}
else if (file.ToUpper().EndsWith(".NCG.L") && ext[0] != '\x10')
{
image = new RawImage(pluginHost, file, id, TileOrder.Horizontal, ColorDepth.Depth8Bit, false,
0, -1);
if (palette.Depth == ColorDepth.Depth4Bit)
image.Depth = ColorDepth.Depth4Bit;
@ -158,7 +189,8 @@ namespace Images
}
else if (file.ToUpper().EndsWith(".NBFS"))
{
map = new nbfs(pluginHost, file, id);
map = new RawMap(pluginHost, file, id,
0, -1, false);
if (map.Width != 0)
image.Width = map.Width;
if (map.Height != 0)
@ -166,6 +198,23 @@ namespace Images
return Format.Map;
}
else if (file.ToUpper().EndsWith(".NSC.L") && ext[0] != '\x10')
{
map = new RawMap(pluginHost, file, id, 0, -1, false);
if (map.Width != 0)
image.Width = map.Width;
if (map.Height != 0)
image.Height = map.Height;
return Format.Map;
}
// Cell
if (file.ToUpper().EndsWith(".NCE.L") && ext[0] != '\x10')
{
ncer = NCE.Read(file, pluginHost);
return Format.Cell;
}
return Format.Unknown;
}

View File

@ -21,6 +21,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using PluginInterface;
using System.Drawing;
@ -183,4 +184,56 @@ namespace Images
#endregion
}
public class RawMap : MapBase
{
// Unknown data
byte[] prev_data;
byte[] next_data;
public RawMap(IPluginHost pluginHost, string file, int id,
int offset, int size, bool editable)
: base(pluginHost)
{
this.pluginHost = pluginHost;
this.id = id;
this.fileName = System.IO.Path.GetFileName(file);
Read(file, offset, size, editable);
}
public override void Read(string fileIn)
{
Read(fileIn, 0, -1, false);
}
public void Read(string fileIn, int offset, int size, bool editable)
{
BinaryReader br = new BinaryReader(File.OpenRead(fileIn));
prev_data = br.ReadBytes(offset);
int file_size;
if (size <= 0)
file_size = (int)br.BaseStream.Length;
else
file_size = size;
NTFS[] map = new NTFS[file_size / 2];
for (int i = 0; i < map.Length; i++)
map[i] = pluginHost.MapInfo(br.ReadUInt16());
next_data = br.ReadBytes((int)(br.BaseStream.Length - file_size));
int width = (map.Length * 8 >= 0x100 ? 0x100 : map.Length * 8);
int height = (map.Length / (width / 8)) * 8;
br.Close();
Set_Map(map, editable, width, height);
}
public override void Write_Map(string fileOut)
{
// TODO: write raw map
throw new NotImplementedException();
}
}
}

View File

@ -70,7 +70,7 @@ namespace Images
br.Close();
Set_Tiles(tiles, (int)nccg.charS.width, (int)nccg.charS.height,
Set_Tiles(tiles, (int)nccg.charS.width * 8, (int)nccg.charS.height * 8,
(nccg.charS.depth == 0 ? ColorDepth.Depth4Bit : ColorDepth.Depth8Bit),
TileOrder.Horizontal, false);
}

View File

@ -0,0 +1,64 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Drawing;
using PluginInterface;
namespace Images
{
public static class NCE
{
public static NCER Read(string file, IPluginHost pluginHost)
{
BinaryReader br = new BinaryReader(File.OpenRead(file));
NCER nce = new NCER();
br.BaseStream.Position += 4;
uint num_banks = br.ReadUInt32() / 0x08;
br.BaseStream.Position = 0;
nce.cebk.block_size = 0;
nce.cebk.nBanks = (ushort)num_banks;
nce.labl.names = new string[nce.cebk.nBanks];
nce.cebk.banks = new Bank[num_banks];
for (int i = 0; i < num_banks; i++)
{
nce.cebk.banks[i] = new Bank();
nce.cebk.banks[i].nCells = br.ReadUInt16();
nce.cebk.banks[i].unknown1 = br.ReadUInt16();
nce.cebk.banks[i].cell_offset = br.ReadUInt32();
long nextBank_pos = br.BaseStream.Position;
br.BaseStream.Position = nce.cebk.banks[i].cell_offset;
nce.cebk.banks[i].cells = new Cell[nce.cebk.banks[i].nCells];
for (int c = 0; c < nce.cebk.banks[i].nCells; c++)
{
nce.cebk.banks[i].cells[c] = new Cell();
nce.cebk.banks[i].cells[c].obj0.yOffset = br.ReadByte();
nce.cebk.banks[i].cells[c].obj0.shape = (byte)(br.ReadByte() >> 6);
nce.cebk.banks[i].cells[c].obj1.xOffset = br.ReadByte();
nce.cebk.banks[i].cells[c].obj1.size = (byte)(br.ReadByte() >> 6);
nce.cebk.banks[i].cells[c].obj2.tileOffset = br.ReadByte();
nce.cebk.banks[i].cells[c].obj2.index_palette = (byte)(br.ReadByte() >> 4);
Size size = pluginHost.Size_NCER(
nce.cebk.banks[i].cells[c].obj0.shape,
nce.cebk.banks[i].cells[c].obj1.size);
nce.cebk.banks[i].cells[c].height = (ushort)size.Height;
nce.cebk.banks[i].cells[c].width = (ushort)size.Width;
}
br.BaseStream.Position = nextBank_pos;
nce.labl.names[i] = "Bank " + i.ToString();
}
br.Close();
return nce;
}
}
}

View File

@ -65,7 +65,7 @@ namespace Images
Read(fileIn);
}
public abstract void Read(string fileInt);
public abstract void Read(string fileIn);
public abstract void Write_Palette(string fileOut);
public NCLR Get_NCLR()
@ -231,4 +231,92 @@ namespace Images
}
#endregion
}
public class RawPalette : PaletteBase
{
// Unknown data
byte[] prev_data;
byte[] next_data;
public RawPalette(IPluginHost pluginHost, string file, int id,
bool editable, ColorDepth depth, int offset, int size)
: base(pluginHost)
{
this.pluginHost = pluginHost;
this.fileName = System.IO.Path.GetFileName(file);
this.id = id;
Read(file, editable, depth, offset, size);
}
public RawPalette(IPluginHost pluginHost, string file, int id,
bool editable, int offset, int size) : base(pluginHost)
{
this.pluginHost = pluginHost;
this.fileName = System.IO.Path.GetFileName(file);
this.id = id;
Read(file, editable, offset, size);
}
public override void Read(string fileIn)
{
Read(fileIn, false, 0, -1);
}
public void Read(string fileIn, bool editable, ColorDepth depth, int offset, int fileSize)
{
BinaryReader br = new BinaryReader(File.OpenRead(fileIn));
prev_data = br.ReadBytes(offset);
if (fileSize <= 0)
fileSize = (int)br.BaseStream.Length;
// Color data
Color[][] palette = new Color[0][];
if (depth == ColorDepth.Depth8Bit)
{
palette = new Color[1][];
palette[0] = pluginHost.BGR555ToColor(br.ReadBytes(fileSize));
}
else if (depth == ColorDepth.Depth4Bit)
{
palette = new Color[fileSize / 0x20][];
for (int i = 0; i < palette.Length; i++)
palette[i] = pluginHost.BGR555ToColor(br.ReadBytes(0x20));
}
next_data = br.ReadBytes((int)(br.BaseStream.Length - fileSize));
br.Close();
Set_Palette(palette, depth, editable);
}
public void Read(string fileIn, bool editable, int offset, int fileSize)
{
BinaryReader br = new BinaryReader(File.OpenRead(fileIn));
prev_data = br.ReadBytes(offset);
if (fileSize <= 0)
fileSize = (int)br.BaseStream.Length;
// Color data
Color[][] palette = new Color[1][];
palette[0] = pluginHost.BGR555ToColor(br.ReadBytes(fileSize));
if (palette[0].Length < 0x100)
palette = pluginHost.Palette_8bppTo4bpp(palette);
next_data = br.ReadBytes((int)(br.BaseStream.Length - fileSize));
br.Close();
Set_Palette(palette, editable);
}
public override void Write_Palette(string fileOut)
{
// TODO: write raw palette.
throw new NotImplementedException();
}
}
}

View File

@ -57,7 +57,7 @@
//
// numericPalette
//
this.numericPalette.Location = new System.Drawing.Point(94, 182);
this.numericPalette.Location = new System.Drawing.Point(101, 182);
this.numericPalette.Name = "numericPalette";
this.numericPalette.Size = new System.Drawing.Size(37, 20);
this.numericPalette.TabIndex = 2;
@ -139,7 +139,7 @@
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(135, 184);
this.label3.Location = new System.Drawing.Point(142, 184);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(26, 13);
this.label3.TabIndex = 9;

View File

@ -28,5 +28,5 @@ using System.Runtime.InteropServices;
//
// You can specify all the values or you can use the default the Revision and
// Build Numbers by using the '*' as shown below:
[assembly: AssemblyVersion("2.0.0.0")]
[assembly: AssemblyFileVersionAttribute("2.0.0.0")]
[assembly: AssemblyVersion("2.1.0.0")]
[assembly: AssemblyFileVersionAttribute("2.1.0.0")]

View File

@ -0,0 +1,276 @@
/*
* Copyright (C) 2011 pleoNeX
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* By: pleoNeX
*
*/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using PluginInterface;
namespace Images
{
public partial class iNCER : UserControl
{
NCER ncer;
NCGR tile;
NCLR paleta;
IPluginHost pluginHost;
bool selectColor;
public iNCER()
{
InitializeComponent();
LeerIdioma();
}
public iNCER(NCER ncer, NCGR tile, NCLR paleta, IPluginHost pluginHost)
{
InitializeComponent();
LeerIdioma();
this.ncer = ncer;
this.tile = tile;
this.paleta = paleta;
this.pluginHost = pluginHost;
for (ushort i = 0; i < ncer.cebk.nBanks; i++)
comboCelda.Items.Add(ncer.labl.names[i]);
comboCelda.SelectedIndex = 0;
ActualizarImagen();
if (new String(paleta.header.id) != "NCLR" && new String(paleta.header.id) != "RLCN") // Not NCLR file
btnSetTrans.Enabled = false;
}
private void LeerIdioma()
{
try
{
//System.Xml.Linq.XElement xml = Tools.Helper.GetTranslation("NCER");
//label1.Text = xml.Element("S01").Value;
//btnTodos.Text = xml.Element("S02").Value;
//btnSave.Text = xml.Element("S03").Value;
//checkEntorno.Text = xml.Element("S0F").Value;
//checkCelda.Text = xml.Element("S10").Value;
//checkImagen.Text = xml.Element("S11").Value;
//checkTransparencia.Text = xml.Element("S12").Value;
//checkNumber.Text = xml.Element("S13").Value;
//label2.Text = xml.Element("S15").Value;
//lblZoom.Text = xml.Element("S16").Value;
//btnBgd.Text = xml.Element("S17").Value;
//btnBgdTrans.Text = xml.Element("S18").Value;
//btnImport.Text = xml.Element("S24").Value;
//btnSetTrans.Text = xml.Element("S25").Value;
}
catch { throw new Exception("There was an error reading the XML language file."); }
}
private void comboCelda_SelectedIndexChanged(object sender, EventArgs e)
{
ActualizarImagen();
}
private void check_CheckedChanged(object sender, EventArgs e)
{
ActualizarImagen();
}
private void btnSave_Click(object sender, EventArgs e)
{
SaveFileDialog o = new SaveFileDialog();
o.AddExtension = true;
o.CheckPathExists = true;
o.DefaultExt = ".bmp";
o.Filter = "BitMaP (*.bmp)|*.bmp|" +
"Portable Network Graphic (*.png)|*.png|" +
"JPEG (*.jpg)|*.jpg;*.jpeg|" +
"Tagged Image File Format (*.tiff)|*.tiff;*.tif|" +
"Graphic Interchange Format (*.gif)|*.gif|" +
"Icon (*.ico)|*.ico;*.icon";
o.OverwritePrompt = true;
if (o.ShowDialog() == DialogResult.OK)
{
if (o.FilterIndex == 1)
ActualizarFullImagen().Save(o.FileName, System.Drawing.Imaging.ImageFormat.Bmp);
else if (o.FilterIndex == 2)
ActualizarFullImagen().Save(o.FileName, System.Drawing.Imaging.ImageFormat.Png);
else if (o.FilterIndex == 3)
ActualizarFullImagen().Save(o.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
else if (o.FilterIndex == 4)
ActualizarFullImagen().Save(o.FileName, System.Drawing.Imaging.ImageFormat.Tiff);
else if (o.FilterIndex == 5)
ActualizarFullImagen().Save(o.FileName, System.Drawing.Imaging.ImageFormat.Gif);
else if (o.FilterIndex == 6)
ActualizarFullImagen().Save(o.FileName, System.Drawing.Imaging.ImageFormat.Icon);
}
}
private void btnTodos_Click(object sender, EventArgs e)
{
Form ven = new Form();
int xMax = 4 * 260;
int x = 0;
int y = 15;
for (int i = 0; i < ncer.cebk.nBanks; i++)
{
PictureBox pic = new PictureBox();
pic.Size = new Size(256, 256);
pic.Location = new Point(x, y);
pic.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
pic.Image = pluginHost.Bitmap_NCER(ncer.cebk.banks[i], ncer.cebk.block_size, tile, paleta,
checkEntorno.Checked, checkCelda.Checked, checkNumber.Checked,
checkTransparencia.Checked, checkImagen.Checked);
Label lbl = new Label();
lbl.Text = ncer.labl.names[i];
lbl.Location = new Point(x, y - 15);
ven.Controls.Add(pic);
ven.Controls.Add(lbl);
x += 260;
if (x >= xMax)
{
x = 0;
y += 275;
}
}
//ven.Text = Tools.Helper.GetTranslation("NCER", "S14");
ven.BackColor = SystemColors.GradientInactiveCaption;
ven.AutoScroll = true;
ven.AutoSize = true;
ven.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
ven.ShowIcon = false;
ven.MaximizeBox = false;
ven.MaximumSize = new System.Drawing.Size(1024, 700);
ven.Location = new Point(20, 20);
ven.Show();
}
private void imgBox_DoubleClick(object sender, EventArgs e)
{
Form ventana = new Form();
PictureBox pic = new PictureBox();
pic.Location = new Point(0, 0);
pic.SizeMode = PictureBoxSizeMode.AutoSize;
pic.BackColor = pictureBgd.BackColor;
ventana.AutoSize = true;
ventana.BackColor = SystemColors.GradientInactiveCaption;
ventana.AutoScroll = true;
ventana.MaximumSize = new Size(1024, 700);
ventana.ShowIcon = false;
//ventana.Text = Tools.Helper.GetTranslation("NCER", "S14");
ventana.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
ventana.MaximizeBox = false;
pic.Image = ActualizarFullImagen();
ventana.Controls.Add(pic);
ventana.Show();
}
private void btnBgdTrans_Click(object sender, EventArgs e)
{
btnBgdTrans.Enabled = false;
pictureBgd.BackColor = Color.Transparent;
imgBox.BackColor = Color.Transparent;
}
private void btnBgd_Click(object sender, EventArgs e)
{
ColorDialog o = new ColorDialog();
o.AllowFullOpen = true;
o.AnyColor = true;
if (o.ShowDialog() == DialogResult.OK)
{
pictureBgd.BackColor = o.Color;
imgBox.BackColor = o.Color;
btnBgdTrans.Enabled = true;
}
}
private void trackZoom_Scroll(object sender, EventArgs e)
{
ActualizarImagen();
}
private Image ActualizarImagen()
{
imgBox.Image = pluginHost.Bitmap_NCER(ncer.cebk.banks[comboCelda.SelectedIndex], ncer.cebk.block_size,
tile, paleta, checkEntorno.Checked, checkCelda.Checked, checkNumber.Checked, checkTransparencia.Checked,
checkImagen.Checked, trackZoom.Value);
return imgBox.Image;
}
private Image ActualizarFullImagen()
{
// Devolvemos la imagen a su estado inicial
Image original = pluginHost.Bitmap_NCER(ncer.cebk.banks[comboCelda.SelectedIndex], ncer.cebk.block_size,
tile, paleta, checkEntorno.Checked, checkCelda.Checked, checkNumber.Checked, checkTransparencia.Checked,
checkImagen.Checked, 512, 512, trackZoom.Value);
return original;
}
private void btnImport_Click(object sender, EventArgs e)
{
OpenFileDialog o = new OpenFileDialog();
o.CheckFileExists = true;
o.DefaultExt = "bmp";
o.Filter = "Supported images |*.png;*.bmp;*.jpg;*.jpeg;*.tif;*.tiff;*.gif;*.ico;*.icon|" +
"BitMaP (*.bmp)|*.bmp|" +
"Portable Network Graphic (*.png)|*.png|" +
"JPEG (*.jpg)|*.jpg;*.jpeg|" +
"Tagged Image File Format (*.tiff)|*.tiff;*.tif|" +
"Graphic Interchange Format (*.gif)|*.gif|" +
"Icon (*.ico)|*.ico;*.icon";
o.Multiselect = false;
if (o.ShowDialog() == DialogResult.OK)
{
}
}
private void btnSetTrans_Click(object sender, EventArgs e)
{
}
private void imgBox_MouseClick(object sender, MouseEventArgs e)
{
if (selectColor && imgBox.Image is Image)
{
Color color = ((Bitmap)imgBox.Image).GetPixel(e.X, e.Y);
Change_TransparencyColor(color);
}
}
private void Change_TransparencyColor(Color color)
{
}
private void Add_TransparencyColor()
{
}
}
}

341
Plugins/Images/Images/iNCER.designer.cs generated Normal file
View File

@ -0,0 +1,341 @@
namespace Images
{
partial class iNCER
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.imgBox = new System.Windows.Forms.PictureBox();
this.label1 = new System.Windows.Forms.Label();
this.comboCelda = new System.Windows.Forms.ComboBox();
this.btnTodos = new System.Windows.Forms.Button();
this.btnSave = new System.Windows.Forms.Button();
this.checkEntorno = new System.Windows.Forms.CheckBox();
this.checkNumber = new System.Windows.Forms.CheckBox();
this.checkCelda = new System.Windows.Forms.CheckBox();
this.checkTransparencia = new System.Windows.Forms.CheckBox();
this.checkImagen = new System.Windows.Forms.CheckBox();
this.label2 = new System.Windows.Forms.Label();
this.btnBgdTrans = new System.Windows.Forms.Button();
this.pictureBgd = new System.Windows.Forms.PictureBox();
this.btnBgd = new System.Windows.Forms.Button();
this.label8 = new System.Windows.Forms.Label();
this.label7 = new System.Windows.Forms.Label();
this.lblZoom = new System.Windows.Forms.Label();
this.trackZoom = new System.Windows.Forms.TrackBar();
this.btnImport = new System.Windows.Forms.Button();
this.btnSetTrans = new System.Windows.Forms.Button();
this.panel1 = new System.Windows.Forms.Panel();
((System.ComponentModel.ISupportInitialize)(this.imgBox)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBgd)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.trackZoom)).BeginInit();
this.panel1.SuspendLayout();
this.SuspendLayout();
//
// imgBox
//
this.imgBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.imgBox.Location = new System.Drawing.Point(0, 0);
this.imgBox.Name = "imgBox";
this.imgBox.Size = new System.Drawing.Size(256, 256);
this.imgBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.imgBox.TabIndex = 0;
this.imgBox.TabStop = false;
this.imgBox.DoubleClick += new System.EventHandler(this.imgBox_DoubleClick);
this.imgBox.MouseClick += new System.Windows.Forms.MouseEventHandler(this.imgBox_MouseClick);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(3, 266);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(26, 13);
this.label1.TabIndex = 2;
this.label1.Text = "S01";
//
// comboCelda
//
this.comboCelda.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboCelda.FormattingEnabled = true;
this.comboCelda.Location = new System.Drawing.Point(73, 263);
this.comboCelda.Name = "comboCelda";
this.comboCelda.Size = new System.Drawing.Size(183, 21);
this.comboCelda.TabIndex = 3;
this.comboCelda.SelectedIndexChanged += new System.EventHandler(this.comboCelda_SelectedIndexChanged);
//
// btnTodos
//
this.btnTodos.Location = new System.Drawing.Point(73, 290);
this.btnTodos.Name = "btnTodos";
this.btnTodos.Size = new System.Drawing.Size(183, 23);
this.btnTodos.TabIndex = 4;
this.btnTodos.Text = "S02";
this.btnTodos.UseVisualStyleBackColor = true;
this.btnTodos.Click += new System.EventHandler(this.btnTodos_Click);
//
// btnSave
//
this.btnSave.Image = global::Images.Properties.Resources.picture_save;
this.btnSave.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.btnSave.Location = new System.Drawing.Point(6, 483);
this.btnSave.Name = "btnSave";
this.btnSave.Size = new System.Drawing.Size(86, 26);
this.btnSave.TabIndex = 5;
this.btnSave.Text = "S03";
this.btnSave.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
this.btnSave.UseVisualStyleBackColor = true;
this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
//
// checkEntorno
//
this.checkEntorno.AutoSize = true;
this.checkEntorno.Location = new System.Drawing.Point(265, 259);
this.checkEntorno.Name = "checkEntorno";
this.checkEntorno.Size = new System.Drawing.Size(45, 17);
this.checkEntorno.TabIndex = 6;
this.checkEntorno.Text = "S0F";
this.checkEntorno.UseVisualStyleBackColor = true;
this.checkEntorno.CheckedChanged += new System.EventHandler(this.check_CheckedChanged);
//
// checkNumber
//
this.checkNumber.AutoSize = true;
this.checkNumber.Location = new System.Drawing.Point(405, 282);
this.checkNumber.Name = "checkNumber";
this.checkNumber.Size = new System.Drawing.Size(45, 17);
this.checkNumber.TabIndex = 7;
this.checkNumber.Text = "S13";
this.checkNumber.UseVisualStyleBackColor = true;
this.checkNumber.CheckedChanged += new System.EventHandler(this.check_CheckedChanged);
//
// checkCelda
//
this.checkCelda.AutoSize = true;
this.checkCelda.Location = new System.Drawing.Point(265, 282);
this.checkCelda.Name = "checkCelda";
this.checkCelda.Size = new System.Drawing.Size(45, 17);
this.checkCelda.TabIndex = 8;
this.checkCelda.Text = "S10";
this.checkCelda.UseVisualStyleBackColor = true;
this.checkCelda.CheckedChanged += new System.EventHandler(this.check_CheckedChanged);
//
// checkTransparencia
//
this.checkTransparencia.AutoSize = true;
this.checkTransparencia.Location = new System.Drawing.Point(405, 259);
this.checkTransparencia.Name = "checkTransparencia";
this.checkTransparencia.Size = new System.Drawing.Size(45, 17);
this.checkTransparencia.TabIndex = 9;
this.checkTransparencia.Text = "S12";
this.checkTransparencia.UseVisualStyleBackColor = true;
this.checkTransparencia.CheckedChanged += new System.EventHandler(this.check_CheckedChanged);
//
// checkImagen
//
this.checkImagen.AutoSize = true;
this.checkImagen.Checked = true;
this.checkImagen.CheckState = System.Windows.Forms.CheckState.Checked;
this.checkImagen.Location = new System.Drawing.Point(265, 306);
this.checkImagen.Name = "checkImagen";
this.checkImagen.Size = new System.Drawing.Size(45, 17);
this.checkImagen.TabIndex = 10;
this.checkImagen.Text = "S11";
this.checkImagen.UseVisualStyleBackColor = true;
this.checkImagen.CheckedChanged += new System.EventHandler(this.check_CheckedChanged);
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(98, 477);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(26, 13);
this.label2.TabIndex = 11;
this.label2.Text = "S15";
//
// btnBgdTrans
//
this.btnBgdTrans.Enabled = false;
this.btnBgdTrans.Location = new System.Drawing.Point(176, 321);
this.btnBgdTrans.Name = "btnBgdTrans";
this.btnBgdTrans.Size = new System.Drawing.Size(80, 35);
this.btnBgdTrans.TabIndex = 29;
this.btnBgdTrans.Text = "S18";
this.btnBgdTrans.UseVisualStyleBackColor = true;
this.btnBgdTrans.Click += new System.EventHandler(this.btnBgdTrans_Click);
//
// pictureBgd
//
this.pictureBgd.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.pictureBgd.Location = new System.Drawing.Point(135, 322);
this.pictureBgd.Name = "pictureBgd";
this.pictureBgd.Size = new System.Drawing.Size(35, 35);
this.pictureBgd.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.pictureBgd.TabIndex = 28;
this.pictureBgd.TabStop = false;
//
// btnBgd
//
this.btnBgd.Location = new System.Drawing.Point(6, 322);
this.btnBgd.Name = "btnBgd";
this.btnBgd.Size = new System.Drawing.Size(118, 35);
this.btnBgd.TabIndex = 27;
this.btnBgd.Text = "S17";
this.btnBgd.UseVisualStyleBackColor = true;
this.btnBgd.Click += new System.EventHandler(this.btnBgd_Click);
//
// label8
//
this.label8.AutoSize = true;
this.label8.Location = new System.Drawing.Point(466, 342);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(19, 13);
this.label8.TabIndex = 26;
this.label8.Text = "20";
//
// label7
//
this.label7.AutoSize = true;
this.label7.Location = new System.Drawing.Point(262, 343);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(13, 13);
this.label7.TabIndex = 25;
this.label7.Text = "1";
//
// lblZoom
//
this.lblZoom.AutoSize = true;
this.lblZoom.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblZoom.Location = new System.Drawing.Point(348, 331);
this.lblZoom.Name = "lblZoom";
this.lblZoom.Size = new System.Drawing.Size(33, 17);
this.lblZoom.TabIndex = 24;
this.lblZoom.Text = "S16";
//
// trackZoom
//
this.trackZoom.BackColor = System.Drawing.SystemColors.GradientInactiveCaption;
this.trackZoom.LargeChange = 2;
this.trackZoom.Location = new System.Drawing.Point(265, 358);
this.trackZoom.Maximum = 20;
this.trackZoom.Minimum = 1;
this.trackZoom.Name = "trackZoom";
this.trackZoom.Size = new System.Drawing.Size(226, 45);
this.trackZoom.TabIndex = 23;
this.trackZoom.Value = 1;
this.trackZoom.Scroll += new System.EventHandler(this.trackZoom_Scroll);
//
// btnImport
//
this.btnImport.Location = new System.Drawing.Point(416, 463);
this.btnImport.Name = "btnImport";
this.btnImport.Size = new System.Drawing.Size(90, 40);
this.btnImport.TabIndex = 30;
this.btnImport.Text = "S24";
this.btnImport.UseVisualStyleBackColor = true;
this.btnImport.Click += new System.EventHandler(this.btnImport_Click);
//
// btnSetTrans
//
this.btnSetTrans.Location = new System.Drawing.Point(6, 371);
this.btnSetTrans.Name = "btnSetTrans";
this.btnSetTrans.Size = new System.Drawing.Size(208, 32);
this.btnSetTrans.TabIndex = 31;
this.btnSetTrans.Text = "S25";
this.btnSetTrans.UseVisualStyleBackColor = true;
this.btnSetTrans.Click += new System.EventHandler(this.btnSetTrans_Click);
//
// panel1
//
this.panel1.AutoScroll = true;
this.panel1.Controls.Add(this.imgBox);
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(258, 258);
this.panel1.TabIndex = 32;
//
// iNCER
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.Transparent;
this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.Controls.Add(this.panel1);
this.Controls.Add(this.btnSetTrans);
this.Controls.Add(this.btnImport);
this.Controls.Add(this.btnBgdTrans);
this.Controls.Add(this.pictureBgd);
this.Controls.Add(this.btnBgd);
this.Controls.Add(this.label8);
this.Controls.Add(this.label7);
this.Controls.Add(this.lblZoom);
this.Controls.Add(this.trackZoom);
this.Controls.Add(this.label2);
this.Controls.Add(this.checkImagen);
this.Controls.Add(this.checkTransparencia);
this.Controls.Add(this.checkCelda);
this.Controls.Add(this.checkNumber);
this.Controls.Add(this.checkEntorno);
this.Controls.Add(this.btnSave);
this.Controls.Add(this.btnTodos);
this.Controls.Add(this.comboCelda);
this.Controls.Add(this.label1);
this.Name = "iNCER";
this.Size = new System.Drawing.Size(512, 512);
((System.ComponentModel.ISupportInitialize)(this.imgBox)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBgd)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.trackZoom)).EndInit();
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.PictureBox imgBox;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.ComboBox comboCelda;
private System.Windows.Forms.Button btnTodos;
private System.Windows.Forms.Button btnSave;
private System.Windows.Forms.CheckBox checkEntorno;
private System.Windows.Forms.CheckBox checkNumber;
private System.Windows.Forms.CheckBox checkCelda;
private System.Windows.Forms.CheckBox checkTransparencia;
private System.Windows.Forms.CheckBox checkImagen;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Button btnBgdTrans;
private System.Windows.Forms.PictureBox pictureBgd;
private System.Windows.Forms.Button btnBgd;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.Label lblZoom;
private System.Windows.Forms.TrackBar trackZoom;
private System.Windows.Forms.Button btnImport;
private System.Windows.Forms.Button btnSetTrans;
private System.Windows.Forms.Panel panel1;
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -1,57 +0,0 @@
/*
* Copyright (C) 2011 pleoNeX
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* By: pleoNeX
*
*/
using System;
using System.IO;
using System.Drawing;
using PluginInterface;
namespace Images
{
public class nbfc : ImageBase
{
public nbfc(IPluginHost pluginHost, string file, int id) : base(pluginHost, file, id) { }
public override void Read(string fileIn)
{
BinaryReader br = new BinaryReader(File.OpenRead(fileIn));
int fileSize = (int)br.BaseStream.Length;
Byte[][] tiles = new byte[fileSize / 0x40][];
for (int i = 0; i < tiles.Length; i++)
tiles[i] = br.ReadBytes(0x40);
int width = (tiles.Length < 0x20 ? 0x04 : 0x20);
int height = tiles.Length / width;
if (height == 0)
height = 8;
if (fileSize == 0x200)
width = height = 0x04;
br.Close();
Set_Tiles(tiles, width, height, System.Windows.Forms.ColorDepth.Depth8Bit, TileOrder.Horizontal, false);
}
public override void Write_Tiles(string fileOut)
{
throw new NotImplementedException();
}
}
}

View File

@ -1,49 +0,0 @@
/*
* Copyright (C) 2011 pleoNeX
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* By: pleoNeX
*
*/
using System;
using System.IO;
using System.Drawing;
using PluginInterface;
namespace Images
{
public class nbfp : PaletteBase
{
public nbfp(IPluginHost pluginHost, string file, int id) : base(pluginHost, file, id) { }
public override void Read(string fileIn)
{
uint file_size = (uint)new FileInfo(fileIn).Length;
BinaryReader br = new BinaryReader(File.OpenRead(fileIn));
// Color data
Color[][] palette = new Color[1][];
palette[0] = pluginHost.BGR555ToColor(br.ReadBytes((int)br.BaseStream.Length));
br.Close();
Set_Palette(palette, false);
}
public override void Write_Palette(string fileOut)
{
throw new NotImplementedException();
}
}
}

View File

@ -1,53 +0,0 @@
/*
* Copyright (C) 2011 pleoNeX
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* By: pleoNeX
*
*/
using System;
using System.IO;
using System.Drawing;
using PluginInterface;
namespace Images
{
public class nbfs : MapBase
{
public nbfs(IPluginHost pluginHost, string file, int id) : base(pluginHost, file, id) { }
public override void Read(string fileIn)
{
BinaryReader br = new BinaryReader(File.OpenRead(fileIn));
uint file_size = (uint)br.BaseStream.Length;
NTFS[] map = new NTFS[file_size / 2];
for (int i = 0; i < map.Length; i++)
map[i] = pluginHost.MapInfo(br.ReadUInt16());
int width = (map.Length * 8 >= 0x100 ? 0x100 : map.Length * 8);
int height = (map.Length / (width / 8)) * 8;
br.Close();
Set_Map(map, false, width, height);
}
public override void Write_Map(string fileOut)
{
throw new NotImplementedException();
}
}
}

View File

@ -1,49 +0,0 @@
/*
* Copyright (C) 2011 pleoNeX
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* By: pleoNeX
*
*/
using System;
using System.Drawing;
using System.IO;
using PluginInterface;
namespace Images
{
public class ntfp : PaletteBase
{
public ntfp(IPluginHost pluginHost, string file, int id) : base(pluginHost, file, id) { }
public override void Read(string file)
{
BinaryReader br = new BinaryReader(File.OpenRead(file));
// Color data
Color[][] palette = new Color[1][];
palette[0] = pluginHost.BGR555ToColor(br.ReadBytes((int)br.BaseStream.Length));
br.Close();
Set_Palette(palette, false);
}
public override void Write_Palette(string fileOut)
{
throw new NotImplementedException();
}
}
}

View File

@ -1,61 +0,0 @@
/*
* Copyright (C) 2011 pleoNeX
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* By: pleoNeX
*
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using PluginInterface;
namespace Images
{
public class ntft : ImageBase
{
public ntft(IPluginHost pluginHost, string archivo, int id) : base(pluginHost, archivo, id)
{
}
public override void Read(string fileIn)
{
BinaryReader br = new BinaryReader(File.OpenRead(fileIn));
int fileSize = (int)br.BaseStream.Length;
Byte[][] tiles = new byte[1][];
tiles[0] = br.ReadBytes(fileSize);
int width = (fileSize < 0x100 ? fileSize : 0x0100);
int height = fileSize / width;
if (height == 0)
height = 1;
if (fileSize == 512)
width = height = 32;
br.Close();
Set_Tiles(tiles, width, height, System.Windows.Forms.ColorDepth.Depth8Bit, TileOrder.NoTiled, false);
}
public override void Write_Tiles(string fileOut)
{
throw new NotImplementedException();
}
}
}

View File

@ -43,6 +43,7 @@ namespace Pack
{
ARC arc = new ARC();
narcFile = pluginHost.Get_TempFolder() + Path.DirectorySeparatorChar + "narc_" + Path.GetRandomFileName();
arc.file = narcFile;
File.Copy(file, narcFile, true);
BinaryReader br = new BinaryReader(System.IO.File.OpenRead(file));
@ -95,13 +96,29 @@ namespace Pack
{
sFile currFile = new sFile();
currFile.id = (ushort)idFile++;
currFile.name = "File" + idFile.ToString() + ".bin";
currFile.name = "File" + idFile.ToString();
// FAT data
currFile.path = narcFile;
currFile.offset = arc.btaf.entries[currFile.id].start_offset + gmif_offset;
currFile.size = (arc.btaf.entries[currFile.id].end_offset - arc.btaf.entries[currFile.id].start_offset);
// Get the extension
long currPos = br.BaseStream.Position;
br.BaseStream.Position = currFile.offset;
char[] ext = Encoding.ASCII.GetChars(br.ReadBytes(4));
String extS = ".";
for (int s = 0; s < 4; s++)
if (Char.IsLetterOrDigit(ext[s]) || ext[s] == 0x20)
extS += ext[s];
if (extS != "." && extS.Length == 5 && currFile.size >= 4)
currFile.name += extS;
else
currFile.name += ".bin";
br.BaseStream.Position = currPos;
if (!(main.files is List<sFile>))
main.files = new List<sFile>();
main.files.Add(currFile);

View File

@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("5.0.0.0")]
[assembly: AssemblyFileVersion("5.0.0.0")]
[assembly: AssemblyVersion("5.1.0.0")]
[assembly: AssemblyFileVersion("5.1.0.0")]

View File

@ -52,6 +52,8 @@ namespace SF_FEATHER
return Format.FullImage;
else if (ext == "SC4 " || ext == "SC8 ")
return Format.Map;
else if (ext == "PSI3")
return Format.Script;
return Format.Unknown;
}
@ -59,7 +61,11 @@ namespace SF_FEATHER
public string Pack(ref sFolder unpacked, string file, int id)
{
throw new NotImplementedException();
string fileOut = pluginHost.Get_TempFolder() + System.IO.Path.DirectorySeparatorChar +
System.IO.Path.GetRandomFileName();
PAC.Pack(file, fileOut, ref unpacked);
return fileOut;
}
public sFolder Unpack(string file, int id)
{

View File

@ -101,5 +101,82 @@ namespace SF_FEATHER
br.Close();
return unpacked;
}
public static void Pack(string file_original, string fileOut, ref sFolder unpacked)
{
BinaryReader br = new BinaryReader(File.OpenRead(file_original));
BinaryWriter bw = new BinaryWriter(File.OpenWrite(fileOut));
List<byte> buffer = new List<byte>();
ushort num_element = br.ReadUInt16();
bw.Write(num_element);
bw.Write(br.ReadUInt16()); // Unknown
bw.Write(br.ReadUInt32()); // Type of element
uint offset = (uint)num_element * 8 + 8;
uint size;
int f = 0; // Pointer to the unpacked.files array
// Write the final padding of the FAT section
if (offset % 0x10 != 0)
{
for (int r = 0; r < 0x10 - (offset % 0x10); r++)
buffer.Add(0x00);
offset += 0x10 - (offset % 0x10);
}
for (int i = 0; i < num_element; i++)
{
uint older_offset = br.ReadUInt32();
size = br.ReadUInt32();
// If it's a null file
if (size == 0)
{
bw.Write(older_offset);
bw.Write(size);
continue;
}
// Get a normalized size
size = unpacked.files[f].size;
if (size % 0x10 != 0)
size += 0x10 - (size % 0x10);
// Write the FAT section
bw.Write((uint)(offset / 0x10));
bw.Write((uint)(size / 0x10));
// Write file
BinaryReader fileRead = new BinaryReader(File.OpenRead(unpacked.files[f].path));
fileRead.BaseStream.Position = unpacked.files[f].offset;
buffer.AddRange(fileRead.ReadBytes((int)unpacked.files[f].size));
fileRead.Close();
// Write the padding
for (int r = 0; r < (size - unpacked.files[f].size); r++)
buffer.Add(0x00);
// Set the new offset
sFile newFile = unpacked.files[f];
newFile.offset = offset;
newFile.path = fileOut;
unpacked.files[f] = newFile;
// Set new offset
offset += size;
f++;
}
bw.Flush();
bw.Write(buffer.ToArray());
br.Close();
bw.Flush();
bw.Close();
}
}
}

View File

@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// Puede especificar todos los valores o establecer como predeterminados los números de versión de compilación y de revisión
// mediante el asterisco ('*'), como se muestra a continuación:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyVersion("1.1.0.0")]
[assembly: AssemblyFileVersion("1.1.0.0")]

View File

@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Programador: pleoNeX
* By: pleoNeX
*
*/
using System;
@ -122,6 +122,115 @@ namespace Tinke
} // end foreach
}
public String[] Get_PluginsList()
{
List<String> list = new List<String>();
for (int i = 0; i < formatList.Count; i++)
list.Add(formatList[i].ToString());
if (gamePlugin is IGamePlugin)
list.Add(gamePlugin.ToString());
return list.ToArray();
}
public Object Call_Plugin(sFile file, string name, string ext, int id, string header, int action)
{
string tempFile = pluginHost.Get_TempFolder() + Path.DirectorySeparatorChar + file.id + file.name;
Save_File(file, tempFile);
if (gamePlugin is IGamePlugin)
{
if (gamePlugin.ToString() == name)
{
try
{
switch (action)
{
case 0:
gamePlugin.Read(tempFile, id);
return null;
case 1:
return gamePlugin.Show_Info(tempFile, id);
case 2:
sFolder unpacked = gamePlugin.Unpack(tempFile, id);
Add_Files(ref unpacked, id);
return unpacked;
case 3:
sFolder unpack = pluginHost_event_GetDecompressedFiles(id);
String packFile = gamePlugin.Pack(ref unpack, tempFile, id);
if (!(packFile is String) || packFile == "")
{
MessageBox.Show(Tools.Helper.GetTranslation("Messages", "S23"));
Console.WriteLine(Tools.Helper.GetTranslation("Messages", "S25"));
throw new NotSupportedException();
}
pluginHost_ChangeFile_Event(id, packFile);
Change_Files(unpack);
return null;
}
}
catch (Exception e)
{
MessageBox.Show(Tools.Helper.GetTranslation("Messages", "S25"));
Console.WriteLine(e.Message);
return null;
}
}
}
foreach (IPlugin plugin in formatList)
{
if (plugin.ToString() != name)
continue;
try
{
switch (action)
{
case 0:
plugin.Read(tempFile, id);
return null;
case 1:
return plugin.Show_Info(tempFile, id);
case 2: // Unpack
sFolder unpacked = plugin.Unpack(tempFile);
Add_Files(ref unpacked, id);
return unpacked;
case 3: // Pack
sFolder unpack = pluginHost_event_GetDecompressedFiles(id);
String packFile = plugin.Pack(ref unpack, tempFile);
if (!(packFile is String) || packFile == "")
{
MessageBox.Show(Tools.Helper.GetTranslation("Messages", "S23"));
Console.WriteLine(Tools.Helper.GetTranslation("Messages", "S25"));
throw new NotSupportedException();
}
pluginHost_ChangeFile_Event(id, packFile);
Change_Files(unpack);
return null;
}
}
catch (Exception e)
{
MessageBox.Show(Tools.Helper.GetTranslation("Messages", "S25"));
Console.WriteLine(e.Message);
return null;
}
}
Console.WriteLine("Plugin not found");
return null;
}
#region Properties
public sFolder Root
@ -1201,7 +1310,7 @@ namespace Tinke
if (currFile.name == "FNT.BIN" || currFile.name == "FAT.BIN" || currFile.name.StartsWith("OVERLAY9_") || currFile.name.StartsWith("OVERLAY7_") ||
currFile.name == "ARM9.BIN" || currFile.name == "ARM7.BIN" || currFile.name == "Y9.BIN" || currFile.name == "Y7.BIN")
return Format.System;
return Format.System;
return Format.Unknown;
@ -1249,7 +1358,7 @@ namespace Tinke
else if (new String(Encoding.ASCII.GetChars(ext)) == "NANR" || new String(Encoding.ASCII.GetChars(ext)) == "RNAN")
return Format.Animation;
else if (name == "FNT.BIN" || name == "FAT.BIN" || name.StartsWith("OVERLAY9_") || name.StartsWith("OVERLAY7_") ||
name == "ARM9.BIN" || name == "ARM7.BIN" || name == "Y9.BIN" || name == "Y7.BIN"|| name.EndsWith(".SRL") ||
name == "ARM9.BIN" || name == "ARM7.BIN" || name == "Y9.BIN" || name == "Y7.BIN" || name.EndsWith(".SRL") ||
name.EndsWith(".NDS"))
return Format.System;
@ -1329,8 +1438,8 @@ namespace Tinke
return Format.Compressed;
if (name == "FNT.BIN" || name == "FAT.BIN" || name.StartsWith("OVERLAY9_") || name.StartsWith("OVERLAY7_") ||
name == "ARM9.BIN" || name == "ARM7.BIN" || name == "Y9.BIN" || name == "Y7.BIN" )
return Format.System;
name == "ARM9.BIN" || name == "ARM7.BIN" || name == "Y9.BIN" || name == "Y7.BIN")
return Format.System;
return Format.Unknown;
}
@ -1580,7 +1689,7 @@ namespace Tinke
currDecompressed.id = subFolder.id;
currDecompressed.name = subFolder.name;
if ((String)subFolder.tag != "" && subFolder.tag is String) // Decompressed file
if ((String)subFolder.tag != "" && subFolder.tag is String) // Decompressed file
{
sFile file = Search_File(subFolder.id);
decompressedFiles.files.Add(file);
@ -1609,7 +1718,7 @@ namespace Tinke
foreach (sFolder subFolder in currFolder.folders)
Get_LowestID(subFolder, ref id);
}
public void Pack()
{
Pack(idSelect);
@ -1712,7 +1821,7 @@ namespace Tinke
}
pluginHost_ChangeFile_Event(id, packFile);
Change_Files(unpacked);
}
#endregion
@ -2014,7 +2123,7 @@ namespace Tinke
Console.WriteLine(Tools.Helper.GetTranslation("Messages", "S25"));
return new Control();
}
public void Read_File()
{
sFile selectFile = Selected_File();

241
Tinke/Dialog/CallPlugin.Designer.cs generated Normal file
View File

@ -0,0 +1,241 @@
/*
* Copyright (C) 2011 pleoNeX
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* By: pleoNeX
*
*/
namespace Tinke.Dialog
{
partial class CallPlugin
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CallPlugin));
this.comboPlugin = new System.Windows.Forms.ComboBox();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.txtExt = new System.Windows.Forms.TextBox();
this.txtHeader = new System.Windows.Forms.TextBox();
this.btnAccept = new System.Windows.Forms.Button();
this.label4 = new System.Windows.Forms.Label();
this.comboAction = new System.Windows.Forms.ComboBox();
this.txtHeaderHex = new System.Windows.Forms.TextBox();
this.label5 = new System.Windows.Forms.Label();
this.label6 = new System.Windows.Forms.Label();
this.numericID = new System.Windows.Forms.NumericUpDown();
((System.ComponentModel.ISupportInitialize)(this.numericID)).BeginInit();
this.SuspendLayout();
//
// comboPlugin
//
this.comboPlugin.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboPlugin.FormattingEnabled = true;
this.comboPlugin.Location = new System.Drawing.Point(78, 15);
this.comboPlugin.Name = "comboPlugin";
this.comboPlugin.Size = new System.Drawing.Size(121, 21);
this.comboPlugin.TabIndex = 0;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(12, 18);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(39, 13);
this.label1.TabIndex = 1;
this.label1.Text = "Plugin:";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(12, 61);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(56, 13);
this.label2.TabIndex = 2;
this.label2.Text = "Extension:";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(12, 87);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(45, 13);
this.label3.TabIndex = 3;
this.label3.Text = "Header:";
//
// txtExt
//
this.txtExt.Location = new System.Drawing.Point(99, 58);
this.txtExt.Name = "txtExt";
this.txtExt.Size = new System.Drawing.Size(100, 20);
this.txtExt.TabIndex = 4;
//
// txtHeader
//
this.txtHeader.Location = new System.Drawing.Point(99, 84);
this.txtHeader.MaxLength = 4;
this.txtHeader.Name = "txtHeader";
this.txtHeader.Size = new System.Drawing.Size(100, 20);
this.txtHeader.TabIndex = 5;
this.txtHeader.TextChanged += new System.EventHandler(this.txtHeader_TextChanged);
//
// btnAccept
//
this.btnAccept.DialogResult = System.Windows.Forms.DialogResult.OK;
this.btnAccept.Image = global::Tinke.Properties.Resources.accept;
this.btnAccept.Location = new System.Drawing.Point(272, 110);
this.btnAccept.Name = "btnAccept";
this.btnAccept.Size = new System.Drawing.Size(100, 23);
this.btnAccept.TabIndex = 6;
this.btnAccept.Text = "Accept";
this.btnAccept.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
this.btnAccept.UseVisualStyleBackColor = true;
this.btnAccept.Click += new System.EventHandler(this.btnAccept_Click);
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(205, 18);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(40, 13);
this.label4.TabIndex = 7;
this.label4.Text = "Action:";
//
// comboAction
//
this.comboAction.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboAction.FormattingEnabled = true;
this.comboAction.Items.AddRange(new object[] {
"Read (double click)",
"View",
"Unpack",
"Pack"});
this.comboAction.Location = new System.Drawing.Point(251, 15);
this.comboAction.Name = "comboAction";
this.comboAction.Size = new System.Drawing.Size(121, 21);
this.comboAction.TabIndex = 8;
//
// txtHeaderHex
//
this.txtHeaderHex.Location = new System.Drawing.Point(272, 84);
this.txtHeaderHex.Name = "txtHeaderHex";
this.txtHeaderHex.Size = new System.Drawing.Size(100, 20);
this.txtHeaderHex.TabIndex = 9;
this.txtHeaderHex.TextChanged += new System.EventHandler(this.txtHeaderHex_TextChanged);
//
// label5
//
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(205, 87);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(68, 13);
this.label5.TabIndex = 10;
this.label5.Text = "hex 0x";
//
// label6
//
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(205, 61);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(21, 13);
this.label6.TabIndex = 11;
this.label6.Text = "ID:";
//
// numericID
//
this.numericID.Hexadecimal = true;
this.numericID.Location = new System.Drawing.Point(272, 58);
this.numericID.Maximum = new decimal(new int[] {
4095,
0,
0,
0});
this.numericID.Name = "numericID";
this.numericID.Size = new System.Drawing.Size(100, 20);
this.numericID.TabIndex = 12;
//
// CallPlugin
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
this.BackColor = System.Drawing.SystemColors.GradientInactiveCaption;
this.ClientSize = new System.Drawing.Size(379, 139);
this.Controls.Add(this.numericID);
this.Controls.Add(this.label6);
this.Controls.Add(this.label5);
this.Controls.Add(this.txtHeaderHex);
this.Controls.Add(this.comboAction);
this.Controls.Add(this.label4);
this.Controls.Add(this.btnAccept);
this.Controls.Add(this.txtHeader);
this.Controls.Add(this.txtExt);
this.Controls.Add(this.label3);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Controls.Add(this.comboPlugin);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "CallPlugin";
this.ShowInTaskbar = false;
this.Text = "Call plugin";
((System.ComponentModel.ISupportInitialize)(this.numericID)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.ComboBox comboPlugin;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox txtExt;
private System.Windows.Forms.TextBox txtHeader;
private System.Windows.Forms.Button btnAccept;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.ComboBox comboAction;
private System.Windows.Forms.TextBox txtHeaderHex;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.NumericUpDown numericID;
}
}

View File

@ -0,0 +1,88 @@
/*
* Copyright (C) 2011 pleoNeX
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* By: pleoNeX
*
*/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Tinke.Dialog
{
public partial class CallPlugin : Form
{
public CallPlugin()
{
InitializeComponent();
}
public CallPlugin(string[] list)
{
InitializeComponent();
comboPlugin.Items.AddRange(list);
}
private void btnAccept_Click(object sender, EventArgs e)
{
this.Close();
}
public String Extension
{
get { return txtExt.Text; }
set
{
txtExt.Text = value;
txtHeaderHex.Text = BitConverter.ToString(Encoding.ASCII.GetBytes(txtHeader.Text.ToCharArray()));
}
}
public String Header
{
get { return txtHeader.Text; }
set { txtHeader.Text = value; }
}
public String Plugin
{
get { return comboPlugin.Text; }
}
public int Action
{
get { return comboAction.SelectedIndex; }
}
public int ID
{
get { return (int)numericID.Value; }
set { numericID.Value = value; }
}
private void txtHeader_TextChanged(object sender, EventArgs e)
{
if (txtHeader.Focused)
txtHeaderHex.Text = BitConverter.ToString(Encoding.ASCII.GetBytes(txtHeader.Text.ToCharArray()));
}
private void txtHeaderHex_TextChanged(object sender, EventArgs e)
{
if (txtHeaderHex.Focused)
txtHeader.Text = new String(Encoding.ASCII.GetChars(Tools.Helper.StringToBytes(txtHeaderHex.Text, 4)));
}
}
}

View File

@ -0,0 +1,408 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAQEAAAAAAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAA
AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8Av97HAH++kAA/nVgAAH0h9QB8IPUBfB/1Anse9QN7
Hv8Cehv/AXoZ/wB5F/8AeRUhP5pPIX+8iiG/3cQh////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////APT59ADp9OoA3+/gANTq1gDU6dYA1OnWANTp1QDT6dUA0+jVANPo
1QDT6NQA0+jUANLo1ADS59QA0ufTANLn0wDR59MA0ebTANHm0gDR5tIA3OzdAOjy6ADz+PMA////AP//
/wD///8A////AP///wDy+PMA5vHnANrq2wDO49AAzuPPAM7jzwDO488AzuPPAJrJpABnsHkANJdOAAB+
I/UFgCb1CYEp9Q6DK/UThC7/DoEo/wl/Iv8EfB3/AHkXIS+SQyFfq24hj8SaIb/dxQDP5dMA3+7iAO/2
8AD///8A////AP///wD///8A////AP///wD///8A////AP///wDp9OoA1OrWAL/fwgCq1a4AqtStAKnU
rQCp06wAqNOsAKjSqwCn0qsAp9GqAKfRqgCm0akAptCpAKXQqAClz6gApM+nAKTOpwCjzqYAo82mALrZ
vADR5tIA6PLoAP///wD///8A////AP///wD///8A5vHnAM7j0AC21rgAnsihAJ7IoACdx6AAncefAJ3H
nwB2tYEAT6NjACiRRAABgCb1CYMs9RKHMvUaijj1I44+/xqJNf8RhCz/CH8j/wB6GiEfijYhP5tTIV+r
byF/vIwAn8yoAL/dxQDf7uIA////AP///wD///8A////AP///wD///8A////AP///wD///8A3+/gAL/f
wgCfz6MAgMCFAH+/hAB+voQAfr2DAH29ggB8vIEAfLuBAHu7gAB7un8Aerp+AHm5fgB4uH0AeLd8AHe3
ewB2tnsAdrV6AHW0eQCYx5oAutm8ANzs3QD///8A////AP///wD///8A////ANrq2wC21rgAksGVAG6t
cgBtrHEAbaxwAGyrcABsq28AUaBeADeWTAAcizoAAoEp9Q6HMvUajDz1JpJF9TOXTv8mkEL/GYk1/wyB
Kf8AehwhD4IqIR+KNyEvkkUhP5pSAG+zfQCfzKgAz+XTAP///wD///8A////AP///wD///8A////AP//
/wD///8A////ANTq1gCq1a4AgMCFAFarXf9Vqlz/VKlb/1OoWv9Sp1n/UaZY/1ClV/9PpFb/T6RV/06j
VP9NolP/TKFS/0ugUf9Kn1D/SZ5P/0idTv9InE33dbR596PNpvfR5tL3////AP///wD///8A////AP//
/wDO49AAnsihAG6tcgA+kkP9PZFC/TyQQf07j0D9O49A/S2MO/0fiTb9EYYx/QODLP8Tijj/I5JF/zOZ
Uv9DoV//MpdP/yGOP/8QhC//AHsf5AB6HeQAehzkAHka5AB5GSc/mlInf7yMJ7/dxSf///8A////AP//
/wD///8A////AP///wD///8A////AP///wDV6tYAq9WuAIHAhgBXrF7/Wa1g/1uuYv9dr2T/X7Bm/16v
Zf9dr2T/XK5j/1yuYv9brWH/Wqxg/1mrX/9Zql//Vada/1GjVv9NoFL/SZ1O92ivb/eIwZD3p9Oy98fl
0wDH5NMAxuTSAMbj0gDG49EAoc6tAHy6igBYpWYAM5FD/TKQQf0xj0D9MI4//TCOPv0ojT39IIw7/RiL
Ov0Qijj/IZFF/zGZUv9BoV//Uqls/0KgXf8xl07/IY4//xGFL+QNgirkCH8l5AR8H+QAehonL5JFJ1+r
cCePxJonv93FAM/l0wDf7uIA7/bwAP///wD///8A////AP///wD///8A1erXAKvWrwCBwYcAWK1f/12w
ZP9is2n/Z7Zu/2y6c/9ruXL/arly/2q4cf9puHD/aLdv/2i2bv9ntW3/Z7Vt/1+vZf9YqV7/UaRW/0qe
T/dbqWX3bbR7936/kfeQy6gAj8qnAI7JpgCNyKUAjcikAHS6iwBbrHMAQp5bACmQQ/0oj0H9J45A/SaN
Pv0ljT39I44//SGPQf0gkEP9HpFF/y+ZUv9AoV//UKlt/2Gxev9RqGz/QqBd/zKXT/8jj0DkGoo35BGF
LuQIgCXkAHscJx+LOCc/m1QnX6twJ3+8jACfzKgAv93FAN/u4gD///8A////AP///wD///8A////ANXq
1wCs1q8AgsKHAFmuYP9hs2j/abhw/3G+eP95w4D/eMOA/3fCf/93wn7/dsJ+/3bBff91wHz/dcB7/3W/
e/9qt3D/YK9l/1WnW/9Ln1D3TqRb91GoZvdVrHH3WLF8AFevewBWrnkAVa14AFSsdgBGpWkAOZ5cACyW
TwAfj0P9HY5B/RyNP/0bjD39Gow8/R6PQf0jkkb9J5VM/SyYUf89oF//Tqhs/1+wev9wuYj/YbF6/1Kp
bP9DoV//NJlR5CeRROQaijfkDYMq5AB8HScPgyonH4s4Jy+SRSc/mlIAb7N9AJ/MqADP5dMA////AP//
/wD///8A////AP///wDV69cArNewAIPDiABar2H/ZbZs/3C+d/97xYL/hs2O/4XMjf+FzI3/hMyM/4TM
jP+Dy4v/g8uK/4PKif+Dyon/db97/2e1bf9Zq1//TKFS/0GeUf82nFH/K5lR/yGXUf4flU/+HpRN/hyS
S/4bkUn+GZBH/hiQRv4Wj0T+FY9D/xOOQf8SjT//EIw9/w+LO/8ZkEP/JJVM/y+aVf86n17/S6ds/12w
ev9uuIj/gMGW/3G5if9jsnz/VKpv/0ajYv80mVH/I5BA/xGGL/8AfR/nAHwd5wB7HOcAehrnAHkZKj+a
Uip/vIwqv93FKv///wD///8A////AP///wD///8A1uvXAK3XsACEw4kAW7Bi/2W3bf9wvnj/e8aD/4bN
jv+Dy4v/f8qI/3zIhP94x4H/e8iD/37Jhf+AyYf/g8qK/3fBff9quHH/Xq9k/1KmWP9Golf/Op9W/y6b
VP8jmFP+KJlW/i2bWv4ynV3+OJ9h/jaeX/41nl7+NJ1c/jOdW/8xnFn/MJtY/y+aVv8tmVT/NZ1a/z2h
Yf9FpGf/Tahu/1itdv9ks3//b7iI/3q+kf9xuYn/Z7SA/16vd/9Vqm//RKFf/zOYUP8ij0D/Eocw5w2D
K+cJgCXnBH0g5wB6GyovkkUqX6twKo/Emyq/3cYAv93GAL/dxgC/3cYA////ANbr2ACt2LEAhMSKAFyx
Y/9muG7/cb95/3zGhP+Hzo//gMuJ/3rIg/9zxXz/bcJ2/3LEe/94x4D/fsmF/4TLi/95w4D/brt1/2Oz
av9Yq1//S6Zc/z6iWv8xnVj/JZlW/jGeXv49o2f+Sahw/lWtef5UrXf+U6x2/lKsdf5Rq3T/T6py/06q
cf9NqW//TKhu/1Gqcv9WrXb/W696/2Gyfv9mtIH/a7aF/3C5if91u43/cLmJ/2y3hf9otID/ZLJ8/1Sq
bv9EoV//NJlR/ySRQucbiznnEoYv5wmAJucAex0qH4s5Kj+bVSpfq3Eqf7yNAH+8jQB/vI0Af7yNAP//
/wDW69gArtixAIXFigBdsmT/Z7lv/3LAev98x4X/h86Q/37Kh/90xn7/a8F0/2G9a/9qwXP/c8V7/3vI
g/+EzIz/e8WC/3G+eP9ot2//XrBl/1CqYv9CpV//NJ9b/yeaWP45omb+TKp0/l+zgv5yu5H+cbuP/nC6
jv5vuo3+b7mM/265i/9tuIr/bLeI/2u3h/9tuIn/b7mK/3K6jP90u47/c7qM/3K6i/9wuYr/b7iJ/3C5
if9xuYn/crmJ/3O6if9jsnz/VKpv/0WiYf82m1TnKJNG5xuLOecNgyznAHwfKg+DLCofizkqL5JGKj+a
VAA/mlQAP5pUAD+aVAD///8A1uzYAK7ZsgCGxosAXrRl/2i6cP9zwXv/fciG/4jPkf97yYX/b8R5/2K+
bf9WuWH/Yb5s/23Dd/95yIL/hc2N/33HhP91wXz/bbt0/2W1bP9Wrmf/R6hj/zihX/8pm1v/QqZu/1yy
gv92vpX/kMqp/4/JqP+Oyaf/jcim/43Ipf+Mx6T/i8ej/4rGov+KxqH/icWg/4nFn/+IxZ7/iMWe/4DB
l/95vZH/cbmL/2q2hf9wuYn/dryO/3y/kv+Cwpf/c7qK/2Wzfv9WrHL/SKVm/zabVP8kkUP/Eocy/wB9
IeoAfB/qAHse6gB6HOoAeRswAHkbMAB5GzAAeRsw////ANfs2ACv2rIAh8eMAF+1Zv9pu3H/c8J8/37I
h/+Iz5L/f8qI/3XGf/9swnb/Y75t/2nBc/9wxHn/d8eA/37Khv95xoH/dcJ9/3G+eP9tu3T/XLNu/0yr
aP87o2L/K5xd/0SncP9es4P/d7+W/5HKqv+Oyaf/i8ek/4jGof+FxJ//hMSe/4PDnf+Dw5z/gsKb/4HC
mv+AwZn/gMGY/3/Bl/95vpL/c7uN/224iP9ntYP/bLeH/3G6iv92vI7/e76R/3K6if9ptYL/X7B6/1as
cv9EomH/MplR/yCPQP8PhS/qC4Ir6geAJuoDfSLqAHodMAB6HTAAeh0wAHodMP///wDX7NkAr9qzAIfI
jQBgtmf/arxy/3TCff9/yIj/ic+T/4PMjP98yYb/dsZ//3DEef9xxHv/c8V8/3XGfv93x3//dsV+/3bE
fv91wn3/dcF9/2O4df9Rr27/P6Zm/y2dX/9GqHL/X7SF/3i/mP+Sy6v/jcim/4jGov+Dw53/fsGZ/33A
mP98wJf/e7+W/3q/lf95vpT/eL6T/3e9kv93vZH/cruN/265iv9ptob/ZbSC/2m2hf9tuIf/cLmK/3S7
jP9wuYn/bbeF/2m1gv9ls3//U6pu/0GhXv8vl07/Ho4+6haJNuoPhS/qB4An6gB8IDAAfCAwAHwgMAB8
IDD///8A1+3ZALDbswCIyY4AYbdo/2u9c/91w37/f8mJ/4rPlP+GzZD/g8yM/4DKif99yYX/eciC/3bG
f/9zxXz/cMR4/3PEe/92xX//esaC/33Hhf9qvHz/VrJz/0Koav8vnmH/SKlz/2G1hv96wJn/k8ys/4vI
pf+ExJ//fcGZ/3a9k/91vZL/dLyR/3O8kP9yu4//cbuO/3C6jf9vuoz/brmL/2u4iP9otob/ZrWD/2Oz
gf9ltIL/aLaE/2u3hf9tuIf/b7iI/3G5if9yuor/dLqL/2Kxe/9QqWz/PqBc/y2XTeohkELqFoo36guD
LeoAfSIwAH0iMAB9IjAAfSIw////ANft2QCw27QAicmPAGK4av9svXT/dsN//4DJiv+Lz5X/is+U/4rP
k/+Kz5L/is+S/4HLiv95yIL/ccR6/2nBcv9wxHn/d8eA/37Kh/+GzY7/cMGD/1u2eP9Gqm3/MZ9j/0mq
df9itoj/e8Ga/5TNrf+KyKX/gcOd/3i+lf9vuo7/brmM/225i/9suIr/a7iJ/2m3iP9ot4f/Z7aG/2a2
hf9ktYP/Y7SC/2Kzgf9hs4D/YrOA/2S0gf9ltIH/Z7WC/264h/91u43/fL6S/4PCmP9xuYn/X7F6/02o
a/88oFz/LZdO/x6PQP8PhzL/AH8l/AB/JfwAfyX8AH8l/P///wDX7doAsNy1AInKkABiuWv/ar1y/3HB
ev95xYL/gMmK/4HJiv+Cyov/g8qL/4TLjP9/yYf/eseD/3bGfv9xxHr/c8V8/3bGfv94x4H/esiD/2i+
e/9WtHT/RKps/zKgZf9Lq3f/Y7aJ/3zBm/+Uza3/jcmn/4bGof9/wpv/eL6V/3e+lP92vZP/db2S/3S8
kf9zvJD/cryP/3G7jv9wu43/bbmL/2u4iP9otob/ZbWE/2i2hf9qt4b/bbiI/2+5if9wuYr/cbqK/3K6
i/9zuoz/YrJ9/1Gqb/9AomD/LplS/yOTR/8XjDz/C4Yx/wCAJ/wAgCf8AIAn/ACAJ/z///8A2O3aALHc
tQCKy5AAY7ps/2i8cP9tvnX/ccF6/3bDf/94xIH/esWC/3zGhP9+x4b/fceF/3zHhP97x4P/esiC/3fH
gP90xn3/ccV7/2/Eef9gu3T/UbJw/0Kpa/80oWf/TKx4/2S3iv98wpz/lc2u/5DLqv+LyKb/hsah/4HD
nf+Aw5z/f8Kb/37Cmv9+wZn/fcGY/3zBmP97wJf/e8CW/3a+kv9yvI//brmL/2q3iP9uuYr/cbqM/3W8
j/94vpH/c7uN/264iP9ptoT/ZLOA/1Orcv9Do2T/MptW/yGTSP8ZjkD/EYo4/wiFMP8AgSn8AIEp/ACB
KfwAgSn8////ANju2gCx3bYAisyRAGS7bf9mu27/aLxw/2q9cv9svXT/b793/3LAev91wn3/eMOA/3rF
gv99x4X/f8mI/4LLiv96yIP/c8V8/2vCdf9jv27/WLht/0ywa/9BqWr/NaJp/02sev9lt4z/fcKd/5XN
r/+SzKz/kMuq/43Jp/+KyKX/icek/4nHo/+IxqL/h8ah/4fGof+GxqD/hsWf/4XFn/9/wpr/er+V/3S8
kP9vuYz/c7uP/3i+kv98wJX/gcKZ/3a8j/9rt4b/YLF9/1WsdP9FpGb/NJxZ/ySVTP8UjT7/D4o5/wqH
NP8FhC//AIIr/ACCK/wAgiv8AIIr/P///wDY7toAst22AIvMkgBlvG7/ZLtt/2O6bP9iuWv/Yrhq/2a6
bv9qvHL/br52/3LAev94w4D/fseG/4TLjP+Lz5P/fsqH/3HFe/9kwG//WLtk/0+1Zf9Hr2f/P6lp/zej
a/9OrXz/ZriN/37Dnv+WzrD/lc2v/5XNrv+Uza3/lM2t/5PMrP+SzKv/kcuq/5HLqv+Qy6n/kMup/5DL
qP+Qy6j/icei/4LDnP97v5b/dLyQ/3m+lP9/wZj/hMSc/4rHof95vpL/aLaE/1etdv9GpWj/Np1b/yaW
Tv8WjkH/B4c1/wWGM/8EhTH/AoQv/wGDLQ8Bgy0PAYMtDwGDLQ////8A4vLjAMXlyACo2a0Ai8yS/4rM
kf+Ky5D/icqQ/4nJj/+Cxon/e8SC/3XBfP9uvnb/dcJ9/3zGhf+Ey4z/i8+T/37KiP9yxXz/ZcBw/1m7
Zf9RtWb/SK9o/0Cpav84o2z/Sat4/1uzhf9su5L/fsOf/33Cnv99wp3/fMKc/3vCm/96wZr/esCZ/3nA
mP94v5f/esCZ/3zBmv9/wpv/gcSd/3/Cm/9+wZn/fMCY/3u/lv97v5b/e7+W/3u/lf97wJX/a7eI/1qv
ev9Kp2z/Op9f/zCaVf8nlEv/HY9C/xSJOP8fj0L/KpVM/zWbV/9AomEPQKJhD0CiYQ9AomEP////AOv2
7ADY7toAxeXIALLdtv+x3bb/sdy1/7Dctf+w27T/n9Ok/43Mk/98xIP/arxy/3LBe/97xoP/g8uM/4zQ
lP9/yon/c8V9/2bAcv9au2b/UrVo/0qvaf9CqWv/OqRt/0Wpdf9Qrn3/W7OG/2a4jv9luI3/ZbeM/2S3
i/9jt4r/YraI/2G1h/9gtIb/YLSF/2S2iP9puIv/bbqO/3K9kv92vpT/esCX/37Bmv+Cw53/fcCY/3e+
k/9yu4//bLmK/12xff9NqXD/PqFj/y+aVv8rlk//KJNJ/ySPQv8hjDv/OZlS/1CmaP9os3//gMGWD4DB
lg+AwZYPgMGWD////wD1+vUA6/bsAOLy4wDY7tr/2O7a/9jt2v/X7dr/1+3Z/7vgv/+f1KT/g8eJ/2a6
bv9wwHj/ecWC/4PLi/+M0JX/gMuJ/3TGfv9nwHP/W7tn/1O1af9LsGr/Q6ps/zukbv9ApnH/Ral1/0mr
ef9OrX3/Ta18/02se/9MrHn/S6x4/0qrd/9JqnX/SKl0/0eoc/9Oq3j/Va99/1yygv9jtof/bbqO/3a+
lf+Awpz/icej/37Bmv9zvJH/aLeI/12yf/9PqnL/QKNm/zKbWv8jlE3/JpNK/ymRRv8rkEL/Lo8+/1Kj
Yf93t4T/m8un/7/gyg+/4MoPv+DKD7/gyg////8A////AP///wD///8A////AP///wD///8A////AP//
/wDY7doAsdy1AIrKkABjuWv/bb91/3jFgP+Cy4v/jdGW/4HLiv91xn//acF0/128af9Vtmr/TbBs/0Wq
bf89pW//O6Ru/zqkbv84o23/N6Nt/zaia/81omr/NKFo/zOhZ/8yoGX/MZ9k/zCeYv8vnWH/OKFn/0Km
bv9LqnX/Va98/2S2h/9zvZP/gsSe/5HLqv+Aw5z/cLuP/1+zgf9Pq3T/QaRo/zOdXP8lllD/GI9F/yGP
RP8qkEP/M5FC/zySQv9srXH/ncig/87jz/////8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A2O3aALHctQCKy5AAY7ps/26/dv94xYH/g8uM/43Rlv+BzIv/dceA/2nB
df9dvGr/V7hq/1Gza/9Lr2z/Ratt/0Oqbf9Cqmz/Qals/0Cpa/8/qGr/Pqhp/z2nZ/88p2b/O6Zk/zql
Y/85pWL/OKRh/z2mZv9Cp2v/R6lw/0yrdf9asYD/Z7iK/3W+lf+DxZ//c72T/2S1hv9UrXn/RaZs/0Ck
Zv87oWH/Np9b/zGdVf80mlD/N5hM/zqVR/89k0P/ba5y/57Jof/O5ND/////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////ANju2gCx3bYAi8yRAGS7bf9vwHf/ecaC/4TL
jP+O0Zf/gsyM/3bHgf9qwnb/Xr1r/1q6a/9Wt2v/UbRs/02xbP9MsGz/S7Br/0qva/9Jr2r/SK9p/0eu
aP9Grmb/Rq5l/0WtZP9ErGP/Q6xi/0KrYf9CqmT/Q6lo/0Ooa/9Ep2//UK15/1yzgv9puYz/db+V/2e3
if9YsH3/Sqhx/zuhZf8/pGX/Q6Zl/0apZf9Kq2X/R6Vd/0SfVP9BmUz/PpRE/26ucv+eyaH/zuTQ////
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wDY7toAst22AIvM
kgBlvG7/b8F4/3rGg/+EzI3/j9GY/4PMjf93yIL/a8N3/1++bP9cvGv/Wrpr/1i4a/9Vt2v/VLZq/1O2
av9Stmn/UrVp/1G1aP9QtWf/ULRl/0+0ZP9OtGP/TbNi/02zYf9MsmH/SK9j/0OrZf8/p2f/O6Np/0ap
cf9Rrnr/XLOC/2e5i/9asYD/TKp0/z+jaf8xnF7/PqRk/0qrav9Xsm//Y7l1/1qwaf9Rp13/SJ5R/z+V
Rf9vr3P/n8qi/8/k0P////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A2O7bALLetwCMzZMAZr1v/3DCef97x4T/hcyO/5DSmf+EzY7/eMiD/2zDeP9gv23/X75s/1++
a/9evWr/Xr1q/128af9cvGn/W7xo/1u8aP9au2f/Wrtm/1m7Zf9Zu2T/WLpj/1e6Yv9WumH/Vrph/02z
Yf9ErWL/O6Zi/zOgY/88pGr/Rqly/1Cuef9as4H/Tax2/0GlbP80nmH/KJhX/z2kYv9SsG7/Z7x6/33I
hv9uu3b/X69m/1CiVv9Blkb/cLB0/6DKov/P5ND/////AP///wD///8A////AP///wD2+/YA7fjuAOT0
5gDb8d0A2/DdANrw3QDa8N0A2vDdAL7kwgCj2KgAh8yOAGvAdP90xH3/fsmH/4fNkP+Q0pn/hM2O/3nJ
hP9txHn/Yb9u/2C/bf9gvmz/X75s/1+9a/9evWr/Xb1q/1y8af9cvGn/W7xo/1u8Z/9au2b/Wrtl/1m7
ZP9YumP/V7pj/1e6Yv9OtGP/Ra1j/z2nZP80oWX/O6Rq/0Knb/9JqnT/T656/0ipcP9ApGf/OJ9e/zCa
Vf9Ao17/UKtm/2C0b/9vvXj/ZLNr/1iqX/9NoFP/QpZH/3Gwdf+gyqP/z+TR/////wD///8A////AP//
/wD///8A7fjuANvx3QDJ6s0At+O8ALfivAC24rsAtuG7ALbhuwCk2aoAk9KaAILKigBxw3r/eceC/4HL
iv+Jz5L/kdOa/4XOj/96yYX/bsR6/2LAb/9hv27/Yb9u/2C+bf9gvmz/X75r/169a/9dvWr/Xb1q/1y8
af9cvGj/W7xn/1u8Zv9au2X/Wbtl/1i6ZP9YumP/T7Rk/0euZf8+qGb/NqJn/zqkav8+pW3/Qadw/0Wp
c/9CpWv/P6Jj/zyfXP85nFT/Q6JZ/06nX/9YrWT/YrJq/1qrYf9SpVn/Sp5Q/0OXSP9ysXX/ocuj/9Dl
0f////8A////AP///wD///8A////AOT05gDJ6s0Art+0AJPVmwCT1JoAktOaAJLTmQCR0pkAis+SAITM
jAB9yYUAdsZ//33Jhv+EzI3/i9CU/5LTm/+GzpD/e8qG/2/Fe/9jwHD/Y8Bw/2K/b/9hv27/Yb9t/2C+
bf9fvmz/Xr1r/169a/9dvWr/Xb1p/1y8aP9cvGf/W7xn/1q7Zv9Zu2X/Wbpk/1C1Zv9Ir2f/QKlo/zij
af85o2r/OaNq/zqja/87pGz/PaJl/z6hX/9AoFn/Qp5T/0ehVf9Lo1f/UKVZ/1WnXP9Qo1f/TKBS/0ic
Tf9EmEn/crF2/6HLpP/Q5dH/////AP///wD///8A////AP///wDb8d0At+O8AJPVmwBwx3r/b8Z5/27F
eP9txHf/bcR3/3DFev90xn7/eMeB/3zJhf+By4r/h86Q/43Rlv+T1Jz/h8+R/3zKh/9wxXz/ZcFy/2TA
cf9jwHD/YsBv/2LAb/9hv27/YL9t/1++bP9fvmz/Xr1r/169av9dvWn/Xb1p/1y8aP9bvGf/Wrtm/1q7
Zv9StWf/SrBp/0Kqav86pWz/N6Nq/zWiaP8zoGb/MZ9l/zefYP8+oFv/RKBW/0uhUv9KoFH/SZ9Q/0ie
T/9InU7/R5xN/0abTP9Fmkv/RZlK/3Oyd/+izKT/0OXR/////wD///8A////AP///wD///8A2/HdALfj
vACU1ZsAcMh6/3LIfP90yH7/dsiA/3jJgv96yYT/fcqH/4DLif+CzIz/hc2O/4fPkf+K0JT/jNGW/4LN
jf95yYX/b8V8/2bBc/9lwXL/ZMFx/2PAcP9iwHD/YsBv/2G/bv9gv23/YL5t/2C+bP9fvmz/X75r/1++
a/9evWr/Xr1q/128af9dvGj/Wbls/1W1b/9RsnL/Tq92/0mscf9DqGz/PqVn/zmhYv9Jp2n/WK1v/2iy
dv94uH3/d7d8/3a3e/92tnv/dbV6/3W0ef90tHj/dLN4/3Oyd/+WxZn/udi7/9zr3f////8A////AP//
/wD///8A////ANvx3gC45L0AlNacAHHJe/91yn//esuE/37MiP+Dzo3/hM6O/4bPkP+Hz5H/idCT/4jP
kv+Hz5L/hs+R/4bPkf9+zIr/dsiD/27Fe/9nwnT/ZsFz/2XBcv9kwXH/Y8Fx/2PAcP9iwG//Yr9v/2G/
bv9hv27/Yb9u/2G/bv9iv27/Yb9t/2G+bP9gvmz/YL1r/2C8cP9hu3X/Ybp6/2K6gP9atHf/Uq9v/0qp
Z/9CpF//Wq9x/3O6hP+MxZb/pdCo/6TPqP+kz6f/o86n/6POpv+jzab/os2l/6LMpf+izKT/udi7/9Dl
0f/n8uj/////AP///wD///8A////AP///wDb8d4AuOS9AJXXnAByynz/ecyD/4DOiv+H0JH/jtOY/47T
mP+P05n/j9OZ/5DTmv+M0Zb/h9CT/4POj/9/zYz/ecqG/3PHgf9txXv/aMJ1/2fCdP9mwnP/ZcFy/2TB
cv9jwXH/Y8Bw/2PAcP9iwG//Y8Bv/2PAcP9kwHD/ZMBw/2TAb/9jv2//Y79u/2O+bv9nwHX/bMF8/3HD
g/92xIr/a71+/2C1c/9Vrmj/SqZc/2y2ev+Ox5j/sNe2/9Ln0//R59P/0efT/9Hm0//R5tL/0ebS/9Dm
0v/Q5dL/0OXR/9zr3f/n8uj/8/jz/////wD///8A////AP///wD///8A3PLeALnlvgCW2J0Ac8t9/3zO
hv+G0ZD/j9SZ/5nYo/+Y16L/mNei/5fXof+X16H/j9Sa/4jRlP+Azo3/ecuH/3XJg/9xx3//bcV7/2nD
d/9ownb/Z8J1/2bCdP9lwnP/ZMFy/2TBcv9kwXH/ZMFx/2TBcf9lwXL/ZsFy/2fCc/9mwXL/ZsFy/2bA
cf9mwHH/b8N5/3jHgv+By4v/i8+U/33Fhf9vvHf/YbJo/1OpWv9+voP/qdSs/9Tp1f////8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////ANzy
3gC55b4AltieAHPLff99zof/htKQ/5DVmv+Z2KP/mdij/5jXov+Y16L/l9eh/5HUnP+M0pf/htCS/4DO
jf99zIr/esuH/3fJhP90yIH/c8eA/3LHf/9xx37/ccZ9/3DGff9wxnz/cMZ8/2/Fe/9wxXv/cMV8/3DF
fP9xxXz/cMV7/3DEe/9vxHr/b8R6/3bGgP99yYf/g8yN/4rPlP99xYX/b7x3/2Gzaf9Uqlv/fr+E/6nU
rf/U6db/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wDc8t4AueW+AJfZngB0zH7/fc+I/4fSkf+Q1Zv/mtik/5nYpP+Z2KP/mNej/5jX
ov+U1Z//kNSb/4zSmP+I0ZT/htCS/4TPkP+Bzo7/f82M/37Mi/9+zIr/fcuJ/33LiP98y4j/fMuH/3vK
h/97yob/e8qG/3vKhv97yYX/e8mF/3rJhP96yIT/eciD/3nIg/99yYf/gcuL/4bNj/+Kz5T/fcaG/2+9
eP9itGr/Vatc/3/AhP+q1a3/1OrW/////wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A3PLfALrmvwCX2Z8Adc1//37QiP+H05L/kdWb/5rY
pf+a2KT/mdik/5nYo/+Y16P/ltah/5TVn/+S1J3/kNSb/47Tmv+N05j/jNKX/4rSlv+K0ZX/idGU/4nQ
lP+J0JP/iNCS/4jPkv+Hz5H/h8+R/4bOkP+GzpD/hc2P/4XNjv+EzI7/g8yN/4PMjP+CzIz/hMyO/4bN
kP+IzpL/is+U/33Ghv9wvXj/Y7Rq/1asXf+AwIX/qtWu/9Tq1v////8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////ANzy3wC65r8AmNqfAHbO
gP9/0In/iNOT/5HWnP+b2ab/mtil/5rYpf+Z2KT/mdik/5jXo/+Y16P/mNei/5jXov+X16H/l9eh/5bX
of+W16H/ldag/5XWn/+V1Z7/ldWe/5TUnf+U1J3/k9Sc/5PUnP+S05v/kdKa/5DRmf+P0Zj/jtCX/43Q
lv+M0JX/jNCV/4vPlP+Lz5T/is+U/4rPlP99xob/cL55/2O1a/9XrV7/gcGG/6vWrv/V6tb/////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wDc8t8Auua/AJjaoAB2zoD/fdCH/4TSjv+L1JX/kdac/5HVnP+Q1Zv/kNWb/4/Umv+P1Jn/j9SZ/47T
mP+O05j/jdOX/43Tl/+M0pf/jNKW/47TmP+Q1Jr/k9Sc/5XVnv+U1Z7/lNSd/5PUnP+T1Jz/j9KY/4vQ
lP+IzZH/hMuN/4PLjP+Dyov/gsqL/4HKiv+AyYn/gMmJ/3/Iif9/yIj/dcF+/2u7dP9htGn/WK5f/4HC
h/+r1q//1erX/////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A3fPfALvnwACZ26AAd8+B/3vQhv+A0Yr/hNKP/4jTk/+I05L/h9KS/4fS
kf+G0ZH/htGQ/4XQj/+F0I//hNCO/4TPjv+Dz43/g86N/4LOjP+H0JH/jNKW/5HUmv+W1p//ldWe/5TV
nv+T1J3/k9Sc/4zRlv+GzY//gMqJ/3rGg/95xYL/eMWB/3fEgP93xH//dsN//3XDfv91wn7/dMJ9/229
dv9muG//X7Nn/1mvYP+Cw4j/rNev/9Xr1/////8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AN3z3wC758AAmduhAHjPgv96z4T/e9CG/33Q
iP9/0Ir/ftCJ/37PiP99zoj/fc6H/3zNhv98zYb/e8yF/3rMhP96y4T/ecuD/3nKgv94yoL/gM2J/4fQ
kf+P05j/ltag/5XWn/+U1Z7/k9Wd/5PUnP+Kz5P/gcuK/3jGgf9vwXj/bsB3/26/dv9tvnX/bL50/2u9
dP9rvHP/arxy/2m7cv9luG7/YbVq/12yZf9asGH/g8OJ/6zXsP/V69f/////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wDd8+AAvOfBAJrb
ogB50IP/eM+C/3fPgv92zoH/ds6B/3XNgP91zH//dMt+/3TLfv9zyn3/csp8/3HJe/9xyXv/cMh6/3DH
ef9vxnj/b8Z4/nnKgv6Dzoz+jdKW/pfXof+W1qD/ldaf/5TVnv+T1Z3/h86R/3zIhf9wwnn/Zbxu8GS7
bfBjumzwYrlr8GK4au1ht2ntYLZo7V+1Z+1ftWfvXrRm712zZe9csmTvW7Fj74TEiu+t2LHv1uvY7///
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A5fbnAMzt0ACz5LkAmtui/5nbof+Z26H/mNqg/5jaoP+X2Z//l9mf/5fYnv+W2J7/lted/5XX
nf+V1pz/lNac/4vSk/+Czor/eMqB/2/Gef55yoP+g8+N/o3Tl/6X16H/ldaf/5TVnv+S1Zz/kdSb/4bO
kP97yIX/cMJ6/2a9b/BuwHfwd8N/8IDGh/CJyY/tiMmO7YjIju2HyI3th8eN74bGjO+FxovvhMWK74TE
iu+i06fvweHE7+Dw4e////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AO757wDd8+AAzO3QALznwf+758D/u+fA/7rmwP+65sD/uua//7rl
v/+55b7/ueW+/7nkvv+45L3/uOS9/7jkvf+m3Kz/lNWb/4LOiv9wx3r+esuD/oPPjf6N05f+l9eh/5XW
n/+T1Z3/kdSb/5DTmv+Fzo//e8iF/3HDev9nvnDwecWB8IvMkvCe1KPwsNu07bDbtO2v2rPtr9qz7a/a
s++u2bLvrtmy763Yse+t2LHvweHE79br2O/q9evv////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD2/PcA7vnvAOX25wDd8+D/3fPf/93z
3//c8t//3PLf/9zy3//c8t//3PLe/9zy3v/c8d7/2/He/9vx3v/b8d7/wOfF/6bcrP+L0pP/cch7/nrM
hP6E0I7+jdOY/pfXof+U1p//ktWd/5DUmv+O0pj/hM2O/3vIhP9xw3r/aL9x8IPKi/Cf1qXwu+G/8Nft
2e3X7dnt1+zZ7dfs2e3X7Nnv1uzY79bs2O/W69jv1uvY7+Dw4e/q9evv9Pr17////wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////ANvx
3gC45L0AldacAHLJfPR7zIX0hNCP9I3UmPSX2KL/lNaf/5LVnP+P05n/jdKX/4TNjf97yYT/csR7/2nA
cr6Oz5W+tN+4vtnv277///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////APb8
9wDu+e8A5fbnAN3z3wDC6McAqN6uAI3UlgBzyn30fM2G9IXRkPSP1Jn0mNij/5bXoP+U1Z7/kdSc/4/T
mf+GzpD/fMqG/3PFfP9qwXO+j9CWvrTgub7Z79y+////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wDu+e8A3fPfAMzt0AC758AAqeCwAJjZnwCG0o8Adct/9H7OiPSH0ZH0kNWb9JnY
pP+X16L/ltag/5TVnv+S1Zz/iNCS/37LiP90xn7/a8J0vpDRlr614Lm+2u/cvv///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A5fbnAMzt0ACy5LgAmduhAJDXmQCH05AAf8+IAHbM
gPR/z4n0iNKT9JHVnPSa2KX/mdik/5jXov+W16D/ldaf/4rRlP+AzIr/dsd//2zDdb6Q0pe+teG6vtrw
3L7///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AN3z3wC758AAmduhAHfP
ghJ3zoISd86CEnfNghJ4zYL/gdCL/4rTlP+T1p3/nNmn/5vYpf+a2KT/mdij/5jYov+N05f/gs6M/3fJ
gf9txHbskdKY7Lbhuuza8Nzs////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wDl9ucAzO3QALLkuACZ26ESkNeZEojUkRKA0IkSeM2C/37PiP+F0Y//i9OW/5LWnf+R1Zz/kNWb/4/U
mf+O1Jj/htCQ/37Mh/92yH//bcR37JLTmey24bvs2vDd7P///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A7vnvAN3z3wDM7dAAu+fAEqrgsBKZ2qESiNSREnjOgv98z4b/gNCK/4TR
j/+I05P/h9KS/4fSkf+G0ZD/hdGP/3/Oif96y4P/dMh9/27FeOyS05nstuK77Nrw3ez///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////APb89wDu+e8A5fbnAN3z3xLD6cgSquCwEpHX
mRJ4zoL/ec6D/3vPhf99z4f/ftCJ/37PiP99zoj/fM6H/3zNhv95y4L/dcl//3LIfP9vxnnsk9Sa7Lfi
vOzb8N3s////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A3fPfALvnwACZ26EAeM+C1HfOgdR2zoHUdc2A1HXNgP90zH//dMt+/3PKff9zyn3+csl8/nHI
e/5wx3r+cMd6tJPVm7S347y02/HdtP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AOX25wDM7dAAs+S4AJnbodSZ2qDUmNqg1JjZoNSX2Z//l9if/5bY
nv+W157/lted/pXWnP6U1pz+lNWb/pPVm7Su37S0yerNtOT05rT///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wDu+e8A3fPfAMzt0AC758DUu+bA1Lrm
wNS65r/Uuua//7nlv/+55b7/ueS+/7nkvv645L3+uOO9/rfjvP6347y0yerNtNvx3bTt+O60////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A9vz3AO75
7wDl9ucA3fPf1N3y39Tc8t/U3PLf1Nzy3//c8t//3PLe/9zx3v/c8d7+2/He/tvx3v7b8d3+2/HdtOT0
5rTt+O609vv2tP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A//////8AD////////wAP////////AA////////8AD//wAAD/AAAA//AAAP8AAAD/8AAA/wAA
AP/wAAD/AAAA//AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAAAADwAAAAAAAAAPAA
AAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAA
AADwAAAAAAAAAPAAAAAAAAAA//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//w
AAAAAAAP//AAAAAAAA//8AAAAAAAD/AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAA
///wAAAAAAD///AAAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AAAAAAA///wAAAAAAD///AA
AAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP/////wAA////////AAD///////8AAP///////wAA//
/////wAAD///////AAAP//////8AAA///////wAAD///////8AAP///////wAA////////AAD///////
8AAP//////////////////////////////////////////////8=
</value>
</data>
</root>

View File

@ -150,17 +150,17 @@ namespace Tinke
// Control events
private void txtBanReserved_Leave(object sender, EventArgs e)
{
banner.reserved = StringToBytes(txtBanReserved.Text, 28);
banner.reserved = Tools.Helper.StringToBytes(txtBanReserved.Text, 28);
txtBanReserved.Text = BitConverter.ToString(banner.reserved);
}
private void txtReserved_Leave(object sender, EventArgs e)
{
header.reserved = StringToBytes(txtReserved.Text, 9);
header.reserved = Tools.Helper.StringToBytes(txtReserved.Text, 9);
txtReserved.Text = BitConverter.ToString(header.reserved);
}
private void txtReserved2_Leave(object sender, EventArgs e)
{
header.reserved2 = StringToBytes(txtReserved2.Text, 56);
header.reserved2 = Tools.Helper.StringToBytes(txtReserved2.Text, 56);
txtReserved2.Text = BitConverter.ToString(header.reserved2);
}
@ -337,18 +337,6 @@ namespace Tinke
}
// Helper methods
private byte[] StringToBytes(string text, int num_bytes)
{
string hexText = text.Replace("-", "");
hexText = hexText.PadRight(num_bytes * 2, '0');
List<Byte> hex = new List<byte>();
for (int i = 0; i < hexText.Length; i += 2)
hex.Add(Convert.ToByte(hexText.Substring(i, 2), 16));
return hex.ToArray();
}
byte[] nintendoLogo = {
0x24, 0xFF, 0xAE, 0x51, 0x69, 0x9A, 0xA2, 0x21, 0x3D, 0x84, 0x82, 0x0A,
0x84, 0xE4, 0x09, 0xAD, 0x11, 0x24, 0x8B, 0x98, 0xC0, 0x81, 0x7F, 0x21,

View File

@ -153,6 +153,7 @@ namespace Tinke
Console.WriteLine(" " + xml.Element("S21").Value + ": {0}", ncer.cebk.banks[i].cells[j].obj2.index_palette.ToString());
Console.WriteLine(" " + xml.Element("S22").Value + ": {0}", (obj2 & 0x03FF).ToString());
Console.WriteLine(" " + xml.Element("S23").Value + ": {0}", ncer.cebk.banks[i].cells[j].obj2.tileOffset.ToString());
Console.WriteLine(" " + "Object priority" + ": {0}", ncer.cebk.banks[i].cells[j].obj2.priority.ToString());
}
#endregion
@ -506,8 +507,15 @@ namespace Tinke
return 1;
else if (c1.obj2.priority > c2.obj2.priority)
return -1;
else
return 0;
else // Same priority
{
if (c1.num_cell < c2.num_cell)
return 1;
else if (c1.num_cell > c2.num_cell)
return -1;
else // Same cell
return 0;
}
}
private static Cell Get_LastCell(Bank bank)
{

View File

@ -385,6 +385,7 @@ namespace Tinke.Nitro
diccionario.Add("13", "Electronic Arts Japan");
diccionario.Add("18", "Hudson Entertainment");
diccionario.Add("20", "Destination Software");
diccionario.Add("36", "Codemasters");
diccionario.Add("41", "Ubisoft");
diccionario.Add("4F", "Eidos");
@ -396,20 +397,25 @@ namespace Tinke.Nitro
diccionario.Add("5G", "Majesco Entertainment");
diccionario.Add("64", "LucasArts Entertainment");
diccionario.Add("69", "Electronic Arts Inc.");
diccionario.Add("6K", "UFO Interactive");
diccionario.Add("6V", "JoWooD Entertainment");
diccionario.Add("70", "Atari");
diccionario.Add("78", "THQ");
diccionario.Add("7D", "Vivendi Universal Games");
diccionario.Add("7J", "Zoo Digital Publishing Ltd");
diccionario.Add("7N", "Empire Interactive");
diccionario.Add("7U", "Ignition Entertainment");
diccionario.Add("7V", "Summitsoft Entertainment");
diccionario.Add("8J", "General Entertainment");
diccionario.Add("8P", "SEGA");
diccionario.Add("99", "Rising Star Games");
diccionario.Add("A4", "Konami Digital Entertainment");
diccionario.Add("AF", "Namco");
diccionario.Add("EB", "Atlus USA");
diccionario.Add("B2", "Bandai");
diccionario.Add("EB", "Atlus");
diccionario.Add("FH", "Foreign Media Games");
diccionario.Add("FK", "The Game Factory");
diccionario.Add("FP", "Mastiff");
diccionario.Add("FR", "dtp young");
diccionario.Add("G9", "D3Publisher of America");
diccionario.Add("GD", "SQUARE ENIX");

View File

@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Este código fue generado por una herramienta.
// Versión de runtime:4.0.30319.237
// Versión de runtime:4.0.30319.239
//
// Los cambios en este archivo podrían causar un comportamiento incorrecto y se perderán si
// se vuelve a generar el código.
@ -137,6 +137,13 @@ namespace Tinke.Properties {
}
}
internal static System.Drawing.Bitmap plugin_go {
get {
object obj = ResourceManager.GetObject("plugin_go", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap zoom {
get {
object obj = ResourceManager.GetObject("zoom", resourceCulture);

View File

@ -118,8 +118,11 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="picture_edit" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\picture_edit.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="compress" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\compress.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="pencil" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\pencil.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="accept" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\accept.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@ -139,8 +142,8 @@
<data name="calculator" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\calculator.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="pencil" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\pencil.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="picture_edit" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\picture_edit.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="picture_go" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\picture_go.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@ -152,7 +155,7 @@
<value>..\Resources\zoom.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="compress" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\compress.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="plugin_go" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\plugin_go.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 694 B

View File

@ -101,6 +101,7 @@ namespace Tinke
this.btnImport = new System.Windows.Forms.Button();
this.btnSaveROM = new System.Windows.Forms.Button();
this.btnPack = new System.Windows.Forms.Button();
this.callPluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStrip1.SuspendLayout();
this.toolStrip2.SuspendLayout();
this.SuspendLayout();
@ -337,7 +338,7 @@ namespace Tinke
this.toolStrip2.Name = "toolStrip2";
this.toolStrip2.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;
this.toolStrip2.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.toolStrip2.Size = new System.Drawing.Size(55, 46);
this.toolStrip2.Size = new System.Drawing.Size(55, 65);
this.toolStrip2.TabIndex = 11;
this.toolStrip2.Text = "toolStrip2";
//
@ -415,7 +416,8 @@ namespace Tinke
this.toolStripMenuItem3,
this.toolStripMenuComprimido,
this.toolStripAbrirFat,
this.toolStripAbrirTexto});
this.toolStripAbrirTexto,
this.callPluginToolStripMenuItem});
this.toolStripOpenAs.Image = global::Tinke.Properties.Resources.zoom;
this.toolStripOpenAs.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripOpenAs.Name = "toolStripOpenAs";
@ -426,7 +428,7 @@ namespace Tinke
//
this.toolStripMenuItem1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripMenuItem1.Image")));
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
this.toolStripMenuItem1.Size = new System.Drawing.Size(94, 22);
this.toolStripMenuItem1.Size = new System.Drawing.Size(152, 22);
this.toolStripMenuItem1.Text = "S17";
this.toolStripMenuItem1.Click += new System.EventHandler(this.toolAbrirComoItemPaleta_Click);
//
@ -434,7 +436,7 @@ namespace Tinke
//
this.toolStripMenuItem2.Image = ((System.Drawing.Image)(resources.GetObject("toolStripMenuItem2.Image")));
this.toolStripMenuItem2.Name = "toolStripMenuItem2";
this.toolStripMenuItem2.Size = new System.Drawing.Size(94, 22);
this.toolStripMenuItem2.Size = new System.Drawing.Size(152, 22);
this.toolStripMenuItem2.Text = "S18";
this.toolStripMenuItem2.Click += new System.EventHandler(this.toolAbrirComoItemTile_Click);
//
@ -442,7 +444,7 @@ namespace Tinke
//
this.toolStripMenuItem3.Image = ((System.Drawing.Image)(resources.GetObject("toolStripMenuItem3.Image")));
this.toolStripMenuItem3.Name = "toolStripMenuItem3";
this.toolStripMenuItem3.Size = new System.Drawing.Size(94, 22);
this.toolStripMenuItem3.Size = new System.Drawing.Size(152, 22);
this.toolStripMenuItem3.Text = "S19";
this.toolStripMenuItem3.Click += new System.EventHandler(this.toolAbrirComoItemScreen_Click);
//
@ -450,7 +452,7 @@ namespace Tinke
//
this.toolStripMenuComprimido.Image = global::Tinke.Properties.Resources.compress;
this.toolStripMenuComprimido.Name = "toolStripMenuComprimido";
this.toolStripMenuComprimido.Size = new System.Drawing.Size(94, 22);
this.toolStripMenuComprimido.Size = new System.Drawing.Size(152, 22);
this.toolStripMenuComprimido.Text = "S2A";
this.toolStripMenuComprimido.Click += new System.EventHandler(this.s2AToolStripMenuItem_Click);
//
@ -458,7 +460,7 @@ namespace Tinke
//
this.toolStripAbrirFat.Image = global::Tinke.Properties.Resources.package;
this.toolStripAbrirFat.Name = "toolStripAbrirFat";
this.toolStripAbrirFat.Size = new System.Drawing.Size(94, 22);
this.toolStripAbrirFat.Size = new System.Drawing.Size(152, 22);
this.toolStripAbrirFat.Text = "S3D";
this.toolStripAbrirFat.Click += new System.EventHandler(this.toolStripAbrirFat_Click);
//
@ -466,7 +468,7 @@ namespace Tinke
//
this.toolStripAbrirTexto.Image = global::Tinke.Properties.Resources.page_white_text;
this.toolStripAbrirTexto.Name = "toolStripAbrirTexto";
this.toolStripAbrirTexto.Size = new System.Drawing.Size(94, 22);
this.toolStripAbrirTexto.Size = new System.Drawing.Size(152, 22);
this.toolStripAbrirTexto.Text = "S26";
this.toolStripAbrirTexto.Click += new System.EventHandler(this.toolStripAbrirTexto_Click);
//
@ -571,6 +573,14 @@ namespace Tinke
this.btnPack.UseVisualStyleBackColor = true;
this.btnPack.Click += new System.EventHandler(this.btnPack_Click);
//
// callPluginToolStripMenuItem
//
this.callPluginToolStripMenuItem.Image = global::Tinke.Properties.Resources.plugin_go;
this.callPluginToolStripMenuItem.Name = "callPluginToolStripMenuItem";
this.callPluginToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.callPluginToolStripMenuItem.Text = "Call plugin";
this.callPluginToolStripMenuItem.Click += new System.EventHandler(this.callPluginToolStripMenuItem_Click);
//
// Sistema
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
@ -656,6 +666,7 @@ namespace Tinke
private System.Windows.Forms.ToolStripMenuItem toolStripAbrirTexto;
private System.Windows.Forms.Button btnPack;
private System.Windows.Forms.ToolStripButton stripRefreshMsg;
private System.Windows.Forms.ToolStripMenuItem callPluginToolStripMenuItem;
}
}

View File

@ -356,6 +356,9 @@ namespace Tinke
accion = new Acciones("", "NO GAME");
DateTime t1 = DateTime.Now;
accion.LastFileID = files.Length;
accion.LastFolderID = 0xF000;
// Obtenemos el sistema de archivos
sFolder root = new sFolder();
root.name = "root";
@ -408,6 +411,9 @@ namespace Tinke
accion = new Acciones("", "NO GAME");
DateTime t1 = DateTime.Now;
accion.LastFileID = 0;
accion.LastFolderID = 0xF000;
// Obtenemos el sistema de archivos
sFolder root = new sFolder();
root.name = "root";
@ -606,7 +612,7 @@ namespace Tinke
{
int nImage = accion.ImageFormatFile(archivo.format);
string ext = "";
if (archivo.format == Format.Unknown)
{
stream.Position = archivo.offset;
@ -988,8 +994,9 @@ namespace Tinke
for (int i = 0; i < panelObj.Controls.Count; i++)
panelObj.Controls[i].Dispose();
panelObj.Controls.Clear();
Control control = accion.See_File();
if (control.Size.Height != 0 && control.Size.Width != 0) // Si no sería nulo
if (control.Size.Height != 0 && control.Size.Width != 0)
{
panelObj.Controls.Add(control);
if (btnDesplazar.Text == ">>>>>")
@ -1053,11 +1060,19 @@ namespace Tinke
btnPack.Enabled = true;
Get_SupportedFiles();
Add_TreeNodes(uncompress);
if (!isMono)
debug.Add_Text(sb.ToString());
sb.Length = 0;
this.Cursor = Cursors.Default;
}
private void Add_TreeNodes(sFolder unpacked)
{
// Add new files to the main tree
TreeNode selected = treeSystem.SelectedNode;
selected.Nodes.Clear();
FolderToNode(uncompress, ref selected);
FolderToNode(unpacked, ref selected);
selected.ImageIndex = accion.ImageFormatFile(accion.Selected_File().format);
selected.SelectedImageIndex = selected.ImageIndex;
@ -1069,22 +1084,6 @@ namespace Tinke
treeSystem.SelectedNode.Nodes.AddRange((TreeNode[])nodos);
treeSystem.SelectedNode.Expand();
treeSystem.Focus();
if (!isMono)
debug.Add_Text(sb.ToString());
sb.Length = 0;
this.Cursor = Cursors.Default;
}
private void btnPack_Click(object sender, EventArgs e)
{
this.Cursor = Cursors.WaitCursor;
accion.Pack();
if (!isMono)
debug.Add_Text(sb.ToString());
sb.Length = 0;
this.Cursor = Cursors.Default;
}
private void UnpackFolder()
{
@ -1130,6 +1129,18 @@ namespace Tinke
accion.Unpack(archivo.id);
}
}
private void btnPack_Click(object sender, EventArgs e)
{
this.Cursor = Cursors.WaitCursor;
accion.Pack();
if (!isMono)
debug.Add_Text(sb.ToString());
sb.Length = 0;
this.Cursor = Cursors.Default;
}
private void btnExtraer_Click(object sender, EventArgs e)
{
@ -1561,7 +1572,7 @@ namespace Tinke
private void stripRefreshMsg_Click(object sender, EventArgs e)
{
if (!isMono)
debug.Add_Text(sb.ToString());
debug.Add_Text(sb.ToString());
sb.Length = 0;
}
private void toolStripInfoRom_Click(object sender, EventArgs e)
@ -1640,7 +1651,7 @@ namespace Tinke
#endregion
#region Menu-> Open as...
private void AbrirComo(Format formato)
private void OpenAs(Format formato)
{
sFile selectedFile = accion.Selected_File();
string savedFile = "";
@ -1685,20 +1696,20 @@ namespace Tinke
}
if (!isMono)
debug.Add_Text(sb.ToString());
debug.Add_Text(sb.ToString());
sb.Length = 0;
}
private void toolAbrirComoItemPaleta_Click(object sender, EventArgs e)
{
AbrirComo(Format.Palette);
OpenAs(Format.Palette);
}
private void toolAbrirComoItemTile_Click(object sender, EventArgs e)
{
AbrirComo(Format.Tile);
OpenAs(Format.Tile);
}
private void toolAbrirComoItemScreen_Click(object sender, EventArgs e)
{
AbrirComo(Format.Map);
OpenAs(Format.Map);
}
private void s2AToolStripMenuItem_Click(object sender, EventArgs e)
{
@ -1744,12 +1755,12 @@ namespace Tinke
treeSystem.Focus();
if (!isMono)
debug.Add_Text(sb.ToString());
debug.Add_Text(sb.ToString());
sb.Length = 0;
}
private void toolStripAbrirTexto_Click(object sender, EventArgs e)
{
AbrirComo(Format.Text);
OpenAs(Format.Text);
}
private void toolStripAbrirFat_Click(object sender, EventArgs e)
{
@ -1806,6 +1817,80 @@ namespace Tinke
}
sb.Length = 0;
}
private void callPluginToolStripMenuItem_Click(object sender, EventArgs e)
{
sFile opFile = accion.Selected_File();
Dialog.CallPlugin win = new Dialog.CallPlugin(accion.Get_PluginsList());
if (opFile.name.Contains('.'))
win.Extension = opFile.name.Substring(opFile.name.IndexOf('.') + 1);
win.ID = opFile.id;
win.Header = accion.Get_MagicIDS(opFile);
if (win.ShowDialog() != System.Windows.Forms.DialogResult.OK)
return;
this.Cursor = Cursors.WaitCursor;
Object action = accion.Call_Plugin(opFile, win.Plugin, win.Extension, win.ID, win.Header, win.Action);
if (!isMono)
debug.Add_Text(sb.ToString());
sb.Length = 0;
switch (win.Action)
{
case 1: // Show_Info
if (action == null)
break;
if (toolStripVentana.Checked)
{
Visor visor = new Visor();
visor.Controls.Add((Control)action);
visor.Text += " - " + opFile.name;
visor.Show();
}
else
{
for (int i = 0; i < panelObj.Controls.Count; i++)
panelObj.Controls[i].Dispose();
panelObj.Controls.Clear();
Control control = (Control)action;
if (control.Size.Height != 0 && control.Size.Width != 0)
{
panelObj.Controls.Add(control);
if (btnDesplazar.Text == ">>>>>")
btnDesplazar.PerformClick();
}
else
if (btnDesplazar.Text == "<<<<<")
btnDesplazar.PerformClick();
}
break;
case 2: // Unpack
if (action == null)
break;
sFolder unpacked = (sFolder)action;
if (!(unpacked.files is List<sFile>) && !(unpacked.folders is List<sFolder>))
{
MessageBox.Show(Tools.Helper.GetTranslation("Sistema", "S36"));
break;
}
toolStripOpenAs.Enabled = false;
Get_SupportedFiles();
Add_TreeNodes(unpacked);
break;
}
this.Cursor = Cursors.Default;
win.Dispose();
}
#endregion
#region Search
@ -1943,5 +2028,6 @@ namespace Tinke
btnDesplazar.Text = ">>>>>";
}
}
}
}

View File

@ -125,7 +125,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA6
JwAAAk1TRnQBSQFMAgEBGQEAAXgBAwF4AQMBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
JwAAAk1TRnQBSQFMAgEBGQEAAYABAwGAAQMBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAAXADAAEBAQABCAYAARwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
@ -386,17 +386,17 @@
<data name="stripRefreshMsg.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJfSURBVDhPlZPbT5JhHMfZ/DvI2UvWjLWFLns9ZGyoA8HD
ENo0kUfE0fDAcplK4uH1ReUNRQXUNElz2TxsLLewk6UymHYwWVvX3jk3b5t33+C9EmSNntvn93x+h8/z
EwhSOPdelndqVjRpKYQmD1F6SyLycencPwEPt/VC8/t6S+ObmsD9de1JzatKqOfLoPIWw/Raj4bFWuT1
ZLuSQswfGmjTO52f2e3CxP4I5n66MX/owcyBC+6vTzG2N4ShYB+qPeUQN2cOxkEebOqFxre1/tE9Fku/
ZjH9YwzPDibg+eaEa38YXIgBG7Shd7sLSmcpKGOGIw7QuFFrsX1+hIXINOYO3HCG7TAu63DXTiPPloPs
jhuocMmh4IohIumTF1qoW1UHRnb7+IyOIAMpV3hUOHDLeT5QZKAilP6SL2n/6heK44oZ2VnJuPRPkT3/
tKAvh0kMzKgXWgUaQZpupZpoF8tJ1aycKCelRMYVEIHSIyMlziJSZKcJbcshNzvEJOa8bcdgTQRpFlSM
ylt6yidjb58V9EqOk1bV+sXgM23WRc5fqp8rnCp38dFoyB61MoyOjbbofMSBC4CWLTLJhq3o33kM3Wo1
or8Q0ZJhXjOA22V4pSOhAWinKnG9JdMSBzB/1DuYYBeWf8/zSn2RqTilAzvdvFLDUh2yzFf8lJ4SJiit
GXzyqR2+Qy+v1Pt9DOP7DnBhFv1b3WheN6JqogzXTCI/1ZBOJ+1fu6B0tfqbYFohkHGFuMPkItcqgaQ9
60TcfDWQ2XTZciFzIim2OFI2P26I/7WJMY10T3ZnKo/+AuBRMystdw6GAAAAAElFTkSuQmCC
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJdSURBVDhPlZPbS9phGMeF/g4X7dfaaDIoZWFnWQcstcJ0
oGS+meGwgyzWKpeZv7TyN9PyUK2Wq8UatUAKZju1pVLUDi0Z7Lq7CLod3X2nXuWB0d7b93k/z+HzPizW
Fc79l5J+2Zos6wqhmUNEvpqocEqw8E/Aw101W/++1dC+qQgqN+RnileNkC7WQ+yrhu61Gm3LShQPcV0Z
IfoPbXzdO1WADg9g+nACCz89WDz2Yu7IBc/Xp3AejGEsYkazVwJOZ95oEuTBtpqtfasMTB5YsfJrHrM/
nHh2NA3vNwdch+Ng9mhYIyYM7w5A5KgFpc2xJwHat5QG0+dHWIrOYuHIA8e+DdpVFSptfBSbeOD23UGD
S4g6phq5JNud1kLLujQ4ETYnMtojNCqZspMyy13H5cBcDRWl1Nf8GfuXvhCeNszdu6iZEvypsJWcl5p5
dGpgTivbyJKxslRrzUS+LCFN80IicgtIFVNKWCJvFalxVJAKG5/wTTxS0Mchcec9IY0xFSRbEtNib+15
PFn5aNFF6XDBacaqur9o/LrtlujlS+nzOofYU30yuWeLWRlH31ZPbD6cYBqga4e4rftGjIQeQ7XejNgv
RKxk6N9owITphNKJPQvkM4243ZVnSALoP6rtdGQAq78XE0r90ZkkpZbQYEKpZqUF+fobAUpNsVOUKkaf
fOqF/9iXUOr77sTUoR3MvhUjO4Po3NCiaboet3S5Aaotm5+xf/mSyNUd6IBujaCKKUM5XYQiYyEKe/PP
OJ03g3kd1w1pmVNJ8cURWEuShvhfmxjXyB/i9l/l0V/MzjMiMkQcCwAAAABJRU5ErkJggg==
</value>
</data>
<metadata name="toolStrip2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
@ -512,19 +512,19 @@
<data name="toolStripDeleteChain.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKwSURBVDhPjZLdT5JxFMdJ9A9o3dhWa95601VXXahJN62X
zZraRbqmztJeVpkQZuDLfEwCESwVRCJLeXHSRBRFrGCkpI9JbjabWk7zJV94QBS3jG/Pw5JpOuts3+38
tt/5nO/v/A5LbRoSqw3kvNRAUhLNvyXVk5SylaxkbUV924cFrU4XXPX74V8L7Kul1QAWPD7UNPd5wgCm
s2/Vj6ft0xC3D0No1kEzKIfeXYqm4WJU20W43qDAPZUDXNUoFn0BSA0fqTCgkrbNdK4xT4PotEAzIIf2
Ux6UA9mo6c9ArSsHImsJcupega/+jAVqD4CPBtR1zkDY0YhmumutKwtV769AZL8M4l0qJPY7SJc9QeGL
McxT67SDoZ0OKBqgtHyHwKTBc7IQUmcaiLfJKOpNwqOeJBC2G0iTPkbRyy+Y86ztBnj8Aai6ZkGYOiC3
l6PSmQFh70Xwuy9AYEvFw9c85DxrRGnzOOZW9nCwQk9XbZ2DvMMNnl4Nou02KmxZIKxXUWDIRaa8irbv
RLluYjeA+ftlerIa23wIIjMNI784DWUSDghRAoQlyShu6oOk9RtELZOY/dsBA1jyBsDXnwdXexZ5TWeg
KDiBEfUluGkZy+KQrYiHjH8c5uRD6EmMgjku+peFE8ELfaVYM0gt0wD7+JuwnCNGuPrr4TbegmOsG46G
PLjvn0TALEZw1II17V0M5MZuWhMjb7IkIcD6DsB2GJN3px7BOl0M2TmAexAoi8FiRTzMCexJVrWBnFr2
eOGlB+n1b4AKKQCKPnv+iLEdJFuxPTyCaAhORQZZSiNZoWgZcjDLIdXvLebNflUGQBdt5LOwQmvqGhuW
0+yZ8ErvlzhSDgtd6cd+znJj8ONBFCYyD8AWG7nZyYng/xeAueRIOcrrSmR/ZWx3cdjTW8W/AYH9fo4C
Wwe0AAAAAElFTkSuQmCC
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKvSURBVDhPjZLdT5JxFMdJ9A9o3dhWa95601VXXahJN62X
zZraRbqmztJeVpkQZuDLfEwCESwVRCJLEJw0EUURKxgp6WOSm82mltN8yRceEMUt49vzsGSazjrbdzu/
7Xc+5/s7v8NSm4bEagM5LzWQlETzb0n1JKVsJStZW1Hf9mFBq9MFV/1++NcC+2ppNYAFjw812j5PGMB0
9q368bR9GuL2YQjNzdAMyqF3l6JpuBjVdhGuNyhwT+UAVzWKRV8AUsNHKgyopG0znWvM0yA6LdAMyKH7
lAflQDZq+jNQ68qByFqCnLpX4Ks/Y4HaA+CjAXWdMxB2NEJLd611ZaHq/RWI7JdBvEuFxH4H6bInKHwx
hnlqnXYwtNMBRQOUlu8QmDR4ThZC6kwD8TYZRb1JeNSTBMJ2A2nSxyh6+QVznrXdAI8/AFXXLAhTB+T2
clQ6MyDsvQh+9wUIbKl4+JqHnGeNKNWOY25lDwcr9HTV1jnIO9zg6dUg2m6jwpYFwnoVBYZcZMqraPtO
lDdP7AYwf79MT1Zjmw9BZKZh5BenoUzCASFKgLAkGcVNfZC0foOoZRKzfztgAEveAPj68+DqziKv6QwU
BScwor4ENy1jWRyyFfGQ8Y/DnHwIPYlRMMdF/7JwInihrxRrBqllGmAffxOWc8QIV3893MZbcIx1w9GQ
B/f9kwiYxQiOWrCmu4uB3NhNa2LkTZYkBFjfAdgOY/Lu1CNYp4shOwdwDwJlMVisiIc5gT3JqjaQU8se
L7z0IL3+DVAhBUDRZ88fMbaDZCu2h0cQDcGpyCBLaSQrFC1DDmY5pPq9xbzZr8oA6KKNfBZWaE1dY8Ny
mj0TXun9EkfKYaEr/djPWW4MfjyIwkTmAdhiIzc7ORH8/wIwlxwpR3ldieyvjO0uDnt6q/g3dqJ+izZA
CDcAAAAASUVORK5CYII=
</value>
</data>
<data name="toolStripMenuItem1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">

View File

@ -151,6 +151,12 @@
<Compile Include="Debug.Designer.cs">
<DependentUpon>Debug.cs</DependentUpon>
</Compile>
<Compile Include="Dialog\CallPlugin.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Dialog\CallPlugin.Designer.cs">
<DependentUpon>CallPlugin.cs</DependentUpon>
</Compile>
<Compile Include="Dialog\FATExtract.cs">
<SubType>Form</SubType>
</Compile>
@ -264,6 +270,9 @@
<EmbeddedResource Include="Debug.resx">
<DependentUpon>Debug.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Dialog\CallPlugin.resx">
<DependentUpon>CallPlugin.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Dialog\FATExtract.resx">
<DependentUpon>FATExtract.cs</DependentUpon>
</EmbeddedResource>

View File

@ -149,5 +149,16 @@ namespace Tinke.Tools
return message;
}
public static byte[] StringToBytes(string text, int num_bytes)
{
string hexText = text.Replace("-", "");
hexText = hexText.PadRight(num_bytes * 2, '0');
List<Byte> hex = new List<byte>();
for (int i = 0; i < hexText.Length; i += 2)
hex.Add(Convert.ToByte(hexText.Substring(i, 2), 16));
return hex.ToArray();
}
}
}