private void RenderBgFrame(ChrAnimationFrame frame) { bgGfxLoader.BeginWrite(); LoadGfxSlot(bgGfxLoader, 0, frame.Bank0); LoadGfxSlot(bgGfxLoader, 1, frame.Bank1); LoadGfxSlot(bgGfxLoader, 2, frame.Bank2); LoadGfxSlot(bgGfxLoader, 3, frame.Bank3); bgGfxLoader.EndWrite(); bgGfxLoader.LoadColors((SelectedLevel ?? rom.Brinstar).BgPalette, 0); BgImage = bgGfxLoader.PatternImage; }
private void ApplyPalette(LevelIndex level) { NesPalette bgPal = rom.Levels[LevelIndex.Brinstar].BgPalette; NesPalette sprPal = rom.Levels[LevelIndex.Brinstar].SpritePalette; if (level != LevelIndex.None) { bgPal = rom.Levels[level].BgPalette; sprPal = rom.Levels[level].SpritePalette; } spritePatterns.LoadColors(sprPal, 2); bgPatterns.LoadColors(bgPal, 1); }
private void RenderSprites() { UpdateJustinBaileyLabel(); sprGfxLoader.BeginWrite(); int justinBaileyAdjust = chkJustinBailey.Checked ? 4 : 0; LoadGfxSlot(sprGfxLoader, 0, justinBaileyAdjust + SelectedLevelData.SprBank0 & 0xFE); LoadGfxSlot(sprGfxLoader, 1, 1 + justinBaileyAdjust + (SelectedLevelData.SprBank0 & 0xFE)); LoadGfxSlot(sprGfxLoader, 2, SelectedLevelData.SprBank1 & 0xFE); LoadGfxSlot(sprGfxLoader, 3, 1 + (SelectedLevelData.SprBank1 & 0xFE)); sprGfxLoader.EndWrite(); sprGfxLoader.LoadColors((SelectedLevel ?? rom.Brinstar).SpritePalette, 0); SprImage = sprGfxLoader.PatternImage; }
private void picTiles_Paint(object sender, PaintEventArgs e) { int firstRow = e.ClipRectangle.Top / RowHeight; int lastRow = e.ClipRectangle.Bottom / RowHeight; if (lastRow >= _RowCount) { lastRow = _RowCount - 1; } int RenderY = firstRow * RowHeight; gfxLoader.LoadColors(_Palette, 0); e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; e.Graphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half; for (int i = firstRow; i <= lastRow; i += RowsPerPage) { // Draw up to 16 rows int rowCount = Math.Min(RowsPerPage, lastRow - i + 1); int dataStart = i * bytesPerRow + _DataStart; int dataEnd = dataStart + bytesPerRow * rowCount - 1; if (dataEnd >= tileData.Length) { System.Diagnostics.Debug.Fail("Attempted to draw tiles beyond end of ROM"); } else { gfxLoader.BeginWrite(); gfxLoader.LoadTiles(tileData, dataStart, 0, rowCount * TilePerRow); gfxLoader.EndWrite(); Rectangle source = new Rectangle(0, 0, RawTileSheetSize, RawTileSize * rowCount); Rectangle dest = new Rectangle(0, RenderY, RowWidth, RowHeight * rowCount); e.Graphics.DrawImage(gfxLoader.PatternImage, dest, source, GraphicsUnit.Pixel); RenderY += rowCount * RowHeight; } } DrawSelection(e.Graphics); }