예제 #1
0
        private void ImportTilemap(byte[] array, int layer, int offset)
        {
            if (!checkBox4.Checked || tilemap.Tilemaps_tiles[layer] == null)
            {
                return;
            }
            int  counter = 0;
            int  extratiles = 256;
            bool mirror, invert;

            for (int i = 0; i < tilemap.Tilemaps_tiles[layer].Length; i++)
            {
                int tile = Bits.GetShort(array, offset) & 0x1FF;
                mirror = Bits.GetBit(array, offset + 1, 6);
                invert = Bits.GetBit(array, offset + 1, 7);
                tilemap.Tilemaps_tiles[layer][i] = tileset.Tilesets_tiles[layer][tile];
                if (layer != 2)
                {
                    Bits.SetShort(tilemap.Tilemaps_bytes[layer], counter, tile);
                    counter += 2; offset += 2;
                }
                else
                {
                    tilemap.Tilemaps_bytes[layer][counter] = (byte)tile;
                    counter++; offset += 2;
                }
                if (tileset.Tilesets_tiles[layer] == null || tileset.Tilesets_tiles[layer].Length != 512)
                {
                    continue;
                }
                if (mirror || invert)
                {
                    Tile copy = tileset.Tilesets_tiles[layer][tile].Copy();
                    if (mirror)
                    {
                        Do.FlipHorizontal(copy);
                    }
                    if (invert)
                    {
                        Do.FlipVertical(copy);
                    }
                    Tile contains = Do.Contains(tileset.Tilesets_tiles[layer], copy);
                    if (contains == null)
                    {
                        tileset.Tilesets_tiles[layer][extratiles]       = copy;
                        tileset.Tilesets_tiles[layer][extratiles].Index = extratiles;
                        tilemap.Tilemaps_tiles[layer][i] = tileset.Tilesets_tiles[layer][extratiles];
                        Bits.SetShort(tilemap.Tilemaps_bytes[layer], counter - 2, extratiles);
                        extratiles++;
                    }
                    else
                    {
                        tilemap.Tilemaps_tiles[layer][i] = tileset.Tilesets_tiles[layer][contains.Index];
                        Bits.SetShort(tilemap.Tilemaps_bytes[layer], counter - 2, contains.Index);
                    }
                }
            }
        }
예제 #2
0
 /// <summary>
 /// Enable or disable all or some controls within a parent control, starting at the parent control.
 /// Returns the controls that already have the enable status set.
 /// </summary>
 /// <param name="main">The main parent controls.</param>
 /// <param name="enable">Enable or disable the controls.</param>
 /// <param name="childOnly">If set to true, only controls that contain no child controls will be modified.</param>
 /// <param name="skip">The controls to ignore when changing enabled status.</param>
 public static ArrayList EnableControls(object main, bool enable, bool childOnly, bool firstLoop, params object[] skip)
 {
     if (firstLoop)
     {
         set = new ArrayList();
     }
     if (main is ToolStrip)
     {
         foreach (ToolStripItem item in ((ToolStrip)main).Items)
         {
             if (!Do.Contains(item, skip))
             {
                 if (item.Enabled == enable)
                 {
                     set.Add(item);
                 }
                 else
                 {
                     item.Enabled = enable;
                 }
             }
         }
     }
     else
     {
         foreach (Control parent in ((Control)main).Controls)
         {
             if (parent.Controls.Count == 0 || !childOnly && !Do.Contains(parent, skip))
             {
                 if (parent.Enabled == enable)
                 {
                     set.Add(parent);
                 }
                 else
                 {
                     parent.Enabled = enable;
                 }
             }
             EnableControls(parent, enable, childOnly, false, skip);
         }
     }
     return(set);
 }
예제 #3
0
        public void LoadHexEditor()
        {
            this.Updating = true;

            //
            vScrollBar1.Value = offset / 16;
            string bytes2  = "";
            string bytes3  = "";
            string offsets = "";

            // in case enlarging when at end of ROM
            while (last_line > current.Length)
            {
                offset -= 16;
            }

            //
            int offset_line = offset & 0xFFFFF0;

            for (int i = 0; i < line_count; i++)
            {
                offsets += (i * 16 + offset_line).ToString("X6");
                if (i < line_count - 1)
                {
                    offsets += "\r";
                }
                for (int a = 0; a < 16; a++)
                {
                    bytes2 += (current[i * 16 + offset_line + a]).ToString("X2") + " ";
                    bytes3 += (original[i * 16 + offset_line + a]).ToString("X2") + " ";
                }
            }

            //
            ROMOffsets.BeginUpdate();
            ROMOffsets.Text = offsets;
            ROMOffsets.EndUpdate();

            //
            ROMData.BeginUpdate();
            currentROMData.Text            = bytes2;
            originalROMData.Text           = bytes3;
            currentROMData.SelectionStart  = 0;
            currentROMData.SelectionLength = currentROMData.Text.Length;
            currentROMData.SelectionColor  = Color.DarkBlue;
            for (int offsetCounter = offset & 0xFFFFF0, i = 0; i < line_count * 16; i++)
            {
                // first set the length of the changed offsets, to colorize all at once (b/c faster)
                int    changedStart  = 0;
                int    changedLength = 0;
                Change change        = Do.FindOffset(oldChanges, offsetCounter++);
                if (change != null)
                {
                    changedStart = i * 3;
                    if (change.Values.Length == 1)
                    {
                        changedLength = 3;
                        while (Do.Contains(oldChanges, offsetCounter++))
                        {
                            changedLength += 3;
                        }
                        i += changedLength / 3;
                    }
                    else
                    {
                        offsetCounter--;
                        changedLength  = (change.Values.Length - (offsetCounter - change.Offset)) * 3;
                        i             += changedLength / 3;
                        offsetCounter += changedLength / 3;
                        offsetCounter++;
                    }
                }
                if (changedLength > 0)
                {
                    currentROMData.SelectionStart  = changedStart;
                    currentROMData.SelectionLength = changedLength;
                    currentROMData.SelectionColor  = change.Color;
                }
            }
            currentROMData.SelectionStart  = originalROMData.SelectionStart = selectionStart;
            currentROMData.SelectionLength = originalROMData.SelectionLength = selectionLength;
            ROMData.Focus();
            ROMData.EndUpdate();

            //
            UpdateInfoLabels();

            // Finished
            this.Updating = false;
        }