Главная » Статьи » Эмуляция

Трудовые будни риппера

Может показаться, что ничего сложного в риппинге нет. Действительно, просто музыку и видео удалить, что здесь может быть сложного? На самом деле всё далеко не так просто и сейчас мы разберёмся почему.

Прежде всего необходимо научиться различать "тяжёлые" файлы на диске, которые потенциально можно удалить. И это довольно нетривиальная задача. Мы привыкли к тому, что MP3 это музыка, а PNG - картинки. Здесь такая прямолинейность действует далеко не всегда. Как правило, можно найти  музыку в форматах XA или RAW, видео в формате STR и всяческие пустые файлы, которые никак не используются игрой, оставленные нерадивыми разработчиками, названные DUM.STR или DUMMY.XA.

Однако, они же нередко переименовывали известные форматы, а то и вовсе использовали свои собственные, поэтому на этом шаге неплохо помогает накопленный опыт, интуиция, ну и простейшие эксперименты с заменой определённых файлов. Впрочем, мы к этому ещё вернёмся.

В теории, достаточно удалить эти файлы и игра предстанет перед вами в своём реальном весе. Например, если вы откроете образ Ridge Racer, удалите все тяжелые звуковые файлы, а потом сохраните новый образ, его размер составит где-то 3МБ и он прекрасно запустится на всех эмуляторах. Но так просто всё заканчивается в единичных случаях.

Враг номер 0: пустышки

Пустышки или dummy файлы - это файлы, которые совершенно не используются игрой и находятся на диске лишь для того, чтобы забить лишнее пространство диска. В некоторых случаях, этому есть логичное объяснение. Например, из-за особенностей привода PS1, попытки чтения в начале и в конце диска нередко приводят к промаху считывающей головки и вылету за пределы области считывания. А боролись с этим очень просто. Записывали в начало пустой файл размером 27МБ. Таким образом во время чтения привод не будет ничего читать из проблемной области. Возможно это было рекомендацией самой Sony, поскольку этот файл можно встретить во многих играх. Но раз уж мы рипы делаем для эмуляторов, подобный хардварный хак нам ни к чему.

А вот знаменитый файл ZBSPTREE.WAD из Crash Bandicoot, который весит более 300МБ, действительно лежит просто так на диске. В этом признался один из разработчиков. То есть, при удалении этого файла игра остаётся фактически полной, но при этом весит в 2 раза меньше.

Ещё одним примером могут служить фоновые изображения персонажей размера 800x600 в формате BMP на диске Dead or Alive. Сложно сказать, используются ли эти файлы игрой, но даже если используются, геймплей от их удаления не теряет ничего, а вот объём рипа уменьшается значительно.

А особенно курьёзный случай произошёл с игрой Bloody Roar 4 на PS2. На диске с игрой можно обнаружить 4 одинаковых файла размером в 160МБ. Если распаковать любой из них обычным архиватором, вы получите полноценный установщик RenderWare PS2 SDK - это фактически код движка, который разработчики использовали для создания игры. Вряд ли они получали лицензию на такое безобразие.

В общем, пустышкой может оказаться любой файл. Зачастую, пустышки либо содержат нули, либо забиты какой-то строкой, повторяющейся до конца файла - так сказать, послание от разработчиков. К сожалению, не могу вспомнить конкретных примеров, но минимум два раза встречал такое. А в одном из них даже было стихотворение (кажется в каком-то из Spyro). Также пустой файл может быть забит мусором - случайными данными, какой-то последовательностью чисел или вовсе настоящими файлами, только не имеющими никакого отношения к игре (как в примере с BR4). Забегая вперёд, при невозможности удалить такой файл с диска, его обязательно нужно затереть нулями, чтобы архиватор смог лучше сжать такой образ. Делается это с помощью CDMage.

Враг номер 1: фиксированные смещения

Любая игра на PS1 - это программа, которая может считывать другие файлы на диске. На PS1 жёстких дисков ещё не было, поэтому единственный источник информации - это CDROM. Стоит вспомнить, что ROM расшифровывается как Read Only Memory, то есть память только для чтения. Это значит, что записав файлы игры на диск единожды, они всегда будут находится в определённом месте на диске.

Во времена PS1 активно велись рассуждения о том, что ресурс привода приставки ограничен и игры, которые используют поиск файла по имени значительно его изнашивают. Это сегодня мы знаем, что приставки замечательно кушают записанные абы как образы и работают уже два десятка лет, а тогда многие разработчики всерьёз задумывались над этим, что приводило к различным оптимизациям.

Одним из популярных способов является карта диска, в которой было размечено расположение всех файлов. Руководствуясь этой картой, игра могла сразу прыгнуть на указанное смещение, вместо того, чтобы прокручивать диск в поисках файла. А теперь подумаем, что произойдёт, если мы изменим порядок файлов или их размеры? Старые смещения будут указывать не на начало требуемого файла, а на середину другого или вообще в пустоту, то есть вместо необходимой информации мы прочитаем какой-то мусор.

Как правило, карта диска вшивалась в исполняемый файл, поэтому значительно рипнуть такую игру можно лишь составив новую карту диска, исправив все смещения в исполняемом файле и перестроив диск по новым "правилам".

К сожалению такая работа слишком муторна, поэтому с такими образами ограничиваются применением PocketISO. Эта программа просто заменяет музыку и видео на пустые шаблонные файлы, при этом сохраняя разметку как она есть. То есть может получится так, что посередине диска у вас останется 500МБ нулей. Конечно, при сжатии они исчезнут, превратившись в 10МБ архив, но вот в распакованном виде рип будет весить как оригинальный диск.

Интересный компромиссный вариант нашли разработчики игр Pandemonium. В этих играх карта смещений записана в отдельном файле и если он присутствует, игра читает всё по смещениям, а если нет, происходит поиск по имени файла. Одна из тех редких игр, в которых можно встретить адекватную проверку на наличие файла на диске. В случае с Pandemonium для перестройки образа оказалось достаточным как раз удалить этот файл со смещениями.

Подвидом карты смещений можно также считать запаковку всего звука и видео на диске в один большой файл, как в Parasite Eve 2 или Tekken 3. Здесь действуют примерно те же правила - в исполняемом файле указаны смещения внутри этого большого файла, откуда игра должна считать данные. Если этот файл заменить на пустышку, игра всё равно продолжит ссылаться туда, где был оригинальный кусок данных, что приведёт к зависанию. Обычно это тяжёлый случай, который лечится только с помощью PocketISO.

Враг номер 2: отсутствие проверок на наличие файла

Вернёмся к CDROM. На компьютере с файлами игры может случится что угодно, поэтому в любой грамотно написанной игре имеется миллиард проверок, которые позволяют запустить игру, даже если часть файлов отсутствует. Расчёт разработчиков в случае PS1 заключался в том, что данные на диске монолитны и никому никогда не придёт в голову их менять. То есть программист приказывает программе открыть файл на диске, будучи уверенным, что он там будет всегда. А если его удалить, приставка в большинстве случаев будет бесконечно продолжать тщетные поиски, ведь других вариантов решения этой проблемы не предусмотрено.

Так вот, когда мы удаляем файл из такой игры, приставка впадает в ступор. Лечится такое подменой оригинальных файлов более миниатюрными. В случае со звуком достаточно создать пустой текстовый файл и заменить любой XA файл. А вот с видео могут быть варианты в зависимости от способа подачи видео.

Если игра как-то проверяет имеющийся видео ролик на соответствие формату, то достаточно провернуть те же действия, что и со звуком. То есть игра увидит, что файл есть, но поскольку проиграть его она не может, то он будет пропущен. Однако это единичный случай. В интернете имеются несколько коротких STR роликов, которые состоят из одного чёрного кадра, либо из крутящейся стрелочки. Можно попробовать заменить оригинальные видео на один из них. Но в большинстве случаев, опять-таки, игра не признает в этих файлах нужный формат и попросту зависнет. В итоге мы снова возвращаемся к PocketISO.

PocketISO - студентка, комсомолка, спортсменка...

PocketISO не просто меняет видео файлы на заранее подготовленные, а ещё и конвертирует их в исходный для игры формат, поэтому полноэкранные ролики будут показываться на весь экран, а узкие с полосами останутся посреди экрана. В таком случае после прогона образа в PocketISO мы получим рабочий образ со стрелочками вместо видео, но оригинального размера.

Но ведь нас не совсем устраивает рип размером 700МБ, поэтому расчехляем наши хекс редакторы и объявляем бой этому образу. Один из способов уменьшения размера заключается в том, что мы заменяем все видоролики на диске на тот, который получился самым коротким. Всё равно у нас везде стрелочка. Более того, короткий ролик может оказаться недостаточно коротким, поэтому открываем его в любом hex редакторе и обрезаем до 700кб (поскольку это реальный размер видео со стрелочкой), а после этого заменяем все остальные ролики на диске. В итоге все файлы формально на месте, функционал тот же, но ролики заменены на "стрелочку" и весит это дело раз в 30 меньше.

Когда вы освоитесь в риппинге, можете пробовать искать все упоминания STR файлов в игровых ресурсах и заменить их на DUMMY.STR, предварительно поместив файл с таким именем на диск. Таким образом код игры всегда будет вызывать один и тот же файл. В случае с десятками файлов экономия может составить десятки мегабайт (700кб помноженное на количество файлов).

А самое ужасное в том, что есть образы, которые заставляют PocketISO зависать и умирать при попытках создания рипа. В таких случах не остаётся ничего, кроме как отложить игру в сторону. Ну или лезть в самые дебри низкоуровнего программирования.

Красноглазые хакеры

Несмотря на мой достаточно большой опыт в риппинге, некоторые способы риппинга остаются вне моей компетенции. В частности, есть некоторые хакнутые образы, которые весят 10мб и замечательно запускаются на эмуляторах, а если попытаться такой образ перестроить, то он внезапно будет весить 700мб. Для меня этот способ остаётся загадкой. (На самом деле разгадка кроется в секторном строении образа диска и способа хранения файлов в нём. Если разработчик поместил все необходимые игровые ресурсы в начало диска, а музыку поместил после них, то после замены звука на пустышки, их можно запросто "откусить". Таким образом физически секторов как бы нет, но любая программа восстановит их в виде пустых секторов. Отсюда и оригинальный размер при сохранении.)

Также я никогда не игрался с картой смещений, поскольку это слишком муторно. Но по сути, это способ, которым пользовались все пиратские переводчики 90-ых, когда им нужно было изменить размеры файлов, либо запихать несколько игр на один диск. (Спустя годы я таки смог это провернуть для некоторых игр, например Logo Racers и Red Asphalt, но это действительно очень муторно!)

В частности, можно вспомнить популярный образ Spyro 3в1. Игры от Insomniac это яркий пример применения всевозможных защит, вплоть до генерации искусственных багов (знаменитое отсутствующее яйцо в третьем спайро). Если попытаться перестроить образ игры без низкоуровневых правок исполняемого файла, она перестанет работать. Но образ Spyro 3в1 есть и он прекрасно работает, не считая того, что перевод там отвратный.

Мой алгоритм риппинга игр таков:
1. Открыть образ в редакторе и сохранить его под другим именем. Так он перестраивается, сбивая смещения файлов.
2. Запустить новый образ в эмуляторе.

Если не запустилась: 3. Прогнать образ в PocketISO и забыть
Если запустилась: 3. Удалить из образа все XA/RAW/STR/DUMMY файлы, сохранить, запустить.

Если запустилась: 4. Сохранить полученный образ.
Если не запустилась: 4. Заменить удалённые ранее файлы на пустые или шаблонные. Здесь может потребоваться довольно много времени на поиск рабочей комбинации, если она есть.

Если нашли такую комбинацию: 5. Сохранить полученный образ.
Если не нашли: 5. Прогоняем образ в pocketISO и проделываем процедуру с hex редактором, описанную до алгоритма.

К сожалению, часть игр по этому алгоритму не удаётся рипнуть. Иногда дело касается каких-то проприетарных форматов звука и видео (Warcraft 2, Diablo), иногда огромный файл данных плохо сжимается (Crash Team Racing), а ещё бывают случаи, когда даже PocketISO оказывается бессилен (Vanishing Point).Тогда дело заканчивается либо полным отказом от рипа, либо большим размером в 30-90мб (а то и больше).

Сжатие приставочных игр - довольно забавный челлендж, сродни ачивкам в современных играх. Приятно сжать образ сильнее, чем тот, который ты скачал в интернете. Приятно сжать игру до 2мб, рипа которой вообще никогда не было в интернете. Ещё приятнее вернутся к игре, которую ты уже раньше сжимал и вдруг понять, что на самом деле сжать можно намного сильнее. Попробуйте и вы, может у кого-то из вас получится ещё лучше, ведь нет предела совершенству! Играйте, рипайте и не забывайте старые игры!

UltraTaber, специально для psx-games.ucoz.ru
Использование материала без указания ссылки на источник запрещено!

Категория: Эмуляция | Добавил: UltraTaber (04.01.2015) | Автор: UltraTaber
Просмотров: 2347 | Комментарии: 14 | Рейтинг: 5.0/1
Всего комментариев: 14
avatar
Drapon 21.01.2015 18:23
Наверно что то не так делаю, все время не читаемый файл получается.Единственное прогнал Tear Ring Saga и уменьшил его но все равно вес конский 63 мб, ничего не удалять из него, так и не понял как он у меня получился рабочим, Панзер Дженерал мучал выдрал видео но опять тот же нечитаемый в итоге.Назрел вопрос, файл который рипуем в каком формате должен быть? Исо, бин? Надо ли после того как прогнал через Покет Исо переименовать то что получилось?
0 ОТВЕТИТЬ
avatar
UltraTaber 21.01.2015 19:44
не знаю, прогнал сейчас panzer general в pocketiso, всё замечательно работает. ничего переименовывать не нужно. я всегда с bin работаю.
0 ОТВЕТИТЬ
avatar
Drapon 21.01.2015 19:59
и сколько образ весит после
0 ОТВЕТИТЬ
avatar
UltraTaber 21.01.2015 20:23
образ после pocketiso должен весить ровно столько же, сколько и оригинальный - в этом его суть. если пройтись по нему cosi и ужать в 7z то получится 23мб.
0 ОТВЕТИТЬ
avatar
Drapon 21.01.2015 20:33
коси не вариант для андройдов они рипы и качают
0 ОТВЕТИТЬ
avatar
UltraTaber 21.01.2015 20:48
ну а мне что теперь делать, pocketiso + cosi это связка для игр, которые иначе вообще никак не рипаются. чтобы поиграть например в резидентов или спайро, тебе всё равно придётся 600мб тащить на флэшку. если очень хочется поиграть именно в panzer general, то он замечательно рипается в 30мб простым удалением файлов.
0 ОТВЕТИТЬ
avatar
Drapon 21.01.2015 21:09
так я и такудалтл но этот бин з не как не упаковывается выбираю бин з и анкомпрессед процесс проходит но почему то все равно бин з
0 ОТВЕТИТЬ
avatar
UltraTaber 21.01.2015 23:49
bin сохраняется с оригинальным именем. перед декомпрессией можешь удалить оригинальный образ, появится новый bin со старым именем.
0 ОТВЕТИТЬ
avatar
Drapon 18.01.2015 22:40
После обработки нажимаю ункомпрессед но все равно бин з и тайбл только уже 2 одинаковых файла.Есть может какая другая программа с более широким функционалом?
0 ОТВЕТИТЬ
avatar
UltraTaber 18.01.2015 23:26
оригинальный образ -> Process ISO -> bin.z/table
bin.z/table -> Uncompress ISO -> оригинальный  несжатый образ без музыки и видео
после uncompress bin.z/table удаляются за ненадобностью.

утилит с кнопкой "сделай мне рип 1МБ асалай масалай" к величайшему сожалению нет.
0 ОТВЕТИТЬ
avatar
Drapon 18.01.2015 16:10
Может я что то неправильно делаю? Обработанные исошки в каком то Z и винрар и 7зип их не открывают+ постоянно какой то файл Table появляется.В Pocket ISO нет возможности выбрать формат в каком конечный файл будет?
0 ОТВЕТИТЬ
avatar
UltraTaber 18.01.2015 18:31
PocketISO - это всё-таки не волшебная палочка. bin.z/bin.z.table - это собственный формат образа, который другие архиваторы не понимают (да и не должны, в общем-то). Сначала нужно получить обратно bin образ с помощью кнопки Uncompress ISO, а потом можно использовать другой компрессор и/или архиватор на свой выбор.
0 ОТВЕТИТЬ
avatar
Drapon 14.01.2015 09:50
А возможно такое что сделал рип и проверил и игра работает но где нибудь в середине например намертво виснет?Это к тому что не станешь же каждый рип проверять полностью проходя игру
0 ОТВЕТИТЬ
avatar
UltraTaber 15.01.2015 19:18
Вообще говоря может. Яркий тому пример - Tekken 3. Если удалить единственный XA файл, игра будет виснуть при попытке воспроизвести титры после прохождения аркады. Но в общем, в проблемных играх проблемы начинаются с самого начала, поэтому вероятность того, что она запустится и поиграется, но потом зависнет на поздних этапах довольно низкая.
0 ОТВЕТИТЬ
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Категории

Эмуляция [15]
Статьи по эмуляции.
Прочие статьи [7]
Прочие статьи.
Русификация игр [1]
Статьи по русификации игр для PSX
Приставка [8]

Авторизация

Чат


Опрос

Как Вы оцениваете наш проект?
Всего ответов: 345

Статистика


Посетителей на сайте: 1
Гостей: 1
Пользователей: 0