コード例 #1
0
        public static void Replace(this TEX0Node tex0, Bitmap bmp, int paletteSize)
        {
            FileMap tMap, pMap;

            if (tex0.HasPalette)
            {
                PLT0Node pn = tex0.GetPaletteNode();
                tMap = TextureConverter.Get(tex0.Format).EncodeTextureIndexed(bmp, tex0.LevelOfDetail, paletteSize,
                                                                              pn.Format, QuantizationAlgorithm.MedianCut, out pMap);
                pn.ReplaceRaw(pMap);
            }
            else
            {
                tMap = TextureConverter.Get(tex0.Format).EncodeTEX0Texture(bmp, tex0.LevelOfDetail);
            }

            tex0.ReplaceRaw(tMap);
        }
コード例 #2
0
        private unsafe void btnOkay_Click(object sender, EventArgs e)
        {
            string name = txtName.Text;

            if (name.Length == 0)
            {
                name = "<null>";
            }

            if (name.Equals("<null>", StringComparison.OrdinalIgnoreCase))
            {
                if (!_node.AllowNullNames)
                {
                    MessageBox.Show(this, "Name cannot be null!", "What the...");
                    return;
                }
            }
            else if ((!_node.AllowDuplicateNames) && (_node.Parent != null))
            {
                //No duplicates
                foreach (ResourceNode c in _node.Parent.Children)
                {
                    if ((c.Name == name) && (c.GetType() == _node.GetType()) && (c != _node))
                    {
                        MessageBox.Show(this, "A resource with that name already exists!", "What the...");
                        return;
                    }
                }
            }

            //Also change palette node
            if (_node is TEX0Node)
            {
                PLT0Node plt = ((TEX0Node)_node).GetPaletteNode();
                if (plt != null)
                {
                    plt.Name = name;
                }
            }

            _node.Name   = name;
            DialogResult = DialogResult.OK;
            Close();
        }
コード例 #3
0
ファイル: GLTexture.cs プロジェクト: 0000duck/brawltools
        public unsafe void Attach(TEX0Node tex, PLT0Node plt)
        {
            ClearImages();

            _textures = new Bitmap[tex.LevelOfDetail];
            for (int i = 0; i < tex.LevelOfDetail; i++)
            {
                _textures[i] = tex.GetImage(i, plt);
            }

            if (_textures.Length != 0)
            {
                _width  = _textures[0].Width;
                _height = _textures[0].Height;
            }

            _remake = true;
            Initialize();
        }
コード例 #4
0
        public void ReEncode()
        {
            PLT0Node plt = null;

            if (((TEX0Node)_resource).HasPalette)
            {
                plt = ((TEX0Node)_resource).GetPaletteNode();
            }

            using (TextureConverterDialog dlg = new TextureConverterDialog())
            {
                dlg.LoadImages((Resource as TEX0Node).GetImage(0));
                dlg.ShowDialog(MainForm.Instance, Resource as TEX0Node);
            }

            if (plt != null && !((TEX0Node)_resource).HasPalette)
            {
                plt.Dispose();
                plt.Remove();
            }
        }
コード例 #5
0
        public unsafe void Attach(TEX0Node tex, PLT0Node plt)
        {
            ClearImages();

            _source = tex;

            _textures = new Bitmap[tex.LevelOfDetail];
            for (int i = 0; i < tex.LevelOfDetail; i++)
            {
                _textures[i] = tex.GetImage(i, plt);
            }

            if (_textures.Length != 0 && _textures[0] != null)
            {
                _width  = _textures[0].Width;
                _height = _textures[0].Height;
            }

            switch (tex.Format)
            {
            case WiiPixelFormat.I4:
            case WiiPixelFormat.I8:
                ifmt = PixelInternalFormat.Intensity;
                break;

            case WiiPixelFormat.IA4:
            case WiiPixelFormat.IA8:
                ifmt = PixelInternalFormat.Luminance8Alpha8;
                break;

            default:
                ifmt = PixelInternalFormat.Four;
                break;
            }

            _remake = true;
            Initialize();
        }
コード例 #6
0
        /// <summary>
        /// Adds PAT0 entries for each stage to the given PAT0TextureNode.
        /// </summary>
        /// <param name="pathToPAT0TextureNode">Path relative to sc_selmap_en</param>
        /// <param name="defaultName">The texture name to be used for new PAT0 entries. If null, the name will be taken from the first entry, with the number at the end replaced with the icon number.</param>
        public void AddPAT0(string pathToPAT0TextureNode, string defaultName = null)
        {
            var look = sc_selmap.FindChild(pathToPAT0TextureNode, false).Children[0];

            if (!(look is PAT0TextureNode))
            {
                throw new FormatException(look.Name);
            }

            bool icon = look.Parent.Name == "iconM";

            PAT0TextureNode tn = look as PAT0TextureNode;

            List <PAT0TextureEntryNode> childrenList = (from c in tn.Children
                                                        where c is PAT0TextureEntryNode
                                                        select(PAT0TextureEntryNode) c).ToList();

            if ((from c in childrenList where c.FrameIndex >= 40 && c.FrameIndex < 50 select c).Count() >= 10)
            {
                MessageBox.Show("Skipping " + pathToPAT0TextureNode.Substring(pathToPAT0TextureNode.LastIndexOf('/') + 1) +
                                " - mappings for icon numbers 40-49 already exist.");
                return;
            }

            string texToCopyName = null;
            List <Tuple <string, float> > entries = new List <Tuple <string, float> >();

            foreach (var entry in childrenList)
            {
                if (entry.Texture == null)
                {
                    MessageBox.Show("BrawlLib cannot read PAT0 texture name(s) from " + pathToPAT0TextureNode);
                    return;
                }
                entries.Add(new Tuple <string, float>(entry.Texture, entry.FrameIndex));
                if (entry.FrameIndex == 1)
                {
                    texToCopyName = entry.Texture;
                }
                if (entry.FrameIndex != 0)
                {
                    tn.RemoveChild(entry);
                }
            }

            string basename = (from e in entries
                               where e.Item1.Contains('.')
                               select e.Item1).First();

            basename = basename.Substring(0, basename.LastIndexOf('.'));

            Func <int, string> getTexStringByIconNumber = iconNum => {
                if (iconNum < 32 || (iconNum >= 50 && iconNum < 60) || iconNum == 80)
                {
                    string previousTexture = null;
                    foreach (var entry in entries)
                    {
                        if (entry.Item2 > iconNum)
                        {
                            break;
                        }
                        previousTexture = entry.Item1;
                    }
                    return(previousTexture);
                }
                else
                {
                    return(defaultName ?? basename + "." + iconNum.ToString("D2"));
                }
            };

            for (int i = 1; i <= 80; i++)
            {
                string texname = getTexStringByIconNumber(i);
                var    entry   = new PAT0TextureEntryNode();
                tn.AddChild(entry);
                entry.FrameIndex = i;
                entry.Texture    = texname;
                if (icon)
                {
                    entry.Palette = entry.Texture;
                }
            }

            var moreThan79query = from e in entries
                                  where e.Item2 > 80
                                  orderby e.Item2 ascending
                                  select e;

            foreach (var tuple in moreThan79query)
            {
                var entry = new PAT0TextureEntryNode();
                tn.AddChild(entry);
                entry.FrameIndex = tuple.Item2;
                entry.Texture    = tuple.Item1;
                if (icon)
                {
                    entry.Palette = entry.Texture;
                }
            }

            ResourceNode brres = tn;

            while (brres != null && !(brres is BRRESNode))
            {
                brres = brres.Parent;
            }

            if (brres != null)
            {
                var      folder    = brres.FindChild("Textures(NW4R)", false);
                TEX0Node texToCopy = texToCopyName == null
                                        ? null
                                        : folder.FindChild(texToCopyName, false) as TEX0Node;
                PLT0Node pltToCopy = texToCopyName == null
                                        ? null
                                        : brres.FindChild("Palettes(NW4R)", false).FindChild(texToCopyName, false) as PLT0Node;

                foreach (ResourceNode c in tn.Children)
                {
                    PAT0TextureEntryNode p = c as PAT0TextureEntryNode;
                    if (p == null)
                    {
                        continue;
                    }

                    var texture = folder.FindChild(p.Texture, false);
                    if (texture == null)
                    {
                        if (texToCopy != null)
                        {
                            TEX0Node tex0 = ((BRRESNode)brres).CreateResource <TEX0Node>(p.Texture);
                            tex0.ReplaceRaw(texToCopy.WorkingUncompressed.Address, texToCopy.WorkingUncompressed.Length);
                        }
                        if (pltToCopy != null)
                        {
                            PLT0Node plt0 = ((BRRESNode)brres).CreateResource <PLT0Node>(p.Texture);
                            plt0.ReplaceRaw(pltToCopy.WorkingUncompressed.Address, pltToCopy.WorkingUncompressed.Length);
                        }
                    }
                    else if (texture.Index == 1)
                    {
                        texToCopy = texture as TEX0Node;
                    }
                }
            }
        }
コード例 #7
0
        private void btnOkay_Click(object sender, EventArgs e)
        {
            TextureConverter format = TextureConverter.Get((WiiPixelFormat)cboFormat.SelectedItem);

            if (format.IsIndexed)
            {
                _textureData = format.EncodeTextureIndexed(_indexed, (int)numLOD.Value, (WiiPaletteFormat)cboPaletteFormat.SelectedItem, out _paletteData);
            }
            else
            {
                if ((format.RawFormat == WiiPixelFormat.CMPR) && (_cmprBuffer != null))
                {
                    _textureData = ((CMPR)format).EncodeTextureCached(_source, (int)numLOD.Value, _cmprBuffer);
                }
                else
                {
                    _textureData = format.EncodeTexture(_source, (int)numLOD.Value);
                }
            }

            if (_parent != null)
            {
                _original = _parent.CreateResource <TEX0Node>(Path.GetFileNameWithoutExtension(_imageSource));
                if (_paletteData != null)
                {
                    _originalPalette      = _parent.CreateResource <PLT0Node>(_original.Name);
                    _originalPalette.Name = _original.Name;
                    _originalPalette.ReplaceRaw(_paletteData);
                }
                _original.ReplaceRaw(_textureData);
            }
            else if (_original != null)
            {
                if (_originalPalette != null)
                {
                    if (_paletteData != null)
                    {
                        _originalPalette.ReplaceRaw(_paletteData);
                    }
                    else
                    {
                        _originalPalette.Remove();
                        _originalPalette.Dispose();
                    }
                }
                else if (_paletteData != null)
                {
                    if ((_original.Parent == null) || (_original.Parent.Parent == null))
                    {
                        _paletteData.Dispose();
                        _paletteData = null;
                    }
                    else
                    {
                        _parent               = _original.Parent.Parent as BRESNode;
                        _originalPalette      = _parent.CreateResource <PLT0Node>(_original.Name);
                        _originalPalette.Name = _original.Name;
                        _originalPalette.ReplaceRaw(_paletteData);
                    }
                }
                _original.ReplaceRaw(_textureData);
            }

            DialogResult = DialogResult.OK;
            Close();
        }