private void button6_Click(object sender, EventArgs e)
        {
            if (lstEntries.SelectedItems.Count == 1)
            {
                MTNFEntry entry = this.simgeomfile.simgeom.mtnfChunk.entries[lstEntries.SelectedIndices[0]];

                switch (entry.dataType)
                {
                case 4:
                case 2:
                    if (entry.dataCount >= 1 && !String.IsNullOrEmpty(txtMtnfBox1.Text))
                    {
                        entry.dwords[0] = Convert.ToUInt32(txtMtnfBox1.Text);
                    }
                    if (entry.dataCount >= 2 && !String.IsNullOrEmpty(txtMtnfBox2.Text))
                    {
                        entry.dwords[1] = Convert.ToUInt32(txtMtnfBox2.Text);
                    }
                    if (entry.dataCount >= 3 && !String.IsNullOrEmpty(txtMtnfBox3.Text))
                    {
                        entry.dwords[2] = Convert.ToUInt32(txtMtnfBox3.Text);
                    }
                    if (entry.dataCount >= 4 && !String.IsNullOrEmpty(txtMtnfBox4.Text))
                    {
                        entry.dwords[3] = Convert.ToUInt32(txtMtnfBox4.Text);
                    }
                    break;

                case 1:
                    if (entry.dataCount >= 1 && !String.IsNullOrEmpty(txtMtnfBox1.Text))
                    {
                        entry.floats[0] = Convert.ToSingle(txtMtnfBox1.Text);
                    }
                    if (entry.dataCount >= 2 && !String.IsNullOrEmpty(txtMtnfBox2.Text))
                    {
                        entry.floats[1] = Convert.ToSingle(txtMtnfBox2.Text);
                    }
                    if (entry.dataCount >= 3 && !String.IsNullOrEmpty(txtMtnfBox3.Text))
                    {
                        entry.floats[2] = Convert.ToSingle(txtMtnfBox3.Text);
                    }
                    if (entry.dataCount >= 4 && !String.IsNullOrEmpty(txtMtnfBox4.Text))
                    {
                        entry.floats[3] = Convert.ToSingle(txtMtnfBox4.Text);
                    }
                    break;
                }

                this.simgeomfile.simgeom.mtnfChunk.entries[lstEntries.SelectedIndices[0]] = entry;
            }
        }
        private void showEntries()
        {
            lstEntries.Items.Clear();

            for (int i = 0; i < simgeomfile.simgeom.mtnfChunk.entries.Count; i++)
            {
                MTNFEntry    mtnf = simgeomfile.simgeom.mtnfChunk.entries[i];
                ListViewItem item = new ListViewItem();
                item.Text = i.ToString();
                foreach (uint fieldHash in Enum.GetValues(typeof(FieldTypes)))
                {
                    if (fieldHash == mtnf.fieldTypeHash)
                    {
                        item.SubItems.Add(Enum.GetName(typeof(FieldTypes), fieldHash));
                        break;
                    }
                }
                if (item.SubItems.Count == 1)
                {
                    item.SubItems.Add(mtnf.fieldTypeHash.ToString("X8"));
                }
                lstEntries.Items.Add(item);
            }

            listView1.Items.Clear();
            for (int i = 0; i < simgeomfile.simgeom.keytable.keys.Count; i++)
            {
                ListViewItem item = new ListViewItem();
                item.Text = "TGI #" + i.ToString();
                item.SubItems.Add(simgeomfile.simgeom.keytable.keys[i].ToString());
                listView1.Items.Add(item);
                item = null;
            }

            lstBones.Items.Clear();
            for (int i = 0; i < simgeomfile.simgeom.boneHashes.Count; i++)
            {
                ListViewItem item = new ListViewItem();
                item.Text = "#" + i.ToString();
                item.SubItems.Add(simgeomfile.simgeom.boneHashes[i].ToString());
                lstBones.Items.Add(item);
                item = null;
            }

            lstVertices.Visible = false;
            lstVertices.Items.Clear();

            for (int i = 0; i < simgeomfile.simgeom.vertices.Count; i++)
            {
                ListViewItem item = new ListViewItem();
                item.Text = "#" + i.ToString();
                for (int j = 0; j < simgeomfile.simgeom.vertexFormats.Count; j++)
                {
                    switch (simgeomfile.simgeom.vertexFormats[j].dataType)
                    {
                    case 1:
                        item.SubItems.Add(simgeomfile.simgeom.vertices[i].x.ToString() + " " + simgeomfile.simgeom.vertices[i].y.ToString() + " " + simgeomfile.simgeom.vertices[i].z.ToString());
                        break;

                    case 2:
                        item.SubItems.Add(simgeomfile.simgeom.normals[i].x.ToString() + " " + simgeomfile.simgeom.normals[i].y.ToString() + " " + simgeomfile.simgeom.normals[i].z.ToString());
                        break;

                    case 3:
                        item.SubItems.Add(simgeomfile.simgeom.uvs[i].u.ToString() + " " + simgeomfile.simgeom.uvs[i].v.ToString());
                        break;

                    case 4:
                        item.SubItems.Add(simgeomfile.simgeom.bones[i].ToString() + " " + simgeomfile.simgeom.bones[i].ToString("X4"));
                        break;

                    case 5:
                        item.SubItems.Add(simgeomfile.simgeom.weights[i].x.ToString() + " " + simgeomfile.simgeom.weights[i].y.ToString() + " " + simgeomfile.simgeom.weights[i].z.ToString() + " " + simgeomfile.simgeom.weights[i].w.ToString());
                        break;

                    case 6:
                        item.SubItems.Add(simgeomfile.simgeom.tangentNormals[i].x.ToString() + " " + simgeomfile.simgeom.tangentNormals[i].y.ToString() + " " + simgeomfile.simgeom.tangentNormals[i].z.ToString());
                        break;

                    case 7:
                        item.SubItems.Add(simgeomfile.simgeom.tagVals[i].ToString());
                        break;

                    case 10:
                        item.SubItems.Add(simgeomfile.simgeom.vertexIds[i].ToString());
                        break;
                    }
                }

                lstVertices.Items.Add(item);
                item = null;
            }
            lstVertices.Visible = true;
        }
        private void showMtnfEntry(int entryNo)
        {
            MTNFEntry entry = this.simgeomfile.simgeom.mtnfChunk.entries[entryNo];

            txtMtnfDataType.Text = entry.dataType.ToString();
            txtMtnfCount.Text    = entry.dataCount.ToString();

            txtMtnfBox1.Text = "";
            txtMtnfBox2.Text = "";
            txtMtnfBox3.Text = "";
            txtMtnfBox4.Text = "";

            if (entry.dataCount >= 1)
            {
                switch (entry.dataType)
                {
                case 4:
                case 2:
                    txtMtnfBox1.Text = entry.dwords[0].ToString();
                    break;

                case 1:
                    txtMtnfBox1.Text = entry.floats[0].ToString();
                    break;
                }
            }
            if (entry.dataCount >= 2)
            {
                switch (entry.dataType)
                {
                case 4:
                case 2:
                    txtMtnfBox2.Text = entry.dwords[1].ToString();
                    break;

                case 1:
                    txtMtnfBox2.Text = entry.floats[1].ToString();
                    break;
                }
            }
            if (entry.dataCount >= 3)
            {
                switch (entry.dataType)
                {
                case 4:
                case 2:
                    txtMtnfBox3.Text = entry.dwords[2].ToString();
                    break;

                case 1:
                    txtMtnfBox3.Text = entry.floats[2].ToString();
                    break;
                }
            }
            if (entry.dataCount >= 4)
            {
                switch (entry.dataType)
                {
                case 4:
                case 2:
                    txtMtnfBox4.Text = entry.dwords[3].ToString();
                    break;

                case 1:
                    txtMtnfBox4.Text = entry.floats[3].ToString();
                    break;
                }
            }
        }