Данная утилита (а точнее скрипт) писалась в первую очередь для себя, но по мере добавления новых фич решил поделиться ей и с народом, поскольку чего-то похожего я лично ещё не встречал. Утилита призвана разрешить бардак, творящийся внутри архивов объединённых ром-сэтов от Cowering'a (GoodTools), а также более-менее рассортировать игры по категориям и подружить архивы с ром-менеджерами. Работает с любыми скачанными с торрентов коллекциями, объединёнными GoodMerge'м в 7z или zip архивы. На данный момент поддерживаются 4 платформы - NES, SNES, Sega MegaDrive и MasterSystem.
Что делает утилита:1) Сканирует имеющиеся архивы, достаёт из архива той или иной игры все ромы, парсит их тэги и сортирует ромы того или иного вида по подпапкам (хаки, бета-версии, плохие и пиратские дампы, и т.д.). Используя файл настроек, можно отключать ромы того или иного типа, таким образом оставляя только то, что вам нужно. Если игра сама по себе является хаком или прототипом, программой делаются нужные поправки.
2) Отбирает "лучшую" версию игры и лучший перевод (если есть). Эти файлы помещаются в "корень" сортировки. Как правило, лучшей считается чистая версия официального региона (чаще - USA) с правильным именем и наиболее свежей ревизии без хаков, фиксов и прочего. Если игра пиратская, то также ищется наиболее чистая. Аналогично работает и поиск перевода, а в файле настроек утилиты задаются языки (и их приоритет), участвующие в поиске (по умолчанию - русский и английский).
3) В таком виде - с подпапками и избранными версиями ромы пакуются обратно в архив, - таким образом мы получаем удобные и читабельные версии каждой игры без необходимости рыться в куче хлама. Это также лечит совместимость с фронтэндами типа Retroarch, Hyperspin и mGalaxy, где первым в гудовских арихвах всегда видится первый ром (в нашем случае первым всегда является лучший отобранный ром). Кроме того, приоритетные ромы достаются из архива намного быстрее (особенно если архив содержит множество хаков).
4) На основе анализа ромов утилита также производит сортировку всех архивов по папкам. Оставляя в общей папке только официальные игры, программа отделяет в подпапки файлы Bios-ов, пиратские игры, прототипы, многоигровки, азиатские игры без переводов и пр. пр.
5) Помимо этого утилита может исправлять имена архивов для соответствия оригинальному (либо наиболее популярному) названию игры или заменять азиатские названия на распространённые английские, если игра на английском или имеет неофициальный перевод.
6) [Work in progress] Если ром-сэт не запакован в архивы, то утилита автоматически запускает нужную Good-утилиту для предварительной коррекции названий ромов, после чего используя внутреннюю базу данных (аналог GoodMerge XMDB), объединяет их в подгруппы по играм и пакует как уже сказано в пунктах 1-4.
Как пользоваться:1) Скачиваете (если ещё нет) с торрентов любой заархивированный ром-сэт из серии GoodNES, GoodSNES, GoodGen и GoodSMS, желательно наиболее свежих версий.
2)
Редактируете под собственные нужды файл "Settings.ini" - на каждый параметр там приводится описание, поэтому запутаться сложно. Если всё же не уверены, что делать, то можно просто оставить его как есть - на мой взгляд, подобраны наиболее удобные настройки. Уже не нужно при работе с GUI-оболочкой.
3) Редактируете при желании белые списки (базы данных по ромам). Что это такое, я расскажу позже (если заинтересует), к тому же внутри каждого файла имеется базовое описание и примеры, а синтаксис достаточно прост. Данные файлы расположены в папке Overrides/ и содержат различные исключения и поправки к алгоритмам сортировки.
4) Запускаете утилиту (GoodSorterGUI.exe) и указываете ей путь ко всему ром-сэту, производите предпочтительную настройку и ждёте окончания работы. Крайне желательно иметь в папке наиболее полный ром-сэт для повышения точности результатов.
Недостатки:* У меня не было времени на детальный разбор ромсэта GoodSNES, поэтому сейчас на нём работают в основном базовые алгоритмы сортировки. В ближайшее время это будет исправлено.
* Утилита написана в формате сценария для командной строки, поэтому работает относительно медленно и имеет тенденцию к снижению скорости по мере приближения к концу. Так, полная работа с ром-сэтом GoodSMS занимает у меня 3 минуты, GoodGen - 10 минут, GoodNES - 20 минут, GoodSNES - около 2 часов.
* Утилита правильно работает
только с NES, SNES, Genesis и SMS - другие платформы добавлены не будут либо будут позже.
Что будет сделано в будущем:1) Поддержка GBA и Nintendo 64.
2) [Сделано для Genesis и SMS!] Работа с "сырыми" ром-сэтами (незапакованными и необъединёнными), включая портирование всех XMDB-баз данных. Это превратит скрипт в расширенный и полностью автономный аналог GoodMerge.
Предупреждения:* Если в окне скрипта вы видите ошибки, он не работает как надо, или его работа прерывается - это значит, что в вашей ОС имеются проблемы с обработчиком сценариев либо учётная запись имеет ограничения по работе с командной строкой. Все подобные ошибки с моей стороны исключены, так что претензий просьба не предъявлять.
* О прочих ошибках и пожеланиях пишите в эту тему. Утилита будет периодически обновляться, а также пополняться базы данных ради улучшения результатов.
# Пользовательские настройки GoodMerge RomSets Sorter & Packer
# Если вы не уверены, что и как работает, не изменяйте их самостоятельно!
[ModeSetup]
RomsetPlatform=Auto
PackMode=RebuildArchives
SortByCategories=Yes
UseDatabases=Yes
FixRomsWithGoodTools=Yes
ActionOnFinish=DoNothing
VerboseInfo=No
# "RomsetPlatform" - платформа ромсэта. Позволяет обрабатывать специальные правила для платформ, а также применять исправления с помощью GoodTools.
# - Сейчас поддерживаются следующие приставки (значения параметра): NES, SNES, SMS, GEN. Параметр необязателен, но настоятельно рекомендуется для повышения точности сортировок.
# - Значение "Auto" позволяет обнаруживать платформу автоматически на основе расширений файлов вашего ром-сэта.
#
# "PackMode" - режим работы. Поддерживаемые значения:
# - RebuildArchives: распаковывает имеющиеся .zip/.7z-архивы ром-сэта в подпапки, выполняет сортировку и коррекцию, и затем запаковывает архивы обратно (в .7z).
# - SortAndPackDirs: выполняет сортировку и коррекцию предварительно распакованных вручную архивов (каждый архив в свою подпапку), после чего пакует папки в архивы.
# - PackFoldersOnly: отключает этапы сортировки/коррекций, и просто пакует имеющиеся подпапки с ромами в архивы (полезно, если корректируете что-то вручную).
#
# "SortByCategories" включает помимо сортировки ромов внутри архива сортировку самих архивов по папкам-категориям (Pirate Games, Bios Files, Prototypes, и т.д.).
# - Если включена обработка базы данных (а также CorrectGamesCategories=Yes), то при сортировке будут также применяться поправки из этой базы где это необходимо.
#
# "UseDatabases" - разрешает обработку особых правил, определённых для платформ в файлах "Overrides\<Скрипт>.cmd" (редактируются вручную текстовым редактором).
# - Файлы Overrides\*Script*.cmd включают в себя ручные поправки к сортировке определённых ромов (частные случаи, ошибки...), белые списки ромов для категорий, списки ромов требующих коррекции названий.
# - Если вы не уверены, как правильно редактировать данные файлы, рекомендуется оставить всё как есть (файлы уже заполнены) - в противном случае вы рискуете испортить ром-сэт и даже нарушить работу ПК!
#
# "FixRomsWithGoodTools" - запускать для ромов каждой игры в выбранной платформе утилиту GoodXXX.exe для корректировки названий и расширений и отфильтровывания мусора.
# - Опция необязательна и немного замедляет работу. Если вы не задали желаемую платформу в "RomsetPlatform" (либо значение некорректно), утилиты запускаться не будут.
#
# "ActionOnFinish" - что делать с системой по окончании работы. Sleep - перевести в спящий режим; PowerOff - полностью отключить ПК; DoNothing - ничего не делать.
# "VerboseInfo" - выводит на экран информацию о текущей стадии работы скрипта (полезно при отладке).
[ArchiveSettings]
KeepTrash=No
KeepPirateCopies=No
KeepTranslations=No
KeepBetas=Yes
KeepHacks=Yes
KeepRomFixes=Yes
KeepGameVersions=Yes
KeepGameClones=Yes
# Настройки сортировки папок в архивах:
# - KeepTrash - оставлять мусор, дублирующий основное содержимое: плохие дампы, овердампы, фиксы копиров, устаревшие переводы. Не рекомендуется.
# - KeepPirateCopies - оставлять помимо клонов пиратские дампы игр (файлы с тэгом [p] в папке Versions/Pirate). В основном это бесполезные копии с потёртыми копирайтами, поэтому опция нежелательна.
# - KeepTranslations - оставлять все версии с неофициальными переводами на чужих языках (папка Translations). При отключении сохраняются только переводы на языках из "FaveLangsOrder" (см. ниже).
# - KeepBetas - оставлять неизданные альфа-, бета- и демо-версии игр, если они имеются (папка Pre-Releases). Если игра является прототипом или бетой сама по себе, то она не удаляется.
# - KeepHacks - оставлять пиратские и юзерские хаки игр - как явные (*Hack) так и неявные, с тэгом [h] (папка Hacks).
# - KeepRomFixes - оставлять специальные исправления для эмуляторов и самих ромов (ромы с [f] в папке Rom Fixes). Полезно для плохо-эмулируемых неофициальных игр.
# - KeepGameVersions - оставлять региональные версии ромов при их наличии. В подпапку Versions/Pirate также попадают пиратские версии и клоны, если включено.
# - KeepGameClones - если игра издавалась в нелицензируемом регионе или имеет пиратские дампы под другими именами, то данный параметр сохранит их в папке Versions/Pirate.
[DatabaseSettings]
CorrectRomsOrderInArchive=Yes
CorrectGamesCategories=Yes
SeparateUntranslatedGames=Yes
SplitMulticartsToArchives=Yes
[RenameRomsSettings]
SelectBestRegionVersion=Yes
FixGoodToolsAndXmDbErrors=Yes
TranslateAsianGameTitles=Yes
TranslateIntoCustomNames=Yes
# "DatabaseSettings" - обработка особых правил, определённых для платформ в файлах "Overrides\<Скрипт>.cmd" (редактируется вручную блокнотом). Поддерживаемые параметры:
# - CorrectRomsOrderInArchive: исправлять порядок сортировки ромов внутри архива в случае, если это необходимо для конкретной игры. Списки и правила задаются в "In-Archive Sorting Overrides.cmd".
# - CorrectGamesCategories: принудительно сортировать архивы определённых игр в заданные для них подпапки категорий. Списки задаются в "Game's Category Overrides.cmd".
# - SelectBestRegionVersion: использовать для названия игры тот регион (вместо приоритета U>E>J>*), по которому игра наиболее известна или выходила в нём изначально (исключая японские заголовки). Задаётся в "Game's Naming Overrides.cmd".
# - FixGoodToolsAndXmDbErrors: исправлять имена некоторых ромов на правильные (т.к. названия игр в Good-сэтах могут содержать ошибки или неточности). Задаётся в "Game's Naming Overrides.cmd".
# - TranslateAsianGameTitles: если японская и др. неанглийская игра использует английский или перевод, название архива игры будет изменено на известное (официальное) английское для данной игры. Списки задаются в "Game's Naming Overrides.cmd".
# - TranslateIntoCustomNames: аналогично параметру выше, но помимо официальных, в качестве названий берутся также определённые в пользовательском переводе. Если названия вам неизвестны или вы хотите сохранить "чистоту", отключите опцию.
# - SplitMulticartsToArchives: разбивать архив "Multicarts Collection" (в основном для NES) на под-архивы согласно содержимому (например, уникальные игры и хаки, обучающие картриджи..). Списки задаются в "In-Archive Sorting Overrides.cmd".
[TranslationsSettings]
FaveLangsOrder=Rus Eng
FaveZonesOrder=R
# Настройки правил для сортировки переводов:
# "FaveLangsOrder" - список языков переводов игры, первый из которых будет считаться лучшим. Файл с таким переводом будет помещён рядом с оригинальным ромом в корень архива и не будет удалён при KeepTranslations=No.
# "FaveZonesOrder" - имеет то же назначение, что и выше, только для предпочитаемого издания игры (например, (R) для русского, указывается без скобок). Указывать англоязычные регионы не нужно, т.к. они обрабатываются по умолчанию.
[CompressionSettings]
OutputFormat=7z
CompressRootAndDirsSeparately=Yes
EnableSolidCompression=Yes
# Настройки упаковки архивов:
# "OutputFormat" - формат сжатия, поддерживаются "7z" и "zip" (7z рекомендуется). Если эмулятор или ром-менеджер не поддерживает 7z, используйте zip.
# "CompressRootAndDirsSeparately" (только для 7z) - раздельно сжимать файлы в корне архива и подпапки с версиями. Позволяет получить быстрый доступ к основным ромам игры и подсказывать ром-менеджерам "правильный" ром для запуска ценой небольшого (в ~1,5 раза) увеличения размера архива.
# "EnableSolidCompression" (только для 7z) - включить либо полностью отключить непрерывное сжатие файлов в архиве. Отключение ускоряет доступ к файлам архива, но значительно увеличивает его размер (если в архиве более 1 рома), а также делает опцию выше бесполезной.