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(); }
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(); }
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; }
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; }
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(); }