コード例 #1
0
        private void executeAllJobsForAllFilesToolStripMenuItem_Click(object sender, EventArgs e)
        {
            foreach (Mod mod in ModManager.modlist)
            {
                string name   = mod._filename;
                string inname = mod._infilename;
                if (!Helper.FindExeLocation())
                {
                    return;
                }

                if (!File.Exists(Helper.pathgame + name))
                {
                    Helper.Log("File \"" + name + "\" not found!");
                    return;
                }
                HOGPFile hogp = new HOGPFile(Helper.pathgame + name);
                for (int i = 0; i < hogp.filelist.Count; i++)
                {
                    HOGPFile.FileEntry en = hogp.filelist[i];
                    if (en.name == inname)
                    {
                        hogp.ImportFile(i, mod._data);
                    }
                }
            }
            MessageBox.Show("Done.");
            return;
        }
コード例 #2
0
        private void rebuildBinToolStripMenuItem_Click(object sender, EventArgs e)
        {
            OpenFileDialog d = new OpenFileDialog();

            d.Filter = "*.bin|*.bin";
            if (d.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                rtb1.Text = "";
                try
                {
                    file        = new HOGPFile(d.FileName);
                    pb1.Value   = 0;
                    pb1.Maximum = file.filelist.Count;
                    FileStream fs  = new FileStream(d.FileName, FileMode.Open, FileAccess.Read);
                    FileStream fs2 = new FileStream(d.FileName + ".tmp", FileMode.Create, FileAccess.Write);
                    fs2.Write(new byte[] { 0x48, 0x4F, 0x47, 0x50, 0x3, 0, 0, 0 }, 0, 8);
                    fs2.Write(new byte[8], 0, 8);
                    long datacount   = 0;
                    uint memBlockPos = 0;
                    for (int i = 0; i < file.filelist.Count; i++)
                    {
                        HOGPFile.FileEntry en = file.filelist[i];
                        pb1.Value   = i;
                        status.Text = en.name;
                        Application.DoEvents();
                        if ((long)en.offset == -1)
                        {
                            continue;
                        }
                        Helper.StreamCopy(fs, fs2, (long)en.offset, (int)en.sizeComp);
                        en.offset        = (ulong)datacount + 16;
                        en.blockMapStart = memBlockPos;
                        memBlockPos     += (uint)en.blockSizes.Count;
                        datacount       += en.sizeComp;
                        file.filelist[i] = en;
                    }
                    fs2.Seek(8, 0);
                    fs2.Write(BitConverter.GetBytes(datacount), 0, 8);
                    fs2.Seek(0, SeekOrigin.End);
                    file.WriteTOC(fs2);
                    fs2.Close();
                    fs.Close();
                    File.Delete(d.FileName);
                    File.Move(d.FileName + ".tmp", d.FileName);
                    status.Text = "";
                    pb1.Value   = 0;
                    MessageBox.Show("Done.");
                }
                catch (Exception ex)
                {
                    Helper.Log("Error: " + ex.Message);
                }
            }
        }
コード例 #3
0
        private void editInUnicodeEditorToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int n = listBox1.SelectedIndex;

            if (n == -1)
            {
                return;
            }
            HOGPFile.FileEntry en   = file.filelist[n];
            byte[]             data = file.ReadFile(en);
            bool header             = false;

            if (data.Length > 2 && data[0] == 0xFF && data[1] == 0xFE)
            {
                MemoryStream m = new MemoryStream();
                m.Write(data, 2, data.Length - 2);
                data   = m.ToArray();
                header = true;
            }
            TextEditor ted = new TextEditor();

            ted.rtb1.Text = Encoding.Unicode.GetString(data);
            ted.ShowDialog();
            byte[] newdata = Encoding.Unicode.GetBytes(ted.rtb1.Text.Replace("\n", "\r\n"));
            bool   same    = true;

            if (newdata.Length != data.Length)
            {
                same = false;
            }
            else
            {
                for (int i = 0; i < newdata.Length; i++)
                {
                    if (newdata[i] != data[i])
                    {
                        same = false;
                        break;
                    }
                }
            }
            if (!same && MessageBox.Show("Do you want to save the changes?", "Do you want to save the changes?", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
            {
                MemoryStream m2 = new MemoryStream();
                if (header)
                {
                    m2.Write(new byte[] { 0xFF, 0xFE }, 0, 2);
                }
                m2.Write(newdata, 0, newdata.Length);
                file.ImportFile(n, m2.ToArray());
                MessageBox.Show("Done.");
            }
        }
コード例 #4
0
        private void exportSelectedToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int n = listBox1.SelectedIndex;

            if (n == -1 || file == null)
            {
                return;
            }
            HOGPFile.FileEntry en = file.filelist[n];
            SaveFileDialog     d  = new SaveFileDialog();

            d.FileName = Path.GetFileName(en.name);
            d.Filter   = "*.*|*.*";
            if (d.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                file.ExtractFile(en, d.FileName);
                MessageBox.Show("Done");
            }
        }
コード例 #5
0
        private void createModForSelectedToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int n = listBox1.SelectedIndex;

            if (n == -1)
            {
                return;
            }
            HOGPFile.FileEntry en = file.filelist[n];
            OpenFileDialog     d  = new OpenFileDialog();

            d.FileName = Path.GetFileName(en.name);
            d.Filter   = "*.*|*.*";
            if (d.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                byte[] buff = File.ReadAllBytes(d.FileName);
                ModManager.modlist.Add(new Mod(Path.GetFileName(file.filename), en, buff));
                MessageBox.Show("Done.");
            }
        }
コード例 #6
0
        private void executeSelectedJobToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int n = listBox1.SelectedIndex;
            int m = listBox2.SelectedIndex;

            if (n == -1 || m == -1)
            {
                return;
            }
            string name   = listBox1.Items[n].ToString();
            string inname = listBox2.Items[m].ToString();

            foreach (Mod mod in ModManager.modlist)
            {
                if (mod._filename == name && mod._infilename == inname)
                {
                    if (!Helper.FindExeLocation())
                    {
                        return;
                    }
                    if (!File.Exists(Helper.pathgame + name))
                    {
                        Helper.Log("File \"" + name + "\" not found!");
                        return;
                    }
                    HOGPFile hogp = new HOGPFile(Helper.pathgame + name);
                    for (int i = 0; i < hogp.filelist.Count; i++)
                    {
                        HOGPFile.FileEntry en = hogp.filelist[i];
                        if (en.name == inname)
                        {
                            hogp.ImportFile(i, mod._data);
                            MessageBox.Show("Done.");
                            return;
                        }
                    }
                }
            }
        }
コード例 #7
0
        private void editInAsciiEditorToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int n = listBox1.SelectedIndex;

            if (n == -1)
            {
                return;
            }
            HOGPFile.FileEntry en   = file.filelist[n];
            byte[]             data = file.ReadFile(en);
            TextEditor         ted  = new TextEditor();

            ted.rtb1.Text = Encoding.ASCII.GetString(data);
            ted.ShowDialog();
            byte[] newdata = Encoding.ASCII.GetBytes(ted.rtb1.Text.Replace("\n", "\r\n"));
            bool   same    = true;

            if (newdata.Length != data.Length)
            {
                same = false;
            }
            else
            {
                for (int i = 0; i < newdata.Length; i++)
                {
                    if (newdata[i] != data[i])
                    {
                        same = false;
                        break;
                    }
                }
            }
            if (!same && MessageBox.Show("Do you want to save the changes?", "Do you want to save the changes?", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
            {
                file.ImportFile(n, newdata);
                MessageBox.Show("Done.");
            }
        }
コード例 #8
0
        private void exportSelectedAsBMPToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int n = listBox1.SelectedIndex;

            if (n == -1 || file == null)
            {
                return;
            }
            HOGPFile.FileEntry en = file.filelist[n];
            SaveFileDialog     d  = new SaveFileDialog();

            d.FileName = Path.GetFileNameWithoutExtension(en.name) + ".bmp";
            d.Filter   = "*.bmp|*.bmp";
            if (d.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                if (File.Exists("preview.dds"))
                {
                    File.Delete("preview.dds");
                }
                if (File.Exists("preview.bmp"))
                {
                    File.Delete("preview.bmp");
                }
                File.WriteAllBytes("preview.dds", file.ReadFile(en));
                Helper.Run("texconv.exe", " preview.dds -ft bmp");
                if (File.Exists("preview.dds"))
                {
                    File.Delete("preview.dds");
                }
                if (File.Exists("preview.bmp"))
                {
                    File.Move("preview.bmp", d.FileName);
                }
                MessageBox.Show("Done");
            }
        }
コード例 #9
0
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            int n = listBox1.SelectedIndex;

            if (n == -1)
            {
                return;
            }
            HOGPFile.FileEntry en = file.filelist[n];
            StringBuilder      sb = new StringBuilder();

            sb.AppendFormat("{0}h {1}h {2}h {3}h", en.sizeUncomp.ToString("X8"), en.sizeComp.ToString("X8"), en.blockMapStart.ToString("X8"), en.offset.ToString("X16"));
            rtb2.Text = sb.ToString();
            try
            {
                if (!en.name.ToLower().EndsWith(".dds"))
                {
                    rtb3.Visible = hb1.Visible = true;
                }
                if (en.name.ToLower().EndsWith(".nut"))
                {
                    try
                    {
                        NutFile nut = new NutFile(new MemoryStream(file.ReadFile(en)));
                        rtb3.Text = nut.Print();
                        rtb3.BringToFront();
                    }
                    catch (Exception)
                    {
                        hb1.ByteProvider = new DynamicByteProvider(file.ReadFile(en));
                        hb1.BringToFront();
                    }
                }
                else if (en.name.ToLower().EndsWith(".dds"))
                {
                    if (File.Exists("preview.dds"))
                    {
                        File.Delete("preview.dds");
                    }
                    if (File.Exists("preview.bmp"))
                    {
                        File.Delete("preview.bmp");
                    }
                    File.WriteAllBytes("preview.dds", file.ReadFile(en));
                    Helper.Run("texconv.exe", " preview.dds -ft bmp");
                    pic1.Image = Bitmap.FromStream(new MemoryStream(File.ReadAllBytes("preview.bmp")));
                    pic1.BringToFront();
                    rtb3.Visible = hb1.Visible = false;
                    if (File.Exists("preview.dds"))
                    {
                        File.Delete("preview.dds");
                    }
                    if (File.Exists("preview.bmp"))
                    {
                        File.Delete("preview.bmp");
                    }
                }
                else
                {
                    hb1.ByteProvider = new DynamicByteProvider(file.ReadFile(en));
                    hb1.BringToFront();
                }
            }
            catch (Exception ex)
            {
                Helper.Log("Error displaying content:" + ex.Message + "\n" + ex.StackTrace);
            }
        }
コード例 #10
0
 public Mod(string filename, HOGPFile.FileEntry en, byte[] data)
 {
     _filename   = filename;
     _infilename = en.name;
     _data       = data;
 }