Example #1
0
        public Patch GetPatch(uint id, HITResourceGroup group)
        {
            Patch result = null;

            group.hot.Patches.TryGetValue(id, out result);
            return(result);
        }
Example #2
0
        public Hitlist GetHitlist(uint InstanceID, HITResourceGroup group)
        {
            Hitlist result = null;

            group.hot.Hitlists.TryGetValue(InstanceID, out result);
            return(result);
        }
Example #3
0
        public Track GetTrack(uint value, uint fallback, HITResourceGroup group)
        {
            Track result = null;

            group.hot.Tracks.TryGetValue(value, out result);
            return(result);
        }
Example #4
0
        public HITVM()
        {
            var content = FSO.Content.Content.Get();

            Events = new Dictionary <string, HITEventRegistration>();

            newmain       = LoadHitGroup(content.GetPath("sounddata/newmain.hit"), content.GetPath("sounddata/eventlist.txt"), content.GetPath("sounddata/newmain.hsm"));
            relationships = LoadHitGroup(content.GetPath("sounddata/relationships.hit"), content.GetPath("sounddata/relationships.evt"), content.GetPath("sounddata/relationships.hsm"));
            tsoep5        = LoadHitGroup(content.GetPath("sounddata/tsoep5.hit"), content.GetPath("sounddata/tsoep5.evt"), content.GetPath("sounddata/tsoep5.hsm"));
            tsov2         = LoadHitGroup(content.GetPath("sounddata/tsov2.hit"), content.GetPath("sounddata/tsov2.evt"), null); //tsov2 has no hsm file
            tsov3         = LoadHitGroup(content.GetPath("sounddata/tsov3.hit"), content.GetPath("sounddata/tsov3.evt"), content.GetPath("sounddata/tsov3.hsm"));
            turkey        = LoadHitGroup(content.GetPath("sounddata/turkey.hit"), content.GetPath("sounddata/turkey.evt"), content.GetPath("sounddata/turkey.hsm"));

            RegisterEvents(newmain);
            RegisterEvents(relationships);
            RegisterEvents(tsoep5);
            RegisterEvents(tsov2);
            RegisterEvents(tsov3);
            RegisterEvents(turkey);

            Globals      = new int[36];
            Threads      = new List <HITThread>();
            ActiveEvents = new Dictionary <string, HITThread>();
            FSCPlayers   = new List <FSCPlayer>();
        }
Example #5
0
 /// <summary>
 /// Gets a Track using its ID.
 /// </summary>
 /// <param name="value">Track ID</param>
 /// <param name="fallback">(TSO ONLY) Secondary Track ID lookup</param>
 /// <returns>A Track instance.</returns>
 public Track GetTrack(uint value, uint fallback, HITResourceGroup group)
 {
     if (TracksById.ContainsKey(value))
     {
         return(TracksById[value]);
     }
     else
     {
         if ((fallback != 0) && TracksById.ContainsKey(fallback))
         {
             return(TracksById[fallback]);
         }
         else
         {
             if (TracksByBackupId.ContainsKey(value))
             {
                 return(TracksByBackupId[value]);
             }
             else
             {
                 if (TracksByBackupId.ContainsKey(fallback))
                 {
                     return(TracksByBackupId[fallback]);
                 }
                 else
                 {
                     Debug.WriteLine("Couldn't find track: " + value + ", with alternative " + fallback);
                 }
             }
         }
     }
     return(null);
 }
Example #6
0
        /// <summary>
        /// Gets a Hitlist from a DBPF using its InstanceID.
        /// </summary>
        /// <param name="InstanceID">The InstanceID of the Hitlist.</param>
        /// <returns>A Hitlist instance.</returns>
        public Hitlist GetHitlist(uint InstanceID, HITResourceGroup group)
        {
            if (HitlistsById.ContainsKey(InstanceID))
            {
                return(HitlistsById[InstanceID]);
            }

            var hit1 = GetHitlistFrom(InstanceID, Hitlists);

            if (hit1 != null)
            {
                HitlistsById.Add(InstanceID, hit1);
                return(HitlistsById[InstanceID]);
            }

            var hit2 = GetHitlistFrom(InstanceID, TSOAudio);

            if (hit2 != null)
            {
                HitlistsById.Add(InstanceID, hit2);
                return(HitlistsById[InstanceID]);
            }

            return(null); //found nothing :'(
        }
Example #7
0
        public HITThread(uint TrackID, HITVM VM, HITResourceGroup Src)
        {
            this.VM        = VM;
            ResGroup       = Src;
            Owners         = new List <int>();
            Notes          = new List <HITNoteEntry>();
            NotesByChannel = new Dictionary <SoundEffectInstance, HITNoteEntry>();

            audContent = Content.Content.Get().Audio;
            SetTrack(TrackID);

            SimpleMode = true;
            PlaySimple = true; //play next frame, so we have time to set volumes.
        }
Example #8
0
        public HITThread(HITResourceGroup Src, HITVM VM)
        {
            this.ResGroup = Src;
            this.Src      = Src.hit;
            this.VM       = VM;
            Registers     = new int[16];
            Registers[1]  = 12; //gender (offset into object var table)
            LocalVar      = new int[54];
            ObjectVar     = new int[29];

            Notes          = new List <HITNoteEntry>();
            NotesByChannel = new Dictionary <SoundEffectInstance, HITNoteEntry>();
            Owners         = new List <int>();

            Stack      = new Stack <int>();
            audContent = Content.Content.Get().Audio;
        }
Example #9
0
        private void RegisterEvents(HITResourceGroup group)
        {
            var events = group.evt;

            for (int i = 0; i < events.Entries.Count; i++)
            {
                var entry = events.Entries[i];
                if (!Events.ContainsKey(entry.Name))
                {
                    Events.Add(entry.Name, new HITEventRegistration()
                    {
                        Name      = entry.Name,
                        EventType = (FSO.Files.HIT.HITEvents)entry.EventType,
                        TrackID   = entry.TrackID,
                        ResGroup  = group
                    });
                }
            }
        }
Example #10
0
        public HITVM()
        {
            var content = TSO.Content.Content.Get();
            Events = new Dictionary<string, HITEventRegistration>();

            newmain = LoadHitGroup(content.GetPath("sounddata/newmain.hit"), content.GetPath("sounddata/eventlist.txt"), content.GetPath("sounddata/newmain.hsm"));
            relationships = LoadHitGroup(content.GetPath("sounddata/relationships.hit"), content.GetPath("sounddata/relationships.evt"), content.GetPath("sounddata/relationships.hsm"));
            tsoep5 = LoadHitGroup(content.GetPath("sounddata/tsoep5.hit"), content.GetPath("sounddata/tsoep5.evt"), content.GetPath("sounddata/tsoep5.hsm"));
            tsov2 = LoadHitGroup(content.GetPath("sounddata/tsov2.hit"), content.GetPath("sounddata/tsov2.evt"), null); //tsov2 has no hsm file
            tsov3 = LoadHitGroup(content.GetPath("sounddata/tsov3.hit"), content.GetPath("sounddata/tsov3.evt"), content.GetPath("sounddata/tsov3.hsm"));
            turkey = LoadHitGroup(content.GetPath("sounddata/turkey.hit"), content.GetPath("sounddata/turkey.evt"), content.GetPath("sounddata/turkey.hsm"));

            RegisterEvents(newmain);
            RegisterEvents(relationships);
            RegisterEvents(tsoep5);
            RegisterEvents(tsov2);
            RegisterEvents(tsov3);
            RegisterEvents(turkey);

            Globals = new int[36];
            Threads = new List<HITThread>();
            ActiveEvents = new Dictionary<string, HITThread>();
            FSCPlayers = new List<FSCPlayer>();
        }
Example #11
0
 private void RegisterEvents(HITResourceGroup group)
 {
     var events = group.evt;
     for (int i = 0; i < events.Entries.Count; i++)
     {
         var entry = events.Entries[i];
         if (!Events.ContainsKey(entry.Name))
         {
             Events.Add(entry.Name, new HITEventRegistration()
             {
                 Name = entry.Name,
                 EventType = (TSO.Files.HIT.HITEvents)entry.EventType,
                 TrackID = entry.TrackID,
                 ResGroup = group
             });
         }
     }
 }
Example #12
0
        public void Init()
        {
            //somewhat different from TSO audio - need to scan content for .hot files, then load them all
            //hot contains EVT, tracks, hitlists and patches...
            //...which are added to our global database.

            WAVSounds.Init();
            MP3Sounds.Init();
            XASounds.Init();
            UTKSounds.Init();

            var FilePattern = new Regex(@".*\.hot");

            List <string> matchedFiles = new List <string>();

            foreach (var file in ContentManager.TS1AllFiles)
            {
                if (FilePattern.IsMatch(file.Replace('\\', '/')))
                {
                    matchedFiles.Add(file);
                }
            }
            foreach (var file in matchedFiles)
            {
                //load associated HIT, HSM
                var cFile = Path.Combine(ContentManager.TS1BasePath, file);
                var bPath = cFile.Substring(0, cFile.Length - 4); //path without .hot extension

                var hsm = new HSM(PathCaseTools.Insensitive(bPath + ".hsm"));
                var hit = new HITFile(PathCaseTools.Insensitive(bPath + ".hit"));
                var hot = new Hot(cFile, hsm);

                var group = new HITResourceGroup()
                {
                    hsm = hsm, hit = hit, hot = hot
                };

                foreach (var trk in hot.Tracks)
                {
                    if (TracksById.ContainsKey(trk.Key) && TracksById[trk.Key].SubroutineID != trk.Value.SubroutineID)
                    {
                    }
                    TracksById[trk.Key] = trk.Value;
                }

                foreach (var patch in hot.Patches)
                {
                    if (PatchesById.ContainsKey(patch.Key) && patch.Value.Filename != PatchesById[patch.Key].Filename)
                    {
                    }
                    PatchesById[patch.Key] = patch.Value;
                }

                foreach (var hls in hot.Hitlists)
                {
                    if (HitlistsById.ContainsKey(hls.Key) && HitlistsById[hls.Key].IDs.Count != hls.Value.IDs.Count)
                    {
                    }
                    HitlistsById[hls.Key] = hls.Value;
                }

                foreach (var evt in hot.Events)
                {
                    _Events[evt.Key] = new HITEventRegistration()
                    {
                        Name      = evt.Value.Name,
                        EventType = (FSO.Files.HIT.HITEvents)evt.Value.EventType,
                        TrackID   = evt.Value.TrackID,
                        ResGroup  = group
                    };
                }
            }
            var musics   = Events.Where(x => x.Value.EventType == HITEvents.kSetMusicMode).Select(x => x.Key + ": " + x.Value.TrackID).ToList();
            var stations = Events.Where(x => x.Value.EventType == HITEvents.kTurnOnTV).Select(x => x.Key + ": " + x.Value.TrackID.ToString()).ToList();
            //.Select(x => x.Key + ": " + new string(new char[] { (char)(x.Value.TrackID & 0xFF), (char)((x.Value.TrackID >> 8) & 0xFF), (char)((x.Value.TrackID >> 16) & 0xFF), (char)((x.Value.TrackID >> 24) & 0xFF) })).ToList();
        }
Example #13
0
 /// <summary>
 /// Gets a Patch instance for the given patch ID.
 /// TSO: Patch ID directly translates to FileID.
 /// TS1: Patch ID lookup to obtain patch.
 /// </summary>
 /// <param name="id">The Patch ID.</param>
 /// <returns>A Patch instance.</returns>
 public Patch GetPatch(uint id, HITResourceGroup group)
 {
     return(new Patch(id));
 }