public static void SaveVoiceSet(ICLIFlags flags, string path, FindLogic.Combo.ComboInfo info, FindLogic.Combo.VoiceSetInfo voiceSetInfo) { info.SaveRuntimeData = new FindLogic.Combo.ComboSaveRuntimeData(); SaveVoiceSetInternal(flags, path, info, voiceSetInfo.GUID); Wait(info); }
private static void SaveVoiceSetInternal(ICLIFlags flags, string path, FindLogic.Combo.ComboInfo info, ulong voiceSet) { string thisPath = Path.Combine(path, GetFileName(voiceSet)); FindLogic.Combo.VoiceSetInfo voiceSetInfo = info.VoiceSets[voiceSet]; foreach (KeyValuePair <ulong, HashSet <FindLogic.Combo.VoiceLineInstanceInfo> > stimuliSet in voiceSetInfo.VoiceLineInstances) { SaveVoiceStimuliInternal(flags, thisPath, info, stimuliSet.Value, true); } }
public static void SaveItem(string basePath, string heroName, string containerName, string folderName, ICLIFlags flags, ItemInfo item, STUHero hero) { if (item == null) { return; } if (!(item.Unlock is STUUnlock_VoiceLine vl)) { return; } const string type = "VoiceLines"; string name = GetValidFilename(item.Name).Replace(".", ""); STUVoiceSetComponent soundSetComponentContainer = GetInstance <STUVoiceSetComponent>(hero.EntityMain); if (soundSetComponentContainer?.VoiceSet == null) { Debugger.Log(0, "DataTool.SaveLogic.Unlock.VoiceLine", "[DataTool.SaveLogic.Unlock.VoiceLine]: VoiceSet not found"); return; } FindLogic.Combo.ComboInfo info = new FindLogic.Combo.ComboInfo(); FindLogic.Combo.Find(info, soundSetComponentContainer.VoiceSet); FindLogic.Combo.VoiceSetInfo voiceSetInfo = info.VoiceSets[soundSetComponentContainer.VoiceSet]; List <FindLogic.Combo.VoiceLineInstanceInfo> voiceLineInstances = new List <FindLogic.Combo.VoiceLineInstanceInfo>(); using (Stream vlStream = OpenFile(vl.EffectResource)) { using (Chunked vlChunk = new Chunked(vlStream)) { foreach (SVCE svce in vlChunk.GetAllOfTypeFlat <SVCE>()) { if (svce == null) { continue; } if (voiceSetInfo.VoiceLineInstances.ContainsKey(svce.Data.VoiceStimulus)) { voiceLineInstances.AddRange(voiceSetInfo.VoiceLineInstances[svce.Data.VoiceStimulus]); } } } } string output = Path.Combine(basePath, containerName, heroName ?? "", type, folderName, name); Combo.SaveVoiceStimuli(flags, output, info, voiceLineInstances, false); }
public static void SaveVoiceSet(ICLIFlags flags, string path, FindLogic.Combo.ComboInfo info, FindLogic.Combo.VoiceSetInfo voiceSetInfo) { SaveVoiceSetInternal(flags, path, info, voiceSetInfo.GUID); }
public static void Save(ICLIFlags flags, STUMap map, ulong key, string basePath) { string name = GetValidFilename(GetString(map.DisplayName)) ?? "Title Screen"; if (GetString(map.VariantName) != null) { name = GetValidFilename(GetString(map.VariantName)); } LoudLog($"Extracting map {name}\\{GUID.Index(key):X}"); // if (map.Gamemodes != null) { // foreach (Common.STUGUID gamemodeGUID in map.Gamemodes) { // STUGamemode gamemode = GetInstance<STUGamemode>(gamemodeGUID); // } // } // TODO: MAP11 HAS CHANGED // TODO: MAP10 TOO? string mapPath = Path.Combine(basePath, "Maps", name, GUID.Index(key).ToString("X")) + Path.DirectorySeparatorChar; CreateDirectoryFromFile(mapPath); // if (map.UnknownArray != null) { // Dictionary<ulong, List<TextureInfo>> textures = new Dictionary<ulong, List<TextureInfo>>(); // foreach (STUMap.STU_7D6D8405 stu_7D6D8405 in map?.UnknownArray) { // ISTU overrideStu = OpenSTUSafe(stu_7D6D8405.Override); // STUSkinOverride @override = GetInstance<STUSkinOverride>(stu_7D6D8405.Override); // textures = FindLogic.Texture.FindTextures(textures, @override.SkinImage); // } // SaveLogic.Texture.Save(flags, Path.Combine(mapPath, "override"), textures); // } OWMDLWriter modelWriter = new OWMDLWriter(); OWMap14Writer owmap = new OWMap14Writer(); FindLogic.Combo.ComboInfo info = new FindLogic.Combo.ComboInfo(); LoudLog("\tFinding"); FindLogic.Combo.Find(info, map.MapDataResource1); using (Stream mapStream = OpenFile(map.GetDataKey(1))) { STULib.Types.Map.Map mapData = new STULib.Types.Map.Map(mapStream, BuildVersion); using (Stream map2Stream = OpenFile(map.GetDataKey(2))) { if (map2Stream == null) { return; } STULib.Types.Map.Map map2Data = new STULib.Types.Map.Map(map2Stream, BuildVersion); using (Stream map8Stream = OpenFile(map.GetDataKey(8))) { STULib.Types.Map.Map map8Data = new STULib.Types.Map.Map(map8Stream, BuildVersion); using (Stream mapEntitiesStream = OpenFile(map.GetDataKey(0xB))) { STULib.Types.Map.Map mapEntities = new STULib.Types.Map.Map(mapEntitiesStream, BuildVersion, true); mapEntitiesStream.Position = (long)(Math.Ceiling(mapEntitiesStream.Position / 16.0f) * 16); // Future proofing (?) for (int i = 0; i < mapEntities.Records.Length; ++i) { if (mapEntities.Records[i] != null && mapEntities.Records[i].GetType() != typeof(MapEntity)) { continue; } MapEntity mapEntity = (MapEntity)mapEntities.Records[i]; if (mapEntity == null) { continue; } FindLogic.Combo.Find(info, mapEntity.Header.Entity); STUModelComponent component = GetInstance <STUModelComponent>(mapEntity.Header.Entity); if (component == null) { continue; } mapEntity.ModelLook = component.Look; mapEntity.Model = component.Model; mapEntities.Records[i] = mapEntity; } using (Stream mapLStream = OpenFile(map.GetDataKey(9))) { STULib.Types.Map.Map mapLData = new STULib.Types.Map.Map(mapLStream, BuildVersion); using (Stream outputStream = File.Open(Path.Combine(mapPath, $"{name}.owmap"), FileMode.Create, FileAccess.Write)) { owmap.Write(outputStream, mapData, map2Data, map8Data, mapEntities, mapLData, name, modelWriter, info); } } } } } } FindLogic.Combo.Find(info, map.EffectAnnouncer); info.SetEffectName(map.EffectAnnouncer, "LoadAnnouncer"); FindLogic.Combo.Find(info, map.EffectMusic); info.SetEffectName(map.EffectMusic, "LoadMusic"); LoudLog("\tSaving"); Combo.Save(flags, mapPath, info); // if (extractFlags.ConvertModels) { // string physicsFile = Path.Combine(mapPath, "Models", "physics", "physics.owmdl"); // // CreateDirectoryFromFile(physicsFile); // // using (Stream map10Stream = OpenFile(map.GetDataKey(0x10))) { // // Map10 physics = new Map10(map10Stream); // // using (Stream outputStream = File.Open(physicsFile, FileMode.Create, FileAccess.Write)) { // // modelWriter.Write(physics, outputStream, new object[0]); // // } // // } // } if (map.VoiceSet != null) { FindLogic.Combo.ComboInfo soundInfo = new FindLogic.Combo.ComboInfo(); FindLogic.Combo.Find(soundInfo, map.VoiceSet); if (soundInfo.VoiceSets.ContainsKey(map.VoiceSet)) { string soundPath = Path.Combine(mapPath, "Sound"); FindLogic.Combo.VoiceSetInfo voiceSetInfo = soundInfo.VoiceSets[map.VoiceSet]; Combo.SaveVoiceSet(flags, soundPath, soundInfo, voiceSetInfo); } } LoudLog("\tDone"); }