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(); }
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(); }