Ejemplo n.º 1
0
        /// <summary>
        /// Creates a deep copy of this instance.
        /// </summary>
        /// <returns></returns>
        public MinecartObject Copy()
        {
            MinecartObject copy = new MinecartObject(Type, X, Y, Count);

            copy.Location = Location;
            return(copy);
        }
Ejemplo n.º 2
0
        private void pictureBoxScreens_MouseMove(object sender, MouseEventArgs e)
        {
            int x = e.X - diffX; int y = e.Y - diffY;

            if (x > picture.Width - 1)
            {
                x = picture.Width - 1;
            }
            if (x < 0)
            {
                x = 0;
            }
            if (y > picture.Height - 1)
            {
                y = picture.Height - 1;
            }
            if (y < 0)
            {
                y = 0;
            }
            //
            if (mouseDownObject >= 0 && e.Button == MouseButtons.Left)
            {
                objectsForm.X.Value = Math.Max(256, x);
                objectsForm.Y.Value = y;
            }
            else if (toggleObjects.Checked)
            {
                for (int i = 0; i < MinecartObjects.Count; i++)
                {
                    MinecartObject mco = MinecartObjects[i];
                    if (x >= mco.X && x < mco.X + mco.Width &&
                        y >= mco.Y && y < mco.Y + 16)
                    {
                        picture.Cursor  = Cursors.Hand;
                        mouseOverObject = i;
                        break;
                    }
                    else
                    {
                        picture.Cursor  = Cursors.Arrow;
                        mouseOverObject = -1;
                    }
                }
            }
        }
Ejemplo n.º 3
0
        // Collection editing
        private void newObject_Click(object sender, EventArgs e)
        {
            if (minecartObjects.Count >= 255)
            {
                MessageBox.Show("Cannot have more than 255 objects.");
                return;
            }
            int            index     = ObjectIndex;
            int            x         = Math.Abs(screensForm.ScreensPanel.AutoScrollPosition.X);
            MinecartObject newObject = new MinecartObject(1, Math.Max(272, x + 16), 16, 1);

            minecartObjects.Insert(ObjectIndex + 1, newObject);
            listBoxObjects.Items.Clear();
            for (int i = 0; i < minecartObjects.Count; i++)
            {
                listBoxObjects.Items.Add("Object " + i);
            }
            ObjectIndex = index + 1;
        }
Ejemplo n.º 4
0
        // Read/write ROM
        private void ReadFromROM()
        {
            // mode7 objects
            int offset = Bits.GetShort(Buffer, 0);

            Mode7ObjectsA = new MinecartObject[8];
            Mode7ObjectsB = new MinecartObject[8];
            for (int i = 0; i < 8; i++)
            {
                Mode7ObjectsA[i] = new MinecartObject(Buffer[offset++], Buffer[offset++]);
            }
            for (int i = 0; i < 8; i++)
            {
                Mode7ObjectsB[i] = new MinecartObject(Buffer[offset++], Buffer[offset++]);
            }

            // side-scrolling objects A
            SSObjectsA = new List <MinecartObject>();
            offset     = Bits.GetShort(Buffer, 2);
            WidthA     = Bits.GetShort(Buffer, offset); offset += 2;
            while (Bits.GetShort(Buffer, offset) != 0xFFFF)
            {
                int x    = Bits.GetShort(Buffer, offset) + 256; offset += 2;
                int type = Buffer[offset++];
                int size = Buffer[offset++];
                int y    = Buffer[offset++];
                SSObjectsA.Add(new MinecartObject(type, x, y, size));
            }

            // side-scrolling objects B
            SSObjectsB = new List <MinecartObject>();
            offset     = Bits.GetShort(Buffer, 4);
            WidthB     = Bits.GetShort(Buffer, offset); offset += 2;
            while (Bits.GetShort(Buffer, offset) != 0xFFFF)
            {
                int x    = Bits.GetShort(Buffer, offset) + 256; offset += 2;
                int type = Buffer[offset++];
                int size = Buffer[offset++];
                int y    = Buffer[offset++];
                SSObjectsB.Add(new MinecartObject(type, x, y, size));
            }

            // side-scrolling L1 screens
            L1Screens = new List <int>();
            offset    = Bits.GetShort(Buffer, 6);
            while (offset != Bits.GetShort(Buffer, 8))
            {
                L1Screens.Add(Buffer[offset++]);
            }

            // side-scrolling L2 screens
            L2Screens = new List <int>();
            offset    = Bits.GetShort(Buffer, 8);
            while (offset != Bits.GetShort(Buffer, 10))
            {
                L2Screens.Add(Buffer[offset++]);
            }

            // side-scrolling rail screens (2nd map)
            RailScreens = new List <int>();
            offset      = Bits.GetShort(Buffer, 10);
            while (offset < Buffer.Length)
            {
                RailScreens.Add(Buffer[offset++]);
            }
        }
Ejemplo n.º 5
0
        // Picture
        private void pictureBoxScreens_Paint(object sender, PaintEventArgs e)
        {
            if (L1Indexes.Count == 0)
            {
                return;
            }
            e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bicubic;
            Rectangle dst;
            Rectangle src;

            // Draw screens
            for (int i = 0; i < L1Indexes.Count; i++)
            {
                dst = new Rectangle(i * 256, 0, 256, 256);
                if (L1Indexes[i] < L1Indexes.Count)
                {
                    src = new Rectangle(0, 0, 256, 256);
                    if (screenIndex < screenImages.Count)
                    {
                        if (Index == 3 && i % 2 == 0)
                        {
                            if (ScreenBGImage == null)
                            {
                                int[] BGPixels = Do.TilesetToPixels(BGTileset.Tileset_tiles, 32, 16, 0, false);
                                ScreenBGImage = Do.PixelsToImage(BGPixels, 512, 256);
                            }
                            dst.Width = 512;
                            src.Width = 512;
                            e.Graphics.DrawImage(ScreenBGImage, dst, src, GraphicsUnit.Pixel);
                            dst.Width = 256;
                            src.Width = 256;
                        }
                        e.Graphics.DrawImage(screenImages[i], dst, src, GraphicsUnit.Pixel);
                    }
                }
                else
                {
                    Font  font  = new Font("Tahoma", 10F, FontStyle.Bold);
                    SizeF size  = e.Graphics.MeasureString("(INVALID SCREEN INDEX)", font, new PointF(0, 0), StringFormat.GenericDefault);
                    Point point = new Point(((256 - (int)size.Width) / 2) + (i * 256), (256 - (int)size.Height) / 2);
                    Do.DrawString(e.Graphics, point, "(INVALID SCREEN INDEX)", Color.Black, Color.Red, font);
                }
                if (this.screenIndex == i)
                {
                    Pen pen = new Pen(new SolidBrush(Color.Gray), 2);
                    pen.DashStyle = DashStyle.Dot;
                    e.Graphics.DrawRectangle(pen, new Rectangle(i * 256, 0, 256 - 1, 256 - 1));
                }
            }
            // Draw objects
            for (int i = 0; toggleObjects.Checked && i < MinecartObjects.Count; i++)
            {
                MinecartObject obj = MinecartObjects[i];
                Pen            pen;
                if (objectIndex == i)
                {
                    pen = new Pen(Color.Red, 2);
                }
                else
                {
                    pen = new Pen(Color.Red, 1);
                }
                e.Graphics.DrawRectangle(pen, new Rectangle(obj.X - 1, obj.Y - 1, obj.Count * 32 - 16 + 2, 16 + 2));
                Bitmap image = obj.Type == 1 ? MinecartData.Coin : MinecartData.Mushroom;
                for (int x = 0; x < obj.Count; x++)
                {
                    e.Graphics.DrawImage(image, x * 32 + obj.X, obj.Y, 16, 16);
                }
            }
        }