Введение

Модификация видеоигр (или ROM-хакинг) — это процесс изменения образа ROM или ROM-файла видеоигры для изменения графики, диалогов, уровней, игрового процесса и/или других элементов. Обычно это делается технически подкованными фанатами видеоигр, чтобы улучшить старую значимую игру, как творческое хобби или для создания новых, неофициальных игр с использованием движка старой игры. ROM-хакинг может заключаться в переработке игры для нового, увлекательного игрового процесса, сохраняя при этом большинство, если не все элементы прежними, а также в разблокировке/повторном использовании функций, которые присутствовали в коде игры, но не использовались в самой игре. ROM-хакинг обычно выполняется с помощью шестнадцатеричного редактора (программы для редактирования нетекстовых данных) и различных специализированных инструментов, таких как редакторы тайлов и инструменты, специфичные для конкретной игры, которые обычно используются для редактирования уровней, предметов и т. п. Хотя иногда используются и более продвинутые инструменты, такие как ассемблеры и отладчики. Готовые модификации обычно распространяются в Интернете, чтобы другие могли играть в них на эмуляторе или игровой консоли. Фан-перевод (известный как «переводной хакинг» в сообществе ROM-хакеров) является одним из видов ROM-хакинга. Существуют также хаки, снимающие цензуру, которые восстанавливают игру до её первоначального состояния, что часто встречается в старых играх, которые были импортированы, поскольку политика издателей в отношении контента для видеоигр (особенно Nintendo) была гораздо строже в США, чем в Японии или Европе, а также рандомизаторы для определенных игр, которые перемешивают размещение объектов. Хотя многие методы применимы к обоим типам хакинга, эта статья посвящена «творческому хакингу», такому как редактирование уровней игры.

Сообщества

Большинство хакерских групп предоставляют веб-пространство для размещения взломов и скриншотов (иногда только для взломов, выполненных членами группы, и практически любых взломов), форум и часто имеют канал IRC.

Методы

Будучи созданными множеством различных программистов или групп программистов, данные ROM могут быть весьма разнообразными.

Шестигранная редактирование

Шестнадцатеричный редактор – один из самых фундаментальных инструментов в арсенале любого взломщика ROM. Шестнадцатеричные редакторы обычно используются для редактирования текста, а также для редактирования других данных, структура которых известна (например, свойства предметов), и для взлома ассемблера. Редактирование текста – одна из самых базовых форм взлома. Многие игры не хранят текст в формате ASCII, и поэтому были разработаны специализированные шестнадцатеричные редакторы, которым можно указать, какие значения байтов соответствуют каким буквам алфавита, чтобы облегчить редактирование текста; файл, определяющий эти соответствия байт-буква, называется "таблицей" данных. Другие игры используют простые методы сжатия текста (например, кодирование пар байтов, также известное как кодирование двойными тайлами или DTE, при котором определенные комбинации из двух или более букв кодируются одним байтом), редактирование которого может быть упрощено с помощью соответствующим образом оснащенного шестнадцатеричного редактора. Шестнадцатеричный редактор – предпочтительный инструмент для редактирования таких параметров, как свойства персонажей/предметов, если структура и расположение этих данных известны и нет специализированного редактора для данной игры, способного редактировать эту информацию. Некоторые опытные взломщики также выполняют редактирование уровней с помощью шестнадцатеричного редактора, но это крайне сложно (за исключением игр, формат хранения уровней которых тесно соответствует тому, как он представлен в шестнадцатеричном редакторе).

Редактирование графики

Еще одним базовым навыком взлома является графический взлом, который заключается в изменении внешнего вида игровых окружений, персонажей, шрифтов и других подобных элементов. Формат графических данных различается в зависимости от консоли, но большинство ранних (NES, Super NES, Game Boy и т. д.) хранят графику в тайлах – это 8x8 пиксельных блоках данных, которые располагаются на экране для достижения желаемого результата. Редактировать эти тайлы можно и с помощью шестнадцатеричного редактора, но обычно это делается с помощью редактора тайлов (например, Tile Layer или Tile Molester), который позволяет графически отображать данные ROM, находить и редактировать тайлы. Графические взломы могут быть простыми (например, добавление афро Марио или клюшки для гольфа Луиджи), а могут включать в себя "портирование" персонажей из одной игры в другую (например, создание пиксельных спрайтов покемонов поздних поколений в ретро-стиле для использования в играх первого поколения Pokémon), или же масштабные тематические изменения (обычно сопровождаемые изменениями палитры; см. ниже). Более сложные графические взломы подразумевают изменение не только тайлов и цветов, но и способа их расположения или генерации групп тайлов, что обеспечивает большую гибкость и контроль над конечным внешним видом. Это достигается с помощью шестнадцатеричного редактирования или специализированного инструмента (для конкретной игры или системы). Примеры графических взломов включают в себя незаконченный Pokémon Torzach – взлом Pokémon FireRed, который пытался добавить в игру целое новое поколение покемонов и тайлов, и Super Mario Land 2 DX: 6 Golden Coins – полноцветную версию оригинальной игры, которая, помимо прочего, добавила поддержку полного цвета (оригинальная игра была черно-белой), а также исправила проблемы с мерцанием экрана, присутствовавшие в оригинальной версии.

Редактирование палитры

Другая распространенная форма взлома — это взлом палитры, при котором изменяются значения цветов, чтобы изменить цвета, которые видит игрок в игре (это часто сочетается с взломом графики); значения палитры обычно хранятся в шестнадцатеричном формате (Hex). Это относительно просто для игр NES, графика которых использует предопределенный набор цветов, из которых игра делает выбор (используя цветовую палитру на основе YIQ); в этом случае взлом палитры заключается в изменении выбранных цветов. С играми Super NES и Sega Mega Drive/Genesis, а также играми для других систем, ситуация немного сложнее, поскольку они хранят абсолютные значения цвета RGB. Редакторы палитр обычно просты и часто входят в состав редакторов уровней или специализированных графических редакторов для игр.

Редактирование уровня

Один из самых популярных видов взлома ROM — редактирование уровней, которое подразумевает изменение или переработку уровней или карт игры. Это почти всегда выполняется с помощью редактора, специально разработанного для конкретной игры (так называемого редактора уровней). Редактирование уровней может быть выполнено для повышения сложности игры, изменения развития сюжета или просто для внесения новизны в старую игру. В сочетании с масштабным изменением графики игра может приобрести совершенно иной облик и атмосферу.

Редактирование данных

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

Хакерство сборки

Самый мощный и, пожалуй, самый сложный метод взлома — это редактирование исходного кода игры, процесс, известный как ASM-хакинг ("ASM" расшифровывается как "ассемблер", обозначая язык программирования низкого уровня, который непосредственно выполняется центральным процессором).

Музыкальный хакер

Музыкальные модификации относительно редки в большинстве хаков из-за большого разнообразия способов хранения музыкальных данных в играх (отсюда и сложность в поиске и изменении этих данных), а также трудностей в создании новой музыки (или переносе музыки из другой игры). Поскольку взлом музыки встречается нечасто, многие хаки не содержат добавленной портированной или оригинальной музыки. Исключения из этого правила можно найти в самых последних хаках Super Mario World, где пользовательские композиции могут содержать новые инструменты, отсутствующие в оригинальной игре. Другие игры, в которых взлом музыки является частью исследовательского и хакерского сообщества, – это игры NES Mega Man, Final Fantasy VI и игры Mega Drive (Genesis) Sonic the Hedgehog. Поскольку многие игры для Game Boy Advance используют движок M4A (также известный как "Sappy Driver") для музыки, программа SapTapper может использоваться для модификации музыкальных данных Game Boy Advance. Были созданы различные другие утилиты для работы с этим движком, такие как Sappy 2006. Еще один пример использования одного и того же движка в разных играх – Nintendo 64, где большинство игр используют один и тот же формат, однако применяют разные звуковые банки. Утилита N64 Midi Tool была разработана для редактирования последовательностей, используемых большинством игр Nintendo 64, хотя она не поддерживает игры, разработанные самой Nintendo, использующие немного другой движок, например Super Mario 64. Ряд игр Sega Mega Drive/Genesis используют звуковой движок, неофициально известный как "SMPS", который был доступен как в 68k, так и в Z80 версиях. Будучи доминирующим звуковым движком, используемым во многих играх, разработанных в Японии для этой системы, этот движок изучался десятилетиями многими хакерами. На сегодняшний день существует множество инструментов для изменения музыки в играх, использующих движок SMPS (особенно в играх Sonic the Hedgehog), и многие из них были опубликованы в Steam Workshop.

Расширение ROM

Вообще говоря, хакер ROM обычно не может добавлять контент в игру, а лишь изменять существующий. Это ограничение можно преодолеть с помощью расширения ROM, при котором увеличивается общий размер образа ROM, освобождая место для большего количества контента и, как следствие, для более крупной игры. Сложность этого варьируется в зависимости от платформы, для которой была создана игра. Например, расширение ROM для NES может быть затруднительным или даже невозможным из-за используемого в игре чипа памяти (mapper). Например, если чип памяти поддерживает 16 банков ROM, и все они заняты, дальнейшее расширение ROM невозможно без перевода игры на другой чип памяти, что может быть как легко, так и чрезвычайно сложно. С другой стороны, расширение игры для SNES (относительно) простое. Чтобы использовать добавленное пространство, необходимо изменить или переписать части кода игры (см. раздел про Assembly hacking выше), чтобы игра знала, где искать данные. Еще один тип расширения ROM, который достаточно прост в реализации – это ROM для Game Boy Advance. Сами ROM обычно небольшие, но доступный объем памяти иногда в 17 раз превышает их размер.

Распространение

После завершения взлома (или если неполная версия признана подходящей для промежуточного релиза) он публикуется в интернете для других игроков. Общепринятый способ сделать это – создать неофициальный патч (в формате IPS или другом), который можно применить к оригинальной ROM. IPS до сих пор используется для небольших патчей, однако с увеличением размера ROM-файлов этот формат стал неэффективным, что привело к появлению множества других форматов, таких как NINJA и PPF (также известный как "Формат патчей PlayStation"). PPF по-прежнему используется, особенно для патчинга больших файлов, таких как ISO-образы CD-ROM, а также игр для Nintendo 64. Сообществом взломщиков ROM был разработан новый формат патчей – UPS, призванный стать преемником IPS и PPF. Более новый формат патчинга, APS, также был разработан увлеченным взломщиком ROM для Game Boy Advance. Система APS более экономична по объему, обратима и быстрее своего предшественника. Цель распространения взлома в виде патча – избежать юридических проблем, связанных с распространением полных образов ROM; патч содержит только информацию об изменениях в ROM, поэтому его распространение обычно не нарушает авторские права на оригинальную игру. Кроме того, патч обычно значительно меньше, чем полный образ ROM (ROM для NES может варьироваться от 8 КБ до 2 МБ; ROM для Super NES – от 256 КБ до 6 МБ; а ROM для Mega Drive/Genesis – от 512 КБ до 4 МБ). Как упоминалось выше, патчи обычно содержат только изменения кода, внесенные пользователями, а не защищенный авторским правом код, поэтому их распространение не является незаконным. В качестве примера легального распространения, Sega выпустила виртуальный центр на базе Steam для своей коллекции игр Mega Drive/Genesis под названием Sega Mega Drive Classics Hub. Этот центр, помимо возможности играть в эмулированные версии старых игр, использует поддержку Steam пользовательского контента через Steam Workshop, официально разрешая распространение ROM-хаков для любой из предлагаемых игр.

Использование

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

Системы и игры

Большинство взломов ROM-файлов происходит на играх для NES и SNES (включая игры Sega Mega Drive/Genesis), поскольку такие игры относительно небольшие и простые по сравнению с играми для более продвинутых консолей, таких как Nintendo 64 или Nintendo DS. Игры для Game Boy, Game Boy Color и Game Boy Advance также популярны для взлома, а игры для PlayStation – в меньшей степени. Однако игры, предназначенные для более современных консолей, тоже подвергаются взлому, и по мере того, как компьютеры становились быстрее и появлялось всё больше программ и утилит, стало появляться больше взломов для PlayStation, Nintendo 64 и Nintendo DS. Популярные игры часто становятся объектами взлома; выпущено множество взломов для игр серий Sonic the Hedgehog, Mario (включая Mario Bros., Super Mario Bros., Super Mario Bros. 2, Super Mario Bros. 3, Super Mario Land, Super Mario Land 2: 6 Golden Coins, Super Mario 64 и Super Mario World), Mario Kart (особенно Super Mario Kart, Mario Kart Wii, Mario Kart 7 и Mario Kart DS), Pokémon, Chip's Challenge, Castlevania, Final Fantasy, The Legend of Zelda, игр серий Mega Man, Fire Emblem, EarthBound, Super Metroid и многих других. Примечательным взломом аркадной игры стал Street Fighter II: Rainbow Edition, в котором была увеличена скорость игры и добавлены новые специальные приёмы. Успех этой игры побудил Capcom выпустить Street Fighter II: Hyper Fighting в качестве официального ответа. Журнал Your Sinclair публиковал ежемесячную колонку под названием "Program Pitstop", которая была посвящена в основном читам для игр, но также включала в себя принтер карт уровней для оригинальной Gauntlet и полноценный редактор уровней для той же игры.