private void ResetData()
        {
            if (Heroes3Master.Master != null)
            {
                Heroes3Master.Master.Dispose();
                Heroes3Master.Master = null;
            }

            if (selectedLodFile != null)
            {
                selectedLodFile.stream.Close();
                selectedLodFile = null;
            }

            lbFiles.Items.Clear();
            tabsMain.TabPages.Clear();

            heroMainDataControl.HeroProfileControl.HeroIndex = -1;
            heroMainDataControl.HeroProfileControl.Image     = null;

            heroMainDataControl.ResetCastles();
            heroClassDataControl.Reset();
            creatureDataControl.Reset();
            spellDataControl.Reset();
            spellDataControl.ResetSchools();
            cbLodFiles.Items.Clear();
        }
 private void cbLodFiles_SelectedIndexChanged(object sender, EventArgs e)
 {
     if (Heroes3Master.Master != null)
     {
         selectedLodFile = Heroes3Master.Master.ResourceFiles.FirstOrDefault(f => f.Name == cbLodFiles.SelectedItem.ToString());
         ReloadAndFilterData();
     }
 }
        public virtual void LoadData(LodFile parent, int count)
        {
            stream.Position = FAT_OFFSET;

            byte[] record = new byte[32];
            for (int i = 0; i < count; i++)
            {
                stream.Read(record, 0, 32);
                FilesTable.Add(new FatRecord(parent, record));
            }
        }
Example #4
0
        public FatRecord(LodFile parent, byte[] record)
        {
            if (record.Length != 32)
            {
                throw new ArgumentException("not a record");
            }

            Parent   = parent;
            FileName = Encoding.ASCII.GetString(record, 0, Array.IndexOf <byte>(record, 0));

            fname = new byte[12];
            Buffer.BlockCopy(record, 0, fname, 0, 12);
            Extension  = FileName.Substring(FileName.IndexOf('.') + 1).ToUpper();
            Unknown1   = BitConverter.ToInt32(record, 12);
            Offset     = BitConverter.ToInt32(record, 16);
            RealSize   = BitConverter.ToInt32(record, 20);
            SpriteType = BitConverter.ToInt32(record, 24);
            Size       = BitConverter.ToInt32(record, 28);
        }
Example #5
0
        private void LoadAllWithExtension(string dataDirectory, string extension)
        {
            foreach (var file in Directory.GetFiles(dataDirectory, "*" + extension))
            {
                if (file.EndsWith(extension, StringComparison.OrdinalIgnoreCase))
                {
                    FileStream fs = null;
                    try
                    {
                        fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                        string  lcfileName = Path.GetFileName(file).ToLower();
                        LodFile lod        = new LodFile(this, fs);

                        lod.LoadFAT();
                        ResourceFiles.Add(lod);
                    }
                    catch (Exception ex)
                    {
                        fs.Close();
                    }
                }
            }
        }
        private void m_openFile_Click(object sender, EventArgs e)
        {
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                ResetData();

                string extension = Path.GetExtension(ofd.FileName).ToLower();
                if (extension == ".exe")
                {
                    LoadMaster(ofd.FileName);
                    m_saveFile.Text             = "Save All Data";
                    m_saveFile.Visible          = true;
                    m_saveFileAs.Visible        = true;
                    btnSaveLocalChanges.Visible = true;
                }
                else
                {
                    m_saveFile.Text      = "Save Resource File";
                    m_saveFile.Visible   = true;
                    m_saveFileAs.Visible = true;

                    var fs = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                    selectedLodFile = new LodFile(null, fs);
                    selectedLodFile.LoadFAT();

                    lbFiles.Items.AddRange(selectedLodFile.GetNames());

                    tabsMain.TabPages.Add(tabResources);

                    cbLodFiles.Items.Add(Path.GetFileName(ofd.FileName));
                    cbLodFiles.SelectedIndex = 0;
                    ReloadAndFilterData();
                }
                tabsMain.Visible = true;
            }
        }
        public void LoadMaster(string executablPath)
        {
            var master = Heroes3Master.LoadInfo(executablPath);

            selectedLodFile = master.GetByName("h3bitmap.lod");

            SpecialityBuilder.LoadFromMaster(master);
            heroMainDataControl.LoadCastles();
            heroMainDataControl.LoadHeroes();
            heroClassDataControl.LoadHeroClasses();
            creatureDataControl.LoadCastles();
            spellDataControl.LoadSpells();

            var lodFileNames = master.ResourceFiles.Select(s => s.Name).ToArray();

            cbLodFiles.Items.AddRange(lodFileNames);
            cbLodFiles.SelectedIndex = Array.IndexOf <string>(lodFileNames, selectedLodFile.Name);

            tabsMain.TabPages.Add(tabHeroes);
            tabsMain.TabPages.Add(tabHeroClass);
            tabsMain.TabPages.Add(tabCreatures);
            tabsMain.TabPages.Add(tabSpells);
            tabsMain.TabPages.Add(tabResources);
        }