public frmSwap(ComboBox Entries, ROMHandler ROMFile, int bank) { InitializeComponent(); this.entries = Entries; rom = ROMFile; cboBank1.SelectedIndex = bank; cboBank2.SelectedIndex = bank; }
public static void SetPalette(ROMHandler romFile, int entry, byte pal) { if (entry <= 0xFF || entry >= 0x26C) { int address = ROMInfo.palInfoAddress + (entry * 12); byte palSubBank = (byte) (romFile.ReadByte(address) & 0xF0); palSubBank |= (byte)(pal & 0xF); romFile.WriteByte(address, palSubBank); } }
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++; }
private void CloseROM() { sprite = null; spriteEditor.Sprite = null; spriteViewer.Sprite = null; paletteSelector.Sprite = null; frmProperties.Sprite = null; spriteEditor.IsChanged = false; spriteEditor.RenderSelection = false; romFile.Close(); romFile = null; romHandle = null; tbrTool[curTool].Checked = false; curTool = -1; EnableControls(false); }
private void mnuFileOpenROM_Click(object sender, EventArgs e) { // If a file is already open, ask if they want to save changes // If yes, save changes // If cancel, return // Close the rom // Open new rom // TODO: Generalize this stuff into one method if (romFile != null) { if (spriteEditor.IsChanged) { switch (MessageBox.Show( "Do you wish to save your changes?", "Save changes", MessageBoxButtons.YesNoCancel)) { case DialogResult.Cancel: return; case DialogResult.Yes: ApplyChanges(); break; default: break; } } CloseROM(); } if (dlgOpenROM.ShowDialog() == DialogResult.OK) { romFile = File.Open(dlgOpenROM.FileName, FileMode.Open); if (!ROMInfo.IsMother3ROM(romFile)) { MessageBox.Show("The selected ROM could not be identified as MOTHER 3.", "Error"); CloseROM(); return; } Application.DoEvents(); romHandle = new ROMHandler(romFile); LoadFile(); } }
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(); } } }
public Palette(ROMHandler romFile, int bank, int mainEntry) : this(romFile, bank, mainEntry, null) { }
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); } }