Гайды по хакингу sonic 1

Обновлено: 07.07.2024

The Sonic Community Hacking Guide is an attempt to compile all the information scattered around the Sonic hacking community into one place. It started as a fork of Sonic Hachelle-Bee's Sonic Community Hacking Guide, and has since grown to outclass that document. It can be edited by any member at any time, so if you know something, go ahead and add it!

Contents

SCHG guides

General Guides

  • 68000 Instruction Set
  • ASM to Hex Code Reference
  • Assembly Hacking
  • Number Systems
  • SonED2 Manual
  • Sonic Music Hacking Guide
  • Subroutine Equivalency List

Game-Specific

Nemesis' hacking guides

Nemesis' site was taken down some time ago, and it doesn't seem that it'll be back. These are verbatim copies of the guides contained therin. They may be taken down/deleted at Nemesis' request.

Esrael's hacking notes

The original pages of Esrael's hacking notes were taken down when SSonicNET went offline permanently. These are copies of those notes, both in their original Portuguese and translated English.

DELETED

Теперь нажмите кнопку start два раза Соник станет бессмертным.
ВНИМАНИЕ:Когда Соник разбивает монитор с неуязвимостью, то он также остается неуязвимым, но когда время неуязвимости заканчивается, нужно снова нажать start два раза, чтобы вернуть
бессмертие.

ГАЙД№3. КНОПКА GOAL В SPECIAL STAGE ТЕПЕРЬ НЕ РАБОТАЕТ(ЭТО ДЛЯ ЧИТЕРОВ)
Найдите Obj09_GOAL:

гайд № 4. БОЛЬШОЕ КОЛЬЦО ПОЯВЛЯЕТСЯ В ЛЮБОМ СЛУЧАЕ
Найдите Obj4B_Main

гайд № 5. КАК ЗАМЕНИТЬ ЗВУК SEGA НА ДРУГОЙ
Найдите Sega Screen

Нравится Показать список оценивших

DELETED

Теперь время должно останавливаться.

ГАЙД № 7. СКОРОСТЬ СОНИКА
Как сделать Соника быстрее?
Сделать Соника быстрее в 2 раза, найдите Obj01_Main

гайд № 8. ИЗМЕНЕНИЕ КОЛ-ВА ЖИЗНЕЙ

ГАЙД № 9.СОНИК ПОД ВОДОЙ ТАКОЙ ЖЕ БЫСТРЫЙ, ЧТО И НА СУШНаверное многих бесят подводные уровни, обычно, они бесят из=за того, что Соник под водой очень медленный, и у него постоянно заканчивается воздух, но это можно изменить.
Найдите Obj01_In water

Нравится Показать список оценивших

DELETED

физика Соника под водой останется такой же, что и на суше.

ГАЙД № 10. СОБРАННЫЕ КОЛЬЦА ПЕРЕХОДЯТ НА СЛЕДУЮЩИЙ УРОВЕНЬ
Найдите Level_LoadObj

ГАЙД № 11. РАБОТАЮЩИЙ МОНИТОР "S"
Монитор s дает 100 колец
Найдите Obj2E_ChkS

Нравится Показать список оценивших

DELETED

ГАЙД. РЕДАКТИРОВАНИЕ ФУНКЦИЙ ВРАГОВ В ИГРЕ
1.КРАБ (СТРЕЛЯЕТ ОГНЕННЫМИ ШАРАМИ В 2 РАЗА ЧАЩЕ)
Найдите Obj1F
Потом найдите Obj1F_WaitFire

Теперь перейдите к строке

2.ПИРАНЬЯ (ПОДНИМАЕТСЯ ВВЕРХ БЫСТРЕЕ И ВЫШЕ В 2 РАЗА)
Найдите Obj2B
Потом перейдите к Obj2B_Main

Теперь перейдите к Obj2B_ChgSpeed

3. МЫШЬ (ЛЕТАЕТ В 2 РАЗА ДАЛЬШЕ) этот гайд может работать неправильно

Найдите Obj55
Потом перейдите к Obj55_ChkDrop

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

Нравится Показать список оценивших

DELETED

ГАЙД. РЕДАКТИРОВАНИЕ ПРИЗОВ В МОНИТОРАХ
1.МОНИТОР С КОЛЬЦАМИ (ИЗМЕНЕНИЕ КОЛ-ВА КОЛЕЦ)

Найдите Obj2E
Потом перейдите к Obj2E_ChkRings

2.МОНИТОР С НЕУЯЗВИМОСТЬЮ (НЕУЯЗВИМОСТЬ ДЛИТСЯ В 2 РАЗА ДОЛЬШЕ)

Перейдите к Obj2E_ChkInvinc

Чтобы наоборот уменьшить время неуязвимости (допустим в 2 раза), нужно разделить число 4B0 (hex) на 2 и т.д.

3.МОНИТОР С САПОГАМИ (БЫСТРЫЙ БЕГ ДЛИТСЯ В 2 РАЗА БЫСТРЕЕ)

Перейдите к Obj2E_ChkShoes

ПЕРЕХОДИМ К СТРОКЕ

Нравится Показать список оценивших

DELETED

ИЗМЕНЕНИЕ СКОРОСТИ СОНИКА ВО ВРЕМЯ БЫСТРОГО БЕГА

ПЕРЕХОДИМ К СТРОКЕ

Чтобы увеличить скорость Соника в 2 раза, умножаем C00 на 2, получаем 1800, в 3 раза увеличиваем, нужно уже 1800 (hex) умножить на 2, получим 3000 (hex) и т.д.
Чтобы уменьшить скорость Сонику в 2 раза, делим C00 на 2 и т.д.

4.МОНИТОР С ЖИЗНЬЮ (ИЗМЕНЕНИЕ КОЛ-ВА ЖИЗНЕЙ, КОТОРЫЕ ДАЕТ МОНИТОР)

Перейдите к Obj2E_ChkSonic

По умолчанию монитор с жизнью дает 1 жизнь, но это число можно изменить, для этого перейдите к строке

5.МОНИТОРЫ С ЭГГМАНОМ И МОНИТОР "S"

В оригинальной версии игры, эти мониторы не работают, но используя программу Sonic hacking studio 3, вы в исходном коде можете заметить, что скрипт, для этого монитора уже написан разработчиком
этой программы, но можно для этого монитора написать какой-нибудь другой скрипт по вашему усмотрению, также как и для монитора "S".
Для того, чтобы написать другой скрипт для монитора с Эггманом перейдите к Obj2E_ChkEggman

Вообще, неизвестно, для чего нужен был монитор "S", но предполагается, что этот монитор должен был давать Сонику способность превращаться в Супер Соника.
Вообще, в первой части Sonic the hedgehog, нет способности Супер Соника, конечно можно прописать скрипт для него, но я не знаю как, поэтому давайте просто сделаем так, чтобы
этот монитор давал Сонику вечную неуязвимость и вечный быстрый бег.Для этого, воспользуемся уже существующими скриптами для мониторов с неуязвимостью и быстрым бегом.
Переходим к Obj2E_ChkInvinc (монитор с неуязвимостью) и копируем этот скрипт:

В этой статье я хочу разобрать внутреннее устройство легендарной игры Sonic the Hedgehog для приставки Sega Mega Drive, а также способы ее модификации или, как еще говорят, хакинга. Эта игра насчитывает порядка сотни хаков, включающих как действительно достойные работы (такие как Pana Der Hejhog или Sonic Remastered), так и странные и даже жутковатые (вроде An Ordinary Sonic ROM Hack). Чтобы понять, как их создавать, нужно разобраться, как писать на языке ассемеблера Motorola 68K (обычно игры для приставок тех времен писались именно на ассемблере), откуда взять дизассемблированный вариант игры и какую архитектуру имеет ее движок.

Sonic hacks

Дизассемблирование ROM-файлов для Sega осуществляется при помощи коммерческого дизассемблера и дебаггера IDA Pro. Затем происходит кропотливый процесс разметки, структурирования и причесывания сырого ассемблерного кода с использованием дебаггера (и смекалки). Этот процесс требует хорошего понимания технических особенностей платформы Sega Mega Drive и игр для нее.

К счастью, на GitHub уже есть дизассемблированные и размеченные версии всех игр серии Sonic the Hedgehog, созданные энтузиастами при поддержке сайта Sonic Retro. Лучше всего размечен и структурирован исходный код именно первой игры серии. Эта версия кода находится в репозитории sonicretro / s1disasm и именно она будет разобрана в статье.

Погружение в внутреннее устройство игрушки начнем с теории.

Технический обзор приставки




Sega Mega Drive (известная в США как Sega Genesis) оснащена 32-битным центральным процессором Motorola MC68000 (сокращенно Motorola 68K) и дополнительным звуковым сопроцессором Zilog Z80 (взамодействие с Z80 происходит через общую память). Объем оперативной памяти (RAM) – 64K. Разрешение экрана в основном режиме (в американской версии) – 320x224 пикселей.

Использованный процессор Motorola 68K в свое время был достаточно распространен. Этот чип применялся в самых разных системах, от популярных домашних компьютеров и игровых приставок до космических шаттлов. Одна из модификаций Motorola 68K даже была установлена в легендарном Apple Macintosh.

Графическая подсистема Mega Drive основана на видеоконтроллере Yamaha YM7101 и поддерживает аппаратную работу с двумя слоями фона и отрисовку до 80 спрайтов поверх них. Подробнее графика в игре будет разобрана далее; прочитать о графике в Sega Mega Drive отдельно можно в статье "Как работала графическая система Sega Mega Drive: Video Display Processor".

Для сборки игры используется макроассемблер AS. Набор инструкций этой платформы совершенно не сложный и содержит всего 82 инструкции. Для сравнения: по подсчетам пользователя ResearchGate современный Intel Core i7 имеет 338 инструкций.

Процессор имеет восемь 32-битных регистров общего назначения: D0 – D7 . Все эти регистры активно используются в играх для хранения промежуточных данных и в качестве операндов арифметических операций. Также существует восемь специальных адресных регистров A0 – A7 . Адресные регистры оптимизированы для хранения указателей на какие-либо объекты в памяти и их использование в некоторых операциях невозможно. Последний адресный регистр A7 по совместительству работает указателем стека и имеет алиас SP .

Разберем основные инструкции Motorola 68K.

Операция копирования

move – скопировать данные из источника в приемник.

При записи операнда в скобках вычисление происходит со значением по такому адресу в памяти:

Такой режим адресации возможен только для адресных регистров ( a* ).

Арифметические операции

  • add – прибавить значения источника к значению приемника.
  • sub – отнять значение источника от значения приемника.
  • mulu – беззнаковое умножение; muls – знаковое умножение.
  • divu – беззнаковое деление; divs – знаковое деление.

Операции управления потоком выполнения

  • jmp , bra – безусловный переход.
  • jsr , bsr – вызов подпрограммы, rts – возврат из подпрограммы (аналоги call и ret в x86).

Операции ветвления

Для выполнения условных переходов в процессоре 68K используется регистр CCR (Condition Code Register). Инструкции cmp , tst и btst позволяют выставить биты (флаги) этого регистра, которые затем используются в операциях условного перехода beq , bne , bge , ble и других.

  • cmp – сравнить значения.
  • tst – сравнить значение с нулем.
  • btst – сравнить заданный бит с нулем.
  • beq / bne – перейти, если сравниваемые значения были равны/не равны.
  • bge / ble – перейти, если второе сравниваемое значение было больше/меньше первого.

Более подробно изучить команды Motorola 68K вам поможет отличный мануал (с ужасным фоном и шрифтами) автора Марки Джестера, где каждая из команд разобрана максимально подробно.

Сборка игры

Репозиторий s1disasm содержит Python-скрипт, автоматически запускающий нужную версию ассемблера для текущей операционной системы со всеми необходимыми флагами. Также этот скрипт выполняет специфическую для игры Sonic the Hedgehog операцию "Kosinski compression", которая сжимает карты уровней и другие бинарные данные (чтобы они поместились в память картриджа).

Все, что нужно сделать пользователю, это перейти в git-ветку AS ( git checkout AS ) и выполнить команду:

Результатом выполнения скрипта должен стать готовый ROM-файл игры с названием s1built.bin . Этот файл можно запустить в вашем любимом эмуляторе Sega Mega Drive. Для macOS, например, рекомендуется использовать замечательный OpenEmu.

Архитектура движка игры

Начнем обзор с основной точки входа для сборки игры – файла sonic.asm . В нем находятся процедуры инициализации: ожидание готовности сопроцессора Zilog Z80 ( WaitForZ80 ), установки параметров видеопроцессора ( VDPSetupGame ) и проверка контрольной суммы. После инициализации игра выполняет подпрограмму GameInit и переходит в главный цикл MainGameLoop , задачей которого является считывание переменной глобального игрового режима и запуск соответствующему ему кода.

Полный список глобальных переменных, используемых игрой вынесен в файл Variables.asm . Каждая переменная представляет собой константу со ссылкой на адрес в RAM, где должно храниться значение переменной.

Глобальный игровой режим хранится в переменной v_gamemode . Список глобальных игровых режимов включает в себя:

  • 00 – экран "Sega",
  • 01 – титульный экран с Соником,
  • 08 – демо,
  • 0C – уровень,
  • 10 – special stage,
  • 14 – экран "Continue",
  • 18 – финальная заставка,
  • 1C – финальные титры,
  • 8C – титр уровня.

Переменная v_gamemode определяет подпрограмму для главного цикла, которая должна исполняться в данный момент. Например, в режиме id_Title приставка будет исполнять подпрограмму GM_Title , а в режиме id_Level – GM_Level .

Игровые параметры

Многие переменные, объявленные в файле Variables.asm представляют интерес для хакинга. Рассмотрим для примера v_sonspeedmax , v_sonspeedacc и v_sonspeeddec .

Изменяя значения, помещаемые в эти переменные в подпрограмме Sonic_Main , можно изменять динамические характеристики перемещения Соника: максимальная скорость, значение ускорения и торможения соответственно, получая интересные результаты:

Дробные переменные хранятся в формате с фиксированной точкой, поэтому для получения реальных значений их необходимо разделить на 256. Так, ускорение Соника составит 0xC / 256 = 0.046875, а торможение – 0x80 / 256 = 0.5 (пикселей на игровой цикл в квадрате).

Графика

Графикой в Mega Drive занимается тайловый графический процессор Sega 315‑5313 (Video Display Processor, VDP). Конфигурирование VDP производится с помощью регистров, запись в которые производится через специальные адеса в памяти vdp_data_port и vdp_control_port . Изначальная конфигурация процессора устанавливается в подпрограмме VDPSetupGame , которая берет параметры по адресу VDPSetupArray . Однако, в каждом из глобальных игровых режимов, некоторые регистры выставляются повторно. Например, на игровых уровнях это делает подпрограмма GM_Level . Подробное описание функций всех регистров VDP приведено в вики Sega Retro.

Для примера приведем скриншот игры с включенным режимом Low Color (нулевой бит регистра Mode Register 1 выставлен в ноль):


Video Display Processor позволяет аппаратно работать с двумя фоновыми слоями – background (слой B) и foreground (слой A), а также со слоем спрайтов, которые отображаются поверх фона. Фоновые слои собираются из тайлов 8x8 пикселей с помощью карт тайлов. Спрайты также собираются из тайлов; максимальный размер спрайта – 4x4 тайла. Таким образом, максимальный размер аппаратного спрайта составляет 32x32 пикселя.

Удаление кода из подпрограмм работы с фоновыми слоями ( LoadTilesAsYouMove , DrawChunks ) и спрайтами ( BuildSprites ) позволяет понять, какие из игровых объектов к какому слою относятся:


Как видно из названия, подпрограмма LoadTilesAsYouMove занимается подгрузкой тайлов на фоновые слои по мере продвижения игрока по уровню. В игре Sonic the Hedgehog размер обоих тайловых плоскостей составляет 64x32 тайла или 512x256 пикселей.

Так выглядит изменяющийся foreground-слой на уровне Green Hill Zone, GIF-анимация, 5 Мб:

Графический процессор также позволяет устанавливать не только общее смещение фонового слоя, но и смещение его отдельных горизонтальных рядов тайлов, используя так называемую таблицу скроллинга. Эта возможность позволяет перемещать удаленные элементы фона медленнее, чем близкие. Таким образом создается эффект параллакса, который имитирует 3D-графику и придает сцене объем. Этот эффект используется почти во всех уровнях Sonic the Hedgehog.

Эффект параллакса в фоновом слое уровня Marble Zone:

Игровые объекты

Движок игры выделяет 8192 байта в RAM на хранение состояния динамических объектов сцены. Вся эта информация хранится по смещению v_objspace . К динамическим объектам относится все объекты на уровне, кроме стен и пола. Примеры: Соник, враги Соника, мониторы с бонусами, кольца, пружины, Босс и так далее. При необходимости объекты отрисовывают себя в слое спрайтов при помощи подпрограммы DisplaySprite .

Sonic game objects

Размер данных состояния игрового объекта статичен и составляет 64 байта. Эта информация формирует структуру, поля которой могут быть получены с использованием макросов, объявленных в файле Constants.asm . Адрес структуры данных текущего обрабатываемого игрового объекта обычно заносится в регистр a0 . Таким образом, данные игрового объекта могут быть считаны так:

  • ObX(a0) , ObY(a0) – текущие координаты объекта в пикселях.
  • ObVelX(a0) , ObVelX(a1) – текущая скорость объекта в 1/256 пикселя за шаг.
  • obHeight(a0) , obWidth(a0) – высота и ширина объекта.
  • obSubtype(a0) – подтип объекта (пример: тип бонусного монитора).
  • obStatus(a0) – байт с флагами состояния объекта.
  • obRoutine(a0) – номер текущей подпрограммы объекта.

Отметим, что система координат в игре типична для экранной графики и имеет ось X направленную вправо, и ось Y, направленную вниз.

Подпрограмма ExecuteObjects вызывается на каждом шаге главного цикла уровня. Она последовательно вызывает программный код каждого из игровых объектов, присутствующих на сцене. Список указателей на программный код каждого из объектов задан в таблице в файле Object Pointers.asm . Программный код большей части объектов вынесен в отдельный файл в каталоге _incObj .

Многие из объектов имеют по несколько подпрограмм, которые соответствуют разным этапам жизни объекта (например, только что созданный объект, объект в рабочем состоянии, "предсмертное" состояние). В этом случае номер подпрограммы, которую необходимо выполнять сейчас, хранится в поле obRoutine .

При необходимости передвижения объекта с заданной скоростью вызывается специальная подпрограмма SpeedToPos . Она интегрирует скорость текущего объекта, прибавляя ее значение к его координатам.

Хак: no-ring challenge

В качестве примера реализуем довольно простой хак, который может понравиться самым ярым фанатам игры: no-ring challenge. Этот хак предлагает пройти игру без золотых колец. В результате, каждая атака Соника будет сразу убивать его и заставлять игрока проходить уровень заново (либо с точки сохранения).

Перейдем в главную подпрограмму объекта "Кольцо" – Ring_Main и добавим в самое ее начало простейшую инструкцию прыжка ( bra ) на процедуру удаления кольца:

С бонусными мониторами поступим так же. Главная подпрограмма объекта "Монитор" находится в файле 26 Monitor.asm . Тип монитора хранится в поле obSubtype размером 1 байт. Экспериментальным методом выяснено, что значение для монитора с кольцами равно 6. Добавим простую проверку типа монитора с помощью инструкции cmp и условный прыжок beq на процедуру его удаления в случае, если его тип равен шести:

Можно убедиться, что в получившемся ROM'е кольца и бонусные мониторы с кольцами на уровнях будут отсутствовать, что усложнит прохождение. Патч целиком можно посмотреть на GitHub. Туда же выложен готовый бинарник на случай, если кто-то захочет поиграть в такую версию игры, не разбираясь со сборкой.

Хак: притягивание колец

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

GIF-анимация, иллюстрирующая действие электрического щита, 1 Мб:

Алгоритм Sonic the Hedgehog 3

Алгоритм, использующийся для этого эффекта, подробно описан в вики Sonic Retro. Если персонаж, обладающий электрическим щитом, находится ближе, чем в 64 пикселях от кольца по каждой из осей, кольцо переходит в режим намагниченности и начинает движение. В дальнейшем этот флаг больше не снимается с кольца. В режиме намагниченности кольцо ускоряется на 0.1875 за каждый шаг в сторону игрока, если оно уже движется в нужную сторону по данной оси. Если же кольцо движется от игрока, ускорение составляет 0.75.

Разница в значениях предусмотрена для того, чтобы кольца с одной стороны не слишком перестреливали, но, с другой стороны, если перестрел уже случился либо если игрок движется быстро и резко оказывается с противоположной стороны, быстро "исправлялись" и меняли свое направление движения.

Реализация алгоритма

Изучим подробнее исполняемый код объекта "Кольцо", который находится в файле 25 & 37 Rings.asm . Список подпрограмм объекта:

Кольцо имеет несколько жизненных этапов: Main – инициализация; Animate – обычное висение с анимацией вращения; Collect – момент сбора Соником; Sparkle – анимация искр при сборе Соником; Delete – удаление кольца. Для того, чтобы изменить поведение кольца в обычном его состоянии, смотрим в сторону подпрограммы ptr_Ring_Animate .

Для хранения состояния намагниченности кольца отлично подойдет однобайтное поле obStatus . Анализ кода кольца показывает, что в этой версии игры флаги состояния для этого объекта не используются. Назначим нулевой бит obStatus (наиболее младший) ответственным за хранение флага намагниченности. Установка отдельного бита ячейки памяти будет возможна с помощью инструкции bset , а проверка, установлен ли он – с помощью инструкции btst .

Добавим в начало подпрограммы Ring_Animate код, устанавливающий флаг намагниченности в случае, если игрок ближе к кольцу, чем на 64 пикселя по каждой оси:

Реализация алгоритма предполагает разное ускорение в зависимости от того, летит кольцо в сторону игрока или нет, что по сути может быть представлено как сравнение знаков значений скорости кольца и разницы положений кольца и игрока. В псевдокоде такое сравнение может иметь примерно такой вид:

Для простой реализации такого сравнения вспомним, что способ хранения знаковых целых чисел в большинстве процессоров (включая Motorola 68K) подразумевает возможность определить знак числа простым считыванием самого старшего бита, причем 0 будет обозначать положительное число, а 1 – отрицательное. Проверить равенство битов в байте можно с помощью операции исключающего "или" – XOR ( eor на Motorola 68K).

Как уже было отмечено выше, дробные значения (включая скорость игровых объектов) хранятся в формате с фиксированной точкой, поэтому необходимые значения ускорения (0.1875 и 0.75) необходимо домножить на 256 (получив 48 и 192 соответственно).

Реализуем процедуру притягивания колец:

Для того, чтобы кольцо действительно осуществляло движение согласно установленным скоростям, необходимо добавить вызов упомянутой выше подпрограммы SpeedToPos :

Собираем итоговый ROM игры, запускаем и — вуаля — фича из Sonic 3 доступна в Sonic 1!

GIF-анимация результата, 3.5 Мб:

На GitHub можно просмотреть патч целиком, а также скачать получившийся бинарник.

Заключение

Эта статья является лишь базовым разбором методов модификации игры. Статья не рассматривает инструменты для редактирования уровней (SonED2, Chaos), создание новых персонажей, игровых объектов и механик. Также не рассмотрен симулятор/отладчик Motorola 68K EASy68K, который может помочь более пристально разобраться, как работает процессор Sega.

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

Программирование NES-игр

Забыли обратить внимание на то, что Shiru в прошлом месяце написал на английском языке и выложил в общий доступ документ "Programming NES games in C", который, как понятно из названия, содержит несколько простых примеров кодинга NES -игр на ЯП Си. Как сообщают знающие люди, это прекрасный документ с приложенным исходником . Читать дальше »



MottZilla выложил документ, описывающий формат хранения сохранений в SRAM игры "Final Fantasy V" на Super Nintendo . Расписаны подробности хранения данных слотов, персонажей и деталей контрольной суммы . Читать дальше »


Revenant выложил для общего ознакомления небольшую документацию, в которой описан формат хранения уровней и алгоритм сжатия графики в оригинальной игре "Super Adventure Island" для 16-битной игровой приставки Super Nintendo . Читать дальше » Был выложен в общий доступ очень старый (датированный 1989 годом) пакет с документацией от Haruhiko Okumura, описывающей работу различных алгоритмов сжатия (LZSS, LZW, Huffman, LZARI, LZHUF) и исходный код ANSI C для компрессоров/декомпрессоров, работающих с описанными алгоритмами . Читать дальше »

Gameboy

На днях Marc Rawer выложил документацию "Gameboy Z80 Instruction Set" - лист набора команд под процессор Gameboy Z80. А kOOPa выложил "Super Gameboy Tech Doc" - документ описывающий различные технические детали SGB . Читать дальше »

The Romance of Forgotten Kingdom

Tauwasser составил и выложил краткое описание формата графических файлов, использующихся в игре "Romance of Forgotten Kingdom" на PC . Дополнительно в архиве поставляются шаблоны к 010 Editor (это платный шестнадцатеричный редактор) для разбора файлов изображения . Читать дальше »

Fatories выложил лист с адресами памяти для изменения параметров различных предметов в игре "The Legend of Zelda: Oracle of Ages" на портативной игровой консоли Gameboy . Данные адреса можно использовать, например, в эмуляторе VBA (Visual Boy Advance) Memory Viewer . Читать дальше »

Fatories написал и выложил технический документ "Memory Address List" по игре "Legend of Zelda: Oracle of Ages" для портативной игровой консоли Gameboy . В нём описано множество адресов игровых объектов (типа предметов инвентаря) и функций . Читать дальше »

Ryanbgstl написал и выложил в общий доступ документ, содержащий полезную информацию для технического осуществления перевода игры "Kaeru no Tame ni Kane wa Naru" для портативной игровой консоли Gameboy . Читать дальше »


Noren написал небольшой гайд по извлечению через 3D VIA PRINT SCREEN и Jpcsp 3D-моделей и локаций из оригинальной игры "Silent Hill: Origins" для Sony PSP . В общем, возможно, кому-то понадобится для извлечения 3D-ресурсов . Читать дальше »


Ромхакер под ником henke37 написал и выложил небольшой гайд, в котором описываются форматы архивов данных игры "Gyakuten Kenji 2" на Nintendo DS от Capcom. Текстовый документ небольшой, написан на английском языке и описывает два формата сжатия . Читать дальше »



Не так давно Vladikcomper на своей домашней странице добавил несколько новых уроков по хакингу Соников на SMD : "Как убрать Speed Cap" (Sonic the Hedgehog) и "Как убрать Air Speed Cap" (Sonic the Hedgehog 2). А также обновил некоторые старые статьи: "Как добавить Spin Dash" и "Как добавить Jump Dash" (Sonic the Hedgehog 2) . Читать дальше »


OEM выложил в общий доступ официальную документацию по аппаратным возможностям игровой системы Game Boy / Game Boy Color . Данный мануал был составлен в 1999 году и включает в себя 298 страниц . Читать дальше »

Читайте также: