public static string[] TestFolder(string folderName, TestFlags flags, ref int filesRead, ref int filesToRead, ref string recentMessage) { DirectoryInfo directoryInfo = new DirectoryInfo(folderName); FileInfo[] fileInfos = directoryInfo.GetFiles("*.*", SearchOption.AllDirectories); fileInfos = Array.FindAll(fileInfos, info => (info.Extension == ".pcm" || info.Extension == ".drm")); List <string> physObs = new List <string>(); List <string> genericTunes = new List <string>(); List <string> monAttributes = new List <string>(); List <string> monFuncTables = new List <string>(); List <string> results = new List <string>(); int numSucceeded = 0; int numSkipped = 0; System.Threading.Interlocked.Exchange(ref filesRead, 0); System.Threading.Interlocked.Exchange(ref filesToRead, fileInfos.Length); foreach (FileInfo fileInfo in fileInfos) { string cleanName = Path.GetFileNameWithoutExtension(fileInfo.Name).PadRight(20); if ((flags & TestFlags.IgnoreDuplicates) != 0 && cleanName.Contains("duplicate")) { System.Threading.Interlocked.Increment(ref filesRead); numSkipped++; continue; } System.Threading.Interlocked.Exchange(ref recentMessage, (string)fileInfo.Name.Clone()); string fileDesc = fileInfo.Name.PadRight(20) + "(Size = 0xFFFFFFFF bytes)"; try { SR1_File file = new SR1_File(); file.Import(fileInfo.FullName, ImportFlags.LogErrors); fileDesc = fileInfo.Name.PadRight(20) + "(Size = 0x" + file._FileLength.ToString("X8") + " bytes)"; if (file.TestExport()) { if ((flags & TestFlags.ListAllFiles) != 0) { results.Add(fileDesc + " - Success"); } numSucceeded++; } else { results.Add(fileDesc + " - Fail"); } if (!file._IsLevel) { if ((flags & TestFlags.ListObjectTypes) != 0) { SR1Structures.Object obj = (SR1Structures.Object)file._Structures[0]; SR1_Structure data = file._Structures[obj.data.Offset]; if (data is PhysObPropertiesBase) { PhysObPropertiesBase physOb = (PhysObPropertiesBase)data; physObs.Add("\t" + cleanName + "\t{ oflags = " + obj.oflags.ToString() + ", oflags2 = " + obj.oflags2.ToString() + ", physOb.Properties.Type = " + physOb.Properties.ID.ToString() + " }"); } else if (data is GenericTune) { GenericTune genericTune = (GenericTune)data; genericTunes.Add("\t" + cleanName + "\t{ oflags = " + obj.oflags.ToString() + ", oflags2 = " + obj.oflags2.ToString() + ", genericTune.flags = " + genericTune.flags.ToString() + " }"); } else if (data is MonsterAttributes) { MonsterAttributes monsterAttributes = (MonsterAttributes)data; monAttributes.Add("\t" + cleanName + "\t{ oflags = " + obj.oflags.ToString() + ", oflags2 = " + obj.oflags2.ToString() + ", monsterAttributes.magicNum = " + monsterAttributes.magicnum.ToString() + ", monsterAttributes.whatAmI = " + monsterAttributes.whatAmI.ToString() + " }"); } } if ((flags & TestFlags.ListRelocModules) != 0) { SR1Structures.Object obj = (SR1Structures.Object)file._Structures[0]; if (obj.relocModule.Offset != 0) { SR1_Structure relocModule = file._Structures[obj.relocModule.Offset]; if (relocModule is MonsterFunctionTable) { MonsterFunctionTable mft = (MonsterFunctionTable)relocModule; string relocStart = "Start = 0x" + mft.stateChoices.Start.ToString("X8"); string relocEnd = "End = 0x" + mft.stateChoices.End.ToString("X8"); string relocSize = "Size = 0x" + (mft.stateChoices.End - mft.stateChoices.Start).ToString("X8"); monFuncTables.Add( "\t" + cleanName + "\t{ MonsterFunctionTable (" + relocStart + ", " + relocEnd + ", " + relocSize + ") }"); } } } } } catch { results.Add(fileDesc + " - Error"); } System.Threading.Interlocked.Increment(ref filesRead); } if ((flags & TestFlags.ListObjectTypes) != 0) { results.Add("\r\nPhysObs:"); results.AddRange(physObs); results.Add("\r\nGenericTunes:"); results.AddRange(genericTunes); results.Add("\r\nMonsterAttibutes:"); results.AddRange(monAttributes); results.Add(""); } if ((flags & TestFlags.ListRelocModules) != 0) { results.Add("\r\nMonsterFunctionTables:"); results.AddRange(monFuncTables); results.Add(""); } //results.Add("\r\nCollectibles:"); //results.AddRange(collectibles); //results.Add(""); results.Add("Files Read: " + (filesRead - numSkipped)); results.Add("Succeeded: " + numSucceeded); results.Add("Failed: " + (filesRead - numSkipped - numSucceeded)); return(results.ToArray()); }
public SR1_Reader(SR1_File file, Stream input, System.Text.Encoding encoding, bool leaveOpen) : base(input, encoding, leaveOpen) { File = file; }
public void Initialize(Repository repository, string fileName, SR1_File file) { FileName = fileName; _repository = repository; string textureSetName = fileName; pathTextBox.Text = _repository.MakeLevelFilePath(fileName); FullPath = _repository.MakeLevelFilePath(fileName, true); Level existingLevel = repository.Levels.Levels.Find(x => x.UnitName == fileName); if (existingLevel != null && existingLevel.TextureSet != "") { textureSetName = existingLevel.TextureSet; } TexSet currentTextureSet = null; foreach (TexSet textureSet in _repository.TextureSets.TexSets) { textureSetCombo.Items.Add(textureSet.Name); if (textureSet.Name == textureSetName) { currentTextureSet = textureSet; } } if (currentTextureSet != null) { textureSetCombo.SelectedIndex = currentTextureSet.Index; } else { textureSetCombo.Items.Add(fileName); textureSetCombo.SelectedIndex = _repository.TextureSets.Count; } foreach (string objectName in file._ObjectNames) { string lowerCase = objectName.ToLower(); if (_repository.Objects.Find(x => x.ObjectName == lowerCase) == null) { requiredObjectList.Items.Add(lowerCase); } } SR1Structures.Level level = (SR1Structures.Level)file._Structures[0]; SR1Structures.Terrain terrain = (SR1Structures.Terrain)file._Structures[level.terrain.Offset]; _multiSignals = (SR1Structures.SR1_StructureSeries <SR1Structures.MultiSignal>)file._Structures[level.SignalListStart.Offset]; _portalList = (SR1Structures.StreamUnitPortalList)file._Structures[terrain.StreamUnits.Offset]; this.portalList.Items.Clear(); foreach (SR1Structures.StreamUnitPortal portal in _portalList.portals) { this.portalList.Items.Add(portal.tolevelname); this.portalList.SetItemChecked(this.portalList.Items.Count - 1, true); } }
public SR1_Writer(SR1_File file, Stream output, bool leaveOpen) : base(output, System.Text.Encoding.UTF8, leaveOpen) { File = file; }