Esempio n. 1
0
        private NesSprite GetSprite(int bankIndex, int spriteIndex, int paletteIndex = -1, bool bg = false, bool flipVertical = false, bool flipHorizontal = false)
        {
            if (paletteIndex == -1)
            {
                paletteIndex = 1;
            }
            var sprite = new NesSprite();

            var paletteBase = (!bg ? PPU.PALETTE_SPRITE : PPU.PALETTE) + paletteIndex * 4;

            var addr  = spriteIndex * 16 + bankIndex * 0x1000;
            var index = 0;

            for (int j = 0; j < 8; j++)
            {
                int value1 = _ppu.ReadPpu(addr);
                int value2 = _ppu.ReadPpu(addr + 8);

                for (int x = 0; x < 8; x++)
                {
                    var palette = ((value2 & 1) << 1) + (value1 & 1);

                    sprite.data[index + (7 - x)] = PpuColors.Colors[_ppu.ReadPpu(paletteBase + palette) % 64];

                    value1 >>= 1;
                    value2 >>= 1;
                }

                index += 8;
                addr++;
            }

            return(sprite);
        }
Esempio n. 2
0
        private void DrawSprite(NesSprite sprite, int x, int y, int scale = 2)
        {
            int index = 0;

            for (int j = y; j < y + 8; j++)
            {
                for (int i = x; i < x + 8; i++)
                {
                    DrawPixel(i, j, sprite.data[index++]);
                }
            }
        }