コード例 #1
0
        private void DrawLevelPatterns(LevelIndex level)
        {
            spritePatterns.Clear();
            bgPatterns.Clear();

            PatternGroupIndexTable groups = GetLevelPatterns(level);

            spritePatterns.BeginWrite();
            bgPatterns.BeginWrite();
            for (int i = 0; i < groups.Count; i++)
            {
                PatternGroupOffsets offsets = rom.PatternGroupOffsets[groups[i]];

                if (offsets.IsPage0)
                {
                    spritePatterns.LoadTiles(offsets);
                }
                else
                {
                    bgPatterns.LoadTiles(offsets);
                }
            }
            spritePatterns.EndWrite();
            bgPatterns.EndWrite();

            ApplyPalette(level);

            SpritePatternBox.Image     = spritePatterns.PatternImage;
            BackgroundPatternBox.Image = bgPatterns.PatternImage;
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        private void LoadGfxSlot(PatternTable gfx, int slot, int bank)
        {
            int offset = bank * chrBankSize + chrRomOffset;

            gfx.LoadTiles(rom.data, offset, slot * 0x40, 0x40);
        }