Example #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="entry"></param>
        public void SetEntry(int entryIndex, SEMEntry entry)
        {
            scriptArrayEditor.ItemIndexOffset = 10000 * entryIndex;

            _entry = entry;

            RefreshEntry();
        }
Example #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void importSPKG_Click(object sender, EventArgs e)
        {
            var f = FileIO.OpenFile("SEM Package (*.spk)|*.spk");

            if (f != null)
            {
                SEMEntry entry = new SEMEntry();
                entry.LoadFromPackage(f);
                entryList.AddItem(entry);
            }
        }
Example #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="path"></param>
        private void OpenSEMFile(string path)
        {
            using (BinaryReaderExt r = new BinaryReaderExt(new FileStream(path, FileMode.Open)))
            {
                r.BigEndian = true;

                r.Seek(8);
                var entryCount = r.ReadInt32();

                var offsetTableStart = r.Position + (entryCount + 1) * 4;

                for (uint i = 0; i < entryCount; i++)
                {
                    SEMEntry e = new SEMEntry();
                    e.Index = (int)i;
                    Entries.Add(e);

                    r.Seek(0x0C + i * 4);
                    var startIndex = r.ReadInt32();
                    var endIndex   = r.ReadInt32();

                    HashSet <int> UniqueEntries = new HashSet <int>();
                    int           largestEntry  = 0;
                    for (uint j = 0; j < endIndex - startIndex; j++)
                    {
                        SEMSound s = new SEMSound();
                        s.Index = (int)j;
                        r.Seek((uint)(offsetTableStart + startIndex * 4 + j * 4));
                        var dataOffsetStart = r.ReadUInt32();
                        var dataOffsetEnd   = r.ReadUInt32();

                        if (dataOffsetEnd == 0)
                        {
                            dataOffsetEnd = (uint)r.Length;
                        }

                        r.Seek(dataOffsetStart);
                        s.CommandData = r.ReadBytes((int)(dataOffsetEnd - dataOffsetStart));
                        e.Sounds.Add(s);

                        var entryId = ((s.CommandData[1] & 0xFF) << 16)
                                      | ((s.CommandData[2] & 0xFF) << 8)
                                      | ((s.CommandData[3] & 0xFF));

                        if (!UniqueEntries.Contains(entryId))
                        {
                            UniqueEntries.Add(entryId);
                        }
                    }
                    e.UniqueCount = UniqueEntries.Count;
                    //e.UniqueCount = largestEntry;
                }
            }
        }
Example #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="pack"></param>
        /// <param name="fighter"></param>
        /// <param name="editor"></param>
        /// <returns>Dictionary to maps old sound id values to new values</returns>
        private void ImportSoundData(ZipFile pack, MEXFighterEntry fighter, string semFile)
        {
            Console.WriteLine($"Importing Sound Data...");

            var root = Path.GetDirectoryName(MainForm.Instance.FilePath);

            // Load SEM File
            SemEntries = SEM.ReadSEMFile(semFile, true, editor._data);

            // narrator call-----------------------------------------------
            var narratorScript = @".SFXID : (id)
.REVERB : 48
.PRIORITY : 15
.UNKNOWN06 : 229
.END : 0";
            var narr           = pack["Sound/narrator.dsp"];

            var nameBank = SemEntries.Find(e => e.SoundBank?.Name == "nr_name.ssm");

            if (narr != null && nameBank != null)
            {
                var narsound = new DSP();
                narsound.FromFormat(GetBytes(narr), "dsp");
                var index = nameBank.SoundBank.Sounds.Length;
                nameBank.SoundBank.AddSound(narsound);

                var script = new SEMScript();
                SEM.CompileSEMScript(narratorScript.Replace("(id)", index.ToString()), out script.CommandData);
                var scriptIndex = nameBank.Scripts.Length;
                nameBank.AddScript(script);

                fighter.AnnouncerCall = scriptIndex + SemEntries.IndexOf(nameBank) * 10000;

                Console.WriteLine("Imported Announcer Call");
            }

            // Create and import SSM-----------------------------------------------

            var semYAML = pack["Sound/sem.yaml"];
            var ssmFile = pack["Sound/sound.ssm"];

            if (semYAML != null)
            {
                using (MemoryStream zos = new MemoryStream())
                {
                    semYAML.Extract(zos);
                    zos.Position = 0;
                    using (StreamReader r = new StreamReader(zos))
                    {
                        var semEntry = SEMEntry.Deserialize(r.ReadToEnd());

                        if (ssmFile != null)
                        {
                            var ssmName = fighter.NameText.ToLower() + ".ssm";
                            semEntry.SoundBank = new SSM();
                            using (MemoryStream ssmStream = new MemoryStream())
                            {
                                ssmFile.Extract(ssmStream);
                                ssmStream.Position = 0;
                                semEntry.SoundBank.Open(ssmName, ssmStream);
                            }
                            var ssmFilePath = Path.Combine(root, "audio\\us\\" + ssmName);
                            File.WriteAllBytes(ssmFilePath, GetBytes(ssmFile));
                        }

                        fighter.SSMIndex = SemEntries.Count;
                        SemEntries.Add(semEntry);
                    }
                }
            }


            // Import Victory Theme
            var victory = pack["Sound/victory.hps"];

            if (victory != null)
            {
                var ffname = $"ff_{fighter.NameText.ToLower()}.hps";
                fighter.VictoryThemeID = editor.MusicControl.AddMusic(new HSD_String()
                {
                    Value = ffname
                });

                var fffilePath = Path.Combine(root, "audio\\" + ffname);
                File.WriteAllBytes(fffilePath, GetBytes(victory));
            }
        }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="entry"></param>
 public void SetEntry(SEMEntry entry)
 {
     _entry = entry;
     soundArrayEditor.SetArrayFromProperty(entry.SoundBank, "Sounds");
 }