Ejemplo n.º 1
0
        public static TPL CreateNewFromImage()
        {
            OpenFileDialog ofd = new OpenFileDialog();

            ofd.Multiselect = false;
            ofd.Filter      = FileFilters.REV_TEX;
            if (ofd.ShowDialog() != DialogResult.OK)
            {
                return(null);
            }

            TPL tpl = new TPL();

            tpl.IFileInfo = new IFileInfo();
            tpl.FileName  = Path.GetFileNameWithoutExtension(ofd.FileName) + ".tpl";
            tpl.Header    = new TPL_IO.Header();
            var image = TplTextureWrapper.Create(tpl, tpl.Header, ofd.FileName);

            if (image == null) //Operation cancelled
            {
                return(null);
            }

            tpl.Nodes.Add(image);
            return(tpl);
        }
Ejemplo n.º 2
0
            public static TplTextureWrapper Create(TPL tpl, TPL_IO.Header header, string FileName)
            {
                TplTextureWrapper tex = new TplTextureWrapper(tpl);

                tex.Replace(FileName);
                if (tex.ImageData == null) //Dialog cancelled if image data not set
                {
                    return(null);
                }
                tex.ImageHeader.Width  = (ushort)tex.Width;
                tex.ImageHeader.Height = (ushort)tex.Height;
                tex.ImageHeader.Format = Decode_Gamecube.FromGenericFormat(tex.Format);
                tex.ImageHeader.MaxLOD = (byte)tex.MipCount;
                header.Images.Add(new TPL_IO.ImageEntry()
                {
                    Header        = tex.ImageHeader,
                    ImageData     = tex.ImageData,
                    PaletteHeader = tex.PaletteHeader,
                });
                return(tex);
            }
Ejemplo n.º 3
0
        public void Load(System.IO.Stream stream)
        {
            Text    = FileName;
            CanSave = true;

            using (var reader = new FileReader(stream))
            {
                reader.SetByteOrder(true);

                Header = new TPL_IO.Header();
                Header.Read(reader);

                foreach (var tex in Header.Images)
                {
                    var texWrapper = new TplTextureWrapper(this, tex.Header);
                    texWrapper.PaletteHeader    = tex.PaletteHeader;
                    texWrapper.ImageKey         = "Texture";
                    texWrapper.SelectedImageKey = "Texture";
                    texWrapper.Format           = Decode_Gamecube.ToGenericFormat(tex.Header.Format);
                    texWrapper.Width            = tex.Header.Width;
                    texWrapper.Height           = tex.Header.Height;
                    texWrapper.ImageData        = tex.ImageData;
                    texWrapper.MipCount         = tex.Header.MaxLOD;
                    texWrapper.PlatformSwizzle  = PlatformSwizzle.Platform_Gamecube;
                    Nodes.Add(texWrapper);

                    if (tex.PaletteHeader != null)
                    {
                        var GXPaletteFormat = (Decode_Gamecube.PaletteFormats)tex.PaletteHeader.PaletteFormat;
                        texWrapper.SetPaletteData(tex.PaletteHeader.Data, Decode_Gamecube.ToGenericPaletteFormat(GXPaletteFormat));
                    }
                }

                UpdateDisplayedNames();
            }
        }
Ejemplo n.º 4
0
        public void Load(System.IO.Stream stream)
        {
            Text = FileName;

            using (var reader = new FileReader(stream))
            {
                reader.SetByteOrder(true);

                uint Identifier = reader.ReadUInt32();

                //TPL has multiple versions i assume? Some games like F Zero use a custom one so try that
                if (Identifier != 0x0020AF30)
                {
                    reader.Position = 0;
                    uint ImageCount = reader.ReadUInt32();
                    Console.WriteLine("ImageCount" + ImageCount);
                    for (int i = 0; i < ImageCount; i++)
                    {
                        reader.SeekBegin(4 + (i * 0x10));

                        uint   format   = reader.ReadUInt32();
                        uint   offset   = reader.ReadUInt32();
                        uint   width    = reader.ReadUInt16();
                        uint   height   = reader.ReadUInt16();
                        uint   mipCount = reader.ReadUInt16();
                        ushort unknown  = reader.ReadUInt16();

                        if (format == 256)
                        {
                            break;
                        }

                        Console.WriteLine(offset);
                        Console.WriteLine(format);

                        var GXFormat = (Decode_Gamecube.TextureFormats)format;

                        //Now create a wrapper
                        var texWrapper = new TplTextureWrapper();
                        texWrapper.Text             = $"Texture {i}";
                        texWrapper.ImageKey         = "Texture";
                        texWrapper.SelectedImageKey = "Texture";
                        texWrapper.Format           = Decode_Gamecube.ToGenericFormat(GXFormat);
                        texWrapper.Width            = width;
                        texWrapper.Height           = height;
                        texWrapper.MipCount         = mipCount;
                        texWrapper.ImageData        = reader.getSection(offset, (uint)Decode_Gamecube.GetDataSize(GXFormat, (int)width, (int)height));
                        texWrapper.PlatformSwizzle  = PlatformSwizzle.Platform_Gamecube;
                        Nodes.Add(texWrapper);
                    }
                }
                else
                {
                    uint ImageCount       = reader.ReadUInt32();
                    uint ImageOffsetTable = reader.ReadUInt32();

                    for (int i = 0; i < ImageCount; i++)
                    {
                        reader.SeekBegin(ImageOffsetTable + (i * 8));

                        uint ImageHeaderOffset   = reader.ReadUInt32();
                        uint PaletteHeaderOffset = reader.ReadUInt32();

                        reader.SeekBegin(ImageHeaderOffset);
                        var image = new ImageHeader();
                        image.Read(reader);
                        ImageHeaders.Add(image);

                        var GXFormat = (Decode_Gamecube.TextureFormats)image.Format;

                        Console.WriteLine($"ImageOffset {image.ImageOffset}");

                        //Now create a wrapper
                        var texWrapper = new TplTextureWrapper();
                        texWrapper.Text             = $"Texture {i}";
                        texWrapper.ImageKey         = "Texture";
                        texWrapper.SelectedImageKey = "Texture";
                        texWrapper.Format           = Decode_Gamecube.ToGenericFormat(GXFormat);
                        texWrapper.Width            = image.Width;
                        texWrapper.Height           = image.Height;
                        texWrapper.MipCount         = 1;
                        texWrapper.PlatformSwizzle  = PlatformSwizzle.Platform_Gamecube;
                        texWrapper.ImageData        = reader.getSection(image.ImageOffset,
                                                                        (uint)Decode_Gamecube.GetDataSize(GXFormat, (int)image.Width, (int)image.Height));

                        //Palette is sometimes unused to check
                        if (PaletteHeaderOffset != 0)
                        {
                            reader.SeekBegin(PaletteHeaderOffset);
                            var palette = new PaletteHeader();
                            palette.Read(reader);
                            PaletteHeaders.Add(palette);

                            var GXPaletteFormat = (Decode_Gamecube.PaletteFormats)palette.PaletteFormat;

                            Console.WriteLine($"GXPaletteFormat {GXPaletteFormat}");
                            texWrapper.SetPaletteData(palette.Data, Decode_Gamecube.ToGenericPaletteFormat(GXPaletteFormat));
                        }

                        Nodes.Add(texWrapper);
                    }
                }
            }
        }