public IModelDirectory <BmdModelFileBundle>?GatherModelFileBundles( bool assert) { var pikmin2Rom = DirectoryConstants.ROMS_DIRECTORY.TryToGetExistingFile( "pikmin_2.gcm"); if (pikmin2Rom == null) { return(null); } var options = GcnFileHierarchyExtractor.Options.Standard() .PruneRarcDumpNames("arc", "data"); var fileHierarchy = new GcnFileHierarchyExtractor().ExtractFromRom( options, pikmin2Rom); var rootNode = new ModelDirectory <BmdModelFileBundle>("pikmin_2"); this.ExtractPikminAndCaptainModels_(rootNode, fileHierarchy); this.ExtractAllFromSeparateDirectories_(rootNode, fileHierarchy); this.ExtractAllFromMergedDirectories_(rootNode, fileHierarchy); this.ExtractLeafBudFlower_(rootNode, fileHierarchy); this.ExtractAllTreasures_(rootNode, fileHierarchy); return(rootNode); }
public IModelDirectory <BmdModelFileBundle>?GatherModelFileBundles( bool assert) { var superMarioSunshineRom = DirectoryConstants.ROMS_DIRECTORY.TryToGetExistingFile( "super_mario_sunshine.gcm"); if (superMarioSunshineRom == null) { return(null); } var options = GcnFileHierarchyExtractor.Options.Standard() .PruneRarcDumpNames("scene"); var fileHierarchy = new GcnFileHierarchyExtractor() .ExtractFromRom(options, superMarioSunshineRom); var rootModelDirectory = new ModelDirectory <BmdModelFileBundle>("super_mario_sunshine"); this.ExtractMario_(rootModelDirectory, fileHierarchy); this.ExtractFludd_(rootModelDirectory, fileHierarchy); this.ExtractYoshi_(rootModelDirectory, fileHierarchy); this.ExtractScenes_(rootModelDirectory, fileHierarchy); return(rootModelDirectory); }
public IModelDirectory <BmdModelFileBundle>?GatherModelFileBundles( bool assert) { var marioKartDoubleDashRom = DirectoryConstants.ROMS_DIRECTORY.TryToGetExistingFile( "mario_kart_double_dash.gcm"); if (marioKartDoubleDashRom == null) { return(null); } var options = GcnFileHierarchyExtractor.Options.Standard() .UseRarcDumpForExtensions(".arc"); var fileHierarchy = new GcnFileHierarchyExtractor() .ExtractFromRom(options, marioKartDoubleDashRom); var rootModelDirectory = new ModelDirectory <BmdModelFileBundle>("mario_kart_double_dash"); this.ExtractDrivers_(rootModelDirectory, fileHierarchy); this.ExtractKarts_(rootModelDirectory, fileHierarchy); this.ExtractCourses_(rootModelDirectory, fileHierarchy); // TODO: Extract "enemies" // TODO: Extract "objects" return(rootModelDirectory); }
public IModelDirectory <ModModelFileBundle>?GatherModelFileBundles( bool assert) { var pikmin1Rom = DirectoryConstants.ROMS_DIRECTORY.TryToGetExistingFile( "pikmin_1.gcm"); if (pikmin1Rom == null) { return(null); } var options = GcnFileHierarchyExtractor.Options.Empty(); var fileHierarchy = new GcnFileHierarchyExtractor().ExtractFromRom(options, pikmin1Rom); var rootModelDirectory = new ModelDirectory <ModModelFileBundle>("pikmin_1"); var parentObjectDirectory = rootModelDirectory.AddSubdir("data") .AddSubdir("objects"); var queue = new Queue <(IFileHierarchyDirectory, IModelDirectory <ModModelFileBundle>)>(); queue.Enqueue((fileHierarchy.Root, rootModelDirectory)); while (queue.Any()) { var(directory, node) = queue.Dequeue(); // TODO: Handle special cases: // - olimar // - pikmin // - frog var modFiles = directory.FilesWithExtension(".mod").ToArray(); var anmFiles = directory.FilesWithExtension(".anm").ToArray(); foreach (var modFile in modFiles) { var anmFile = anmFiles .FirstOrDefault(anmFile => anmFile.NameWithoutExtension == modFile.NameWithoutExtension); node.AddFileBundle(new ModModelFileBundle { ModFile = modFile, AnmFile = anmFile, }); } foreach (var subdir in directory.Subdirs) { queue.Enqueue((subdir, node.AddSubdir(subdir.Name))); } } return(rootModelDirectory); }
public IModelDirectory <DatModelFileBundle>?GatherModelFileBundles( bool assert) { var superSmashBrosMeleeRom = DirectoryConstants.ROMS_DIRECTORY.TryToGetExistingFile( "super_smash_bros_melee.gcm"); if (superSmashBrosMeleeRom == null) { return(null); } var options = GcnFileHierarchyExtractor.Options.Standard(); var fileHierarchy = new GcnFileHierarchyExtractor() .ExtractFromRom(options, superSmashBrosMeleeRom); var rootModelDirectory = new ModelDirectory <DatModelFileBundle>("super_smash_bros_melee"); foreach (var datFile in fileHierarchy.Root.FilesWithExtension(".dat")) { var datFileName = datFile.NameWithoutExtension; var isValidModel = false; // Playable character data if (datFileName.StartsWith("Pl")) { if (datFileName.EndsWith("Nr")) { isValidModel = true; } } // Stages if (datFileName.StartsWith("Gr")) { isValidModel = true; } // Trophies if (datFileName.StartsWith("Ty")) { isValidModel = true; } // TODO: Look into the other files if (isValidModel) { rootModelDirectory.AddFileBundle(new DatModelFileBundle(datFile)); } } return(rootModelDirectory); }
public void ExtractAll() { var paperMarioTheThousandYearDoorRom = DirectoryConstants.ROMS_DIRECTORY.GetExistingFile( "paper_mario_the_thousand_year_door.gcm"); var options = GcnFileHierarchyExtractor.Options.Standard(); var fileHierarchy = new GcnFileHierarchyExtractor() .ExtractFromRom(options, paperMarioTheThousandYearDoorRom); }
public void ExtractAll() { var animalCrossingRom = DirectoryConstants.ROMS_DIRECTORY.GetExistingFile( "animal_crossing.gcm"); var options = GcnFileHierarchyExtractor.Options.Standard(); var fileHierarchy = new GcnFileHierarchyExtractor().ExtractFromRom( options, animalCrossingRom); var logger = Logging.Create <AnimalCrossingExtractor>(); // TODO: Extract models via display lists }
public void ExtractAll() { var luigisMansionRom = DirectoryConstants.ROMS_DIRECTORY.GetExistingFile( "luigis_mansion.gcm"); var options = GcnFileHierarchyExtractor.Options.Standard() .UseRarcDumpForExtensions( // For some reason, some MDL files are compressed as RARC. ".mdl"); var fileHierarchy = new GcnFileHierarchyExtractor().ExtractFromRom( options, luigisMansionRom); // TODO: Use Mdl2Fbx }
public IModelDirectory <ModlModelFileBundle>?GatherModelFileBundles( bool assert) { var battalionWarsRom = DirectoryConstants.ROMS_DIRECTORY.TryToGetExistingFile( "battalion_wars_1.gcm"); if (battalionWarsRom == null) { return(null); } var options = GcnFileHierarchyExtractor.Options.Standard(); var fileHierarchy = new GcnFileHierarchyExtractor().ExtractFromRom( options, battalionWarsRom); foreach (var directory in fileHierarchy) { var didUpdate = false; var resFiles = directory.FilesWithExtension(".res"); foreach (var resFile in resFiles) { didUpdate |= new ResDump().Run(resFile); } if (didUpdate) { directory.Refresh(); } } return(new FileHierarchyBundler <ModlModelFileBundle>( directory => { var modlFiles = directory.FilesWithExtension(".modl"); var animFiles = directory.FilesWithExtension(".anim"); var svetModlFile = modlFiles.Where(modlFile => modlFile.NameWithoutExtension is "SVET"); var sgruntModlFile = modlFiles.Where(modlFile => modlFile.NameWithoutExtension is "SGRUNT"); var tvetModlFile = modlFiles.Where(modlFile => modlFile.NameWithoutExtension is "TVET"); var tgruntModlFile = modlFiles.Where(modlFile => modlFile.NameWithoutExtension is "TGRUNT"); var uvetModlFile = modlFiles.Where(modlFile => modlFile.NameWithoutExtension is "UVET"); var ugruntModlFile = modlFiles.Where(modlFile => modlFile.NameWithoutExtension is "UGRUNT"); var wvetModlFile = modlFiles.Where(modlFile => modlFile.NameWithoutExtension is "WVET"); var wgruntModlFile = modlFiles.Where(modlFile => modlFile.NameWithoutExtension is "WGRUNT"); var xvetModlFile = modlFiles.Where(modlFile => modlFile.NameWithoutExtension is "XVET"); var xgruntModlFile = modlFiles.Where(modlFile => modlFile.NameWithoutExtension is "XGRUNT"); var fvAnimFiles = animFiles.Where( animFile => animFile.NameWithoutExtension.StartsWith("FV")) .ToArray(); var fgAnimFiles = animFiles.Where( animFile => animFile.NameWithoutExtension.StartsWith("FG")) .ToArray(); var sgAnimFiles = animFiles.Where( animFile => animFile.NameWithoutExtension.StartsWith( "SG")) .ToArray(); var uvAnimFiles = animFiles.Where( animFile => animFile.NameWithoutExtension.StartsWith( "UV")) .ToArray(); var wgruntAnimFiles = animFiles.Where( animFile => animFile.NameWithoutExtension.StartsWith( "WGRUNT")) .ToArray(); var xgAnimFiles = animFiles.Where( animFile => animFile.NameWithoutExtension.StartsWith( "XG")) .ToArray(); var xvAnimFiles = animFiles.Where( animFile => animFile.NameWithoutExtension.StartsWith( "XV")) .ToArray(); var otherModlFiles = modlFiles.Where( modlFile => !sgruntModlFile.Contains(modlFile) && !svetModlFile.Contains(modlFile) && !tgruntModlFile.Contains(modlFile) && !tvetModlFile.Contains(modlFile) && !ugruntModlFile.Contains(modlFile) && !uvetModlFile.Contains(modlFile) && !wgruntModlFile.Contains(modlFile) && !wvetModlFile.Contains(modlFile) && !xgruntModlFile.Contains(modlFile) && !xvetModlFile.Contains(modlFile) ) .ToArray(); var allModlsAndAnims = new (IEnumerable <IFileHierarchyFile>, IList <IFileHierarchyFile>? ) [] { (sgruntModlFile, fgAnimFiles.Concat(sgAnimFiles).ToArray()), (svetModlFile, fvAnimFiles), (tgruntModlFile, fgAnimFiles), (tvetModlFile, fvAnimFiles), (ugruntModlFile, fgAnimFiles), (uvetModlFile, fvAnimFiles.Concat(uvAnimFiles).ToArray()), (wgruntModlFile, fgAnimFiles.Concat(wgruntAnimFiles).ToArray()), (wvetModlFile, fvAnimFiles), (xgruntModlFile, fgAnimFiles.Concat(xgAnimFiles).ToArray()), (xvetModlFile, fvAnimFiles.Concat(xvAnimFiles).ToArray()), (otherModlFiles, null), }; var bundles = allModlsAndAnims .SelectMany( modlsAndAnims => modlsAndAnims .Item1 .Select( modlFile => new ModlModelFileBundle { ModlFile = modlFile, ModlType = ModlType.BW1, AnimFiles = modlsAndAnims.Item2 })) .ToList(); bundles.Sort((lhs, rhs) => lhs.MainFile.Name.CompareTo(rhs.MainFile.Name)); return bundles; }
public void ExtractAll() { var windWakerRom = DirectoryConstants.ROMS_DIRECTORY.GetExistingFile( "wind_waker.gcm"); var options = GcnFileHierarchyExtractor.Options.Standard(); var fileHierarchy = new GcnFileHierarchyExtractor() .ExtractFromRom(options, windWakerRom); var objectDirectory = fileHierarchy.Root.TryToGetSubdir(@"res\Object"); { var yaz0Dec = new Yaz0Dec(); var didDecompress = false; foreach (var arcFile in objectDirectory.FilesWithExtension(".arc")) { didDecompress |= yaz0Dec.Run(arcFile, true); } if (didDecompress) { objectDirectory.Refresh(); } var rarcDump = new RarcDump(); var didDump = false; foreach (var rarcFile in objectDirectory.FilesWithExtension(".rarc")) { didDump |= rarcDump.Run(rarcFile, true, new HashSet <string>(new[] { "archive" })); } if (didDump) { objectDirectory.Refresh(true); } } this.ExtractObjects_(objectDirectory); /*{ * var relsDirectory = fileHierarchy.Root.TryToGetSubdir("rels"); * var mapFiles = fileHierarchy.Root.TryToGetSubdir("maps").Files; * * var yaz0Dec = new Yaz0Dec(); * var didDecompress = false; * foreach (var relFile in relsDirectory.FilesWithExtension(".rel")) { * didDecompress |= yaz0Dec.Run(relFile, false); * } * * if (didDecompress) { * relsDirectory.Refresh(); * } * * var didDump = false; * var relDump = new RelDump(); * foreach (var rarcFile in relsDirectory.FilesWithExtension(".rarc")) { * var mapFile = mapFiles.Single( * file => file.NameWithoutExtension == * rarcFile.NameWithoutExtension); * * didDump |= relDump.Run(rarcFile, mapFile, true); * } * * if (didDump) { * relsDirectory.Refresh(true); * } * }*/ }