public Patch GetPatch(uint id, HITResourceGroup group) { Patch result = null; group.hot.Patches.TryGetValue(id, out result); return(result); }
public Hitlist GetHitlist(uint InstanceID, HITResourceGroup group) { Hitlist result = null; group.hot.Hitlists.TryGetValue(InstanceID, out result); return(result); }
public Track GetTrack(uint value, uint fallback, HITResourceGroup group) { Track result = null; group.hot.Tracks.TryGetValue(value, out result); return(result); }
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>(); }
/// <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); }
/// <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 :'( }
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. }
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; }
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 }); } } }
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>(); }
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 }); } } }
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(); }
/// <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)); }