Ejemplo n.º 1
0
        public TabsPanel(LevelEditorControl EdControl)
        {
            InitializeComponent();
            this.EdControl = EdControl;

            images = new ImageList();
            images.ColorDepth = ColorDepth.Depth32Bit;
            images.Images.Add(Properties.Resources.add);
            images.Images.Add(Properties.Resources.block);
            images.Images.Add(Properties.Resources.bug);
            images.Images.Add(Properties.Resources.door);
            images.Images.Add(Properties.Resources.views);
            images.Images.Add(Properties.Resources.zones);
            images.Images.Add(Properties.Resources.paths);
            images.Images.Add(Properties.Resources.paths_progress);
            tabControl1.ImageList = images;

            create = new CreatePanel(EdControl);
            objects = new ObjectEditor(EdControl);
            sprites = new SpriteEditor(EdControl);
            entrances = new EntranceEditor(EdControl);
            views = new ViewEditor(EdControl, EdControl.Level.Views, true);
            zones = new ViewEditor(EdControl, EdControl.Level.Zones, false);
            paths = new PathEditor(EdControl, EdControl.Level.Paths);
            progresspaths = new PathEditor(EdControl, EdControl.Level.ProgressPaths);
            controls = new Control[] {create, objects, sprites, entrances, views, zones, paths, progresspaths};

            SelectNone();
        }
Ejemplo n.º 2
0
        public SpriteEditor(LevelEditorControl EdControl)
        {
            InitializeComponent();
            this.EdControl = EdControl;

            SSTable = ROM.GetInlineFile(ROM.Data.File_Modifiers);

            int i = 0;
            foreach (string sprite in SpriteData.spriteNames)
            {
                spritelist[i] = i + ": " + sprite;
                i++;
            }
            if (SpriteData.spriteNames.Count == 0)
            {
                string spriteText = LanguageManager.Get("SpriteEditor", "sprite");
                for (int s = 0; s < ROM.SpriteCount; s++)
                    spritelist[s] = String.Format(spriteText, s);
            }

            for (int l = 0; l < ROM.SpriteCount; l++)
                curSprites.Add(l);
            categoryList.Items.Add(LanguageManager.Get("SpriteEditor", "All"));
            foreach (string cat in SpriteData.categories)
                categoryList.Items.Add(cat);
            categoryList.SelectedIndex = 0;

            UpdateDataEditor();
            UpdateInfo();

            LanguageManager.ApplyToContainer(this, "SpriteEditor");
            spriteTypeUpDown.Maximum = ROM.SpriteCount - 1;
        }
Ejemplo n.º 3
0
 public void loadMinimap(NSMBLevel Level, LevelEditorControl EdControl)
 {
     this.Level = Level;
     this.EdControl = EdControl;
     UnViewableBlocksBrush = new SolidBrush(Color.FromArgb(120, 255, 255, 255));
     loaded = true;
 }
Ejemplo n.º 4
0
 public ObjectsEditionMode(NSMBLevel Level, LevelEditorControl EdControl)
     : base(Level, EdControl)
 {
     tabs = new GoodTabsPanel(EdControl);
     SetPanel(tabs);
     tabs.Dock = DockStyle.Fill;
 }
Ejemplo n.º 5
0
        public CreatePanel(LevelEditorControl EdControl)
        {
            InitializeComponent();
            this.EdControl = EdControl;

            LanguageManager.ApplyToContainer(this, "CreatePanel");
        }
Ejemplo n.º 6
0
        public void render(Graphics g, LevelEditorControl ed, bool selected)
        {
            if (points.Count == 0)
                return;

            bool first = true;
            int lx = 0;
            int ly = 0;
            foreach (NSMBPathPoint p in points)
            {
                if (!first)
                    g.DrawLine(NSMBGraphics.PathPen, lx, ly, p.X+8+XOffs, p.Y+8+YOffs);
                    
                lx = p.X+8+XOffs;
                ly = p.Y+8+YOffs;
                first = false;
            }

            NSMBPathPoint fp = points[0];
            NSMBPathPoint lp = points[points.Count - 1];
            int num = 0;
            foreach (NSMBPathPoint p in points)
            {
                Pen pe = null;
                if (p == fp)
                    pe = Pens.Green;
                if (p == lp)
                    pe = Pens.Red;

                p.render(g, ed);
                num++;
            }
        }
Ejemplo n.º 7
0
 public ToolsForm(LevelEditorControl edc)
 {
     InitializeComponent();
     if (Properties.Settings.Default.mdi)
         this.MdiParent = MdiParentForm.instance;
     LanguageManager.ApplyToContainer(this, "ToolsForm");
     this.EdControl = edc;
 }
Ejemplo n.º 8
0
 public ObjectsEditionMode(NSMBLevel Level, LevelEditorControl EdControl)
     : base(Level, EdControl)
 {
     tabs = new GoodTabsPanel(EdControl);
     SetPanel(tabs);
     tabs.Dock = DockStyle.Fill;
     resizeHandles = Properties.Settings.Default.ShowResizeHandles;
 }
Ejemplo n.º 9
0
 public PathEditor(LevelEditorControl EdControl, List<NSMBPath> l)
 {
     InitializeComponent();
     this.lst = l;
     isProgress = l == EdControl.Level.ProgressPaths;
     LanguageManager.ApplyToContainer(this, "PathEditor");
     this.EdControl = EdControl;
     UpdateList();
 }
Ejemplo n.º 10
0
 public LevelMinimap(NSMBLevel Level, LevelEditorControl EdControl)
 {
     InitializeComponent();
     if (Properties.Settings.Default.mdi)
         this.MdiParent = MdiParentForm.instance;
     this.Level = Level;
     this.EdControl = EdControl;
     UnViewableBlocksBrush = new SolidBrush(Color.FromArgb(120, Color.DarkSlateGray.R, Color.DarkSlateGray.G, Color.DarkSlateGray.B));
 }
Ejemplo n.º 11
0
 public EntranceEditor(LevelEditorControl ec)
 {
     InitializeComponent();
     EdControl = ec;
     UpdateList();
     if (entranceTypeComboBox.Items.Count == 0)
         entranceTypeComboBox.Items.AddRange(LanguageManager.GetList("EntranceTypes").ToArray());
     LanguageManager.ApplyToContainer(this, "EntranceEditor");
 }
Ejemplo n.º 12
0
        public UndoManager(ToolStripSplitButton UndoButton, ToolStripSplitButton RedoButton, LevelEditorControl editor)
        {
            undo = UndoButton;
            redo = RedoButton;
            EdControl = editor;

            undo.ButtonClick += new EventHandler(onUndoLast);
            redo.ButtonClick += new EventHandler(onRedoLast);
        }
Ejemplo n.º 13
0
 public ViewEditor(LevelEditorControl EdControl, List <NSMBView> l, bool EdVi)
 {
     InitializeComponent();
     this.EdControl = EdControl;
     this.lst       = l;
     EditingViews   = EdVi;
     LanguageManager.ApplyToContainer(this, "ViewEditor");
     music.Items.AddRange(ROM.UserInfo.getFullList("Music").ToArray());
     UpdateList();
 }
Ejemplo n.º 14
0
 public ObjectEditor(LevelEditorControl EdControl)
 {
     InitializeComponent();
     LanguageManager.ApplyToContainer(this, "ObjectEditor");
     tileset0picker.Initialise(EdControl.GFX, 0);
     tileset1picker.Initialise(EdControl.GFX, 1);
     tileset2picker.Initialise(EdControl.GFX, 2);
     this.EdControl = EdControl;
     UpdateInfo();
 }
Ejemplo n.º 15
0
        public SpriteEventsViewer(LevelEditorControl ed)
        {
            InitializeComponent();
            this.ed = ed;
            spriteTable.DataSource = spriteList;

            LanguageManager.ApplyToContainer(this, "SpriteEvents");
            this.EventID.HeaderText    = LanguageManager.Get("SpriteEvents", "EventID");
            this.SpriteNum.HeaderText  = LanguageManager.Get("SpriteEvents", "SpriteNumber");
            this.SpriteName.HeaderText = LanguageManager.Get("SpriteEvents", "SpriteName");
        }
Ejemplo n.º 16
0
 public EntranceEditor(LevelEditorControl ec)
 {
     InitializeComponent();
     EdControl = ec;
     UpdateList();
     if (entranceTypeComboBox.Items.Count == 0)
     {
         entranceTypeComboBox.Items.AddRange(LanguageManager.GetList("EntranceTypes").ToArray());
     }
     LanguageManager.ApplyToContainer(this, "EntranceEditor");
 }
Ejemplo n.º 17
0
 public LevelMinimap(NSMBLevel Level, LevelEditorControl EdControl)
 {
     InitializeComponent();
     if (Properties.Settings.Default.mdi)
     {
         this.MdiParent = MdiParentForm.instance;
     }
     this.Level            = Level;
     this.EdControl        = EdControl;
     UnViewableBlocksBrush = new SolidBrush(Color.FromArgb(120, Color.DarkSlateGray.R, Color.DarkSlateGray.G, Color.DarkSlateGray.B));
 }
Ejemplo n.º 18
0
        public SpriteEventsViewer(LevelEditorControl ed)
        {
            InitializeComponent();
            this.ed = ed;
            spriteTable.DataSource = spriteList;

            LanguageManager.ApplyToContainer(this, "SpriteEvents");
            this.EventID.HeaderText = LanguageManager.Get("SpriteEvents", "EventID");
            this.SpriteNum.HeaderText = LanguageManager.Get("SpriteEvents", "SpriteNumber");
            this.SpriteName.HeaderText = LanguageManager.Get("SpriteEvents", "SpriteName");
        }
Ejemplo n.º 19
0
 public ViewEditor(LevelEditorControl EdControl, List<NSMBView> l, bool EdVi)
 {
     InitializeComponent();
     this.EdControl = EdControl;
     this.lst = l;
     EditingViews = EdVi;
     LanguageManager.ApplyToContainer(this, "ViewEditor");
     music.Items.AddRange(ROM.UserInfo.getFullList("Music").ToArray());
     lightList.Items.AddRange(LanguageManager.GetList("3DLighting").ToArray());
     UpdateList();
 }
Ejemplo n.º 20
0
        public void render(Graphics g, LevelEditorControl edControl)
        {

            int EntranceArrowColour = 0;
            // connected pipes have the grey blob (or did, it's kind of pointless)
            /*if (((Type >= 3 && Type <= 6) || (Type >= 16 && Type <= 19) || (Type >= 22 && Type <= 25)) && (Settings & 8) != 0) {
                EntranceArrowColour = 2;
            }*/
            // doors and pipes can be exits, so mark them as one if they're not 128
            if (((Type >= 2 && Type <= 6) || (Type >= 16 && Type <= 19) || (Type >= 22 && Type <= 25)) && (Settings & 128) == 0) {
                EntranceArrowColour = 1;
            }

            g.DrawImage(Properties.Resources.entrances, new Rectangle(X, Y, 16, 16), new Rectangle(Math.Min(Type, 25) * 16, EntranceArrowColour * 16, 16, 16), GraphicsUnit.Pixel);
        }
Ejemplo n.º 21
0
        public void render(Graphics g, LevelEditorControl edControl)
        {
            int EntranceArrowColour = 0;

            // connected pipes have the grey blob (or did, it's kind of pointless)

            /*if (((Type >= 3 && Type <= 6) || (Type >= 16 && Type <= 19) || (Type >= 22 && Type <= 25)) && (Settings & 8) != 0) {
             *  EntranceArrowColour = 2;
             * }*/
            // doors and pipes can be exits, so mark them as one if they're not 128
            if (((Type >= 2 && Type <= 6) || (Type >= 16 && Type <= 19) || (Type >= 22 && Type <= 25)) && (Settings & 128) == 0)
            {
                EntranceArrowColour = 1;
            }

            g.DrawImage(Properties.Resources.entrances, new Rectangle(X, Y, 16, 16), new Rectangle(Math.Min(Type, 25) * 16, EntranceArrowColour * 16, 16, 16), GraphicsUnit.Pixel);
        }
Ejemplo n.º 22
0
        public void render(Graphics g, LevelEditorControl ed)
        {
            Pen p = null;
            int num = parent.points.IndexOf(this);
            if (num == 0)
                p = Pens.Green;
            if (num == parent.points.Count - 1)
                p = Pens.Red;

            g.DrawImage(Properties.Resources.pathpoint, X + NSMBPath.XOffs, Y+NSMBPath.YOffs);
            if (p != null)
            {
                g.DrawRectangle(p, X, Y, 16, 16);
                g.DrawRectangle(p, X+1, Y+1, 14, 14);

            }
            g.DrawString(num.ToString(), NSMBGraphics.SmallInfoFont, Brushes.White, X, Y);
        }
Ejemplo n.º 23
0
        public void render(Graphics g, LevelEditorControl ed, bool selected)
        {
            if (points.Count == 0)
            {
                return;
            }

            bool first = true;
            int  lx    = 0;
            int  ly    = 0;

            foreach (NSMBPathPoint p in points)
            {
                if (!first)
                {
                    g.DrawLine(NSMBGraphics.PathPen, lx, ly, p.X + 8 + XOffs, p.Y + 8 + YOffs);
                }

                lx    = p.X + 8 + XOffs;
                ly    = p.Y + 8 + YOffs;
                first = false;
            }

            NSMBPathPoint fp  = points[0];
            NSMBPathPoint lp  = points[points.Count - 1];
            int           num = 0;

            foreach (NSMBPathPoint p in points)
            {
                Pen pe = null;
                if (p == fp)
                {
                    pe = Pens.Green;
                }
                if (p == lp)
                {
                    pe = Pens.Red;
                }

                p.render(g, ed);
                num++;
            }
        }
Ejemplo n.º 24
0
        public SpriteEditor(LevelEditorControl EdControl)
        {
            InitializeComponent();
            this.EdControl = EdControl;

            SSTable = ROM.GetInlineFile(ROM.Data.File_Modifiers);

            int i = 0;

            foreach (string sprite in SpriteData.spriteNames)
            {
                spritelist[i] = i + ": " + sprite;
                i++;
            }
            if (SpriteData.spriteNames.Count == 0)
            {
                string spriteText = LanguageManager.Get("SpriteEditor", "sprite");
                for (int s = 0; s < ROM.SpriteCount; s++)
                {
                    spritelist[s] = String.Format(spriteText, s);
                }
            }

            for (int l = 0; l < ROM.SpriteCount; l++)
            {
                curSprites.Add(l);
            }
            categoryList.Items.Add(LanguageManager.Get("SpriteEditor", "All"));
            categoryList.Items.Add(LanguageManager.Get("SpriteEditor", "InLevel"));
            categoryList.Items.Add(LanguageManager.Get("SpriteEditor", "InSpriteSets"));
            foreach (string cat in SpriteData.categories)
            {
                categoryList.Items.Add(cat);
            }
            categoryList.SelectedIndex = 0;

            UpdateDataEditor();
            UpdateInfo();

            LanguageManager.ApplyToContainer(this, "SpriteEditor");
            spriteTypeUpDown.Maximum = ROM.SpriteCount - 1;
        }
Ejemplo n.º 25
0
        public GoodTabsPanel(LevelEditorControl EdControl)
        {
            InitializeComponent();
            this.EdControl = EdControl;
            ToolTips       = LanguageManager.GetList("TabText");

            images            = new ImageList();
            images.ColorDepth = ColorDepth.Depth32Bit;
            images.Images.Add(Properties.Resources.config);
            images.Images.Add(Properties.Resources.block);
            images.Images.Add(Properties.Resources.bug);
            images.Images.Add(Properties.Resources.door);
            images.Images.Add(Properties.Resources.views);
            images.Images.Add(Properties.Resources.zones);
            images.Images.Add(Properties.Resources.paths);
            images.Images.Add(Properties.Resources.paths_progress);
            tabControl1.ImageList = images;

            objects       = new ObjectEditor(EdControl);
            sprites       = new SpriteEditor(EdControl);
            entrances     = new EntranceEditor(EdControl);
            views         = new ViewEditor(EdControl, EdControl.Level.Views, true);
            zones         = new ViewEditor(EdControl, EdControl.Level.Zones, false);
            paths         = new PathEditor(EdControl, EdControl.Level.Paths);
            progresspaths = new PathEditor(EdControl, EdControl.Level.ProgressPaths);

            config = new LevelConfig(EdControl);
            config.LoadSettings();
            EdControl.config = config;

            controls = new Control[] { config, objects, sprites, entrances, views, zones, paths, progresspaths };

            foreach (Control c in controls)
            {
                AddTab(c);
            }
            tabControl1.SelectedIndex = 1;

            //Select nothing
            SelectObjects(new List <LevelItem>());
        }
Ejemplo n.º 26
0
        public void render(Graphics g, LevelEditorControl ed)
        {
            Pen p   = null;
            int num = parent.points.IndexOf(this);

            if (num == 0)
            {
                p = Pens.Green;
            }
            if (num == parent.points.Count - 1)
            {
                p = Pens.Red;
            }

            g.DrawImage(Properties.Resources.pathpoint, X + NSMBPath.XOffs, Y + NSMBPath.YOffs);
            if (p != null)
            {
                g.DrawRectangle(p, X, Y, 16, 16);
                g.DrawRectangle(p, X + 1, Y + 1, 14, 14);
            }
            g.DrawString(num.ToString(), NSMBGraphics.SmallInfoFont, Brushes.White, X, Y);
        }
Ejemplo n.º 27
0
        public LevelConfig(LevelEditorControl EdControl)
        {
            InitializeComponent();
            this.EdControl = EdControl;
            this.Level = EdControl.Level;

            tabControl1.SelectTab(0);

            LanguageManager.ApplyToContainer(this, "LevelConfig");

            // Load lists
            loadList("Foregrounds", bgTopLayerComboBox);
            loadList("Backgrounds", bgBottomLayerComboBox);
            loadList("Tilesets", tilesetComboBox);

            // Load modifier lists
            ComboBox target = null;
            foreach (string name in LanguageManager.GetList("Modifiers")) {
                string trimmedname = name.Trim();
                if (trimmedname == "") continue;
                if (trimmedname[0] == '-') {
                    switch (trimmedname) {
                        case "-1": target = set1ComboBox; break;
                        case "-2": target = set2ComboBox; break;
                        case "-3": target = set3ComboBox; break;
                        case "-4": target = set4ComboBox; break;
                        case "-5": target = set5ComboBox; break;
                        case "-6": target = set6ComboBox; break;
                        case "-7": target = set7ComboBox; break;
                        case "-8": target = set8ComboBox; break;
                        case "-9": target = set9ComboBox; break;
                        case "-10": target = set10ComboBox; break;
                        case "-16": target = set16ComboBox; break;
                    }
                } else {
                    target.Items.Add(trimmedname);
                }
            }
        }
Ejemplo n.º 28
0
        public GoodTabsPanel(LevelEditorControl EdControl)
        {
            InitializeComponent();
            this.EdControl = EdControl;

            images = new ImageList();
            images.ColorDepth = ColorDepth.Depth32Bit;
            images.Images.Add(Properties.Resources.config);
            images.Images.Add(Properties.Resources.block);
            images.Images.Add(Properties.Resources.bug);
            images.Images.Add(Properties.Resources.door);
            images.Images.Add(Properties.Resources.views);
            images.Images.Add(Properties.Resources.zones);
            images.Images.Add(Properties.Resources.paths);
            images.Images.Add(Properties.Resources.paths_progress);
            tabControl1.ImageList = images;

            objects = new ObjectEditor(EdControl);
            sprites = new SpriteEditor(EdControl);
            entrances = new EntranceEditor(EdControl);
            views = new ViewEditor(EdControl, EdControl.Level.Views, true);
            zones = new ViewEditor(EdControl, EdControl.Level.Zones, false);
            paths = new PathEditor(EdControl, EdControl.Level.Paths);
            progresspaths = new PathEditor(EdControl, EdControl.Level.ProgressPaths);

            config = new LevelConfig(EdControl);
            config.LoadSettings();
            EdControl.config = config;

            controls = new Control[] { config, objects, sprites, entrances, views, zones, paths, progresspaths };

            foreach (Control c in controls)
                AddTab(c);
            tabControl1.SelectedIndex = 1;

            //Select nothing
            SelectObjects(new List<LevelItem>());
        }
Ejemplo n.º 29
0
        public void render(Graphics g, LevelEditorControl ed)
        {
            Pen p = Pens.LightSteelBlue;

            if (isZone)
            {
                p = Pens.PaleGreen;
            }

            g.DrawRectangle(p, X, Y, Width - 1, Height - 1);
            g.DrawRectangle(p, X + 1, Y + 1, Width - 3, Height - 3);

            Rectangle ViewablePixels = ed.ViewablePixels;
            int       vx             = ViewablePixels.X;
            int       vy             = ViewablePixels.Y;

            if (X + Width > vx && Y + Height > vy)
            {
                int numx = X;
                int numy = Y;

                if (numx < vx)
                {
                    numx = vx;
                }
                if (numy < vy)
                {
                    numy = vy;
                }
                if (isZone)
                {
                    numy += 16;
                }
                g.DrawString(GetDisplayString(), NSMBGraphics.InfoFont, Brushes.White, (float)numx, (float)numy);
            }
        }
Ejemplo n.º 30
0
 public void SetEdControl(LevelEditorControl EdControl)
 {
     this.EdControl = EdControl;
     this.AfterSetEdControl();
 }
Ejemplo n.º 31
0
 public EditionMode(NSMBLevel Level, LevelEditorControl EdControl)
 {
     this.Level     = Level;
     this.EdControl = EdControl;
 }
Ejemplo n.º 32
0
        public void render(Graphics g, LevelEditorControl ed)
        {
            int RenderX = X * 16, RenderX2 = RenderX;
            int RenderY = Y * 16, RenderY2 = RenderY;
            int width, height;
            Bitmap img = null;

            bool customRendered = true;

            switch (this.Type)
            {
                case 23:
                    g.DrawImage(Properties.Resources.PiranhaplantTube, RenderX, RenderY - 28);
                    break;
                case 24:
                    img = Properties.Resources.PiranhaplantTube;
                    img.RotateFlip(RotateFlipType.RotateNoneFlipY);
                    g.DrawImage(img, RenderX, RenderY + 32);
                    break;
                case 25:
                    img = Properties.Resources.PiranhaplantTube;
                    img.RotateFlip(RotateFlipType.Rotate90FlipNone);
                    g.DrawImage(img, RenderX + 32, RenderY);
                    break;
                case 26:
                    img = Properties.Resources.PiranhaplantTube;
                    img.RotateFlip(RotateFlipType.Rotate270FlipNone);
                    g.DrawImage(img, RenderX - 28, RenderY);
                    break;
                case 27:
                    for (int l = 0; l <= Data[5] / 0x10; l++) {
                        if (l == Data[5] / 0x10) {
                            g.DrawImage(Properties.Resources.BulletBillCannonTop, RenderX, RenderY - 16);
                        } else {
                            g.DrawImage(Properties.Resources.BulletBillCannon, RenderX, RenderY);
                            RenderY -= 16;
                        }
                    }
                    break;
                case 28:
                    g.DrawImage(Properties.Resources.BomOmb, RenderX, RenderY - 2);
                    break;
                case 31:
                    g.DrawImage(Properties.Resources.CheepCheep, RenderX, RenderY);
                    break;
                case 32:
                    if (Data[2] / 0x10 == 1)
                        img = Properties.Resources.EndingFlagRed;
                    else
                        img = Properties.Resources.EndingFlag;
                    g.DrawImage(img, RenderX - 29, RenderY - 119);
                    break;
                case 33:
                    if (Data[5] % 0x10 == 1) {
                        img = Properties.Resources.SpringGiant;
                        RenderY -= 16;
                        RenderX -= 8;
                    } else
                        img = Properties.Resources.Spring;
                    if (Data[5] / 0x10 == 1)
                        RenderX += 8;
                    g.DrawImage(img, RenderX, RenderY);
                    break;
                case 34:
                    if (Data[5] / 0x10 == 1)
                        RenderX += 8;
                    g.DrawImage(Properties.Resources.RedCoinRing, RenderX - 7, RenderY - 26);
                    break;
                case 36:
                    g.DrawImage(Properties.Resources.Thwomp, RenderX, RenderY);
                    break;
                case 37:
                    g.DrawImage(Properties.Resources.Spiny, RenderX, RenderY);
                    break;
                case 38:
                    g.DrawImage(Properties.Resources.Boo, RenderX, RenderY);
                    break;
                //case 40: see 183
                case 42:
                    g.DrawImage(Properties.Resources.ChainChompLog, RenderX - 8, RenderY - 48);
                    if (Data[5] % 0x10 == 1)
                        g.DrawImage(Properties.Resources.ChainChomp, RenderX - 37, RenderY - 28);
                    break;
                case 43:
                    g.DrawImage(Properties.Resources.ChainChomp, RenderX - 29, RenderY - 28);
                    break;
                case 48:
                    g.DrawImage(Properties.Resources.TubeBubbles, RenderX, RenderY - 90);
                    break;
                case 49:
                    img = Properties.Resources.TubeBubbles;
                    img.RotateFlip(RotateFlipType.RotateNoneFlipY);
                    g.DrawImage(img, RenderX, RenderY + 32);
                    break;
                case 50:
                    img = Properties.Resources.TubeBubbles;
                    img.RotateFlip(RotateFlipType.Rotate90FlipNone);
                    g.DrawImage(img, RenderX + 32, RenderY);
                    break;
                case 51:
                    img = Properties.Resources.TubeBubbles;
                    img.RotateFlip(RotateFlipType.Rotate270FlipNone);
                    g.DrawImage(img, RenderX - 90, RenderY);
                    break;
                case 52:
                    if (Data[5] % 0x10 == 1)
                        img = Properties.Resources.BuzzyBeetleU;
                    else
                        img = Properties.Resources.BuzzyBeetle;
                    g.DrawImage(img, RenderX, RenderY);
                    break;
                case 53:
                    g.DrawImage(Properties.Resources.DryBones, RenderX, RenderY - 10);
                    break;
                case 54:
                    g.DrawImage(Properties.Resources.FireBall, RenderX, RenderY);
                    break;
                case 55:
                    g.DrawImage(Properties.Resources.BulletBill, RenderX, RenderY);
                    break;
                case 56:
                    RenderY2 = (Data[5] % 0x10) * 10;
                    if (Data[5] / 0x10 == 1) {
                        RenderX -= RenderY2;
                        RenderY += RenderY2;
                    }
                    while (!(RenderX == RenderX2 + RenderY2 + 10)) {
                        if (RenderX == RenderX2)
                            g.DrawImage(Properties.Resources.FireBarMiddle, RenderX + 4, RenderY + 4);
                        else
                            g.DrawImage(Properties.Resources.FireBarBall, RenderX, RenderY);
                        RenderX += 10; RenderY -= 10;
                    }
                    break;
                case 57:
                    if (Data[5] % 0x10 != 1 && Data[5] % 0x10 != 2) {
                        if (Data[3] / 0x10 == 1)
                            RenderY += 8;
                        if (Data[2] % 0x10 == 1)
                            RenderX += 8;
                    }
                    if (Data[5] % 0x10 == 1)
                        g.DrawImage(Properties.Resources.CoinInBubble, RenderX - 4, RenderY - 4);
                    else if (Data[5] % 0x10 == 2) {
                        g.DrawImage(Properties.Resources.CoinInBubble, RenderX - 4, RenderY - 4);
                        g.DrawImage(Properties.Resources.CoinInBubble, RenderX + 20, RenderY - 20);
                        g.DrawImage(Properties.Resources.CoinInBubble, RenderX + 44, RenderY - 4);
                    } else {
                        g.DrawImage(Properties.Resources.Coin, RenderX, RenderY);
                    }
                    break;
                case 59:
                    g.DrawImage(Properties.Resources.HammerBro, RenderX, RenderY - 18);
                    break;
                case 64:
                    if (Data[5] % 0x10 == 1) {
                        img = Properties.Resources.WhompL;
                        RenderX -= 38; RenderY -= 74;
                    } else {
                        img = Properties.Resources.Whomp;
                        RenderX -= 29; RenderY -= 57;
                    }
                    g.DrawImage(img, RenderX, RenderY);
                    break;
                case 66:
                    img = Properties.Resources.PSwitch;
                    if (Data[5] % 0x10 == 1)
                        img.RotateFlip(RotateFlipType.Rotate180FlipNone);
                    else
                        RenderY -= 2;
                    if (Data[5] / 0x10 == 1)
                        RenderX += 8;
                    g.DrawImage(img, RenderX, RenderY);
                    break;
                case 67:
                    g.DrawImage(Properties.Resources.Shark, RenderX - 27, RenderY - 8);
                    break;
                case 68:
                case 69:
                    int dist = (Data[4] % 0x10) * 16;
                    if (Data[3] % 0x10 == 1)
                        dist = -dist;
                    if (this.Type == 68) {
                        RenderY2 -= dist;
                    } else {
                        RenderX2 += dist;
                    }
                    width = Math.Max(16 * (Data[5] % 0x10 + 1), 32) / 2;
                    g.DrawLine(Pens.White, RenderX + width, RenderY + 8, RenderX2 + width, RenderY2 + 8);
                    g.FillEllipse(Brushes.White, RenderX2 + width - 4, RenderY2 + 4, 7, 7);
                    g.DrawImage(Properties.Resources.MovingPlatformLeft, RenderX, RenderY);
                    for (int l = 0; l < Data[5] % 0x10 - 1; l++) {
                        RenderX += 16;
                        g.DrawImage(Properties.Resources.MovingPlatformSection, RenderX, RenderY, 16, 16);
                    }
                    g.DrawImage(Properties.Resources.MovingPlatformRight, RenderX + 16, RenderY);
                    RenderX = X * 16; RenderY = Y * 16;
                    if (RenderX != RenderX2 || RenderY != RenderY2) {
                        g.DrawImage(Properties.Resources.MovingPlatformLeftE, RenderX2, RenderY2);
                        for (int l = 0; l < Data[5] % 0x10 - 1; l++) {
                            RenderX2 += 16;
                            g.DrawImage(Properties.Resources.MovingPlatformSectionE, RenderX2, RenderY2);
                        }
                        g.DrawImage(Properties.Resources.MovingPlatformRightE, RenderX2 + 16, RenderY2);
                    }
                    break;
                case 70:
                    if (Data[5] % 0x10 == 1) {
                        g.DrawImage(Properties.Resources.SpinningLogL, RenderX - 56, RenderY);
                    } else {
                        g.DrawImage(Properties.Resources.SpinningLog, RenderX - 24, RenderY);
                    }
                    break;
                case 73:
                    g.DrawImage(Properties.Resources.HangingPlatform, RenderX, RenderY);
                    RenderX += 92;
                    for (int l = 0; l < 6; l++) {
                        RenderY -= 32;
                        g.DrawImage(Properties.Resources.HangingPlatformChain, RenderX, RenderY);
                    }
                    break;
                case 74:
                    g.DrawImage(Properties.Resources.TiltingRock, RenderX, RenderY - 8);
                    break;
                case 75:
                    g.DrawImage(Properties.Resources.SeeSaw, RenderX, RenderY);
                    break;
                case 76:
                    RenderX2 = RenderX + 16 * (Data[5] % 0x10) - 10;
                    g.DrawImage(Properties.Resources.ScalePlatformBolt, RenderX - 2, RenderY - 10);
                    g.DrawImage(Properties.Resources.ScalePlatformBolt, RenderX2, RenderY - 10);
                    Pen rope = new Pen(Color.FromArgb(49, 24, 74));
                    g.DrawLine(Pens.White, RenderX + 8, RenderY - 9, RenderX2 + 2, RenderY - 9);
                    g.DrawLine(rope, RenderX + 9, RenderY - 8, RenderX2 + 1, RenderY - 8);
                    RenderY2 = RenderY + 16 * (Data[4] % 0x10) - 8;
                    int RenderY3 = RenderY + 16 * (Data[5] / 0x10) - 8;
                    g.DrawLine(Pens.White, RenderX - 1, RenderY, RenderX - 1, RenderY2 - 1);
                    g.DrawLine(rope, RenderX, RenderY + 1, RenderX, RenderY2 - 1);
                    g.DrawLine(Pens.White, RenderX2 + 9, RenderY + 3, RenderX2 + 9, RenderY3 - 1);
                    g.DrawLine(rope, RenderX2 + 10, RenderY + 1, RenderX2 + 10, RenderY3 - 1);
                    g.DrawImage(Properties.Resources.ScalePlatformEnd, RenderX2 - 14, RenderY3);
                    g.DrawImage(Properties.Resources.ScalePlatformEnd, RenderX - 24, RenderY2);
                    rope.Dispose();
                    break;
                case 77:
                case 78:
                    int w = Data[5] % 0x10, s = 2;
                    if (this.Type == 78) { w = Math.Max(0, w - 1); s = 1; RenderX -= 8; }
                    RenderX -= (w * s + 1) * 8;
                    g.DrawImage(Properties.Resources.MovingPlatformLeft, RenderX, RenderY);
                    for (int l = 0; l < w * s; l++) {
                        RenderX += 16;
                        g.DrawImage(Properties.Resources.MovingPlatformSection, RenderX, RenderY);
                    }
                    g.DrawImage(Properties.Resources.MovingPlatformRight, RenderX + 16, RenderY);
                    break;
                case 79:
                    g.DrawImage(Properties.Resources.Spinning3PointedPlatform, RenderX - 28, RenderY - 34);
                    break;
                case 80:
                    img = Properties.Resources.arrow_down;
                    if (Data[3] % 0x10 == 1)
                        RenderY -= 16;
                    else {
                        RenderY += 16;
                        img.RotateFlip(RotateFlipType.Rotate180FlipNone);
                    }
                    g.DrawImage(Properties.Resources.MovingPlatformLeft, RenderX, RenderY);
                    g.DrawImage(Properties.Resources.MovingPlatformSection, RenderX + 16, RenderY);
                    g.DrawImage(Properties.Resources.MovingPlatformSection, RenderX + 32, RenderY);
                    g.DrawImage(Properties.Resources.MovingPlatformRight, RenderX + 48, RenderY);
                    g.DrawImage(img, RenderX + 24, RenderY2, 16, 16);
                    break;
                case 82:
                    g.DrawImage(Properties.Resources.SpinningRectanglePlatform, RenderX - 24, RenderY - 8);
                    break;
                case 86:
                    g.DrawImage(Properties.Resources.SpinningTrianglePlatform, RenderX - 14, RenderY - 6);
                    break;
                case 88:
                    g.DrawImage(Level.GFX.Tilesets[0].Map16Buffer, RenderX, RenderY, new Rectangle(0, 0x50, 16, 16), GraphicsUnit.Pixel);
                    g.DrawImage(Properties.Resources.PSwitch, RenderX + 2, RenderY + 1, 12, 14);
                    break;
                case 89:
                    g.DrawImage(Properties.Resources.Snailicorn, RenderX, RenderY - 16);
                    break;
                case 90:
                    if (Data[5] == 1)
                        g.DrawImage(Properties.Resources.WigglerL, RenderX, RenderY - 44);
                    else
                        g.DrawImage(Properties.Resources.Wiggler, RenderX, RenderY - 14);
                    break;
                case 91:
                    g.DrawImage(Properties.Resources.MovingPlatformLeft, RenderX, RenderY + 8);
                    g.DrawImage(Properties.Resources.MovingPlatformSection, RenderX + 16, RenderY + 8);
                    g.DrawImage(Properties.Resources.MovingPlatformSection, RenderX + 32, RenderY + 8);
                    g.DrawImage(Properties.Resources.MovingPlatformRight, RenderX + 48, RenderY + 8);
                    break;
                case 92:
                    if (Data[5] % 0x10 == 1) {
                        g.DrawImage(Properties.Resources.EelNonMoving, RenderX + 3, RenderY + 7);
                    } else if (Data[5] / 0x10 == 1) {
                        img = Properties.Resources.Eel;
                        img.RotateFlip(RotateFlipType.RotateNoneFlipX);
                        g.DrawImage(img, RenderX + 45, RenderY + 3);
                    } else if (Data[3] % 0x10 == 1) {
                        g.DrawImage(Properties.Resources.Eel, RenderX + 12, RenderY + 3);
                    } else {
                        Rectangle r = new Rectangle(RenderX + 12, RenderY + 3, 104, 28);
                        g.FillRectangle(Brushes.Black, r);
                        g.DrawString(LanguageManager.Get("Sprites", "Eel"), NSMBGraphics.SmallInfoFont, Brushes.White, r);
                    }
                    break;
                case 93:
                    if (Data[5] / 0x10 % 2 == 1) {
                        img = Properties.Resources.ArrowSignRotate45;
                        if (Data[5] % 0x10 == 1)
                            img = Properties.Resources.ArrowSignRotate45F;
                    } else {
                        img = Properties.Resources.ArrowSign;
                        if (Data[5] % 0x10 == 1)
                            img.RotateFlip(RotateFlipType.RotateNoneFlipX);
                    }
                    img = RotateBitmap(img, -Data[5] / 0x20 * 90);
                    if (Data[3] % 0x10 == 1)
                        img = new Bitmap(img, 24, 24);
                    if (Data[5] / 0x10 % 2 == 1) {
                        RenderX += (img.Width / 9) * ((Data[5] / 0x10 > 4) ? 1 : -1);
                        RenderY += (img.Width / 9) * ((Data[5] / 0x10 == 3 || Data[5] / 0x10 == 5) ? 1 : -1);
                    }
                    if (Data[4] / 0x10 == 1)
                        RenderX += 8;
                    if (Data[4] % 0x10 == 1)
                        RenderY += 8;
                    g.DrawImage(img, RenderX - (img.Width - 16) / 2, RenderY - (img.Height - 16));
                    break;
                case 94:
                    if (Data[5] % 0x10 == 1)
                        g.DrawImage(Properties.Resources.SwooperLarge, RenderX - 6, RenderY - 16);
                    else
                        g.DrawImage(Properties.Resources.Swooper, RenderX, RenderY);
                    break;
                case 95:
                    g.DrawImage(Properties.Resources.SpinBoard, RenderX - 6, RenderY);
                    break;
                case 96:
                    g.DrawImage(Properties.Resources.SeaWeed, RenderX - 32, RenderY - 127);
                    break;
                case 99:
                    g.DrawImage(Properties.Resources.Spinning4PointedPlatform, RenderX - 38, RenderY - 29);
                    break;
                case 102:
                    g.DrawImage(Properties.Resources.SpikeBallSmall, RenderX, RenderY);
                    break;
                case 103:
                    switch (Data[2] % 0x10) {
                        case 1:
                            img = Properties.Resources.Dorrie;
                            img.RotateFlip(RotateFlipType.RotateNoneFlipX);
                            g.DrawImage(img, RenderX - 51, RenderY - 59);
                            break;
                        case 2:
                            g.DrawImage(Properties.Resources.DorrieAway, RenderX - 40, RenderY - 59);
                            break;
                        case 3:
                            g.DrawImage(Properties.Resources.DorrieTowards, RenderX - 40, RenderY - 59);
                            break;
                        default:
                            g.DrawImage(Properties.Resources.Dorrie, RenderX - 51, RenderY - 59);
                            break;
                    }
                    break;
                case 104:
                    g.DrawImage(Properties.Resources.Tornado, RenderX - 88, RenderY - 130);
                    break;
                case 105:
                    g.DrawImage(Properties.Resources.WhirlPool, RenderX - 78, RenderY - 164);
                    break;
                case 106:
                    g.DrawImage(Properties.Resources.RedCoin, RenderX, RenderY);
                    break;
                case 107:
                    img = Properties.Resources.QSwitch;
                    if (Data[5] % 0x10 == 1)
                        img.RotateFlip(RotateFlipType.Rotate180FlipNone);
                    else
                        RenderY -= 2;
                    if (Data[5] / 0x10 == 1)
                        RenderX += 8;
                    g.DrawImage(img, RenderX, RenderY);
                    break;
                case 108:
                    img = Properties.Resources.RedSwitch;
                    if (Data[5] % 0x10 == 1)
                        img.RotateFlip(RotateFlipType.Rotate180FlipNone);
                    else
                        RenderY -= 2;
                    if (Data[5] / 0x10 == 1)
                        RenderX += 8;
                    g.DrawImage(img, RenderX, RenderY);
                    break;
                case 109:
                    int shift = Data[5] / 0x10;
                    if (shift == 1 || shift == 3)
                        RenderX += 8;
                    if (shift == 2 || shift == 3)
                        RenderY += 8;
                    g.DrawImage(Properties.Resources.ElectricBall, RenderX - 6, RenderY - 6);
                    break;
                case 110:
                    g.DrawImage(Level.GFX.Tilesets[0].Map16Buffer, RenderX, RenderY, new Rectangle(0, 0x50, 16, 16), GraphicsUnit.Pixel);
                    g.DrawImage(Properties.Resources.RedSwitch, RenderX + 2, RenderY + 1, 12, 14);
                    break;
                case 111:
                    g.DrawImage(Properties.Resources.Log, RenderX - 128, RenderY - 32);
                    break;
                case 113:
                    g.DrawImage(Properties.Resources.CheepChomp, RenderX, RenderY);
                    break;
                case 115:
                    g.DrawImage(Properties.Resources.SpikeBallLarge, RenderX, RenderY - 42);
                    break;
                case 114:
                case 118:
                    if (this.Type == 114)
                        img = Properties.Resources.SmallFlamethrower;
                    else
                        img = Properties.Resources.Flamethrower;
                    switch (Data[5] % 0x40) {
                        case 0:
                            g.DrawImage(img, RenderX, RenderY); break;
                        case 1:
                            img.RotateFlip(RotateFlipType.Rotate180FlipNone);
                            g.DrawImage(img, RenderX - (img.Width - 16), RenderY); break;
                        case 2:
                            img.RotateFlip(RotateFlipType.Rotate270FlipNone);
                            g.DrawImage(img, RenderX, RenderY - (img.Height - 16)); break;
                        case 3:
                            img.RotateFlip(RotateFlipType.Rotate90FlipNone);
                            g.DrawImage(img, RenderX, RenderY); break;
                    }
                    break;
                case 116:
                    g.DrawImage(Properties.Resources.WaterBug, RenderX - 16, RenderY - 5);
                    break;
                case 117:
                    g.DrawImage(Properties.Resources.FlyingBlock, RenderX - 12, RenderY - 8);
                    break;
                case 119:
                    int sz = Data[2] / 0x10;
                    if (sz == 0) sz = 1;
                    g.DrawImage(ScaleBitmap(Properties.Resources.Pendulum, sz * 64, sz * 68), RenderX - sz * 32, RenderY - sz * 6);
                    break;
                case 120:
                    g.DrawImage(Properties.Resources.PiranhaplantGround, RenderX, RenderY + 3);
                    break;
                case 122:
                    g.DrawImage(Properties.Resources.GiantPiranhaplant, RenderX - 37, RenderY - 48);
                    break;
                case 123:
                    g.DrawImage(Properties.Resources.FirePiranhaplant, RenderX - 8, RenderY + 2);
                    break;
                case 124:
                    g.DrawImage(Properties.Resources.GiantFirePiranhaplant, RenderX - 38, RenderY - 45);
                    break;
                case 126:
                    Bitmap img2 = null;
                    RenderX2 = RenderX - 16;
                    for (int l = 0; l < Data[2] / 0x10; l++ ) {
                        if (l == 0) {
                            img = Properties.Resources.DrawBridgeEnd;
                            img2 = Properties.Resources.DrawBridgeEnd; img2.RotateFlip(RotateFlipType.RotateNoneFlipX);
                        } else if (l == Data[2] / 0x10 - 1) {
                            img = Properties.Resources.DrawBridgeHinge;
                            img2 = Properties.Resources.DrawBridgeHinge; img2.RotateFlip(RotateFlipType.RotateNoneFlipX);
                        } else if (l == 1) {
                            img = Properties.Resources.DrawBridgeSection;
                            img2 = Properties.Resources.DrawBridgeSection; img2.RotateFlip(RotateFlipType.RotateNoneFlipX);
                        }
                        g.DrawImage(img2, RenderX, RenderY);
                        g.DrawImage(img, RenderX2, RenderY);
                        RenderX += 16; RenderX2 -= 16;
                    }
                    if (Data[2] / 0x10 == 0)
                        g.DrawImage(Properties.Resources.DrawBridgeHinge, RenderX, RenderY);
                    break;
                case 127:
                    g.DrawImage(Properties.Resources.GiantSpinningPlatform, RenderX - 144, RenderY - 104);
                    break;
                case 128:
                    g.DrawImage(Properties.Resources.WarpCannon, RenderX - 9, RenderY - 26);
                    int world = Data[2] / 0x10;
                    if (world >= 5 && world <= 8)
                        world -= 5;
                    else
                        world = 0;
                    g.DrawImage(Properties.Resources.WarpWorlds, RenderX + 26, RenderY + 23, new Rectangle(world * 18, 0, 18, 19), GraphicsUnit.Pixel);
                    break;
                case 130:
                    g.DrawImage(Properties.Resources.CheepCheep, RenderX, RenderY);
                    break;
                case 131:
                case 132:
                    g.DrawImage(Properties.Resources.MidpointFlag, RenderX, RenderY);
                    break;
                case 136:
                    for (int l = 0; l <= Data[5]; l++) {
                        g.DrawImage(Properties.Resources.PokeySection, RenderX, RenderY);
                        RenderY -= 16;
                    }
                    g.DrawImage(Properties.Resources.PokeyHead, RenderX, RenderY - 9);
                    break;
                case 141:
                    g.DrawImage(Properties.Resources.SwellingGround, RenderX - 128, RenderY);
                    if ((Data[2] & 0xF) == 0) {
                        g.DrawImage(Properties.Resources.SwellingGroundOut, RenderX - 128, RenderY - 112);
                    } else if ((Data[2] & 0xF) == 1) {
                        g.DrawImage(Properties.Resources.SwellingGroundIn, RenderX - 128, RenderY);
                    }
                    break;
                case 142:
                    RenderX -= 8;
                    RenderX2 = RenderX + (Data[2] / 0x10) * 16;
                    RenderY2 = Data[2] % 0x10;
                    if (RenderY2 >= 8)
                        RenderY2 -= 16;
                    RenderY2 = RenderY - RenderY2 * 16;
                    g.DrawLine(Pens.White, RenderX + 8, RenderY + 8, RenderX2 + 8, RenderY2 + 8);
                    g.DrawImage(Properties.Resources.TightRopeEnd, RenderX, RenderY);
                    g.DrawImage(Properties.Resources.TightRopeEnd, RenderX2, RenderY2);
                    break;
                case 144:
                    g.DrawImage(Properties.Resources.SpikedBlock, RenderX - 2, RenderY - 7);
                    RenderY2 = Data[5] % 0x10;
                    if (RenderY2 == 2) RenderY2 = 3;
                    if (RenderY2 <= 3)
                        g.DrawImage(Properties.Resources.FlyingQBlockOverrides, RenderX, RenderY + 1, new Rectangle(RenderY2 * 16, 0, 16, 16), GraphicsUnit.Pixel);
                    break;
                case 146:
                    g.DrawImage(Properties.Resources.StarGate, RenderX, RenderY);
                    break;
                case 147:
                    RenderX -= Data[5] * 8 + 6;
                    g.DrawImage(Properties.Resources.BumpPlatformLeft, RenderX, RenderY);
                    RenderX += 14;
                    for (int l = 0; l < Data[5] - 1; l++) {
                        g.DrawImage(Properties.Resources.BumpPlatformSection, RenderX, RenderY);
                        RenderX += 16;
                    }
                    if (Data[5] > 0)
                        g.DrawImage(Properties.Resources.BumpPlatformRight, RenderX, RenderY);
                    break;
                case 148:
                    g.DrawImage(Properties.Resources.Goomba, RenderX, RenderY - 2);
                    break;
                case 149:
                    bool inShell = Data[5] / 0x10 == 1;
                    switch (Data[5] % 0x10) {
                        case 1:
                            img = inShell ? Properties.Resources.RedKoopaShell : Properties.Resources.KoopaRed; break;
                        case 2:
                        case 3:
                            img = inShell ? Properties.Resources.BlueKoopaShell : Properties.Resources.KoopaBlue; break;
                        default:
                            img = inShell ? Properties.Resources.GreenKoopaShell : Properties.Resources.KoopaGreen; break;
                    }
                    if (inShell)
                        g.DrawImage(img, RenderX, RenderY);
                    else
                        g.DrawImage(img, RenderX, RenderY - 13);
                    break;
                case 150:
                    switch (Data[5] % 0x10) {
                        case 1:
                            img = Properties.Resources.ParakoopaRed; break;
                        case 2:
                            img = Properties.Resources.ParakoopaBlue; break;
                        default:
                            img = Properties.Resources.ParakoopaGreen; break;
                    }
                    g.DrawImage(img, RenderX, RenderY - 16);
                    break;
                case 152:
                    g.DrawImage(Properties.Resources.SwitchBlock, RenderX, RenderY);
                    break;
                case 155:
                    Rectangle rect = this.getRect();
                    rect.Offset(1, 1);
                    g.DrawRectangle(Pens.Black, rect);
                    rect.Offset(-1, -1);
                    g.DrawRectangle(Pens.Lime, rect);
                    g.DrawString(LanguageManager.Get("Sprites", "Warp"), NSMBGraphics.SmallInfoFont, Brushes.Black, RenderX + 1, RenderY + 1);
                    g.DrawString(LanguageManager.Get("Sprites", "Warp"), NSMBGraphics.SmallInfoFont, Brushes.Lime, RenderX, RenderY);
                    break;
                case 157:
                    g.DrawImage(Properties.Resources.FireBro, RenderX, RenderY - 15);
                    break;
                case 158:
                    g.DrawImage(Properties.Resources.BoomerangBro, RenderX, RenderY - 18);
                    break;
                case 162:
                    RenderY += 24;
                    RenderX += 6;
                    g.DrawImage(Properties.Resources.MushroomStalkTop, RenderX, RenderY);
                    RenderY += 8;
                    g.DrawImage(Properties.Resources.MushroomStalk, RenderX, RenderY);
                    for (int l = 0; l <= Data[3] % 0x10; l++) {
                        RenderY += 16;
                        g.DrawImage(Properties.Resources.MushroomStalk, RenderX, RenderY);
                    }
                    RenderX = X * 16 - 16 * (Data[4] / 0x10 + 1);
                    RenderY = Y * 16;
                    img = Properties.Resources.MushroomEdge;
                    g.DrawImage(img, RenderX, RenderY);
                    RenderX += 32;
                    for (int l = 0; l < Data[4] / 0x10; l++) {
                        g.DrawImage(Properties.Resources.MushroomSection, RenderX, RenderY);
                        RenderX += 32;
                    }
                    img.RotateFlip(RotateFlipType.RotateNoneFlipX);
                    g.DrawImage(img, RenderX, RenderY);
                    break;
                case 173:
                    for (int l = 0; l < Data[5] % 0x10 + 4; l++) {
                        g.DrawImage(Properties.Resources.Rope, RenderX - 3, RenderY);
                        RenderY += 16;
                    }
                    break;
                case 174:
                    RenderY += 24;
                    RenderX += 6;
                    g.DrawImage(Properties.Resources.MushroomStalkTop, RenderX, RenderY);
                    RenderY += 8;
                    g.DrawImage(Properties.Resources.MushroomStalk, RenderX, RenderY);
                    g.DrawImage(Properties.Resources.MushroomStalk, RenderX, RenderY + 16);
                    RenderX = X * 16 - 16 * (Data[4] / 0x10 + 1);
                    RenderY = RenderY2;
                    img = Properties.Resources.MushroomEdge;
                    g.DrawImage(img, RenderX, RenderY);
                    RenderX += 32;
                    for (int l = 0; l < Data[4] / 0x10; l++) {
                        g.DrawImage(Properties.Resources.MushroomSection, RenderX, RenderY);
                        RenderX += 32;
                    }
                    img.RotateFlip(RotateFlipType.RotateNoneFlipX);
                    g.DrawImage(img, RenderX, RenderY);
                    break;
                case 175:
                    g.DrawImage(Properties.Resources.BouncyBricks, RenderX - 40, RenderY - 48);
                    break;
                case 180:
                    if (Data[5] % 0x10 == 1)
                        img = Properties.Resources.FenceKoopaRed;
                    else
                        img = Properties.Resources.FenceKoopaGreen;
                    g.DrawImage(img, RenderX, RenderY);
                    break;
                case 40:
                case 183:
                    g.DrawImage(Properties.Resources.Lakitu, RenderX, RenderY - 23);
                    break;
                case 186:
                    g.DrawImage(Properties.Resources.Paragoomba, RenderX, RenderY - 12);
                    break;
                case 187:
                    g.DrawImage(Properties.Resources.ManualPlatform, RenderX, RenderY);
                    if (Data[5] % 0x10 == 0 || Data[5] % 0x10 == 2)
                        g.DrawImage(Properties.Resources.UpArrow, RenderX + 51, RenderY + 4);
                    else if (Data[5] % 0x10 == 1)
                        g.DrawImage(Properties.Resources.DownArrow, RenderX + 51, RenderY + 4);
                    break;
                case 189:
                    g.DrawImage(Properties.Resources.Pipe, RenderX, RenderY - 48);
                    break;
                case 191:
                    RenderY2 = Data[3] / 0x10;
                    if (RenderY2 == 0) RenderY2 = 8;
                    g.DrawImage(Properties.Resources.QBlock, RenderX, RenderY + (RenderY2 - 5) * 16);
                    if (Data[5] % 0x10 <= 8)
                        g.DrawImage(Properties.Resources.HangingBlockOverrides, RenderX, RenderY + (RenderY2 - 5) * 16, new Rectangle((Data[5] % 0x10) * 16, 0, 16, 16), GraphicsUnit.Pixel);
                    g.DrawLine(Pens.White, RenderX + 7, RenderY + (RenderY2 - 5) * 16, RenderX + 7, RenderY - 80);
                    g.DrawLine(Pens.White, RenderX + 8, RenderY + (RenderY2 - 5) * 16, RenderX + 8, RenderY - 80);
                    break;
                case 193:
                    g.DrawImage(Properties.Resources.DryBonesLarge, RenderX, RenderY - 28);
                    break;
                case 194:
                    g.DrawImage(Properties.Resources.GiantThwomp, RenderX, RenderY);
                    break;
                case 197:
                    RenderY2 = Data[4] / 0x10; //Tile number
                    RenderY2 = RenderY2 < TileCreateNums.Length ? TileCreateNums[RenderY2] : 0x67; //Load actual number from hardcoded list
                    width = Data[3] % 0x10; //Checkerboard pattern
                    height = Data[4] % 0x10; //Create or destroy
                    for (int l = 1; l <= Math.Max(1, Data[5] % 0x10); l++) {
                        for (int m = 1; m <= Math.Max(1, Data[5] / 0x10); m++) {
                            if (width == 0 || width == 1 && l % 2 == m % 2 || width == 2 && l % 2 != m % 2) //Checkerboard pattern
                            {
                                if (height == 0)
                                    g.DrawImage(Properties.Resources.DestroyTile, RenderX, RenderY);
                                else
                                    if (RenderY2 < 0) //Negative number indicates an override tile
                                        g.DrawImage(Properties.Resources.tileoverrides, RenderX, RenderY, new Rectangle(-RenderY2, 0, 16, 16), GraphicsUnit.Pixel);
                                    else
                                        g.DrawImage(Level.GFX.Tilesets[0].Map16Buffer, RenderX, RenderY, new Rectangle(RenderY2 % 0x10 * 0x10, RenderY2 & 0xF0, 16, 16), GraphicsUnit.Pixel);
                            }
                            RenderX += 16;
                        }
                        RenderY += 16;
                        RenderX = RenderX2;
                    }
                    if (height == 0)
                        g.DrawRectangle(Pens.Black, this.getRect());
                    break;
                case 204:
                    g.DrawImage(Properties.Resources.JumpingFlame, RenderX, RenderY - 7);
                    break;
                case 205:
                    g.DrawImage(Properties.Resources.FlameChomp, RenderX, RenderY - 27);
                    break;
                case 206:
                    g.DrawImage(Properties.Resources.GhostGoo, RenderX, RenderY - 32);
                    break;
                case 207:
                    if (Data[5] % 0x10 == 1)
                        img = Properties.Resources.CheepCheepGiantGreen;
                    else
                        img = Properties.Resources.CheepCheepGiant;
                    g.DrawImage(img, RenderX - 20, RenderY - 32);
                    break;
                case 209:
                    g.DrawImage(Properties.Resources.GiantHammerBro, RenderX, RenderY - 15);
                    break;
                case 210:
                    g.DrawImage(Properties.Resources.VSBattleStar, RenderX, RenderY);
                    break;
                case 211:
                    g.DrawImage(Properties.Resources.Blooper, RenderX, RenderY - 16);
                    break;
                case 212:
                    g.DrawImage(Properties.Resources.BlooperNanny, RenderX, RenderY - 16);
                    break;
                case 213:
                    g.DrawImage(Properties.Resources.BlooperWithMini, RenderX - 8, RenderY - 32);
                    break;
                case 219:
                    switch (Data[5] / 0x10) {
                        case 1:
                            g.DrawImage(Properties.Resources.SpinyBeetleLeft, RenderX - 4, RenderY); break;
                        case 2:
                            g.DrawImage(Properties.Resources.SpinyBeetleDown, RenderX, RenderY); break;
                        case 3:
                            g.DrawImage(Properties.Resources.SpinyBeetleRight, RenderX, RenderY); break;
                        default:
                            g.DrawImage(Properties.Resources.SpinyBeetleUp, RenderX, RenderY - 4); break;
                    }
                    break;
                case 220:
                    g.DrawImage(Properties.Resources.BowserJr, RenderX, RenderY - 25);
                    break;
                case 222:
                    if (Data[5] / 0x10 == 1)
                        RenderX += 8;
                    if (Data[5] % 0x10 == 1)
                        RenderY += 8;
                    g.DrawImage(Properties.Resources.MiniGoomba, RenderX, RenderY);
                    break;
                case 223:
                    g.DrawImage(Properties.Resources.FlipGateSmall, RenderX, RenderY);
                    break;
                case 224:
                    g.DrawImage(Properties.Resources.FlipGateLarge, RenderX, RenderY);
                    break;
                case 226:
                    RenderY += (Data[5] & 0xF0) + 64;
                    g.DrawLine(Pens.White, RenderX + 7, RenderY2, RenderX + 7, RenderY);
                    g.DrawLine(Pens.White, RenderX + 8, RenderY2, RenderX + 8, RenderY);
                    g.DrawImage(Properties.Resources.HangingScuttleBug, RenderX - 14, RenderY);
                    break;
                case 227:
                    g.DrawImage(Properties.Resources.MoneyBag, RenderX, RenderY - 5);
                    break;
                case 228:
                    g.DrawImage(Properties.Resources.RouletteBlock, RenderX, RenderY);
                    break;
                case 232:
                    g.DrawImage(Properties.Resources.QBlock, RenderX, RenderY);
                    if (Data[5] % 0x10 < 10)
                        g.DrawImage(Properties.Resources.HangingBlockOverrides, RenderX, RenderY, new Rectangle((Data[5] % 0x10) * 16, 0, 16, 16), GraphicsUnit.Pixel);
                    g.DrawLine(Pens.White, RenderX + 7, RenderY - 128, RenderX + 7, RenderY);
                    g.DrawLine(Pens.White, RenderX + 8, RenderY - 128, RenderX + 8, RenderY);
                    break;
                case 233:
                    for (int l = 0; l < Data[5] % 0x10 + 4; l++) {
                        g.DrawImage(Properties.Resources.SwingingPole, RenderX - 3, RenderY);
                        RenderY += 16;
                    }
                    g.DrawImage(Properties.Resources.LineAttachment, RenderX2 - 11, RenderY2 - 11);
                    break;
                case 235:
                    if (Data[5] / 0x10 == 1)
                        RenderX += 8;
                    if (Data[5] % 0x10 == 1)
                        RenderY += 8;
                    g.DrawImage(Properties.Resources.StarCoin, RenderX, RenderY);
                    break;
                case 236:
                    if (Data[2] / 0x10 == 1)
                        RenderY += 8;
                    g.DrawImage(Properties.Resources.SpinningSquarePlatform, RenderX - 16, RenderY - 16);
                    break;
                case 237:
                    g.DrawImage(Properties.Resources.Broozer, RenderX, RenderY - 15);
                    break;
                case 238:
                    g.DrawImage(Properties.Resources.MushroomStalkTop, RenderX + 6, RenderY + 24);
                    RenderY += 32;
                    for (int l = 0; l < 5; l++){
                        g.DrawImage(Properties.Resources.MushroomStalk, RenderX + 6, RenderY);
                        RenderY += 16;
                    }
                    RenderX = X * 16 - 16 * (Data[5] / 0x10 + 1);
                    RenderY = Y * 16;
                    img = Properties.Resources.PurpleMushroomEdge;
                    g.DrawImage(img, RenderX, RenderY);
                    RenderX += 32;
                    for (int l = 0; l < Data[5] / 0x10; l++) {
                        g.DrawImage(Properties.Resources.PurpleMushroomSection, RenderX, RenderY);
                        RenderX += 32;
                    }
                    img.RotateFlip(RotateFlipType.RotateNoneFlipX);
                    g.DrawImage(img, RenderX, RenderY);
                    break;
                case 239:
                    g.DrawImage(Properties.Resources.RiseLowerMushroomStalkTop, RenderX, RenderY + 24);
                    RenderY += 32;
                    for (int l = 0; l <= Math.Max(Data[5] / 0x10, Data[4] % 0x10); l++) {
                        g.DrawImage(Properties.Resources.RiseLowerMushroomStalk, RenderX, RenderY);
                        RenderY += 16;
                    }
                    RenderX -= (Data[5] % 0x10 + 1) * 8;
                    if (Data[5] / 0x10 > Data[4] % 0x10) {
                        img = Properties.Resources.LoweringMushroomEdge;
                        img2 = Properties.Resources.LoweringMushroomMiddle;
                    } else {
                        img = Properties.Resources.RisingMushroomEdge;
                        img2 = Properties.Resources.RisingMushroomMiddle;
                    }
                    g.DrawImage(img, RenderX, RenderY2);
                    for (int l = 0; l < Data[5] % 0x10; l++) {
                        RenderX += 16;
                        g.DrawImage(img2, RenderX, RenderY2);
                    }
                    img.RotateFlip(RotateFlipType.RotateNoneFlipX);
                    g.DrawImage(img, RenderX + 16, RenderY2);
                    break;
                case 241:
                    img = Properties.Resources.RotatingCannon;
                    img.RotateFlip(RotateFlipType.RotateNoneFlipX);
                    for (int l = 0; l <= Math.Min(7, (int)Data[3]); l++) {
                        if ((Data[4] & (1 << l)) > 0)
                            g.DrawImage(Properties.Resources.RotatingCannonEmpty, RenderX + 2, RenderY);
                        else if ((Data[5] & (1 << l)) > 0)
                            g.DrawImage(img, RenderX - 3, RenderY);
                        else
                            g.DrawImage(Properties.Resources.RotatingCannon, RenderX + 1, RenderY);
                        RenderY -= 16;
                    }
                    break;
                case 242:
                    RenderX2 = Data[5] % 0x10;
                    if (Data[5] / 0x10 == 1) {
                        if (Data[4] % 0x10 == 1)
                            g.DrawImage(Properties.Resources.ExpandedMushroomS, RenderX - 32, RenderY);
                        else
                            g.DrawImage(Properties.Resources.ExpandedMushroomL, RenderX - 72, RenderY);
                        RenderX2++;
                        RenderY2 -= 16;
                    }
                    else
                        g.DrawImage(Properties.Resources.ContractedMushroom, RenderX - 8, RenderY);
                    RenderY2 += 32;
                    for (int l = 0; l < RenderX2; l++) {
                        if (l == 0)
                            g.DrawImage(Properties.Resources.ExpandMushroomStalkTop, RenderX, RenderY2);
                        else
                            g.DrawImage(Properties.Resources.ExpandMushroomStalk, RenderX, RenderY2);
                        RenderY2 += 16;
                    }
                    break;
                case 243:
                    g.DrawImage(Properties.Resources.RoofSpiny, RenderX, RenderY);
                    break;
                case 244:
                    switch (Data[5] / 0x10) {
                        case 1:
                            RenderX -= 8; break;
                        case 2:
                            RenderX += 8; break;
                    }
                    g.DrawImage(Properties.Resources.BouncingMushroom, RenderX - 40, RenderY);
                    RenderY += 32;
                    RenderX += 3;
                    for (int l = 0; l < Data[5] % 0x10; l++) {
                        g.DrawImage(Properties.Resources.BouncingMushroomStalk, RenderX, RenderY);
                        RenderY += 16;
                    }
                    break;
                case 246:
                    g.DrawImage(Properties.Resources.Barrel, RenderX - 16, RenderY - 8);
                    break;
                case 247:
                    g.DrawImage(Properties.Resources.Shark, RenderX - 27, RenderY - 8);
                    g.DrawImage(Properties.Resources.Infinity, RenderX - 4, RenderY + 1);
                    break;
                case 248:
                    g.DrawImage(Properties.Resources.BalloonBoo, RenderX - 53, RenderY - 106);
                    break;
                case 249:
                    RenderX -= Data[5] % 0x10 * 8 + 24;
                    RenderY += Data[4] / 0x10 * 16 + 88;
                    int XOff = Data[5] % 0x10 * 16 + 48;
                    for (int l = 0; l < Data[4] / 0x10 + 4; l++) {
                        RenderY -= 16;
                        g.DrawImage(Properties.Resources.WallJumpPlatformBlock, RenderX, RenderY);
                        g.DrawImage(Properties.Resources.WallJumpPlatformBlock, RenderX + XOff, RenderY);
                    }
                    for (int l = 0; l < Data[5] % 0x10 + 2; l++){
                        RenderX += 16;
                        g.DrawImage(Properties.Resources.WallJumpPlatformBlock, RenderX, RenderY);
                    }
                    g.DrawImage(Properties.Resources.LineAttachment, X * 16 - 3, Y * 16 + 5);
                    break;
                case 250:
                    g.DrawImage(Properties.Resources.Crow, RenderX, RenderY);
                    break;
                case 252:
                    g.DrawImage(Properties.Resources.BanzaiBillCannon, RenderX - 32, RenderY - 64);
                    break;
                case 254:
                    g.DrawImage(Properties.Resources.Kabomb, RenderX, RenderY - 3);
                    break;
                case 255:
                    g.DrawImage(Properties.Resources.Jungle, RenderX, RenderY);
                    break;
                case 256:
                    img = Properties.Resources.ThruWallPlatform;
                    if (Data[3] / 0x10 == 0)
                        g.DrawImage(img, RenderX - 80, RenderY);
                    else {
                        img.RotateFlip(RotateFlipType.RotateNoneFlipX);
                        g.DrawImage(img, RenderX, RenderY);
                    }
                    break;
                case 265:
                    g.DrawImage(Properties.Resources.Hand, RenderX + 8, RenderY);
                    break;
                case 268:
                    g.DrawImage(Properties.Resources.UnderwaterBounceBall, RenderX - 26, RenderY - 26);
                    break;
                case 272:
                    if (Data[5] % 0x10 == 1)
                        g.DrawImage(Properties.Resources.SnowBranchLeft, RenderX - 31, RenderY - 12);
                    else
                        g.DrawImage(Properties.Resources.SnowBranchRight, RenderX + 15, RenderY - 12);
                    break;
                case 273:
                    g.DrawImage(Properties.Resources.SnowballThrower, RenderX, RenderY);
                    break;
                case 274:
                    img = Properties.Resources.SinkingSnowEdge;
                    g.DrawImage(img, RenderX - 16, RenderY);
                    for (int l = 0; l <= Data[5] % 0x10; l++) {
                        g.DrawImage(Properties.Resources.SinkingSnow, RenderX, RenderY);
                        RenderX += 16;
                    }
                    img.RotateFlip(RotateFlipType.RotateNoneFlipX);
                    g.DrawImage(img, RenderX, RenderY);
                    break;
                case 275:
                    RenderY -= 14;
                    g.DrawImage(Properties.Resources.JumpingQBlock, RenderX, RenderY);
                    if ((Data[4] % 0x10) <= 3)
                        g.DrawImage(Properties.Resources.JumpingQBlockOverrides, RenderX, RenderY + 3, new Rectangle((Data[4] % 0x10) * 16, 0, 16, 16), GraphicsUnit.Pixel);
                    for (int l = 0; l < Data[5] % 0x10; l++) {
                        RenderY -= 16;
                        g.DrawImage(Properties.Resources.Brick, RenderX, RenderY);
                    }
                    break;
                case 277:
                    int direction = Data[2] % 8;
                    if (direction == 0 || direction == 2 || direction == 4 || direction == 6)
                        img = Properties.Resources.Arrow;
                    else
                        img = Properties.Resources.ArrowRotate45;
                    if (direction == 2 || direction == 3)
                        img.RotateFlip(RotateFlipType.Rotate90FlipNone);
                    if (direction == 4 || direction == 5)
                        img.RotateFlip(RotateFlipType.Rotate180FlipNone);
                    if (direction == 6 || direction == 7)
                        img.RotateFlip(RotateFlipType.Rotate270FlipNone);
                    g.DrawImage(img, RenderX, RenderY, 32, 32);
                    break;
                case 278:
                    g.DrawImage(ScaleBitmap(Properties.Resources.GroundpoundGoo, (Data[5] % 0x10 + 1) * 16,
                        (Data[5] / 0x10 + 1) * 16), RenderX, RenderY);
                    break;
                case 279:
                    img = Properties.Resources.OneWayDoor;
                    if (Data[5] == 0 || Data[5] == 1) {
                        img.RotateFlip(RotateFlipType.RotateNoneFlipY);
                        RenderY -= 39;
                    } else if (Data[5] == 2 || Data[5] == 3) {
                        RenderY += 16;
                    } else if (Data[5] == 4 || Data[5] == 5) {
                        img.RotateFlip(RotateFlipType.Rotate270FlipNone);
                        RenderX += 16;
                    } else if (Data[5] == 6 || Data[5] == 7) {
                        img.RotateFlip(RotateFlipType.Rotate270FlipX);
                        RenderX -= 39;
                    }
                    if (Data[5] == 0 || Data[5] == 2)
                        img.RotateFlip(RotateFlipType.RotateNoneFlipX);
                    else if (Data[5] == 4 || Data[5] == 6)
                        img.RotateFlip(RotateFlipType.RotateNoneFlipY);
                    g.DrawImage(img, RenderX, RenderY);
                    break;
                case 281:
                    img = Properties.Resources.PipeCaterpiller;
                    if (Data[5] % 0x10 == 1) {
                        img.RotateFlip(RotateFlipType.Rotate180FlipNone);
                        g.DrawImage(img, RenderX + 10, RenderY + 16);
                    } else
                        g.DrawImage(img, RenderX + 10, RenderY - 15);
                    break;
                case 282:
                    RenderX -= 16;
                    g.DrawImage(Properties.Resources.VineTop, RenderX, RenderY);
                    for (int l = 0; l < Data[5] % 0x10 + 2; l++ ) {
                        RenderY += 16;
                        g.DrawImage(Properties.Resources.Vine, RenderX, RenderY);
                    }
                    g.DrawImage(Properties.Resources.VineBottom, RenderX, RenderY + 16);
                    break;
                case 283:
                    g.DrawImage(Properties.Resources.SpikeBass, RenderX, RenderY - 32);
                    break;
                case 284:
                    g.DrawImage(Properties.Resources.Pumpkin, RenderX, RenderY - 2);
                    break;
                case 285:
                    g.DrawImage(Properties.Resources.ScuttleBug, RenderX, RenderY - 8);
                    break;
                case 289:
                    g.DrawImage(Properties.Resources.ExpandableBlock, RenderX, RenderY);
                    break;
                case 290:
                    g.DrawImage(Properties.Resources.FlyingQBlock, RenderX - 9, RenderY - 13);
                    if (Data[5] % 0x10 < 8)
                        g.DrawImage(Properties.Resources.FlyingQBlockOverrides, RenderX, RenderY, new Rectangle((Data[5] % 0x10) * 16, 0, 16, 16), GraphicsUnit.Pixel);
                    break;
                case 291:
                    g.DrawImage(Level.GFX.Tilesets[0].Map16Buffer, RenderX, RenderY, new Rectangle(0, 0x50, 16, 16), GraphicsUnit.Pixel);
                    g.DrawImage(Properties.Resources.QSwitch, RenderX + 2, RenderY + 1, 12, 14);
                    break;
                case 292:
                    g.DrawImage(Properties.Resources.Door2, RenderX, RenderY - 32);
                    break;
                case 71:
                case 72:
                case 298:
                    width = Data[5] % 0x10;
                    int spikes = 0;
                    if (this.Type == 298) {
                        height = Data[5] / 0x10;
                        spikes = Data[2] % 0x10;
                        if (spikes == 1 || spikes == 3) {
                            height -= 1;
                            RenderY += 16;
                        }
                        if (spikes == 2 || spikes == 3) height -= 1;
                        if (spikes == 4 || spikes == 6) width -= 1;
                        if (spikes == 5 || spikes == 6) {
                            width -= 1;
                            RenderX += 16;
                        }
                    }
                    else
                        height = 0;
                    if (width < 1) width = 1;
                    if (height < 0) height = 0;
                    int xp = RenderX;
                    int yp = RenderY;
                    if (height == 0) {
                        g.DrawImage(Properties.Resources.StoneBlockFlatHorizLeft, RenderX, RenderY);
                        for (int l = 0; l < width - 1; l++) {
                            RenderX += 16;
                            g.DrawImage(Properties.Resources.StoneBlockFlatHorizMiddle, RenderX, RenderY);
                        }
                        g.DrawImage(Properties.Resources.StoneBlockFlatHorizRight, RenderX + 16, RenderY);
                    }
                    else {
                        g.DrawImage(Properties.Resources.StoneBlockTopLeft, RenderX, RenderY);
                        for (int l = 0; l < width - 1; l++) {
                            RenderX += 16;
                            g.DrawImage(Properties.Resources.StoneBlockTop, RenderX, RenderY);
                        }
                        RenderX += 16;
                        g.DrawImage(Properties.Resources.StoneBlockTopRight, RenderX, RenderY);
                        for (int l = 0; l < height - 1; l++) {
                            RenderY += 16;
                            g.DrawImage(Properties.Resources.StoneBlockRight, RenderX, RenderY);
                        }
                        RenderY += 16;
                        g.DrawImage(Properties.Resources.StoneBlockBottomRight, RenderX, RenderY);
                        for (int l = 0; l < width - 1; l++) {
                            RenderX -= 16;
                            g.DrawImage(Properties.Resources.StoneBlockBottom, RenderX, RenderY);
                        }
                        RenderX -= 16;
                        g.DrawImage(Properties.Resources.StoneBlockBottomLeft, RenderX, RenderY);
                        for (int l = 0; l < height - 1; l++) {
                            RenderY -= 16;
                            g.DrawImage(Properties.Resources.StoneBlockLeft, RenderX, RenderY);
                        }
                        RenderX = xp;
                        RenderY = yp;
                        int xStart = RenderX;
                        for (int l = 0; l < height - 1; l++) {
                            RenderY += 16;
                            for (int m = 0; m < width - 1; m++) {
                                RenderX += 16;
                                g.DrawImage(Properties.Resources.StoneBlockMiddle, RenderX, RenderY);
                            }
                            RenderX = xStart;
                        }
                    }
                    if (spikes == 1 || spikes == 3) {
                        RenderX = xp;
                        RenderY = yp - 16;
                        for (int l = 0; l <= width; l++)  {
                            g.DrawImage(Properties.Resources.StoneBlockSpikes, RenderX, RenderY);
                            RenderX += 16;
                        }
                    }
                    if (spikes == 2 || spikes == 3) {
                        RenderX = xp;
                        RenderY = (Y + height + 1) * 16;
                        if (spikes == 3)
                            RenderY += 16;
                        Bitmap spikes2 = Properties.Resources.StoneBlockSpikes;
                        spikes2.RotateFlip(RotateFlipType.RotateNoneFlipY);
                        for (int l = 0; l <= Data[5] % 0x10; l++) {
                            g.DrawImage(spikes2, RenderX, RenderY);
                            RenderX += 16;
                        }
                    }
                    if (spikes == 4 || spikes == 6) {
                        RenderX = (X + width + 1) * 16;
                        RenderY = yp;
                        if (spikes == 6)
                            RenderX += 16;
                        Bitmap spikes2 = Properties.Resources.StoneBlockSpikes;
                        spikes2.RotateFlip(RotateFlipType.Rotate90FlipNone);
                        for (int l = 0; l <= Data[5] / 0x10; l++) {
                            g.DrawImage(spikes2, RenderX, RenderY);
                            RenderY += 16;
                        }
                    }
                    if (spikes == 5 || spikes == 6) {
                        RenderX = xp - 16;
                        RenderY = yp;
                        Bitmap spikes2 = Properties.Resources.StoneBlockSpikes;
                        spikes2.RotateFlip(RotateFlipType.Rotate90FlipX);
                        for (int l = 0; l <= height; l++) {
                            g.DrawImage(spikes2, RenderX, RenderY);
                            RenderY += 16;
                        }
                    }
                    break;
                case 300:
                    RenderY += -8 + Data[5] % 0x10;
                    g.DrawImage(Properties.Resources.GhostPlatform, RenderX - 64, RenderY);
                    break;
                case 303:
                    g.DrawImage(Properties.Resources.SpinningSpikeBall, RenderX + 4, RenderY - 61);
                    break;
                case 260:
                case 304:
                    g.DrawImage(Properties.Resources.GiantSpike, RenderX, RenderY - 128);
                    break;
                case 305:
                    customRendered = false;
                    RenderX2 = Math.Max(0, ((Data[4] >> 4) + ((Data[4] & 0xF) << 4) - 15) * 16);
                    if (RenderX2 != 0) {
                        g.FillRectangle(Brushes.Black, RenderX, RenderY + 6, RenderX2, 4);
                        g.FillRectangle(Brushes.Black, RenderX + RenderX2 - 4, RenderY, 4, 10);
                        g.FillRectangle(Brushes.White, RenderX + 1, RenderY + 7, RenderX2 - 2, 2);
                        g.FillRectangle(Brushes.White, RenderX + RenderX2 - 3, RenderY + 1, 2, 8);
                    }
                    renderDefaultImg(g, RenderX, RenderY);
                    break;
                case 306:
                    customRendered = false;
                    RenderX2 = (Data[5] & 0xF0) - 16;
                    if (RenderX2 != 0) {
                        g.FillRectangle(Brushes.Black, RenderX + 6, RenderY - RenderX2, 4, RenderX2 + 16);
                        g.FillRectangle(Brushes.Black, RenderX, RenderY - RenderX2, 16, 4);
                        g.FillRectangle(Brushes.White, RenderX + 7, RenderY - RenderX2 + 1, 2, RenderX2 + 14);
                        g.FillRectangle(Brushes.White, RenderX + 1, RenderY - RenderX2 + 1, 14, 2);
                    }
                    renderDefaultImg(g, RenderX, RenderY);
                    break;
                case 261:
                case 307:
                    img = Properties.Resources.GiantSpike;
                    img.RotateFlip(RotateFlipType.Rotate180FlipNone);
                    g.DrawImage(img, RenderX, RenderY);
                    break;
                case 262:
                case 308:
                    img = Properties.Resources.GiantSpike;
                    img.RotateFlip(RotateFlipType.Rotate90FlipNone);
                    g.DrawImage(img, RenderX, RenderY);
                    break;
                case 263:
                case 309:
                    img = Properties.Resources.GiantSpike;
                    img.RotateFlip(RotateFlipType.Rotate270FlipNone);
                    g.DrawImage(img, RenderX - 128, RenderY);
                    break;
                case 312:
                    img = Properties.Resources.GreenMushroomEdge;
                    img.RotateFlip(RotateFlipType.RotateNoneFlipX);
                    width = Data[5] % 0x10 + 1;
                    RenderX -= width * 8;
                    g.DrawImage(Properties.Resources.GreenMushroomEdge, RenderX, RenderY);
                    for (int l = 0; l <= width - 2; l++) {
                        RenderX += 16;
                        g.DrawImage(Properties.Resources.GreenMushroomMiddle, RenderX, RenderY);
                    }
                    g.DrawImage(img, RenderX + 16, RenderY);
                    g.DrawImage(Properties.Resources.GreenMushroomStalkTop, RenderX2, RenderY + 24);
                    for (int l = 0; l < Data[5] / 0x10; l++) {
                        g.DrawImage(Properties.Resources.GreenMushroomStalk, RenderX2, RenderY + 49);
                        RenderY += 16;
                    }
                    break;
                case 323:
                    g.DrawImage(Properties.Resources.CloudLeftEdge, RenderX, RenderY);
                    RenderX += 16;
                    for (int l = 0; l <= Data[5]; l++) {
                        g.DrawImage(Properties.Resources.CloudSection, RenderX, RenderY);
                        RenderX += 32;
                    }
                    g.DrawImage(Properties.Resources.CloudRightEdge, RenderX, RenderY);
                    break;
                default:
                    customRendered = false;
                    renderDefaultImg(g, RenderX, RenderY);
                    break;
            }

            if (!Level.ValidSprites[this.Type] && customRendered) {
                g.FillRectangle(invalidBrush, this.getRect());
            }

            //I dunno what's this user for. ~Dirbaio
            //            return customRendered;
        }
Ejemplo n.º 33
0
            public SpriteDataEditor(List<LevelItem> sprites, SpriteData sd, LevelEditorControl EdControl)
            {
                this.SizeChanged += new EventHandler(this_SizeChanged);
                updating = true;
                this.ColumnCount = 3;
                //Talbe layout panel doesn't automatically create row or column styles
                this.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
                this.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
                this.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 20F));
                this.RowCount = sd.fields.Count;
                for (int l = 0; l < this.RowCount; l++)
                    this.RowStyles.Add(new RowStyle(SizeType.Absolute));
                this.AutoSize = true;
                this.AutoSizeMode = AutoSizeMode.GrowAndShrink;

                this.sprites = sprites;
                foreach (LevelItem obj in sprites)
                    if (obj is NSMBSprite) {
                        s = obj as NSMBSprite;
                        break;
                    }
                this.sd = sd;
                this.Dock = DockStyle.Fill;
                this.EdControl = EdControl;

                int row = 0;
                foreach (SpriteDataField v in sd.fields)
                {
                    Control c = CreateControlFor(v);
                    c.Anchor = AnchorStyles.Left | AnchorStyles.Right;
                    if (c is CheckBox || c is Label)
                    {
                        c.Font = new System.Drawing.Font(c.Font.FontFamily, c.Font.Size * 0.9F);
                        this.Controls.Add(c, 0, row);
                        this.RowStyles[row].Height = 25;
                        if (v.notes == "")
                            this.SetColumnSpan(c, 3);
                        else
                        {
                            NotesCtrl note = new NotesCtrl();
                            this.Controls.Add(note, 2, row);
                            note.Text = v.notes;
                        }
                    }
                    else {
                        this.Controls.Add(c, 1, row);
                        Label l = new Label();
                        l.Text = v.name;
                        l.Font = new System.Drawing.Font(l.Font.FontFamily, l.Font.Size * 0.9F);
                        l.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
                        l.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top | AnchorStyles.Bottom;
                        this.Controls.Add(l, 0, row);
                        this.RowStyles[row].Height = 25;
                        if (v.notes == "")
                            this.SetColumnSpan(c, 2);
                        else
                        {
                            NotesCtrl note = new NotesCtrl();
                            this.Controls.Add(note, 2, row);
                            note.Text = v.notes;
                        }
                        
                    }
                    row++;
                    controls.Add(v, c);
                }
                updating = false;
            }
Ejemplo n.º 34
0
            public SpriteDataEditor(List <LevelItem> sprites, SpriteData sd, LevelEditorControl EdControl)
            {
                this.SizeChanged += new EventHandler(this_SizeChanged);
                updating          = true;
                this.ColumnCount  = 3;
                //Talbe layout panel doesn't automatically create row or column styles
                this.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
                this.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
                this.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 20F));
                this.RowCount = sd.fields.Count;
                for (int l = 0; l < this.RowCount; l++)
                {
                    this.RowStyles.Add(new RowStyle(SizeType.Absolute));
                }
                this.AutoSize     = true;
                this.AutoSizeMode = AutoSizeMode.GrowAndShrink;

                this.sprites = sprites;
                foreach (LevelItem obj in sprites)
                {
                    if (obj is NSMBSprite)
                    {
                        s = obj as NSMBSprite;
                        break;
                    }
                }
                this.sd        = sd;
                this.Dock      = DockStyle.Fill;
                this.EdControl = EdControl;

                int row = 0;

                foreach (SpriteDataField v in sd.fields)
                {
                    Control c = CreateControlFor(v);
                    c.Anchor = AnchorStyles.Left | AnchorStyles.Right;
                    if (c is CheckBox || c is Label)
                    {
                        c.Font = new System.Drawing.Font(c.Font.FontFamily, c.Font.Size * 0.9F);
                        this.Controls.Add(c, 0, row);
                        this.RowStyles[row].Height = 25;
                        if (v.notes == "")
                        {
                            this.SetColumnSpan(c, 3);
                        }
                        else
                        {
                            NotesCtrl note = new NotesCtrl();
                            this.Controls.Add(note, 2, row);
                            note.Text = v.notes;
                        }
                    }
                    else
                    {
                        this.Controls.Add(c, 1, row);
                        Label l = new Label();
                        l.Text      = v.name;
                        l.Font      = new System.Drawing.Font(l.Font.FontFamily, l.Font.Size * 0.9F);
                        l.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
                        l.Anchor    = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top | AnchorStyles.Bottom;
                        this.Controls.Add(l, 0, row);
                        this.RowStyles[row].Height = 25;
                        if (v.notes == "")
                        {
                            this.SetColumnSpan(c, 2);
                        }
                        else
                        {
                            NotesCtrl note = new NotesCtrl();
                            this.Controls.Add(note, 2, row);
                            note.Text = v.notes;
                        }
                    }
                    row++;
                    controls.Add(v, c);
                }
                updating = false;
            }
Ejemplo n.º 35
0
        //        public void Render(Graphics g, int XOffset, int YOffset, Rectangle Clip, float zoom)
        public void render(Graphics g, LevelEditorControl ed)
        {
            //This method is really messy due to the quirky rendering of .NET
            //I need to do a lot of hacks to get objects rendered correctly with
            //high and low zoom.

            if (badObject)
            {
                g.DrawRectangle(new Pen(Color.Red, 4), new Rectangle(X * 16, Y * 16, Width * 16, Height * 16));
                g.DrawLine(new Pen(Color.Red, 4), new Point(X * 16, (Y + Height) * 16), new Point((X + Width) * 16, (Y) * 16));
                g.DrawLine(new Pen(Color.Red, 4), new Point((X + Width) * 16, (Y + Height) * 16), new Point((X) * 16, (Y) * 16));
                return;
            }

            if (ed.zoom > 1)
            {
                RectangleF srcRect = new RectangleF(0, 0, 16, 16);
                RectangleF destRect = new RectangleF(X << 4, Y << 4, 16, 16);

                for (int xx = 0; xx < CachedObj.GetLength(0); xx++)
                    for (int yy = 0; yy < CachedObj.GetLength(1); yy++)
                    {
                        int t = CachedObj[xx, yy];
                        if (t == -1) continue;

                        destRect.X = (X + xx) << 4;
                        destRect.Y = (Y + yy) << 4;

                        srcRect.X = (t % 16) * 16 - 0.5f;
                        srcRect.Y = (t / 16) * 16 - 0.5f;

                        g.DrawImage(GFX.Tilesets[Tileset].Map16Buffer, destRect.X, destRect.Y, srcRect, GraphicsUnit.Pixel);

                        if (!GFX.Tilesets[Tileset].UseOverrides) continue;
                        int t2 = GFX.Tilesets[Tileset].Overrides[t];
                        if (t2 == -1) continue;
                        if (t2 == 0) continue;

                        srcRect.X = t2 * 16 - 0.5f;
                        srcRect.Y = 0 - 0.5f;

                        g.DrawImage(GFX.Tilesets[Tileset].OverrideBitmap, destRect.X, destRect.Y, srcRect, GraphicsUnit.Pixel);
                        //int overridenum = Array.IndexOf(NSMBTileset.BehaviorOverrides, GFX.Tilesets[Tileset].TileBehaviors[t]);
                        //if (overridenum > -1)
                        //    g.DrawImage(Properties.Resources.tileoverrides2, destRect.X, destRect.Y, new Rectangle(overridenum * 16, 0, 16, 16), GraphicsUnit.Pixel);
                    }
            }
            else
            {
                Rectangle srcRect = new Rectangle(0, 0, 16, 16);
                Rectangle destRect = new Rectangle(X << 4, Y << 4, 16, 16);

                for (int xx = 0; xx < CachedObj.GetLength(0); xx++)
                    for (int yy = 0; yy < CachedObj.GetLength(1); yy++)
                    {
                        int t = CachedObj[xx, yy];
                        if (t == -1) continue;

                        destRect.X = (X + xx) << 4;
                        destRect.Y = (Y + yy) << 4;

                        srcRect.X = (t % 16) * 16;
                        srcRect.Y = (t / 16) * 16;

                        g.DrawImage(GFX.Tilesets[Tileset].Map16Buffer, destRect.X, destRect.Y, srcRect, GraphicsUnit.Pixel);

                        if (!GFX.Tilesets[Tileset].UseOverrides) continue;
                        int t2 = GFX.Tilesets[Tileset].Overrides[t];
                        if (t2 == -1) continue;
                        if (t2 == 0) continue;

                        srcRect.X = t2 * 16;
                        srcRect.Y = 0;

                        g.DrawImage(GFX.Tilesets[Tileset].OverrideBitmap, destRect.X, destRect.Y, srcRect, GraphicsUnit.Pixel);
                        //int overridenum = Array.IndexOf(NSMBTileset.BehaviorOverrides, GFX.Tilesets[Tileset].TileBehaviors[t]);
                        //if (overridenum > -1)
                        //    g.DrawImage(Properties.Resources.tileoverrides2, destRect.X, destRect.Y, new Rectangle(overridenum * 16, 0, 16, 16), GraphicsUnit.Pixel);
                    }
            }
        }
 public BackgroundDragEditionMode(NSMBLevel l, LevelEditorControl edc) : base(l, edc) { }
Ejemplo n.º 37
0
        public void render(Graphics g, LevelEditorControl ed)
        {
            Pen p = Pens.LightSteelBlue;
            if (isZone)
                p = Pens.PaleGreen;

            g.DrawRectangle(p, X, Y, Width - 1, Height - 1);
            g.DrawRectangle(p, X + 1, Y + 1, Width - 3, Height - 3);

            Rectangle ViewablePixels = ed.ViewablePixels;
            int vx = ViewablePixels.X;
            int vy = ViewablePixels.Y;
            if (X + Width > vx && Y + Height > vy)
            {
                int numx = X;
                int numy = Y;

                if (numx < vx)
                    numx = vx;
                if (numy < vy)
                    numy = vy;
                if (isZone)
                    numy += 16;
                g.DrawString(GetDisplayString(), NSMBGraphics.InfoFont, Brushes.White, (float)numx, (float)numy);
            }
        }
Ejemplo n.º 38
0
 public EditionMode(NSMBLevel Level, LevelEditorControl EdControl)
 {
     this.Level = Level;
     this.EdControl = EdControl;
 }
Ejemplo n.º 39
0
//        public void Render(Graphics g, int XOffset, int YOffset, Rectangle Clip, float zoom)

        public void render(Graphics g, LevelEditorControl ed)
        {
            //This method is really messy due to the quirky rendering of .NET
            //I need to do a lot of hacks to get objects rendered correctly with
            //high and low zoom.

            if (badObject)
            {
                g.DrawRectangle(new Pen(Color.Red, 4), new Rectangle(X * 16, Y * 16, Width * 16, Height * 16));
                g.DrawLine(new Pen(Color.Red, 4), new Point(X * 16, (Y + Height) * 16), new Point((X + Width) * 16, (Y) * 16));
                g.DrawLine(new Pen(Color.Red, 4), new Point((X + Width) * 16, (Y + Height) * 16), new Point((X) * 16, (Y) * 16));
                return;
            }

            if (ed.zoom > 1)
            {
                RectangleF srcRect  = new RectangleF(0, 0, 16, 16);
                RectangleF destRect = new RectangleF(X << 4, Y << 4, 16, 16);

                for (int xx = 0; xx < CachedObj.GetLength(0); xx++)
                {
                    for (int yy = 0; yy < CachedObj.GetLength(1); yy++)
                    {
                        int t = CachedObj[xx, yy];
                        if (t < 0)
                        {
                            continue;
                        }

                        destRect.X = (X + xx) << 4;
                        destRect.Y = (Y + yy) << 4;

                        srcRect.X = (t % 16) * 16 - 0.5f;
                        srcRect.Y = (t / 16) * 16 - 0.5f;

                        g.DrawImage(GFX.Tilesets[Tileset].Map16Buffer, destRect.X, destRect.Y, srcRect, GraphicsUnit.Pixel);

                        if (!GFX.Tilesets[Tileset].UseOverrides)
                        {
                            continue;
                        }
                        int t2 = GFX.Tilesets[Tileset].Overrides[t];
                        if (t2 == -1)
                        {
                            continue;
                        }
                        if (t2 == 0)
                        {
                            continue;
                        }

                        srcRect.X = t2 * 16 - 0.5f;
                        srcRect.Y = 0 - 0.5f;

                        g.DrawImage(GFX.Tilesets[Tileset].OverrideBitmap, destRect.X, destRect.Y, srcRect, GraphicsUnit.Pixel);
                        //int overridenum = Array.IndexOf(NSMBTileset.BehaviorOverrides, GFX.Tilesets[Tileset].TileBehaviors[t]);
                        //if (overridenum > -1)
                        //    g.DrawImage(Properties.Resources.tileoverrides2, destRect.X, destRect.Y, new Rectangle(overridenum * 16, 0, 16, 16), GraphicsUnit.Pixel);
                    }
                }
            }
            else
            {
                Rectangle srcRect  = new Rectangle(0, 0, 16, 16);
                Rectangle destRect = new Rectangle(X << 4, Y << 4, 16, 16);

                for (int xx = 0; xx < CachedObj.GetLength(0); xx++)
                {
                    for (int yy = 0; yy < CachedObj.GetLength(1); yy++)
                    {
                        int t = CachedObj[xx, yy];
                        if (t < 0)
                        {
                            continue;
                        }

                        destRect.X = (X + xx) << 4;
                        destRect.Y = (Y + yy) << 4;

                        srcRect.X = (t % 16) * 16;
                        srcRect.Y = (t / 16) * 16;

                        g.DrawImage(GFX.Tilesets[Tileset].Map16Buffer, destRect.X, destRect.Y, srcRect, GraphicsUnit.Pixel);

                        if (!GFX.Tilesets[Tileset].UseOverrides)
                        {
                            continue;
                        }
                        int t2 = GFX.Tilesets[Tileset].Overrides[t];
                        if (t2 <= 0)
                        {
                            continue;
                        }

                        srcRect.X = t2 * 16;
                        srcRect.Y = 0;

                        g.DrawImage(GFX.Tilesets[Tileset].OverrideBitmap, destRect.X, destRect.Y, srcRect, GraphicsUnit.Pixel);
                        //int overridenum = Array.IndexOf(NSMBTileset.BehaviorOverrides, GFX.Tilesets[Tileset].TileBehaviors[t]);
                        //if (overridenum > -1)
                        //    g.DrawImage(Properties.Resources.tileoverrides2, destRect.X, destRect.Y, new Rectangle(overridenum * 16, 0, 16, 16), GraphicsUnit.Pixel);
                    }
                }
            }
        }
Ejemplo n.º 40
0
 public void SetEdControl(LevelEditorControl EdControl)
 {
     this.EdControl = EdControl;
     this.AfterSetEdControl();
 }
Ejemplo n.º 41
0
        public UndoManager(ToolStripSplitButton UndoButton, ToolStripSplitButton RedoButton, LevelEditorControl editor)
        {
            undo      = UndoButton;
            redo      = RedoButton;
            EdControl = editor;

            undo.ButtonClick += new EventHandler(onUndoLast);
            redo.ButtonClick += new EventHandler(onRedoLast);
        }
Ejemplo n.º 42
0
 public BackgroundDragEditionMode(NSMBLevel l, LevelEditorControl edc) : base(l, edc)
 {
 }