コード例 #1
0
        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);
        }
コード例 #2
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;
        }
コード例 #3
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();
        }