private void UpdateEffectImage()
        {
            animationTimer.Stop();
            Settings.Default.VerifyRohLocation();
            animationTimer.Start();

            using (var archive = DataArchive.Open(Settings.Default.RohLocation))
            {
                if (_selectedFileName.EndsWith(".epf", StringComparison.CurrentCultureIgnoreCase))
                {
                    var epf = new EPFFile(archive.GetEntry(_selectedFileName));

                    if (_animationFrame >= epf.Frames.Count)
                    {
                        _animationFrame = 0;
                    }

                    var frame = epf.Frames[_animationFrame];

                    int paletteNumber = _paletteTable.GetPaletteNumber(_selectedFileNumber);

                    bool useBlending = false;

                    if (paletteNumber >= 1000)
                    {
                        paletteNumber -= 1000;
                        useBlending    = true;
                    }

                    var palette = new Palette(archive.GetEntry($"eff{paletteNumber:d3}.pal"));

                    _effectImage = new Bitmap(epf.Width, epf.Height);

                    using (var g = Graphics.FromImage(_effectImage))
                    {
                        if (useBlending)
                        {
                            // temporary solution
                            g.Clear(Color.Black);
                        }
                        g.DrawImage(frame.Render(palette), frame.Left, frame.Top);
                    }
                }
                else
                {
                    var efa = new EFAFile(archive.GetEntry(_selectedFileName));

                    if (_animationFrame >= efa.Frames.Count)
                    {
                        _animationFrame = 0;
                    }

                    var frame = efa.Frames[_animationFrame];

                    _effectImage = frame.Render();
                }
            }

            effectPanel.Refresh();
        }
Exemple #2
0
        private void UpdateItemTilesImage()
        {
            Settings.Default.VerifyLegendLocation();

            using (var archive = DataArchive.Open(Settings.Default.LegendLocation))
                using (var g = Graphics.FromImage(_itemTilesImage))
                {
                    g.Clear(itemTilesPanel.BackColor);

                    var epf = new EPFFile(archive.GetEntry(_selectedFileName));

                    for (int col = 0; col < columns; ++col)
                    {
                        for (int row = 0; row < rows; ++row)
                        {
                            int frameIndex = columns * row + col;

                            if (frameIndex < epf.Frames.Count)
                            {
                                var frame = epf.Frames[frameIndex];

                                int tileNumber    = (_selectedFileNumber - 1) * 266 + frameIndex + 1;
                                int paletteNumber = _paletteTable.GetPaletteNumber(tileNumber);

                                var palette = new Palette(archive.GetEntry($"item{paletteNumber:d3}.pal"));

                                var frameImage = frame.Render(palette);

                                g.DrawImage(frameImage, col * tileWidth + frame.Left, row * tileHeight + frame.Top);
                            }
                        }
                    }
                }

            itemTilesPanel.Refresh();
        }