private void saveToolStripMenuItem_Click(object sender, EventArgs e)
 {
     if (pcc == null)
     {
         return;
     }
     pcc.save();
     MessageBox.Show("Done.");
 }
        public void Save()
        {
            int tmp1, tmp2, size;

            if (pcc == null)
            {
                return;
            }
            MemoryStream m = new MemoryStream();

            m.Write(BitConverter.GetBytes(Unk1), 0, 4);
            foreach (PropertyReader.Property p in Props)
            {
                switch (pcc.getNameEntry(p.Name))
                {
                case "m_StartingList":
                    m.Write(p.raw, 0, 0x10);
                    m.Write(BitConverter.GetBytes(StartingList.Count * 4 + 4), 0, 4);
                    m.Write(BitConverter.GetBytes(0), 0, 4);
                    m.Write(BitConverter.GetBytes(StartingList.Count), 0, 4);
                    foreach (int i in StartingList)
                    {
                        m.Write(BitConverter.GetBytes(i), 0, 4);
                    }
                    break;

                case "m_EntryList":
                    tmp1 = (int)m.Position;
                    m.Write(p.raw, 0, 0x10);
                    m.Write(new byte[8], 0, 8);
                    m.Write(BitConverter.GetBytes(EntryList.Count), 0, 4);
                    size = 4;
                    foreach (EntryListStuct el in EntryList)
                    {
                        size += WriteEntryList(m, el);
                    }
                    tmp2 = (int)m.Position;
                    m.Seek(tmp1 + 0x10, 0);
                    m.Write(BitConverter.GetBytes(size), 0, 4);
                    m.Seek(tmp2, 0);
                    break;

                case "m_ReplyList":
                    tmp1 = (int)m.Position;
                    m.Write(p.raw, 0, 0x10);
                    m.Write(new byte[8], 0, 8);
                    m.Write(BitConverter.GetBytes(ReplyList.Count), 0, 4);
                    size = 4;
                    foreach (ReplyListStruct rp in ReplyList)
                    {
                        size += WriteReplyList(m, rp);
                    }
                    tmp2 = (int)m.Position;
                    m.Seek(tmp1 + 0x10, 0);
                    m.Write(BitConverter.GetBytes(size), 0, 4);
                    m.Seek(tmp2, 0);
                    break;

                case "m_aSpeakerList":
                    tmp1 = (int)m.Position;
                    m.Write(p.raw, 0, 0x10);
                    m.Write(new byte[8], 0, 8);    //size placeholder
                    m.Write(BitConverter.GetBytes(SpeakerList.Count), 0, 4);
                    size = 4;
                    foreach (SpeakerListStruct sp in SpeakerList)
                    {
                        size += WriteSpeakerList(m, sp);
                    }
                    tmp2 = (int)m.Position;
                    m.Seek(tmp1 + 0x10, 0);
                    m.Write(BitConverter.GetBytes(size), 0, 4);
                    m.Seek(tmp2, 0);
                    break;

                case "m_aFemaleFaceSets":
                    m.Write(p.raw, 0, 0x10);
                    m.Write(BitConverter.GetBytes(FemaleFaceSets.Count * 4 + 4), 0, 4);
                    m.Write(BitConverter.GetBytes(0), 0, 4);
                    m.Write(BitConverter.GetBytes(FemaleFaceSets.Count), 0, 4);
                    foreach (int i in FemaleFaceSets)
                    {
                        m.Write(BitConverter.GetBytes(i), 0, 4);
                    }
                    break;

                case "m_aMaleFaceSets":
                    m.Write(p.raw, 0, 0x10);
                    m.Write(BitConverter.GetBytes(MaleFaceSets.Count * 4 + 4), 0, 4);
                    m.Write(BitConverter.GetBytes(0), 0, 4);
                    m.Write(BitConverter.GetBytes(MaleFaceSets.Count), 0, 4);
                    foreach (int i in MaleFaceSets)
                    {
                        m.Write(BitConverter.GetBytes(i), 0, 4);
                    }
                    break;

                case "m_ScriptList":
                    tmp1 = (int)m.Position;
                    m.Write(p.raw, 0, 0x10);
                    m.Write(new byte[8], 0, 8);    //size placeholder
                    m.Write(BitConverter.GetBytes(ScriptList.Count), 0, 4);
                    size = 4;
                    foreach (ScriptListStruct sd in ScriptList)
                    {
                        size += WriteScriptList(m, sd);
                    }
                    tmp2 = (int)m.Position;
                    m.Seek(tmp1 + 0x10, 0);
                    m.Write(BitConverter.GetBytes(size), 0, 4);
                    m.Seek(tmp2, 0);
                    break;

                default:
                    m.Write(p.raw, 0, p.raw.Length);
                    break;
                }
            }
            pcc.Exports[MyIndex].Data = m.ToArray();
            pcc.save(pcc.FileName);
        }