Автор Тема: [Релиз] GoodSorter - продвинутая альтернатива GoodMerge  (Прочитано 8728 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Psycho-A

  • Пользователь
  • Сообщений: 384
    • Просмотр профиля
Данная утилита (а точнее скрипт) писалась в первую очередь для себя, но по мере добавления новых фич решил поделиться ей и с народом, поскольку чего-то похожего я лично ещё не встречал. Утилита призвана разрешить бардак, творящийся внутри архивов объединённых ром-сэтов от 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.

Предупреждения:
* Если в окне скрипта вы видите ошибки, он не работает как надо, или его работа прерывается - это значит, что в вашей ОС имеются проблемы с обработчиком сценариев либо учётная запись имеет ограничения по работе с командной строкой. Все подобные ошибки с моей стороны исключены, так что претензий просьба не предъявлять.
* О прочих ошибках и пожеланиях пишите в эту тему. Утилита будет периодически обновляться, а также пополняться базы данных ради улучшения результатов.


« Последнее редактирование: 12 Май 2018, 22:29:58 от Psycho-A »

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5040
    • Просмотр профиля
Нужно обрабатывать аргументы командной строки, тогда архив можно просто перетаскивать на скрипт, а также это упрощает интеграцию.
Писать такое в bat-файлах - безумие. Лучше использовать Python или такого рода, это и быстрее, и запустилось бы на других ОСях.
Такая катастрофически низкая скорость возможна ещё из-за медленных алгоритмов. А, там 2ГБ и "Размер всех ромов в распакованном виде 43.6 гигабайт", тогда ОК.

Оффлайн Psycho-A

  • Пользователь
  • Сообщений: 384
    • Просмотр профиля
Sharpnull, можно и добавить, спасибо за идею. Утилита больше писалась для пакетной обработки, поэтому не предусмотрел.
Нет, алгоритмы там максимально оптимизированы (первые версии работали намного медленнее).
Скрипт не распаковывает все ромы сразу, а работает только с текущим архивом, так что нагрузка на диск минимальна. Если при этом надо достать какие-то файлы из другого архива, то это прописано в базах данных.

Оффлайн Psycho-A

  • Пользователь
  • Сообщений: 384
    • Просмотр профиля
Добавлен функционал GoodMerge для GoodSMS и GoodGen.

Помимо этого в планах заменить командный интерфейс и ручную настройку на дружественный GUI.

Оффлайн Psycho-A

  • Пользователь
  • Сообщений: 384
    • Просмотр профиля
Добавлена дружественная GUI-оболочка, где можно указать путь к ром-сэту и настроить все доступные параметры.
Режим работы из командной строки при этом оставлен (на выбор пользователю). Добавлен также drag'n'drop папки ромсэта на bat-файл.
Улучшен контроль ошибок и исправлены некоторые нюансы в алгоритмах сортировки.

Пожалуйста, отписывайтесь о недочётах в этой теме.
При подтверждении успешной работы возможно было бы залить утилиту сюда, в качестве альтернативы.
« Последнее редактирование: 04 Май 2018, 16:18:46 от Psycho-A »

Оффлайн Psycho-A

  • Пользователь
  • Сообщений: 384
    • Просмотр профиля
Версия от 05.08:
Исправлены ошибки удаления пиратских дампов и перемещения переводов.
Интеллектуальное удаление "мусора" (если включено) - теперь мусор с уникальными именами будет оставляться (в нём могут быть интересные ромы).
Начато портирование базы данных XMDB для NES.

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5040
    • Просмотр профиля
GUI на Inno Setup - таких приколов я ещё не видел. :)
--------
Если можете писать на Pascal/Delphi, лучше сделать оболочку например на Lazarus. Просто, быстро и можете перенаправлять вывод консоли в текстовый элемент, а не показывать чёрное окно консоли как сейчас (архива у меня нет, сужу по выбору по умолчанию).
Кстати, у вас есть тестовые архивы по которым вы судите о правильности работы алгоритмов? Без полного покрытия всех опций о надёжности мало что скажешь.
Ну и код можно было бы опубликовать на GitHub или другую площадку, с указанием лицензии.
« Последнее редактирование: 08 Май 2018, 11:36:14 от Sharpnull »

Оффлайн Psycho-A

  • Пользователь
  • Сообщений: 384
    • Просмотр профиля
Sharpnull, на Inno Setup мне написать быстрее (на Pascal/Delphi не пишу, а на C/C++ я кодер достаточно посредственный, и это долго и громоздко), плюс от этой оболочки ничего больше и не требуется ;) Окно консоли в частности оставлено ради сохранения совместимости с консольным режимом работы, который иногда удобнее.

Цитата
Кстати, у вас есть тестовые архивы по которым вы судите о правильности работы алгоритмов? Без полного покрытия всех опций о надёжности мало что скажешь.
У меня есть все поддерживаемые утилитой ром-сэты и GoodTools, и после каждой перепаковки я индивидуально проверяю архивы и в случае недочётов совершенствую алгоритмы. Учитываются все особенности платформ, плюс в отличие от XMDB-баз того же ГудМерджа, мои читабельны как справочник по клонам/хакам/регионам, имеют кое-какие дополнительные фичи, и их можно редактировать и настраивать более гибко.

Цитата
Ну и код можно было бы опубликовать на GitHub или другую площадку, с указанием лицензии.
Мне это пока неинтересно. Если программа будет дописана, пользоваться успехом и работать у всех одинаково, тогда, может быть, и задумаюсь. Но опять же, не вижу смысла, если это пока что лишь батник с прикрученными базами и гуем.

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5040
    • Просмотр профиля
Окно консоли в частности оставлено
Обычно делают чистый GUI с возможностью задавать какие-то параметры для консоли, как GUI для ffmpeg. GUI переходящий в консоль кроме как костылём не назовёшь.
А что у вас с распараллеливанием? Например, в 7zip можно задавать количество потоков при запаковке, только чем их больше, тем больше нужно ОЗУ.

Оффлайн Psycho-A

  • Пользователь
  • Сообщений: 384
    • Просмотр профиля
Sharpnull, пакуется с параметром -mx9 (лучшее сжатие), остальное касаемо сжатия и потоков по умолчанию. Всё-таки у некоторых эмуляторщиков бывают старые машины, на которых подобное приведёт либо к тормозам, либо вылетам. В сущности, время на запаковку каждого рома тратится не такое большое - я бы сказал даже, несопоставимое со временем работы самого парсера и GoodTools'ов. Долго пакуются разве что хаки Супер-марио/Соника и сборники многоигровок.

Кстати, возможно и придумаю что-нибудь с выводом консольного текста прямо в окно оболочки, спасибо за наводку.
« Последнее редактирование: 09 Май 2018, 06:52:04 от Psycho-A »

Оффлайн Psycho-A

  • Пользователь
  • Сообщений: 384
    • Просмотр профиля
Небольшой хотфикс:
Исправлен баг, из-за которого некоторые азиатские игры без перевода не попадали в свою папку.

Оффлайн demigod324

  • Пользователь
  • Сообщений: 1
    • Просмотр профиля
Добрый день! Возможно ли добавить в программу функцию конвертации формата .gen в .bin?

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5040
    • Просмотр профиля
demigod324, gen и bin это один и тот же формат файла, разница только в имени файла. Все нормальные эмуляторы знают про gen и bin. А на счёт вопроса - да, возможно, почему нет.

Оффлайн Psycho-A

  • Пользователь
  • Сообщений: 384
    • Просмотр профиля
demigod324, нет смысла. При сканировании файлов здесь и так запускаются GoodTools, которые приводят имена и расширения всех файлов к правильному виду. По умолчанию для GoodTools используется расширение .gen.

Кстати говоря, скоро будет обновление.

Оффлайн Psycho-A

  • Пользователь
  • Сообщений: 384
    • Просмотр профиля
Народ, который скачал - отпишитесь хоть, как работает у вас программа и что получаете на выходе. Встретили ли баги, и т.д.

Оффлайн JohnDoe_71Rus

  • Пользователь
  • Сообщений: 106
    • Просмотр профиля
[Релиз] GoodSorter - продвинутая альтернатива GoodMerge
« Ответ #15 : 24 Октябрь 2019, 09:22:03 »
да, такие штуки надо писать на какой нить qt  и скриптах. Тогда кроссплатформенность появится.

Оффлайн slider

  • Пользователь
  • Сообщений: 2
    • Просмотр профиля
[Релиз] GoodSorter - продвинутая альтернатива GoodMerge
« Ответ #16 : 27 Октябрь 2019, 22:03:10 »
Народ, который скачал - отпишитесь хоть, как работает у вас программа и что получаете на выходе. Встретили ли баги, и т.д.

Запускал пару раз, вроде работает... правда толком разобраться ещё не успел.
Проект жив или уже мёртв?

Оффлайн JohnDoe_71Rus

  • Пользователь
  • Сообщений: 106
    • Просмотр профиля
[Релиз] GoodSorter - продвинутая альтернатива GoodMerge
« Ответ #17 : 01 Ноябрь 2019, 19:29:01 »
под wine ожидаемо не работает. Проходит все этапы конфигурирования, потом большое окно закрывается и остается маленькое типа ждите окончания работы.

Оффлайн Psycho-A

  • Пользователь
  • Сообщений: 384
    • Просмотр профиля
[Релиз] GoodSorter - продвинутая альтернатива GoodMerge
« Ответ #18 : 27 Ноябрь 2019, 02:55:03 »
JohnDoe_71Rus, нет ничего хуже, чем ради маленькой утилиты тоскать за собой громоздкий фреймворк. Лучше уж написать заново, имея единый код для алгоритмов.
Под Wine кривой CMD-интерпретатор, требующий адаптации кода. Займусь ли этим когда-нибудь - не знаю. Сейчас у меня совсем другие заботы.

slider, жив, но пока в стадии консервации (см. выше). Этим летом, впрочем, переносил его на другой более юзер-френдли GUI и дописывал базу для NES - найти бы время оформить это в юзабельную бетку...

Оффлайн slider

  • Пользователь
  • Сообщений: 2
    • Просмотр профиля
[Релиз] GoodSorter - продвинутая альтернатива GoodMerge
« Ответ #19 : 29 Ноябрь 2019, 10:17:28 »
Psycho-A, ясно. Ну, что ж, подождём. Спешка, никогда, ничего хорошего не сулила.

Оффлайн Vasilekk

  • Пользователь
  • Сообщений: 5
    • Просмотр профиля
[Релиз] GoodSorter - продвинутая альтернатива GoodMerge
« Ответ #20 : 21 Январь 2020, 22:23:04 »
GoodSorter

А можно перезалить скрипт - не скачивается, выдаёт ошибку сети.

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5040
    • Просмотр профиля
[Релиз] GoodSorter - продвинутая альтернатива GoodMerge
« Ответ #21 : 22 Январь 2020, 02:37:08 »
Vasilekk, если вы про GoodSorter-2018.05.12-beta.7z, то он скачивается, может была временная проблема сервера.

Оффлайн Psycho-A

  • Пользователь
  • Сообщений: 384
    • Просмотр профиля
[Релиз] GoodSorter - продвинутая альтернатива GoodMerge
« Ответ #22 : 11 Апрель 2020, 10:41:23 »
Небольшое обновление программы:

Новый удобный интерфейс с подробными подсказками к каждому действию.
Исправлен переход в спящий режим.
Добавлена обработка BIOS, программ и Public Domain в базу GoodSMS.
Исправлены недочёты в YML-базе для GoodNES.
Исправлено переименование ромов с точкой на конце.
Улучшена работа некоторых скриптов.

Реализовано автоопределение хаков в стиле:
%Имя% - * (Hack)
%Имя% by * (Hack)
%Author%'s %Имя% (Hack)
* (%Имя%[без артикля] Hack)
* (%Имя% PRG? Hack)

Таким образом, в базы не нужно прописывть подобный мусор, как в XMDB.
« Последнее редактирование: 11 Апрель 2020, 12:16:21 от Psycho-A »

Оффлайн g00dW1N

  • Пользователь
  • Сообщений: 17
    • Просмотр профиля
Прошу пардону, что не по теме,
никто не подскажет утилиту для создания своей коллекции по заданным критериям? Другими словами - нужна утилита для проверки некоего кол-ва файлов на соответствие внутренней базе.
Если такое нужно писать самому, то не в курсе ли вы каким образом сравниваются файлы в GooTools - размер, хэш, еще что-то?

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5040
    • Просмотр профиля
никто не подскажет утилиту для создания своей коллекции по заданным критериям?
Коллекции чего?
Если такое нужно писать самому, то не в курсе ли вы каким образом сравниваются файлы в GooTools - размер, хэш, еще что-то?
По хешам очевидно, размеры ромов обычно кратны. Неизвестные файлы можно сравнивать на частичное соответствие (Approximate string matching, Fuzzy String Matching in Python) или если названия в точном соответствии со схемой, то простым алгоритмом.
В GoodTools похоже используются CRC32 и SHA-1. Первый короткий, но больше вероятность коллизии хешей, лучше всегда использовать хотя бы пару.
--------
Кстати, у No-Intro сравнение NES игр идёт без заголовков, потому что они могут быть разными или немного отличаться, не знаю как в GoodTools.
« Последнее редактирование: 09 Май 2020, 17:49:24 от Sharpnull »

Оффлайн g00dW1N

  • Пользователь
  • Сообщений: 17
    • Просмотр профиля
Коллекции чего?
Скажем так, образов(разных размеров), речь не о ромах

Спасибо за разъяснения по GoodTools

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5040
    • Просмотр профиля
Скажем так, образов(разных размеров)
Если образы разных форматов и делают их разные люди, то могут быть проблемы.
Например, у дисков для PS1 может быть несколько треков, у redump хеши отдельно для каждого трека. Для PS1 и PS2 есть утилита (называется PS2 что-то там), которую используют как раз вычисления хешей, которые публикуют к образам на psxplanet.ru, например. Кстати, пиратки бывает снимают с ошибками (по контрольным суммам), а иногда ошибки изначально есть на диске.
--------
Написать для себя такую программу несложно. Хранить хеши в отсортированном массиве для двоичного поиска или в ассоциативном массиве, или как там ещё можно. Пройтись по всем файлам и сравнить.
« Последнее редактирование: 09 Май 2020, 19:24:47 от Sharpnull »

Оффлайн free.gen

  • Пользователь
  • Сообщений: 293
  • Пол: Мужской
    • Просмотр профиля
Psycho-A, А в этом скрипте реально как-то настроить сортировку, отдав приоритет PAL играм?
У меня No-Intro сет свежий, из которого хочу взять все PAL игры без повторов, и при этом самые "чистые" версии.

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5040
    • Просмотр профиля
отдав приоритет PAL играм?
В DAT нет информации по PAL/NTSC/Dendy режимам, только регионы. Связь между ними для лицензии есть, но для NES придётся использовать NES 2.0 XML Database или парсить заголовки этого ромсета.
Если нужны регионы, то, видимо, вам нужно в Bin\Platforms.ini значение LegalZonesList:
Цитата
"LegalZonesList" - список региональных кодов в порядке предпочтительности для определения лучшей версии рома, помещаемой в корень архива (помимо этого обрабатывается и наличие кода [!]).
Если хотите Европу, то для NES может сработать изменение "W UE JU U JE E J A F G S Sw I C" на "E UE JE W JU U J A F G S Sw I C". При этом "F G S Sw I" - европейские страны, но там может быть не английский язык, это нужно смотреть настройки языка.
Такие программы нужно постоянно обновлять.

Оффлайн free.gen

  • Пользователь
  • Сообщений: 293
  • Пол: Мужской
    • Просмотр профиля
Sharpnull, прошу прощения, забыл уточнить - у меня ромсет под мегадрайв.