コード例 #1
0
ファイル: WorldEditor.cs プロジェクト: AbuSLmLm/reuben-smb3
 private void GetWorldInfo(World w)
 {
     WldView.CurrentWorld = w;
     CurrentWorld = w;
     CurrentTable.SetGraphicsbank(0, ProjectController.GraphicsManager.GraphicsBanks[0x70]);
     CurrentTable.SetGraphicsbank(1, ProjectController.GraphicsManager.GraphicsBanks[0x72]);
     CurrentTable.SetGraphicsbank(2, ProjectController.GraphicsManager.GraphicsBanks[CurrentWorld.GraphicsBank]);
     CurrentTable.SetGraphicsbank(3, ProjectController.GraphicsManager.GraphicsBanks[CurrentWorld.GraphicsBank + 1]);
     CmbGraphics.SelectedIndex = w.GraphicsBank;
     CmbPalettes.SelectedIndex = w.Palette;
     CmbMusic.SelectedIndex = w.Music >= CmbMusic.Items.Count ? 0 : w.Music;
     CmbLength.SelectedItem = w.Length;
     PntEditor.CurrentPointer = null;
     BtnDeletePointer.Enabled = false;
     TsbPointers.Checked = CurrentWorld.Settings.ShowPointers;
     WldView.DelayDrawing = false;
     WldView.FullUpdate();
 }
コード例 #2
0
ファイル: WorldEditor.cs プロジェクト: AbuSLmLm/reuben-smb3
        public void EditWorld(World w)
        {
            GetWorldInfo(w);

            TsbGrid.Checked = CurrentWorld.Settings.ShowGrid;
            TsbPointers.Checked = CurrentWorld.Settings.ShowPointers;
            switch (CurrentWorld.Settings.DrawMode)
            {
                case TileDrawMode.Pencil:
                    TsbPencil.Checked = true;
                    break;

                case TileDrawMode.Rectangle:
                    TsbRectangle.Checked = true;
                    break;

                case TileDrawMode.Outline:
                    TsbOutline.Checked = true;
                    break;

                case TileDrawMode.Line:
                    TsbLine.Checked = true;
                    break;

                case TileDrawMode.Fill:
                    TsbBucket.Checked = true;
                    break;
            }

            switch (CurrentWorld.Settings.EditMode)
            {
                case EditMode.Tiles:
                    TabEditSelector.SelectedIndex = 0;
                    EditMode = EditMode.Tiles;
                    break;

                case EditMode.Sprites:
                    TabEditSelector.SelectedIndex = 1;
                    EditMode = EditMode.Sprites;
                    break;

                case EditMode.Pointers:
                    TabEditSelector.SelectedIndex = 2;
                    EditMode = EditMode.Pointers;
                    break;
            }

            CmbLayouts.SelectedIndex = CurrentWorld.Settings.Layout;

            this.Text = ProjectController.WorldManager.GetWorldInfo(w.Guid).Name;
            this.WindowState = FormWindowState.Maximized;
            this.Show();
        }
コード例 #3
0
ファイル: RomManager.cs プロジェクト: AbuSLmLm/reuben-smb3
        private bool CompileWorlds()
        {
            World w = new World();
            int bank, address;
            foreach (WorldInfo wi in from world in ProjectController.WorldManager.Worlds orderby world.Ordinal select world)
            {
                if (w.Load(wi))
                {
                    worldIndexTable.Add(wi.WorldGuid, (byte)wi.Ordinal);
                    bank = (byte)(levelDataPointer / 0x2000);
                    address = (levelDataPointer - 0x10 - (bank * 0x2000) + 0xA000);

                    Rom.ProtectionMode = RomWriteProtection.WorldPointers;
                    Rom[0x22010 + ((wi.Ordinal) * 4)] = (byte)bank;
                    Rom[0x22011 + ((wi.Ordinal) * 4)] = (byte)(address & 0x00FF);
                    Rom[0x22012 + ((wi.Ordinal) * 4)] = (byte)((address & 0xFF00) >> 8);

                    Rom.ProtectionMode = RomWriteProtection.LevelData;
                    levelDataPointer = WriteWorld(w, levelDataPointer);

                    Rom.ProtectionMode = RomWriteProtection.AnyData;
                    Rom[0x15610 + wi.Ordinal] = (byte)(w.Length << 4);

                    if (levelDataPointer >= 0xFC000)
                        return false;
                }
            }


            return true;
        }
コード例 #4
0
ファイル: RomManager.cs プロジェクト: AbuSLmLm/reuben-smb3
        public int WriteWorld(World w, int levelAddress)
        {
            Rom[levelAddress++] = (byte)w.GraphicsBank;
            Rom[levelAddress++] = (byte)w.Palette;
            Rom[levelAddress++] = (byte)(ProjectController.MusicManager.MusicList[w.Music].Value);
            Rom[levelAddress++] = (byte)w.Length;
            Rom[levelAddress++] = (byte)w.Pointers.Count;

            foreach (var p in w.Pointers)
            {
                if (!levelIndexTable.ContainsKey(p.LevelGuid))
                {
                    Rom[levelAddress++] = (byte)0xFF;
                }
                else
                {
                    Rom[levelAddress++] = levelIndexTable[p.LevelGuid];
                }
                Rom[levelAddress++] = (byte)(((p.X & 0xF0) >> 4) | ((p.X & 0x0F) << 4));
                Rom[levelAddress++] = (byte)((p.AltLevelEntrance ? 0x80 : 0x00) | (p.Y - 0x0F));
            }

            byte[] levelData = w.GetCompressedData();
            for (int i = 0; i < levelData.Length; i++)
            {
                Rom[levelAddress++] = levelData[i];
            }

            Rom[levelAddress++] = (byte)0xFF;
            foreach (var s in from sprites in w.SpriteData orderby sprites.X select sprites)
            {
                Rom[levelAddress++] = (byte)s.InGameID;
                Rom[levelAddress++] = (byte)s.X;
                Rom[levelAddress++] = (byte)(s.Y - 0x0F);
            }

            Rom[levelAddress++] = (byte)0xFF;
            return levelAddress;
        }
コード例 #5
0
        public static void EditWorld(WorldInfo wi)
        {
            if (editorTable.ContainsKey(wi.WorldGuid))
            {
                editorTable[wi.WorldGuid].Activate();
                return;
            }

            World w = new World();

            if (!w.Load(wi))
            {
                w.New(wi);
            }

            WorldEditor we = new WorldEditor();
            we.MdiParent = MainWindow;
            we.EditWorld(w);
            we.FormClosed += new FormClosedEventHandler(le_FormClosed);
            we.Activated += new EventHandler(le_Activated);
            ActiveEditor = we;
            editorTable.Add(wi.WorldGuid, we);
            MainWindow.HideProjectview();
        }