Пример #1
0
        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;
 }
Пример #3
0
        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);
            }
        }
Пример #4
0
 public SR1_Writer(SR1_File file, Stream output, bool leaveOpen)
     : base(output, System.Text.Encoding.UTF8, leaveOpen)
 {
     File = file;
 }