Esempio n. 1
0
        public void SavePalette()
        {
            if (mainentry > 0xFF && mainentry < 0x26C)
            {
                int palBank;

                // Compute palBank
                palBank = mainentry - 0xFF;

                // Compute palSubBank
                rom.Seek(ROMInfo.palInfoAddress + (mainentry * 12));

                // Compute palAddress
                palAddress = ROMInfo.palStartAddress + rom.ReadWord(
                    ROMInfo.palStartAddress + 4 + (palBank << 2));
            }
            else
            {
                palAddress = ROMInfo.palStartAddress + rom.ReadWord(
                    ROMInfo.palStartAddress + 4) + (palSubBank * 32);
            }

            // Write the colours
            rom.Seek(palAddress);
            for (int i = 0; i < 16; i++)
            {
                rom.WriteColor(_pal[i]);
            }
        }
Esempio n. 2
0
        private void cmdSwap_Click(object sender, EventArgs e)
        {
            int e1 = cboEntry1.SelectedIndex;
            int e2 = cboEntry2.SelectedIndex;

            if (e1 == e2)
            {
                btnCancel_Click(null, null);
                return;
            }

            // Swap the sprite info pointers
            int pointer1 = rom.ReadWord(
                ROMInfo.sprStartAddress[cboBank1.SelectedIndex] + 4 + (e1 * 4));
            int pointer2 = rom.ReadWord(
                ROMInfo.sprStartAddress[cboBank2.SelectedIndex] + 4 + (e2 * 4));

            rom.WriteWord(
                ROMInfo.sprStartAddress[cboBank1.SelectedIndex] + 4 + (e1 * 4),
                pointer2);
            rom.WriteWord(
                ROMInfo.sprStartAddress[cboBank2.SelectedIndex] + 4 + (e2 * 4),
                pointer1);

            // Swap the graphics pointers
            pointer1 = rom.ReadWord(
                ROMInfo.gfxStartAddress[cboBank1.SelectedIndex] + 4 + (e1 * 4));
            pointer2 = rom.ReadWord(
                ROMInfo.gfxStartAddress[cboBank2.SelectedIndex] + 4 + (e2 * 4));

            rom.WriteWord(
                ROMInfo.gfxStartAddress[cboBank1.SelectedIndex] + 4 + (e1 * 4),
                pointer2);
            rom.WriteWord(
                ROMInfo.gfxStartAddress[cboBank2.SelectedIndex] + 4 + (e2 * 4),
                pointer1);

            // Swap the palette numbers
            byte b1 = (byte)rom.ReadByte(ROMInfo.palInfoAddress + (e1 * 12));
            byte b2 = (byte)rom.ReadByte(ROMInfo.palInfoAddress + (e2 * 12));

            rom.WriteByte(ROMInfo.palInfoAddress + (e1 * 12),
                          (byte)((b1 & 0xF0) | (b2 & 0xF)));
            rom.WriteByte(ROMInfo.palInfoAddress + (e2 * 12),
                          (byte)((b2 & 0xF0) | (b1 & 0xF)));

            this.Close();
        }
Esempio n. 3
0
        public Tileset(ROMHandler romFile, int bank, int mainEntry)
        {
            rom = romFile;

            // Compute startPointer
            startPointer = ROMInfo.gfxStartAddress[bank] + rom.ReadWord(
                ROMInfo.gfxStartAddress[bank] + 4 + (4 * mainEntry));

            // Instantiate the cache
            tileCache = new Dictionary <int, byte[, ]>();
            //counter++;
        }
Esempio n. 4
0
        public Palette(ROMHandler romFile, int bank, int mainEntry, Color?transparentColor)
        {
            // Bank is irrelevant? Requires ROM research; check if the
            // [0x100, 0x26B] custom range is applicable beyond bank 0

            int palBank;

            //int palAddress;
            rom       = romFile;
            mainentry = mainEntry;

            // Compute palBank
            palBank = ((mainEntry > 0xFF) && (mainEntry < 0x26C)) ? mainEntry - 0xFF : 0;

            // Compute palSubBank
            rom.Seek(ROMInfo.palInfoAddress + (mainEntry * 12));
            palSubBank = ((mainEntry > 0xFF) && (mainEntry < 0x26C)) ? 0 : (romFile.ReadByte() & 0xF);

            // Compute palAddress
            palAddress = ROMInfo.palStartAddress + rom.ReadWord(
                ROMInfo.palStartAddress + 4 + (palBank * 4)) +
                         (palSubBank * 32);

            // Parse the palette data
            rom.Seek(palAddress);
            for (int i = 0; i < 16; i++)
            {
                if (i == 0 && transparentColor != null)
                {
                    _pal[i] = (Color)transparentColor;
                }
                else
                {
                    _pal[i] = rom.ReadColor();
                }
            }
        }
Esempio n. 5
0
        public Sprite(ROMHandler ROMFile, int Bank, int MainEntry, int SpriteEntry)
        {
            int infoAddress;
            int entryCounter = 0;

            romFile     = ROMFile;
            bank        = Bank;
            mainEntry   = MainEntry;
            spriteEntry = SpriteEntry;

            // Instantiate the tileset and palette
            tSet = new Tileset(romFile, bank, mainEntry);
            pal  = new Palette(romFile, bank, mainEntry);

            // Parse the sub sprite information
            infoAddress = ROMInfo.sprStartAddress[bank] + romFile.ReadWord(
                ROMInfo.sprStartAddress[bank] + 4 + (mainEntry * 4)) +
                          8;
            NumSprites   = romFile.ReadHWord(infoAddress);
            infoAddress += 2;

            while (spriteEntry > entryCounter)
            {
                infoAddress += (romFile.ReadHWord(infoAddress) + 1) * 4;
                entryCounter++;
            }

            romFile.Seek(infoAddress);
            NumSubSprites = romFile.ReadHWord();
            SubSprite retVal;

            subSprites = new List <SubSprite>();
            int tmp;

            for (int i = 0; i < NumSubSprites; i++)
            {
                retVal            = new SubSprite();
                retVal.romAddress = (int)romFile.Address;
                retVal.romFile    = romFile;

                retVal.OffsetY = romFile.ReadByte();
                retVal.OffsetX = romFile.ReadByte();
                if (retVal.OffsetY >= 0x80)
                {
                    retVal.OffsetY -= 0x100;                         // Sign the offsets
                }
                if (retVal.OffsetX >= 0x80)
                {
                    retVal.OffsetX -= 0x100;
                }
                tmp           = romFile.ReadHWord();
                retVal.Tile   = (tmp & 0x3FF);
                retVal.FlipX  = (((tmp >> 10) & 1) == 1);
                retVal.FlipY  = (((tmp >> 11) & 1) == 1);
                retVal.Width  = sprWidthConst[(tmp >> 14) & 3, (tmp >> 12) & 3];
                retVal.Height = sprHeightConst[(tmp >> 14) & 3, (tmp >> 12) & 3];
                retVal.Size   = (tmp >> 12) & 3;
                retVal.Shape  = (tmp >> 14) & 3;

                retVal.tileSet = tSet;
                retVal.pal     = pal;

                subSprites.Add(retVal);
            }
        }