diff --git a/BizHawk.Emulation/Consoles/Nintendo/SNES/SNESGraphicsDecoder.cs b/BizHawk.Emulation/Consoles/Nintendo/SNES/SNESGraphicsDecoder.cs
index 4535af45fc..279d9e18f3 100644
--- a/BizHawk.Emulation/Consoles/Nintendo/SNES/SNESGraphicsDecoder.cs
+++ b/BizHawk.Emulation/Consoles/Nintendo/SNES/SNESGraphicsDecoder.cs
@@ -229,6 +229,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo.SNES
public int X { private set; get; }
public int Y { private set; get; }
public int Tile { private set; get; }
+ public int Name { private set; get; }
public int Table { private set; get; }
public int Palette { private set; get; }
public int Priority { private set; get; }
@@ -236,14 +237,19 @@ namespace BizHawk.Emulation.Consoles.Nintendo.SNES
public bool HFlip { private set; get; }
public int Size { private set; get; }
- public OAMInfo(SNESGraphicsDecoder dec, int num)
+ ///
+ /// tiledata address
+ ///
+ public int Address { private set; get; }
+
+ public OAMInfo(SNESGraphicsDecoder dec, ScreenInfo si, int num)
{
Index = num;
int lowaddr = num*4;
X = dec.oam[lowaddr++];
Y = dec.oam[lowaddr++];
- Tile = dec.oam[lowaddr++];
+ Name = dec.oam[lowaddr++];
Table = dec.oam[lowaddr] & 1;
Palette = (dec.oam[lowaddr]>>1) & 7;
Priority = (dec.oam[lowaddr] >> 4) & 3;
@@ -259,11 +265,25 @@ namespace BizHawk.Emulation.Consoles.Nintendo.SNES
Size = high & 1;
X |= (x << 9);
X = (X << 23) >> 23;
+
+ Tile = Table*256 + Name;
+ Address = 32 * Tile;
+
+ if (Tile < 256)
+ Address += si.OBJTable0Addr;
+ else
+ Address += si.OBJTable1Addr - (256 * 32);
+
+ Address &= 0xFFFF;
+
}
}
public class ScreenInfo
{
+ public Dimensions ObjSizeBounds;
+ public Dimensions ObjSizeBoundsSquare;
+
public BGInfos BG = new BGInfos();
public ModeInfo Mode = new ModeInfo();
@@ -305,6 +325,11 @@ namespace BizHawk.Emulation.Consoles.Nintendo.SNES
si.OBSEL_NameSel = LibsnesDll.snes_peek_logical_register(LibsnesDll.SNES_REG.OBSEL_NAMESEL);
si.OBSEL_NameBase = LibsnesDll.snes_peek_logical_register(LibsnesDll.SNES_REG.OBSEL_NAMEBASE);
+ si.ObjSizeBounds = ObjSizes[si.OBSEL_Size,1];
+ int square = Math.Max(si.ObjSizeBounds.Width, si.ObjSizeBounds.Height);
+ si.ObjSizeBoundsSquare = new Dimensions(square, square);
+
+
si.OBJTable0Addr = si.OBSEL_NameBase << 14;
si.OBJTable1Addr = (si.OBJTable0Addr + ((si.OBSEL_NameSel + 1) << 13)) & 0xFFFF;
@@ -875,7 +900,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo.SNES
public void RenderSpriteToScreen(int* screen, int stride, int destx, int desty, ScreenInfo si, int spritenum)
{
var dims = new[] { SNESGraphicsDecoder.ObjSizes[si.OBSEL_Size, 0], SNESGraphicsDecoder.ObjSizes[si.OBSEL_Size, 1] };
- var oam = new OAMInfo(this, spritenum);
+ var oam = new OAMInfo(this, si, spritenum);
var dim = dims[oam.Size];
int[] tilebuf = _tileCache[4];
@@ -886,13 +911,28 @@ namespace BizHawk.Emulation.Consoles.Nintendo.SNES
else
baseaddr = si.OBJTable1Addr;
+ //TODO - flips of 'undocumented' rectangular oam settings are wrong. probably easy to do right, but we need a test
+
int bcol = oam.Tile & 0xF;
int brow = (oam.Tile >> 4) & 0xF;
- for(int y=0;y> 3)) & 0xF;
int row = (brow + (y >> 3)) & 0xF;
int sx = x & 0x7;
@@ -910,6 +950,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo.SNES
public int Colorize(int rgb555)
{
+ //skip to max luminance in the palette table
return colortable[491520 + rgb555];
}
diff --git a/BizHawk.MultiClient/SNESTools/SNESGraphicsDebugger.Designer.cs b/BizHawk.MultiClient/SNESTools/SNESGraphicsDebugger.Designer.cs
index b407df133a..9e11af8f10 100644
--- a/BizHawk.MultiClient/SNESTools/SNESGraphicsDebugger.Designer.cs
+++ b/BizHawk.MultiClient/SNESTools/SNESGraphicsDebugger.Designer.cs
@@ -190,17 +190,19 @@
this.paletteViewer = new BizHawk.MultiClient.SNESGraphicsViewer();
this.tabctrlDetails = new System.Windows.Forms.TabControl();
this.tpPalette = new System.Windows.Forms.TabPage();
- this.txtPaletteDetailsIndexSpecific = new System.Windows.Forms.TextBox();
- this.txtPaletteDetailsIndexHexSpecific = new System.Windows.Forms.TextBox();
+ this.label53 = new System.Windows.Forms.Label();
+ this.label52 = new System.Windows.Forms.Label();
+ this.label51 = new System.Windows.Forms.Label();
this.txtPaletteDetailsAddress = new System.Windows.Forms.TextBox();
this.txtPaletteDetailsIndex = new System.Windows.Forms.TextBox();
this.txtPaletteDetailsIndexHex = new System.Windows.Forms.TextBox();
this.txtDetailsPaletteColorRGB = new System.Windows.Forms.TextBox();
this.txtDetailsPaletteColorHex = new System.Windows.Forms.TextBox();
this.txtDetailsPaletteColor = new System.Windows.Forms.TextBox();
- this.lblDetailsOBJOrBG = new System.Windows.Forms.Label();
this.pnDetailsPaletteColor = new System.Windows.Forms.Panel();
this.tpTile = new System.Windows.Forms.TabPage();
+ this.label45 = new System.Windows.Forms.Label();
+ this.txtTilePalette = new System.Windows.Forms.TextBox();
this.txtTileNumber = new System.Windows.Forms.TextBox();
this.txtTileMode = new System.Windows.Forms.TextBox();
this.label18 = new System.Windows.Forms.Label();
@@ -210,6 +212,7 @@
this.txtTileAddress = new System.Windows.Forms.TextBox();
this.viewerTile = new BizHawk.MultiClient.SNESGraphicsViewer();
this.tpMapEntry = new System.Windows.Forms.TabPage();
+ this.textBox2 = new System.Windows.Forms.TextBox();
this.checkMapEntryVFlip = new System.Windows.Forms.CheckBox();
this.label34 = new System.Windows.Forms.Label();
this.checkMapEntryHFlip = new System.Windows.Forms.CheckBox();
@@ -224,19 +227,28 @@
this.txtMapEntryTileNum = new System.Windows.Forms.TextBox();
this.viewerMapEntryTile = new BizHawk.MultiClient.SNESGraphicsViewer();
this.tpOBJ = new System.Windows.Forms.TabPage();
+ this.txtObjPriority = new System.Windows.Forms.TextBox();
+ this.label50 = new System.Windows.Forms.Label();
+ this.txtObjPaletteMemo = new System.Windows.Forms.TextBox();
+ this.label49 = new System.Windows.Forms.Label();
+ this.txtObjPalette = new System.Windows.Forms.TextBox();
+ this.label48 = new System.Windows.Forms.Label();
+ this.txtObjNameAddr = new System.Windows.Forms.TextBox();
+ this.txtObjName = new System.Windows.Forms.TextBox();
+ this.txtObjSize = new System.Windows.Forms.TextBox();
+ this.label46 = new System.Windows.Forms.Label();
+ this.cbObjLarge = new System.Windows.Forms.CheckBox();
this.txtObjNumber = new System.Windows.Forms.TextBox();
this.txtObjCoord = new System.Windows.Forms.TextBox();
- this.checkBox1 = new System.Windows.Forms.CheckBox();
+ this.cbObjVFlip = new System.Windows.Forms.CheckBox();
this.label43 = new System.Windows.Forms.Label();
- this.checkBox2 = new System.Windows.Forms.CheckBox();
+ this.cbObjHFlip = new System.Windows.Forms.CheckBox();
this.label44 = new System.Windows.Forms.Label();
this.viewerObj = new BizHawk.MultiClient.SNESGraphicsViewer();
this.viewerPanel = new System.Windows.Forms.Panel();
this.viewer = new BizHawk.MultiClient.SNESGraphicsViewer();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.messagetimer = new System.Windows.Forms.Timer(this.components);
- this.txtTilePalette = new System.Windows.Forms.TextBox();
- this.label45 = new System.Windows.Forms.Label();
this.menuStrip1.SuspendLayout();
this.tableLayoutPanel1.SuspendLayout();
this.panel1.SuspendLayout();
@@ -820,11 +832,11 @@
// label41
//
this.label41.AutoSize = true;
- this.label41.Location = new System.Drawing.Point(10, 161);
+ this.label41.Location = new System.Drawing.Point(4, 161);
this.label41.Name = "label41";
- this.label41.Size = new System.Drawing.Size(41, 13);
+ this.label41.Size = new System.Drawing.Size(49, 13);
this.label41.TabIndex = 101;
- this.label41.Text = "EN.Pr3";
+ this.label41.Text = "EN.Prio3";
//
// txtOBSELT1OfsDescr
//
@@ -967,11 +979,11 @@
// label40
//
this.label40.AutoSize = true;
- this.label40.Location = new System.Drawing.Point(10, 146);
+ this.label40.Location = new System.Drawing.Point(4, 146);
this.label40.Name = "label40";
- this.label40.Size = new System.Drawing.Size(41, 13);
+ this.label40.Size = new System.Drawing.Size(49, 13);
this.label40.TabIndex = 93;
- this.label40.Text = "EN.Pr2";
+ this.label40.Text = "EN.Prio2";
//
// label28
//
@@ -987,9 +999,9 @@
this.label39.AutoSize = true;
this.label39.Location = new System.Drawing.Point(162, 130);
this.label39.Name = "label39";
- this.label39.Size = new System.Drawing.Size(41, 13);
+ this.label39.Size = new System.Drawing.Size(49, 13);
this.label39.TabIndex = 92;
- this.label39.Text = "EN.Pr1";
+ this.label39.Text = "EN.Prio1";
//
// label20
//
@@ -1053,9 +1065,9 @@
this.label37.AutoSize = true;
this.label37.Location = new System.Drawing.Point(162, 115);
this.label37.Name = "label37";
- this.label37.Size = new System.Drawing.Size(41, 13);
+ this.label37.Size = new System.Drawing.Size(49, 13);
this.label37.TabIndex = 89;
- this.label37.Text = "EN.Pr0";
+ this.label37.Text = "EN.Prio0";
//
// label18391
//
@@ -2015,15 +2027,15 @@
//
// tpPalette
//
- this.tpPalette.Controls.Add(this.txtPaletteDetailsIndexSpecific);
- this.tpPalette.Controls.Add(this.txtPaletteDetailsIndexHexSpecific);
+ this.tpPalette.Controls.Add(this.label53);
+ this.tpPalette.Controls.Add(this.label52);
+ this.tpPalette.Controls.Add(this.label51);
this.tpPalette.Controls.Add(this.txtPaletteDetailsAddress);
this.tpPalette.Controls.Add(this.txtPaletteDetailsIndex);
this.tpPalette.Controls.Add(this.txtPaletteDetailsIndexHex);
this.tpPalette.Controls.Add(this.txtDetailsPaletteColorRGB);
this.tpPalette.Controls.Add(this.txtDetailsPaletteColorHex);
this.tpPalette.Controls.Add(this.txtDetailsPaletteColor);
- this.tpPalette.Controls.Add(this.lblDetailsOBJOrBG);
this.tpPalette.Controls.Add(this.pnDetailsPaletteColor);
this.tpPalette.Location = new System.Drawing.Point(4, 22);
this.tpPalette.Name = "tpPalette";
@@ -2033,39 +2045,46 @@
this.tpPalette.Text = "Color";
this.tpPalette.UseVisualStyleBackColor = true;
//
- // txtPaletteDetailsIndexSpecific
+ // label53
//
- this.txtPaletteDetailsIndexSpecific.Location = new System.Drawing.Point(69, 42);
- this.txtPaletteDetailsIndexSpecific.Multiline = true;
- this.txtPaletteDetailsIndexSpecific.Name = "txtPaletteDetailsIndexSpecific";
- this.txtPaletteDetailsIndexSpecific.ReadOnly = true;
- this.txtPaletteDetailsIndexSpecific.Size = new System.Drawing.Size(31, 18);
- this.txtPaletteDetailsIndexSpecific.TabIndex = 44;
- this.txtPaletteDetailsIndexSpecific.Text = "127";
+ this.label53.AutoSize = true;
+ this.label53.Location = new System.Drawing.Point(73, 76);
+ this.label53.Name = "label53";
+ this.label53.Size = new System.Drawing.Size(48, 13);
+ this.label53.TabIndex = 61;
+ this.label53.Text = "RGB888";
//
- // txtPaletteDetailsIndexHexSpecific
+ // label52
//
- this.txtPaletteDetailsIndexHexSpecific.Location = new System.Drawing.Point(42, 42);
- this.txtPaletteDetailsIndexHexSpecific.Multiline = true;
- this.txtPaletteDetailsIndexHexSpecific.Name = "txtPaletteDetailsIndexHexSpecific";
- this.txtPaletteDetailsIndexHexSpecific.ReadOnly = true;
- this.txtPaletteDetailsIndexHexSpecific.Size = new System.Drawing.Size(26, 18);
- this.txtPaletteDetailsIndexHexSpecific.TabIndex = 43;
- this.txtPaletteDetailsIndexHexSpecific.Text = "$7F";
+ this.label52.AutoSize = true;
+ this.label52.Location = new System.Drawing.Point(93, 54);
+ this.label52.Name = "label52";
+ this.label52.Size = new System.Drawing.Size(26, 13);
+ this.label52.TabIndex = 60;
+ this.label52.Text = "Hex";
+ //
+ // label51
+ //
+ this.label51.AutoSize = true;
+ this.label51.Location = new System.Drawing.Point(73, 32);
+ this.label51.Name = "label51";
+ this.label51.Size = new System.Drawing.Size(50, 13);
+ this.label51.TabIndex = 59;
+ this.label51.Text = "Raw Col.";
//
// txtPaletteDetailsAddress
//
- this.txtPaletteDetailsAddress.Location = new System.Drawing.Point(41, 22);
+ this.txtPaletteDetailsAddress.Location = new System.Drawing.Point(149, 7);
this.txtPaletteDetailsAddress.Multiline = true;
this.txtPaletteDetailsAddress.Name = "txtPaletteDetailsAddress";
this.txtPaletteDetailsAddress.ReadOnly = true;
- this.txtPaletteDetailsAddress.Size = new System.Drawing.Size(58, 18);
+ this.txtPaletteDetailsAddress.Size = new System.Drawing.Size(54, 18);
this.txtPaletteDetailsAddress.TabIndex = 42;
- this.txtPaletteDetailsAddress.Text = "@1FE";
+ this.txtPaletteDetailsAddress.Text = "@DDD";
//
// txtPaletteDetailsIndex
//
- this.txtPaletteDetailsIndex.Location = new System.Drawing.Point(68, 3);
+ this.txtPaletteDetailsIndex.Location = new System.Drawing.Point(112, 7);
this.txtPaletteDetailsIndex.Multiline = true;
this.txtPaletteDetailsIndex.Name = "txtPaletteDetailsIndex";
this.txtPaletteDetailsIndex.ReadOnly = true;
@@ -2075,52 +2094,43 @@
//
// txtPaletteDetailsIndexHex
//
- this.txtPaletteDetailsIndexHex.Location = new System.Drawing.Point(41, 3);
+ this.txtPaletteDetailsIndexHex.Location = new System.Drawing.Point(76, 7);
this.txtPaletteDetailsIndexHex.Multiline = true;
this.txtPaletteDetailsIndexHex.Name = "txtPaletteDetailsIndexHex";
this.txtPaletteDetailsIndexHex.ReadOnly = true;
- this.txtPaletteDetailsIndexHex.Size = new System.Drawing.Size(26, 18);
+ this.txtPaletteDetailsIndexHex.Size = new System.Drawing.Size(28, 18);
this.txtPaletteDetailsIndexHex.TabIndex = 39;
- this.txtPaletteDetailsIndexHex.Text = "$7F";
+ this.txtPaletteDetailsIndexHex.Text = "$DD";
//
// txtDetailsPaletteColorRGB
//
- this.txtDetailsPaletteColorRGB.Location = new System.Drawing.Point(102, 42);
+ this.txtDetailsPaletteColorRGB.Location = new System.Drawing.Point(125, 73);
this.txtDetailsPaletteColorRGB.Multiline = true;
this.txtDetailsPaletteColorRGB.Name = "txtDetailsPaletteColorRGB";
this.txtDetailsPaletteColorRGB.ReadOnly = true;
- this.txtDetailsPaletteColorRGB.Size = new System.Drawing.Size(96, 18);
+ this.txtDetailsPaletteColorRGB.Size = new System.Drawing.Size(78, 18);
this.txtDetailsPaletteColorRGB.TabIndex = 38;
this.txtDetailsPaletteColorRGB.Text = "(255, 255, 255)";
//
// txtDetailsPaletteColorHex
//
- this.txtDetailsPaletteColorHex.Location = new System.Drawing.Point(102, 22);
+ this.txtDetailsPaletteColorHex.Location = new System.Drawing.Point(125, 51);
this.txtDetailsPaletteColorHex.Multiline = true;
this.txtDetailsPaletteColorHex.Name = "txtDetailsPaletteColorHex";
this.txtDetailsPaletteColorHex.ReadOnly = true;
- this.txtDetailsPaletteColorHex.Size = new System.Drawing.Size(96, 18);
+ this.txtDetailsPaletteColorHex.Size = new System.Drawing.Size(78, 18);
this.txtDetailsPaletteColorHex.TabIndex = 37;
- this.txtDetailsPaletteColorHex.Text = "#FFFFFF";
+ this.txtDetailsPaletteColorHex.Text = "#DDDDDD";
//
// txtDetailsPaletteColor
//
- this.txtDetailsPaletteColor.Location = new System.Drawing.Point(102, 2);
+ this.txtDetailsPaletteColor.Location = new System.Drawing.Point(125, 29);
this.txtDetailsPaletteColor.Multiline = true;
this.txtDetailsPaletteColor.Name = "txtDetailsPaletteColor";
this.txtDetailsPaletteColor.ReadOnly = true;
- this.txtDetailsPaletteColor.Size = new System.Drawing.Size(96, 18);
+ this.txtDetailsPaletteColor.Size = new System.Drawing.Size(79, 18);
this.txtDetailsPaletteColor.TabIndex = 36;
- this.txtDetailsPaletteColor.Text = "$7FFF";
- //
- // lblDetailsOBJOrBG
- //
- this.lblDetailsOBJOrBG.Location = new System.Drawing.Point(2, 42);
- this.lblDetailsOBJOrBG.Name = "lblDetailsOBJOrBG";
- this.lblDetailsOBJOrBG.Size = new System.Drawing.Size(36, 16);
- this.lblDetailsOBJOrBG.TabIndex = 40;
- this.lblDetailsOBJOrBG.Text = "(OBJ:)";
- this.lblDetailsOBJOrBG.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.txtDetailsPaletteColor.Text = "$DDDD";
//
// pnDetailsPaletteColor
//
@@ -2128,7 +2138,7 @@
this.pnDetailsPaletteColor.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.pnDetailsPaletteColor.Location = new System.Drawing.Point(3, 4);
this.pnDetailsPaletteColor.Name = "pnDetailsPaletteColor";
- this.pnDetailsPaletteColor.Size = new System.Drawing.Size(32, 32);
+ this.pnDetailsPaletteColor.Size = new System.Drawing.Size(69, 68);
this.pnDetailsPaletteColor.TabIndex = 3;
this.pnDetailsPaletteColor.DoubleClick += new System.EventHandler(this.pnDetailsPaletteColor_DoubleClick);
//
@@ -2147,11 +2157,30 @@
this.tpTile.Location = new System.Drawing.Point(4, 22);
this.tpTile.Name = "tpTile";
this.tpTile.Padding = new System.Windows.Forms.Padding(3);
- this.tpTile.Size = new System.Drawing.Size(206, 94);
+ this.tpTile.Size = new System.Drawing.Size(206, 92);
this.tpTile.TabIndex = 1;
this.tpTile.Text = "Tile";
this.tpTile.UseVisualStyleBackColor = true;
//
+ // label45
+ //
+ this.label45.AutoSize = true;
+ this.label45.Location = new System.Drawing.Point(169, 75);
+ this.label45.Name = "label45";
+ this.label45.Size = new System.Drawing.Size(22, 13);
+ this.label45.TabIndex = 65;
+ this.label45.Text = "Pal";
+ //
+ // txtTilePalette
+ //
+ this.txtTilePalette.Location = new System.Drawing.Point(139, 73);
+ this.txtTilePalette.Multiline = true;
+ this.txtTilePalette.Name = "txtTilePalette";
+ this.txtTilePalette.ReadOnly = true;
+ this.txtTilePalette.Size = new System.Drawing.Size(29, 18);
+ this.txtTilePalette.TabIndex = 64;
+ this.txtTilePalette.Text = "$FF";
+ //
// txtTileNumber
//
this.txtTileNumber.Location = new System.Drawing.Point(76, 6);
@@ -2175,7 +2204,7 @@
// label18
//
this.label18.AutoSize = true;
- this.label18.Location = new System.Drawing.Point(169, 49);
+ this.label18.Location = new System.Drawing.Point(169, 53);
this.label18.Name = "label18";
this.label18.Size = new System.Drawing.Size(36, 13);
this.label18.TabIndex = 61;
@@ -2183,7 +2212,7 @@
//
// txtTileColors
//
- this.txtTileColors.Location = new System.Drawing.Point(139, 48);
+ this.txtTileColors.Location = new System.Drawing.Point(139, 51);
this.txtTileColors.Multiline = true;
this.txtTileColors.Name = "txtTileColors";
this.txtTileColors.ReadOnly = true;
@@ -2193,7 +2222,7 @@
//
// txtTileBpp
//
- this.txtTileBpp.Location = new System.Drawing.Point(139, 28);
+ this.txtTileBpp.Location = new System.Drawing.Point(139, 29);
this.txtTileBpp.Multiline = true;
this.txtTileBpp.Name = "txtTileBpp";
this.txtTileBpp.ReadOnly = true;
@@ -2204,7 +2233,7 @@
// label42
//
this.label42.AutoSize = true;
- this.label42.Location = new System.Drawing.Point(169, 30);
+ this.label42.Location = new System.Drawing.Point(169, 31);
this.label42.Name = "label42";
this.label42.Size = new System.Drawing.Size(32, 13);
this.label42.TabIndex = 58;
@@ -2212,7 +2241,7 @@
//
// txtTileAddress
//
- this.txtTileAddress.Location = new System.Drawing.Point(76, 27);
+ this.txtTileAddress.Location = new System.Drawing.Point(76, 28);
this.txtTileAddress.Multiline = true;
this.txtTileAddress.Name = "txtTileAddress";
this.txtTileAddress.ReadOnly = true;
@@ -2231,6 +2260,7 @@
//
// tpMapEntry
//
+ this.tpMapEntry.Controls.Add(this.textBox2);
this.tpMapEntry.Controls.Add(this.checkMapEntryVFlip);
this.tpMapEntry.Controls.Add(this.label34);
this.tpMapEntry.Controls.Add(this.checkMapEntryHFlip);
@@ -2246,11 +2276,21 @@
this.tpMapEntry.Controls.Add(this.viewerMapEntryTile);
this.tpMapEntry.Location = new System.Drawing.Point(4, 22);
this.tpMapEntry.Name = "tpMapEntry";
- this.tpMapEntry.Size = new System.Drawing.Size(206, 94);
+ this.tpMapEntry.Size = new System.Drawing.Size(206, 92);
this.tpMapEntry.TabIndex = 2;
this.tpMapEntry.Text = "Map Entry";
this.tpMapEntry.UseVisualStyleBackColor = true;
//
+ // textBox2
+ //
+ this.textBox2.Location = new System.Drawing.Point(137, 51);
+ this.textBox2.Multiline = true;
+ this.textBox2.Name = "textBox2";
+ this.textBox2.ReadOnly = true;
+ this.textBox2.Size = new System.Drawing.Size(34, 18);
+ this.textBox2.TabIndex = 63;
+ this.textBox2.Text = "$DD";
+ //
// checkMapEntryVFlip
//
this.checkMapEntryVFlip.AutoSize = true;
@@ -2283,7 +2323,7 @@
// label17
//
this.label17.AutoSize = true;
- this.label17.Location = new System.Drawing.Point(145, 46);
+ this.label17.Location = new System.Drawing.Point(93, 53);
this.label17.Name = "label17";
this.label17.Size = new System.Drawing.Size(40, 13);
this.label17.TabIndex = 60;
@@ -2301,7 +2341,7 @@
// txtMapEntryPalette
//
this.txtMapEntryPalette.BackColor = System.Drawing.Color.LightGreen;
- this.txtMapEntryPalette.Location = new System.Drawing.Point(126, 43);
+ this.txtMapEntryPalette.Location = new System.Drawing.Point(76, 51);
this.txtMapEntryPalette.Multiline = true;
this.txtMapEntryPalette.Name = "txtMapEntryPalette";
this.txtMapEntryPalette.ReadOnly = true;
@@ -2312,7 +2352,7 @@
// label14
//
this.label14.AutoSize = true;
- this.label14.Location = new System.Drawing.Point(95, 46);
+ this.label14.Location = new System.Drawing.Point(95, 75);
this.label14.Name = "label14";
this.label14.Size = new System.Drawing.Size(25, 13);
this.label14.TabIndex = 58;
@@ -2321,7 +2361,7 @@
// label6
//
this.label6.AutoSize = true;
- this.label6.Location = new System.Drawing.Point(121, 27);
+ this.label6.Location = new System.Drawing.Point(121, 31);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(31, 13);
this.label6.TabIndex = 56;
@@ -2329,7 +2369,7 @@
//
// txtMapEntryTileAddr
//
- this.txtMapEntryTileAddr.Location = new System.Drawing.Point(153, 25);
+ this.txtMapEntryTileAddr.Location = new System.Drawing.Point(153, 29);
this.txtMapEntryTileAddr.Multiline = true;
this.txtMapEntryTileAddr.Name = "txtMapEntryTileAddr";
this.txtMapEntryTileAddr.ReadOnly = true;
@@ -2340,7 +2380,7 @@
// txtMapEntryPrio
//
this.txtMapEntryPrio.BackColor = System.Drawing.Color.LightGreen;
- this.txtMapEntryPrio.Location = new System.Drawing.Point(76, 43);
+ this.txtMapEntryPrio.Location = new System.Drawing.Point(76, 73);
this.txtMapEntryPrio.Multiline = true;
this.txtMapEntryPrio.Name = "txtMapEntryPrio";
this.txtMapEntryPrio.ReadOnly = true;
@@ -2361,13 +2401,13 @@
// txtMapEntryTileNum
//
this.txtMapEntryTileNum.BackColor = System.Drawing.Color.LightGreen;
- this.txtMapEntryTileNum.Location = new System.Drawing.Point(76, 25);
+ this.txtMapEntryTileNum.Location = new System.Drawing.Point(76, 29);
this.txtMapEntryTileNum.Multiline = true;
this.txtMapEntryTileNum.Name = "txtMapEntryTileNum";
this.txtMapEntryTileNum.ReadOnly = true;
- this.txtMapEntryTileNum.Size = new System.Drawing.Size(43, 17);
+ this.txtMapEntryTileNum.Size = new System.Drawing.Size(44, 17);
this.txtMapEntryTileNum.TabIndex = 39;
- this.txtMapEntryTileNum.Text = "$1024";
+ this.txtMapEntryTileNum.Text = "#$DDD";
//
// viewerMapEntryTile
//
@@ -2380,11 +2420,22 @@
//
// tpOBJ
//
+ this.tpOBJ.Controls.Add(this.txtObjPriority);
+ this.tpOBJ.Controls.Add(this.label50);
+ this.tpOBJ.Controls.Add(this.txtObjPaletteMemo);
+ this.tpOBJ.Controls.Add(this.label49);
+ this.tpOBJ.Controls.Add(this.txtObjPalette);
+ this.tpOBJ.Controls.Add(this.label48);
+ this.tpOBJ.Controls.Add(this.txtObjNameAddr);
+ this.tpOBJ.Controls.Add(this.txtObjName);
+ this.tpOBJ.Controls.Add(this.txtObjSize);
+ this.tpOBJ.Controls.Add(this.label46);
+ this.tpOBJ.Controls.Add(this.cbObjLarge);
this.tpOBJ.Controls.Add(this.txtObjNumber);
this.tpOBJ.Controls.Add(this.txtObjCoord);
- this.tpOBJ.Controls.Add(this.checkBox1);
+ this.tpOBJ.Controls.Add(this.cbObjVFlip);
this.tpOBJ.Controls.Add(this.label43);
- this.tpOBJ.Controls.Add(this.checkBox2);
+ this.tpOBJ.Controls.Add(this.cbObjHFlip);
this.tpOBJ.Controls.Add(this.label44);
this.tpOBJ.Controls.Add(this.viewerObj);
this.tpOBJ.Location = new System.Drawing.Point(4, 22);
@@ -2394,6 +2445,115 @@
this.tpOBJ.Text = "OBJ";
this.tpOBJ.UseVisualStyleBackColor = true;
//
+ // txtObjPriority
+ //
+ this.txtObjPriority.BackColor = System.Drawing.Color.LightGreen;
+ this.txtObjPriority.Location = new System.Drawing.Point(187, 29);
+ this.txtObjPriority.Multiline = true;
+ this.txtObjPriority.Name = "txtObjPriority";
+ this.txtObjPriority.ReadOnly = true;
+ this.txtObjPriority.Size = new System.Drawing.Size(18, 17);
+ this.txtObjPriority.TabIndex = 102;
+ this.txtObjPriority.Text = "3";
+ //
+ // label50
+ //
+ this.label50.AutoSize = true;
+ this.label50.Location = new System.Drawing.Point(160, 31);
+ this.label50.Name = "label50";
+ this.label50.Size = new System.Drawing.Size(25, 13);
+ this.label50.TabIndex = 101;
+ this.label50.Text = "Prio";
+ //
+ // txtObjPaletteMemo
+ //
+ this.txtObjPaletteMemo.Location = new System.Drawing.Point(137, 73);
+ this.txtObjPaletteMemo.Multiline = true;
+ this.txtObjPaletteMemo.Name = "txtObjPaletteMemo";
+ this.txtObjPaletteMemo.ReadOnly = true;
+ this.txtObjPaletteMemo.Size = new System.Drawing.Size(34, 18);
+ this.txtObjPaletteMemo.TabIndex = 100;
+ this.txtObjPaletteMemo.Text = "$DD";
+ //
+ // label49
+ //
+ this.label49.AutoSize = true;
+ this.label49.Location = new System.Drawing.Point(93, 75);
+ this.label49.Name = "label49";
+ this.label49.Size = new System.Drawing.Size(40, 13);
+ this.label49.TabIndex = 99;
+ this.label49.Text = "Palette";
+ //
+ // txtObjPalette
+ //
+ this.txtObjPalette.BackColor = System.Drawing.Color.LightGreen;
+ this.txtObjPalette.Location = new System.Drawing.Point(76, 73);
+ this.txtObjPalette.Multiline = true;
+ this.txtObjPalette.Name = "txtObjPalette";
+ this.txtObjPalette.ReadOnly = true;
+ this.txtObjPalette.Size = new System.Drawing.Size(15, 17);
+ this.txtObjPalette.TabIndex = 98;
+ this.txtObjPalette.Text = "00";
+ //
+ // label48
+ //
+ this.label48.AutoSize = true;
+ this.label48.Location = new System.Drawing.Point(121, 53);
+ this.label48.Name = "label48";
+ this.label48.Size = new System.Drawing.Size(31, 13);
+ this.label48.TabIndex = 96;
+ this.label48.Text = "Tile#";
+ //
+ // txtObjNameAddr
+ //
+ this.txtObjNameAddr.Location = new System.Drawing.Point(153, 51);
+ this.txtObjNameAddr.Multiline = true;
+ this.txtObjNameAddr.Name = "txtObjNameAddr";
+ this.txtObjNameAddr.ReadOnly = true;
+ this.txtObjNameAddr.Size = new System.Drawing.Size(45, 18);
+ this.txtObjNameAddr.TabIndex = 97;
+ this.txtObjNameAddr.Text = "@0D00";
+ //
+ // txtObjName
+ //
+ this.txtObjName.BackColor = System.Drawing.Color.LightGreen;
+ this.txtObjName.Location = new System.Drawing.Point(76, 51);
+ this.txtObjName.Multiline = true;
+ this.txtObjName.Name = "txtObjName";
+ this.txtObjName.ReadOnly = true;
+ this.txtObjName.Size = new System.Drawing.Size(43, 17);
+ this.txtObjName.TabIndex = 95;
+ this.txtObjName.Text = "#$DDD";
+ //
+ // txtObjSize
+ //
+ this.txtObjSize.Location = new System.Drawing.Point(122, 29);
+ this.txtObjSize.Multiline = true;
+ this.txtObjSize.Name = "txtObjSize";
+ this.txtObjSize.ReadOnly = true;
+ this.txtObjSize.Size = new System.Drawing.Size(37, 18);
+ this.txtObjSize.TabIndex = 93;
+ this.txtObjSize.Text = "64x64";
+ //
+ // label46
+ //
+ this.label46.AutoSize = true;
+ this.label46.Location = new System.Drawing.Point(89, 31);
+ this.label46.Name = "label46";
+ this.label46.Size = new System.Drawing.Size(34, 13);
+ this.label46.TabIndex = 92;
+ this.label46.Text = "Large";
+ //
+ // cbObjLarge
+ //
+ this.cbObjLarge.AutoSize = true;
+ this.cbObjLarge.Enabled = false;
+ this.cbObjLarge.Location = new System.Drawing.Point(76, 31);
+ this.cbObjLarge.Name = "cbObjLarge";
+ this.cbObjLarge.Size = new System.Drawing.Size(15, 14);
+ this.cbObjLarge.TabIndex = 91;
+ this.cbObjLarge.UseVisualStyleBackColor = true;
+ //
// txtObjNumber
//
this.txtObjNumber.Location = new System.Drawing.Point(76, 6);
@@ -2414,15 +2574,15 @@
this.txtObjCoord.TabIndex = 67;
this.txtObjCoord.Text = "(-239,-239)";
//
- // checkBox1
+ // cbObjVFlip
//
- this.checkBox1.AutoSize = true;
- this.checkBox1.Enabled = false;
- this.checkBox1.Location = new System.Drawing.Point(42, 76);
- this.checkBox1.Name = "checkBox1";
- this.checkBox1.Size = new System.Drawing.Size(15, 14);
- this.checkBox1.TabIndex = 65;
- this.checkBox1.UseVisualStyleBackColor = true;
+ this.cbObjVFlip.AutoSize = true;
+ this.cbObjVFlip.Enabled = false;
+ this.cbObjVFlip.Location = new System.Drawing.Point(42, 76);
+ this.cbObjVFlip.Name = "cbObjVFlip";
+ this.cbObjVFlip.Size = new System.Drawing.Size(15, 14);
+ this.cbObjVFlip.TabIndex = 65;
+ this.cbObjVFlip.UseVisualStyleBackColor = true;
//
// label43
//
@@ -2433,15 +2593,15 @@
this.label43.TabIndex = 66;
this.label43.Text = "V";
//
- // checkBox2
+ // cbObjHFlip
//
- this.checkBox2.AutoSize = true;
- this.checkBox2.Enabled = false;
- this.checkBox2.Location = new System.Drawing.Point(8, 76);
- this.checkBox2.Name = "checkBox2";
- this.checkBox2.Size = new System.Drawing.Size(15, 14);
- this.checkBox2.TabIndex = 63;
- this.checkBox2.UseVisualStyleBackColor = true;
+ this.cbObjHFlip.AutoSize = true;
+ this.cbObjHFlip.Enabled = false;
+ this.cbObjHFlip.Location = new System.Drawing.Point(8, 76);
+ this.cbObjHFlip.Name = "cbObjHFlip";
+ this.cbObjHFlip.Size = new System.Drawing.Size(15, 14);
+ this.cbObjHFlip.TabIndex = 63;
+ this.cbObjHFlip.UseVisualStyleBackColor = true;
//
// label44
//
@@ -2496,25 +2656,6 @@
this.messagetimer.Interval = 5000;
this.messagetimer.Tick += new System.EventHandler(this.messagetimer_Tick);
//
- // txtTilePalette
- //
- this.txtTilePalette.Location = new System.Drawing.Point(139, 68);
- this.txtTilePalette.Multiline = true;
- this.txtTilePalette.Name = "txtTilePalette";
- this.txtTilePalette.ReadOnly = true;
- this.txtTilePalette.Size = new System.Drawing.Size(29, 18);
- this.txtTilePalette.TabIndex = 64;
- this.txtTilePalette.Text = "$FF";
- //
- // label45
- //
- this.label45.AutoSize = true;
- this.label45.Location = new System.Drawing.Point(169, 70);
- this.label45.Name = "label45";
- this.label45.Size = new System.Drawing.Size(22, 13);
- this.label45.TabIndex = 65;
- this.label45.Text = "Pal";
- //
// SNESGraphicsDebugger
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -2627,15 +2768,12 @@
private System.Windows.Forms.NumericUpDown nudScanline;
private System.Windows.Forms.TabControl tabctrlDetails;
private System.Windows.Forms.TabPage tpPalette;
- private System.Windows.Forms.TextBox txtPaletteDetailsIndexSpecific;
- private System.Windows.Forms.TextBox txtPaletteDetailsIndexHexSpecific;
private System.Windows.Forms.TextBox txtPaletteDetailsAddress;
private System.Windows.Forms.TextBox txtPaletteDetailsIndex;
private System.Windows.Forms.TextBox txtPaletteDetailsIndexHex;
private System.Windows.Forms.TextBox txtDetailsPaletteColorRGB;
private System.Windows.Forms.TextBox txtDetailsPaletteColorHex;
private System.Windows.Forms.TextBox txtDetailsPaletteColor;
- private System.Windows.Forms.Label lblDetailsOBJOrBG;
private System.Windows.Forms.Panel pnDetailsPaletteColor;
private System.Windows.Forms.TabPage tpTile;
private System.Windows.Forms.Panel viewerPanel;
@@ -2767,12 +2905,27 @@
private SNESGraphicsViewer viewerObj;
private System.Windows.Forms.TextBox txtObjNumber;
private System.Windows.Forms.TextBox txtObjCoord;
- private System.Windows.Forms.CheckBox checkBox1;
+ private System.Windows.Forms.CheckBox cbObjVFlip;
private System.Windows.Forms.Label label43;
- private System.Windows.Forms.CheckBox checkBox2;
+ private System.Windows.Forms.CheckBox cbObjHFlip;
private System.Windows.Forms.Label label44;
private System.Windows.Forms.TextBox txtTileNumber;
private System.Windows.Forms.Label label45;
private System.Windows.Forms.TextBox txtTilePalette;
+ private System.Windows.Forms.Label label48;
+ private System.Windows.Forms.TextBox txtObjNameAddr;
+ private System.Windows.Forms.TextBox txtObjName;
+ private System.Windows.Forms.TextBox txtObjSize;
+ private System.Windows.Forms.Label label46;
+ private System.Windows.Forms.CheckBox cbObjLarge;
+ private System.Windows.Forms.Label label53;
+ private System.Windows.Forms.Label label52;
+ private System.Windows.Forms.Label label51;
+ private System.Windows.Forms.TextBox textBox2;
+ private System.Windows.Forms.TextBox txtObjPriority;
+ private System.Windows.Forms.Label label50;
+ private System.Windows.Forms.TextBox txtObjPaletteMemo;
+ private System.Windows.Forms.Label label49;
+ private System.Windows.Forms.TextBox txtObjPalette;
}
}
\ No newline at end of file
diff --git a/BizHawk.MultiClient/SNESTools/SNESGraphicsDebugger.cs b/BizHawk.MultiClient/SNESTools/SNESGraphicsDebugger.cs
index b515d18aa6..e4c732e621 100644
--- a/BizHawk.MultiClient/SNESTools/SNESGraphicsDebugger.cs
+++ b/BizHawk.MultiClient/SNESTools/SNESGraphicsDebugger.cs
@@ -6,6 +6,7 @@
// . could this apply to the palette too?
//TODO - show the priority list for the current mode. make the priority list have checkboxes, and use that to control whether that item displays (does bsnes have that granularity? maybe)
//TODO - use custom checkboxes for register-viewing checkboxes to make them green and checked
+//TODO - make freeze actually save the info caches, and re-render in realtime, so that you can pick something you want to see animate without having to hover your mouse just right. also add a checkbox to do the literal freeze (stop it from updating)
//DEFERRED:
//. 256bpp modes (difficult to use)
@@ -47,12 +48,12 @@ namespace BizHawk.MultiClient
viewer.ScaleImage = false;
+ displayTypeItems.Add(new DisplayTypeItem("OBJ", eDisplayType.OBJ));
displayTypeItems.Add(new DisplayTypeItem("BG1", eDisplayType.BG1));
displayTypeItems.Add(new DisplayTypeItem("BG2",eDisplayType.BG2));
displayTypeItems.Add(new DisplayTypeItem("BG3",eDisplayType.BG3));
displayTypeItems.Add(new DisplayTypeItem("BG4",eDisplayType.BG4));
- displayTypeItems.Add(new DisplayTypeItem("OBJ Tiles",eDisplayType.OBJ0));
- displayTypeItems.Add(new DisplayTypeItem("Sprites", eDisplayType.Sprites));
+ displayTypeItems.Add(new DisplayTypeItem("OBJ Tiles",eDisplayType.OBJTiles0));
displayTypeItems.Add(new DisplayTypeItem("2bpp tiles",eDisplayType.Tiles2bpp));
displayTypeItems.Add(new DisplayTypeItem("4bpp tiles",eDisplayType.Tiles4bpp));
displayTypeItems.Add(new DisplayTypeItem("8bpp tiles",eDisplayType.Tiles8bpp));
@@ -60,7 +61,7 @@ namespace BizHawk.MultiClient
displayTypeItems.Add(new DisplayTypeItem("Mode7Ext tiles",eDisplayType.TilesMode7Ext));
displayTypeItems.Add(new DisplayTypeItem("Mode7 tiles (DC)", eDisplayType.TilesMode7DC));
comboDisplayType.DataSource = displayTypeItems;
- comboDisplayType.SelectedIndex = 0;
+ comboDisplayType.SelectedIndex = 1;
var paletteTypeItems = new List();
paletteTypeItems.Add(new PaletteTypeItem("BizHawk", SnesColors.ColorType.BizHawk));
@@ -202,7 +203,7 @@ namespace BizHawk.MultiClient
txtOBSELSizeBits.Text = si.OBSEL_Size.ToString();
txtOBSELBaseBits.Text = si.OBSEL_NameBase.ToString();
txtOBSELT1OfsBits.Text = si.OBSEL_NameSel.ToString();
- txtOBSELSizeDescr.Text = string.Format("{0}, {1}", SNESGraphicsDecoder.ObjSizes[si.OBSEL_Size,0], SNESGraphicsDecoder.ObjSizes[si.OBSEL_Size,1]);
+ txtOBSELSizeDescr.Text = string.Format("{0}, {1}", SNESGraphicsDecoder.ObjSizes[si.OBSEL_Size, 0], SNESGraphicsDecoder.ObjSizes[si.OBSEL_Size, 1]);
txtOBSELBaseDescr.Text = FormatVramAddress(si.OBJTable0Addr);
txtOBSELT1OfsDescr.Text = FormatVramAddress(si.OBJTable1Addr);
@@ -278,7 +279,7 @@ namespace BizHawk.MultiClient
if (si.Mode.MODE == 1 && si.Mode1_BG3_Priority)
{
lblBG3.ForeColor = Color.Red;
- if(toolTip1.GetToolTip(lblBG3) != "Mode 1 BG3 priority toggle bit of $2105 is SET")
+ if (toolTip1.GetToolTip(lblBG3) != "Mode 1 BG3 priority toggle bit of $2105 is SET")
toolTip1.SetToolTip(lblBG3, "Mode 1 BG3 priority toggle bit of $2105 is SET");
}
else
@@ -292,7 +293,12 @@ namespace BizHawk.MultiClient
RenderView();
RenderPalette();
RenderTileView();
+ //these are likely to be changing all the time
UpdateColorDetails();
+ UpdateOBJDetails();
+ //maybe bg settings changed, or something
+ UpdateMapEntryDetails();
+ UpdateTileDetails();
}
eDisplayType CurrDisplaySelection { get { return (comboDisplayType.SelectedValue as eDisplayType?).Value; } }
@@ -314,24 +320,22 @@ namespace BizHawk.MultiClient
};
var selection = CurrDisplaySelection;
- if (selection == eDisplayType.Sprites)
+ if (selection == eDisplayType.OBJ)
{
- var dims = new[] { SNESGraphicsDecoder.ObjSizes[si.OBSEL_Size,0], SNESGraphicsDecoder.ObjSizes[si.OBSEL_Size,1] };
- int largestWidth = Math.Max(dims[0].Width, dims[1].Width);
- int largestHeight = Math.Max(dims[0].Height, dims[1].Height);
- int width = largestWidth * 16;
- int height = largestHeight * 8;
+ var objBounds = si.ObjSizeBounds;
+ int width = objBounds.Width * 8;
+ int height = objBounds.Height * 16;
allocate(width, height);
for (int i = 0; i < 128; i++)
{
- int tx = i % 16;
- int ty = i / 16;
- int x = tx * largestWidth;
- int y = ty * largestHeight;
+ int tx = i % 8;
+ int ty = i / 8;
+ int x = tx * objBounds.Width;
+ int y = ty * objBounds.Height;
gd.RenderSpriteToScreen(pixelptr, stride / 4, x,y, si, i);
}
}
- if (selection == eDisplayType.OBJ0 || selection == eDisplayType.OBJ1)
+ if (selection == eDisplayType.OBJTiles0 || selection == eDisplayType.OBJTiles1)
{
allocate(128, 256);
int startTile;
@@ -376,7 +380,6 @@ namespace BizHawk.MultiClient
if (IsDisplayTypeBG(selection))
{
int bgnum = (int)selection;
- var si = gd.ScanScreenInfo();
var bg = si.BG[bgnum];
map = new SNESGraphicsDecoder.TileEntry[0];
@@ -434,10 +437,10 @@ namespace BizHawk.MultiClient
enum eDisplayType
{
- BG1=1, BG2=2, BG3=3, BG4=4, Sprites, OBJ0, OBJ1, Tiles2bpp, Tiles4bpp, Tiles8bpp, TilesMode7, TilesMode7Ext, TilesMode7DC
+ OBJ, BG1 = 1, BG2 = 2, BG3 = 3, BG4 = 4, OBJTiles0, OBJTiles1, Tiles2bpp, Tiles4bpp, Tiles8bpp, TilesMode7, TilesMode7Ext, TilesMode7DC
}
static bool IsDisplayTypeBG(eDisplayType type) { return type == eDisplayType.BG1 || type == eDisplayType.BG2 || type == eDisplayType.BG3 || type == eDisplayType.BG4; }
- static bool IsDisplayTypeOBJ(eDisplayType type) { return type == eDisplayType.OBJ0 || type == eDisplayType.OBJ1; }
+ static bool IsDisplayTypeOBJ(eDisplayType type) { return type == eDisplayType.OBJTiles0 || type == eDisplayType.OBJTiles1; }
static int DisplayTypeBGNum(eDisplayType type) { if(IsDisplayTypeBG(type)) return (int)type; else return -1; }
static SNESGraphicsDecoder.BGMode BGModeForDisplayType(eDisplayType type)
{
@@ -449,8 +452,8 @@ namespace BizHawk.MultiClient
case eDisplayType.TilesMode7: return SNESGraphicsDecoder.BGMode.Mode7;
case eDisplayType.TilesMode7Ext: return SNESGraphicsDecoder.BGMode.Mode7Ext;
case eDisplayType.TilesMode7DC: return SNESGraphicsDecoder.BGMode.Mode7DC;
- case eDisplayType.OBJ0: return SNESGraphicsDecoder.BGMode.OBJ;
- case eDisplayType.OBJ1: return SNESGraphicsDecoder.BGMode.OBJ;
+ case eDisplayType.OBJTiles0: return SNESGraphicsDecoder.BGMode.OBJ;
+ case eDisplayType.OBJTiles1: return SNESGraphicsDecoder.BGMode.OBJ;
default: throw new InvalidOperationException();
}
}
@@ -612,8 +615,8 @@ namespace BizHawk.MultiClient
if (selection == eDisplayType.Tiles8bpp) bpp = 8;
if (selection == eDisplayType.TilesMode7) bpp = 8;
if (selection == eDisplayType.TilesMode7Ext) bpp = 7;
- if (selection == eDisplayType.OBJ0) bpp = 4;
- if (selection == eDisplayType.OBJ1) bpp = 4;
+ if (selection == eDisplayType.OBJTiles0) bpp = 4;
+ if (selection == eDisplayType.OBJTiles1) bpp = 4;
SNESGraphicsDecoder.PaletteSelection ret = new SNESGraphicsDecoder.PaletteSelection();
if(bpp == 0) return ret;
@@ -700,6 +703,22 @@ namespace BizHawk.MultiClient
throw new InvalidOperationException();
}
+ void UpdateOBJDetails()
+ {
+ if (currObjDataState == null) return;
+ var oam = new SNESGraphicsDecoder.OAMInfo(gd, si, currObjDataState.Number);
+ txtObjNumber.Text = string.Format("#${0:X2}", currObjDataState.Number);
+ txtObjCoord.Text = string.Format("({0}, {1})",oam.X,oam.Y);
+ cbObjHFlip.Checked = oam.HFlip;
+ cbObjVFlip.Checked = oam.VFlip;
+ cbObjLarge.Checked = oam.Size == 1;
+ txtObjSize.Text = SNESGraphicsDecoder.ObjSizes[si.OBSEL_Size, oam.Size].ToString();
+ txtObjPriority.Text = oam.Priority.ToString();
+ txtObjPalette.Text = oam.Palette.ToString();
+ txtObjPaletteMemo.Text = string.Format("${0:X2}", oam.Palette * 16 + 128);
+ txtObjName.Text = string.Format("#${0:X3}", oam.Tile);
+ txtObjNameAddr.Text = string.Format("@{0:X4}", oam.Address);
+ }
void UpdateTileDetails()
{
@@ -754,11 +773,13 @@ namespace BizHawk.MultiClient
txtDetailsPaletteColorHex.Text = string.Format("#{0:X6}", color & 0xFFFFFF);
txtDetailsPaletteColorRGB.Text = string.Format("({0},{1},{2})", (color >> 16) & 0xFF, (color >> 8) & 0xFF, (color & 0xFF));
- if (lastColorNum < 128) lblDetailsOBJOrBG.Text = "(BG:)"; else lblDetailsOBJOrBG.Text = "(OBJ:)";
txtPaletteDetailsIndexHex.Text = string.Format("${0:X2}", lastColorNum);
- txtPaletteDetailsIndexHexSpecific.Text = string.Format("${0:X2}", lastColorNum & 0x7F);
txtPaletteDetailsIndex.Text = string.Format("{0}", lastColorNum);
- txtPaletteDetailsIndexSpecific.Text = string.Format("{0}", lastColorNum & 0x7F);
+
+ //not being used anymore
+ //if (lastColorNum < 128) lblDetailsOBJOrBG.Text = "(BG:)"; else lblDetailsOBJOrBG.Text = "(OBJ:)";
+ //txtPaletteDetailsIndexHexSpecific.Text = string.Format("${0:X2}", lastColorNum & 0x7F);
+ //txtPaletteDetailsIndexSpecific.Text = string.Format("{0}", lastColorNum & 0x7F);
txtPaletteDetailsAddress.Text = string.Format("${0:X3}", lastColorNum * 2);
@@ -929,7 +950,6 @@ namespace BizHawk.MultiClient
class ObjDataState
{
public int Number;
- public SNESGraphicsDecoder.OAMInfo OAMInfo;
}
ObjDataState currObjDataState;
@@ -973,7 +993,7 @@ namespace BizHawk.MultiClient
gd.RenderMode7TilesToScreen((int*)bmpdata.Scan0, bmpdata.Stride / 4, true, false, 1, currTileDataState.Tile, 1);
else if (currTileDataState.Type == eDisplayType.TilesMode7DC)
gd.RenderMode7TilesToScreen((int*)bmpdata.Scan0, bmpdata.Stride / 4, false, true, 1, currTileDataState.Tile, 1);
- else if (currTileDataState.Type == eDisplayType.OBJ0 || currTileDataState.Type == eDisplayType.OBJ1)
+ else if (currTileDataState.Type == eDisplayType.OBJTiles0 || currTileDataState.Type == eDisplayType.OBJTiles1)
{
//render an obj tile
int tile = currTileDataState.Address / 32;
@@ -984,6 +1004,17 @@ namespace BizHawk.MultiClient
bmp.UnlockBits(bmpdata);
viewerTile.SetBitmap(bmp);
}
+ else if (currObjDataState != null)
+ {
+ var bounds = si.ObjSizeBoundsSquare;
+ int width = bounds.Width;
+ int height = bounds.Height;
+ var bmp = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
+ var bmpdata = bmp.LockBits(new Rectangle(0, 0, width, height), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
+ gd.RenderSpriteToScreen((int*)bmpdata.Scan0, bmpdata.Stride / 4, 0, 0, si, currObjDataState.Number);
+ bmp.UnlockBits(bmpdata);
+ viewerObj.SetBitmap(bmp);
+ }
else
{
var bmp = new Bitmap(8, 8, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
@@ -1004,9 +1035,8 @@ namespace BizHawk.MultiClient
currTileDataState.Tile = tilenum;
currTileDataState.Address = (bpp==7?8:bpp) * 8 * currTileDataState.Tile;
currTileDataState.Palette = currPaletteSelection.start;
- if (CurrDisplaySelection == eDisplayType.OBJ0 || CurrDisplaySelection == eDisplayType.OBJ1)
+ if (CurrDisplaySelection == eDisplayType.OBJTiles0 || CurrDisplaySelection == eDisplayType.OBJTiles1)
{
- //adjust address according to
if (tilenum < 256)
currTileDataState.Address += si.OBJTable0Addr;
else
@@ -1024,11 +1054,19 @@ namespace BizHawk.MultiClient
void HandleSpriteMouseOver(int px, int py)
{
- //currViewingSprite = tx + ty * 16;
+ int ox = px / si.ObjSizeBounds.Width;
+ int oy = py / si.ObjSizeBounds.Height;
+
+ if (ox < 0 || oy < 0 || ox >= 8 || oy >= 16)
+ return;
+
+ int objNum = oy * 8 + ox;
+
+ currObjDataState = new ObjDataState();
+ currObjDataState.Number = objNum;
+
//RenderView(); //remember, we were going to highlight the selected sprite somehow as we hover over it
- int ox = px / 64;
- int oy = py / 64;
- //if(ox<0 || oy<0 || ox>
+ SetTab(tpOBJ);
}
void SetTab(TabPage tpSet)
@@ -1054,11 +1092,11 @@ namespace BizHawk.MultiClient
switch (CurrDisplaySelection)
{
- case eDisplayType.OBJ0:
- case eDisplayType.OBJ1:
+ case eDisplayType.OBJTiles0:
+ case eDisplayType.OBJTiles1:
HandleTileViewMouseOver(128, 256, 4, tx, ty);
break;
- case eDisplayType.Sprites:
+ case eDisplayType.OBJ:
HandleSpriteMouseOver(loc.X, loc.Y);
break;
case eDisplayType.Tiles2bpp:
@@ -1110,6 +1148,7 @@ namespace BizHawk.MultiClient
RenderTileView();
UpdateMapEntryDetails();
UpdateTileDetails();
+ UpdateOBJDetails();
}
private void viewer_MouseLeave(object sender, EventArgs e)