Может показаться, что ничего сложного в риппинге нет. Действительно, просто музыку и видео удалить, что здесь может быть сложного? На самом деле всё далеко не так просто и сейчас мы разберёмся почему.
Прежде всего необходимо научиться различать "тяжёлые" файлы на диске, которые потенциально можно удалить. И это довольно нетривиальная задача. Мы привыкли к тому, что 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
Использование материала без указания ссылки на источник запрещено!