public void LoadCampaign() { try { // Just a lazy way to validate the BLF file _blf = new PureBLF(_blfLocation); if (_blf.BLFChunks[1].ChunkMagic != "cmpn") { throw new Exception("The selected Campaign BLF is not a valid Campaign BLF file."); } _blf.Close(); _campaign = new Campaign(_blfLocation); Dispatcher.Invoke(new Action(delegate { // Add BLF Info paneBLFInfo.Children.Insert(0, new MapHeaderEntry("BLF Length:", "0x" + _campaign.Stream.Length.ToString("X"))); paneBLFInfo.Children.Insert(1, new MapHeaderEntry("BLF Chunks:", _blf.BLFChunks.Count.ToString(CultureInfo.InvariantCulture))); // Load Languages LoadLanguages(); // Load Map IDs LoadMapIDs(); // Load Unlock Bytes LoadUnlockBytes(); // Update UI _startEditing = true; cbLanguages.SelectedIndex = 0; if (App.AssemblyStorage.AssemblySettings.StartpageHideOnLaunch) { App.AssemblyStorage.AssemblySettings.HomeWindow.ExternalTabClose(Home.TabGenre.StartPage); } RecentFiles.AddNewEntry(new FileInfo(_blfLocation).Name, _blfLocation, "Campaign", Settings.RecentFileType.Campaign); Close(); })); } catch (Exception ex) { Dispatcher.Invoke(new Action(delegate { MetroMessageBox.Show("Unable to open Campaign", ex.Message); App.AssemblyStorage.AssemblySettings.HomeWindow.ExternalTabClose(_tab); Close(); })); } }
private void loadBLF() { try { _blf = new PureBLF(_blfLocation); var imgChunkData = new List <byte>(_blf.BLFChunks[1].ChunkData); imgChunkData.RemoveRange(0, 0x08); Dispatcher.Invoke(new Action(delegate { var image = new BitmapImage(); image.BeginInit(); image.StreamSource = new MemoryStream(imgChunkData.ToArray()); image.EndInit(); imgBLF.Source = image; // Add Image Info paneImageInfo.Children.Insert(0, new MapHeaderEntry("Image Width:", image.PixelWidth + "px")); paneImageInfo.Children.Insert(1, new MapHeaderEntry("Image Height", image.PixelHeight + "px")); // Add BLF Info paneBLFInfo.Children.Insert(0, new MapHeaderEntry("BLF Length:", "0x" + _blf.BLFStream.Length.ToString("X"))); paneBLFInfo.Children.Insert(1, new MapHeaderEntry("BLF Chunks:", _blf.BLFChunks.Count.ToString(CultureInfo.InvariantCulture))); if (App.AssemblyStorage.AssemblySettings.StartpageHideOnLaunch) { App.AssemblyStorage.AssemblySettings.HomeWindow.ExternalTabClose(Home.TabGenre.StartPage); } RecentFiles.AddNewEntry(new FileInfo(_blfLocation).Name, _blfLocation, "BLF Image", Settings.RecentFileType.Blf); Close(); })); } catch (Exception ex) { Close(); Dispatcher.Invoke(new Action(delegate { MetroMessageBox.Show("Unable to open BLF", ex.Message.ToString(CultureInfo.InvariantCulture)); App.AssemblyStorage.AssemblySettings.HomeWindow.ExternalTabClose((LayoutDocument)Parent); })); } }
private void loadBLF() { try { _blf = new PureBLF(_blfLocation); var imgChunkData = new List <byte>(_blf.BLFChunks[1].ChunkData); imgChunkData.RemoveRange(0, 0x08); Dispatcher.Invoke(new Action(delegate { var image = new BitmapImage(); image.BeginInit(); image.StreamSource = new MemoryStream(imgChunkData.ToArray()); image.EndInit(); imgBLF.Source = image; var stream = new EndianStream(new MemoryStream(imgChunkData.ToArray <byte>()), Endian.BigEndian); stream.SeekTo(0x0); ushort imageMagic = stream.ReadUInt16(); switch (imageMagic) { case 0xFFD8: blfImageFormat = "JPEG"; break; case 0x8950: blfImageFormat = "PNG"; break; case 0x424D: blfImageFormat = "BMP"; break; default: blfImageFormat = "Unknown"; break; } // Add Image Info paneImageInfo.Children.Insert(0, new MapHeaderEntry("Image Format:", blfImageFormat)); paneImageInfo.Children.Insert(1, new MapHeaderEntry("Image Width:", image.PixelWidth + "px")); paneImageInfo.Children.Insert(2, new MapHeaderEntry("Image Height", image.PixelHeight + "px")); // Add BLF Info paneBLFInfo.Children.Insert(0, new MapHeaderEntry("BLF Length:", "0x" + _blf.BLFStream.Length.ToString("X"))); paneBLFInfo.Children.Insert(1, new MapHeaderEntry("BLF Chunks:", _blf.BLFChunks.Count.ToString(CultureInfo.InvariantCulture))); if (App.AssemblyStorage.AssemblySettings.StartpageHideOnLaunch) { App.AssemblyStorage.AssemblySettings.HomeWindow.ExternalTabClose(Home.TabGenre.StartPage); } RecentFiles.AddNewEntry(new FileInfo(_blfLocation).Name, _blfLocation, "BLF Image", Settings.RecentFileType.Blf); Close(); })); } catch (Exception ex) { Close(); Dispatcher.Invoke(new Action(delegate { MetroMessageBox.Show("Unable to open BLF", ex.Message.ToString(CultureInfo.InvariantCulture)); App.AssemblyStorage.AssemblySettings.HomeWindow.ExternalTabClose((LayoutDocument)Parent); })); } }
public void LoadMapInfo() { try { // Just a lazy way to validate the BLF file _blf = new PureBLF(_blfLocation); if (_blf.BLFChunks[1].ChunkMagic != "levl") { throw new Exception("The selected Map Info BLF is not a valid Map Info BLF file."); } _blf.Close(); _mapInfo = new MapInfo(_blfLocation, App.AssemblyStorage.AssemblySettings.DefaultMapInfoDatabase); Dispatcher.Invoke(new Action(delegate { // Add BLF Info paneBLFInfo.Children.Insert(0, new MapHeaderEntry("MapInfo Version:", _mapInfo.Engine.Version.ToString(CultureInfo.InvariantCulture))); paneBLFInfo.Children.Insert(1, new MapHeaderEntry("BLF Length:", "0x" + _mapInfo.Stream.Length.ToString("X"))); paneBLFInfo.Children.Insert(2, new MapHeaderEntry("BLF Chunks:", _blf.BLFChunks.Count.ToString(CultureInfo.InvariantCulture))); // Hide unused elements if (_mapInfo.Engine.MaxTeamCollection == null) { tiMaxTeams.Visibility = Visibility.Collapsed; } if (_mapInfo.Engine.MultiplayerObjectCollection == null) { tiMPObjects.Visibility = Visibility.Collapsed; } if (!_mapInfo.Engine.UsesDefaultAuthor) { lblDefaultAuthor.Visibility = Visibility.Collapsed; txtDefaultAuthor.Visibility = Visibility.Collapsed; } // Load Languages LoadLanguages(); // Load Map Info txtGameName.Text = _mapInfo.Engine.Name; txtMapID.Text = _mapInfo.MapInformation.MapID.ToString(CultureInfo.InvariantCulture); txtMapInternalName.Text = _mapInfo.MapInformation.InternalName; txtMapPhysicalName.Text = _mapInfo.MapInformation.PhysicalName; // Load Default Author & change margin if necessary txtDefaultAuthor.Text = _mapInfo.MapInformation.DefaultAuthor; if (_mapInfo.Engine.UsesDefaultAuthor && _mapInfo.Engine.Version <= 8) { lblDefaultAuthor.Margin = new Thickness(0, 37, 0, 3); } // Set up the Type combo box // TODO: Add flags to formats? cbType_Cine.Visibility = cbType_FF.Visibility = _mapInfo.Engine.Version < 5 ? Visibility.Collapsed : Visibility.Visible; cbType_Cine.IsEnabled = cbType_FF.IsEnabled = _mapInfo.Engine.Version >= 5; cbType_FF.Content = _mapInfo.Engine.Version < 8 ? "Firefight" : "Spartan Ops"; if (_mapInfo.MapInformation.Flags.HasFlag(LevelFlags.IsMainMenu)) { cbType.SelectedIndex = 0; } if (_mapInfo.MapInformation.Flags.HasFlag(LevelFlags.IsMultiplayer)) { cbType.SelectedIndex = 1; } if (_mapInfo.MapInformation.Flags.HasFlag(LevelFlags.IsCampaign)) { cbType.SelectedIndex = 2; } if (_mapInfo.MapInformation.Flags.HasFlag(LevelFlags.IsCinematic)) { cbType.SelectedIndex = 3; } if (_mapInfo.MapInformation.Flags.HasFlag(LevelFlags.IsFirefight)) { cbType.SelectedIndex = 4; } // Set up the Checkboxes cbForgeOnly.Visibility = _mapInfo.Engine.Version < 9 ? Visibility.Collapsed : Visibility.Visible; cbVisible.IsChecked = _mapInfo.MapInformation.Flags.HasFlag(LevelFlags.Visible); cbGeneratesFilm.IsChecked = _mapInfo.MapInformation.Flags.HasFlag(LevelFlags.GeneratesFilm); cbDLC.IsChecked = _mapInfo.MapInformation.Flags.HasFlag(LevelFlags.IsDLC); cbForgeOnly.IsChecked = _mapInfo.MapInformation.Flags.HasFlag(LevelFlags.IsForgeOnly); // Load Max Teams if (_mapInfo.Engine.MaxTeamCollection != null) { LoadMaxTeams(); } // Load MP Objects if (_mapInfo.Engine.MultiplayerObjectCollection != null) { LoadMultiplayerObjects(); } // Load Insertion Points LoadInsertionPoints(); // Update UI _startEditing = true; cbLanguages.SelectedIndex = 0; cbInsertIndex.SelectedIndex = 0; cbInsertLanguages.SelectedIndex = 0; if (App.AssemblyStorage.AssemblySettings.StartpageHideOnLaunch) { App.AssemblyStorage.AssemblySettings.HomeWindow.ExternalTabClose(Home.TabGenre.StartPage); } RecentFiles.AddNewEntry(new FileInfo(_blfLocation).Name, _blfLocation, "Map Info", Settings.RecentFileType.MapInfo); Close(); })); } catch (Exception ex) { Dispatcher.Invoke(new Action(delegate { MetroMessageBox.Show("Unable to open MapInfo", ex.Message); App.AssemblyStorage.AssemblySettings.HomeWindow.ExternalTabClose(_tab); Close(); })); } }
public void LoadMapInfo() { try { // Just a lazy way to validate the BLF file _blf = new PureBLF(_blfLocation); if (_blf.BLFChunks[1].ChunkMagic != "levl") { throw new Exception("The selected Map Info BLF is not a valid Map Info BLF file."); } _blf.Close(); _mapInfo = new MapInfo(_blfLocation); Dispatcher.Invoke(new Action(delegate { // Add BLF Info paneBLFInfo.Children.Insert(0, new MapHeaderEntry("BLF Length:", "0x" + _mapInfo.Stream.Length.ToString("X"))); paneBLFInfo.Children.Insert(1, new MapHeaderEntry("BLF Chunks:", _blf.BLFChunks.Count.ToString(CultureInfo.InvariantCulture))); // Load Languages LoadLanguages(); // Add Map Info switch (_mapInfo.MapInformation.Game) { case MapInfo.GameIdentifier.Halo3: txtGameName.Text = "Halo 3"; break; case MapInfo.GameIdentifier.Halo3ODST: txtGameName.Text = "Halo 3: ODST"; break; case MapInfo.GameIdentifier.HaloReach: txtGameName.Text = "Halo Reach"; break; case MapInfo.GameIdentifier.HaloReachBetas: txtGameName.Text = "Halo Reach Pre/Beta"; break; case MapInfo.GameIdentifier.Halo4: txtGameName.Text = "Halo 4"; break; } txtMapID.Text = _mapInfo.MapInformation.MapID.ToString(CultureInfo.InvariantCulture); txtMapInternalName.Text = _mapInfo.MapInformation.InternalName; txtMapPhysicalName.Text = _mapInfo.MapInformation.PhysicalName; // Set up the Type combo box switch (_mapInfo.MapInformation.Game) { case MapInfo.GameIdentifier.Halo3: case MapInfo.GameIdentifier.Halo3ODST: cbType_Cine.Visibility = System.Windows.Visibility.Collapsed; cbType_Cine.IsEnabled = false; cbType_FF.Visibility = System.Windows.Visibility.Collapsed; cbType_FF.IsEnabled = false; break; case MapInfo.GameIdentifier.HaloReach: case MapInfo.GameIdentifier.HaloReachBetas: cbType_Cine.Visibility = System.Windows.Visibility.Visible; cbType_Cine.IsEnabled = true; cbType_FF.Visibility = System.Windows.Visibility.Visible; cbType_FF.IsEnabled = true; cbType_FF.Content = "Firefight"; break; case MapInfo.GameIdentifier.Halo4: cbType_Cine.Visibility = System.Windows.Visibility.Visible; cbType_Cine.IsEnabled = true; cbType_FF.Visibility = System.Windows.Visibility.Visible; cbType_FF.IsEnabled = true; cbType_FF.Content = "Spartan Ops"; break; } if (_mapInfo.MapInformation.Flags.HasFlag(LevelFlags.IsMainMenu)) { cbType.SelectedIndex = 0; } if (_mapInfo.MapInformation.Flags.HasFlag(LevelFlags.IsMultiplayer)) { cbType.SelectedIndex = 1; } if (_mapInfo.MapInformation.Flags.HasFlag(LevelFlags.IsCampaign)) { cbType.SelectedIndex = 2; } if (_mapInfo.MapInformation.Flags.HasFlag(LevelFlags.IsCinematic)) { cbType.SelectedIndex = 3; } if (_mapInfo.MapInformation.Flags.HasFlag(LevelFlags.IsFirefight)) { cbType.SelectedIndex = 4; } // Set up the Checkboxes switch (_mapInfo.MapInformation.Game) { case MapInfo.GameIdentifier.Halo4: cbForgeOnly.Visibility = System.Windows.Visibility.Visible; break; default: cbForgeOnly.Visibility = System.Windows.Visibility.Collapsed; break; } if (_mapInfo.MapInformation.Flags.HasFlag(LevelFlags.Visible)) { cbVisible.IsChecked = true; } if (_mapInfo.MapInformation.Flags.HasFlag(LevelFlags.GeneratesFilm)) { cbGeneratesFilm.IsChecked = true; } if (_mapInfo.MapInformation.Flags.HasFlag(LevelFlags.IsDLC)) { cbDLC.IsChecked = true; } if (_mapInfo.MapInformation.Flags.HasFlag(LevelFlags.IsForgeOnly)) { cbForgeOnly.IsChecked = true; } // Update UI _startEditing = true; cbLanguages.SelectedIndex = 0; if (App.AssemblyStorage.AssemblySettings.StartpageHideOnLaunch) { App.AssemblyStorage.AssemblySettings.HomeWindow.ExternalTabClose(Home.TabGenre.StartPage); } RecentFiles.AddNewEntry(new FileInfo(_blfLocation).Name, _blfLocation, "Map Info", Settings.RecentFileType.MapInfo); Close(); })); } catch (Exception ex) { Dispatcher.Invoke(new Action(delegate { MetroMessageBox.Show("Unable to open MapInfo", ex.Message); App.AssemblyStorage.AssemblySettings.HomeWindow.ExternalTabClose(_tab); Close(); })); } }