Сайт Влада

Структуры объектов

Перевод на русский язык и исправление: vladikcomper
Оригинальная статья: «SCHG:Sonic the Hedgehog/RAM Editing»

Структуры объектов начинаются с адреса $FFFFD000, каждая структура занимает $40 байт.

БайтТипОписание
$00 byte Номер объекта
$01 byte Флаги рендеринга.
  • Бит 0 - отражение по горизонтали. Если включен, объект будет отражен по горизонтали.
  • Бит 1 - отражение по вертикали.
  • Бит 2 - система координат. При 0, координаты объекта будут относительно экрана (onscreen), используется, например, для HUD. При 1 объект будет координироваться относительно уровня (playfield).
  • Бит 3 - в игре не используется, если Бит 2 установлен на 1 и этот бит включен, объект каким-то образом будет приурочен к фону уровня. Это использовалось для НЛО из MZ в ранних прототипах игры.
  • Бит 4 - флаг учета высоты. При прорисовке объектов, игра проверят, попадает ли объект в область экрана, учитывая его высоту. Если флаг выключен, высота объекта условно берется за $20, иначе высота будет браться из байта $16.
  • Бит 5 - если включен, BuildSprites обработает только первые 5 байт мапингов. Используется, например стенами GHZ, рассыпающимися на кусочки.
  • Бит 6 - переключатель планов. Используется только Obj01 (т.е. Соником). Используется, чтобы менять приоритет Сониковкого спрайта при прохождении кругов (loops) в GHZ.
  • Бит 7 - устанавливается, когда объект на экране и его нужно отрисовать.
$02 word Арт-поинтер.
  • Использует формат $XYYY, где X - строка палитры, которая будет использована для спрайта, YYY - порядковый номер тайла в VRAM.
$04 long Оффсет мапингов.
$08 word
  • X-координата.
$0A word
  • При координировании относительно уровня, X подпиксель.
  • При координировании относительно экрана, Y координата.
$0C word
  • При координировании относительно уровня, Y координата.
  • При координировании относительно экрана не используется.
$0E word
  • При координировании относительно уровня, Y подпиксель.
  • При координировании относительно экрана не используется.
$10 word Горизонтальная скорость (X-velocity)
$12 word Вертикальная скорость (Y-velocity)
$14 word Скорость на земле (инерция)
$16 byte Вертикальный радиус.
$17 byte Горизонтальный радиус.
$18 byte Приоритет (00 = поверх всех, 03 = позади всех).
$19 byte Горизонтальный радиус видимой части объекта.
$1A byte Кадр в мапингах, выводимый на экран.
$1B byte Номер записи в сценарии анимации.
$1C byte Номер анимации.
$1D byte Флаг рестарта анимации (когда $1D не равно $1C, анимация рестартует)
$1E byte Время до следующего кадра в анимации.
$20 byte Ответ на столкновение. Сообщает, что делать, если объекта коснулся Соник. Формат: TTSS SSSS. TT - действие при столкновении: 00 - уменьшить кол-во ударов, 01 - увеличить счетчик роутины, 10 - повредить Соника, а 11 специалный тип, используемый немногими объектами. SSSSSS настраивает физику столкновения.
$21 byte Специальный байт для взаимодействия Соником, используется по-разному некоторыми объектами, например у боссов это - счетчик ударов.
$22 byte Состояние объекта:
БитОписание
0X-ориентация. 0 = лево, 1 = право
1Y-ориентация. 0 = вверх, 1 = вниз
2Не используется
3Включен, если Соник стоит на объекте
4Не используется
5Включен, если Соник толкает объект
6Не используется
7Не используется
Эти биты имеют другое значение у Соника (см. чуть ниже).
$23 byte Относительный адрес к объекту в списке уничтожаемых объектов (начинается с $FC00). Используется кольцами, мониторами, бадниками и другими, если нужно, чтобы объект после уничтожения не создавался снова.
$24 byte Счетчик роутины.
$25 byte Счетчик вторичной роутины. Используется более сложными объектами.
$26 word Градус наклона.
$28 byte Тип объекта. Например, содержимое монитора или цвет и наклон пружины.
$29-$3F Неиспользуемые многими объектами байты.
Используемые Соником байты
БайтТипОписание
$22 byte Состояние Соника:
БитОписание
0Ориентация. 0 = право, 1 = лево.
1Включен, если Соник в воздухе.
2Включен, если прыгает или свернут в клубочек.
3Включен, если Соник в воздухе, но не должен падать. Например, если он стоит на каком-нибудь объекте.
4Включен, если Соник прыгает в свернутом в клубок состоянии.
5Включен, если что-то толкает.
6Влючен, если Соник под водой.
7Не используется.
$28 byte Время под водой. При погружении ставится на $1E и уменьшается с каждой секундой. На $18, $13 и $0E секундах воспроизводит звякающий звук. При $0B начинается отсчет до захлебывания.
$2B byte Не используется
$30-$31 word Оставшееся время неуязвимости. Устанавливается на $0078 после того, как Соник упал после удара, и уменьшается каждую миллисекунду, пока не достигнет $0000.
$32-$33 word Оставшееся время Invincibility.
$34-$35 word Оставшееся время Speed Shoes.
$39 byte Не используется.
$3A-$3B word Не используются.
$3C byte Включено при прыжке.
$3D byte Адрес объекта, на котором стоит Соник (чтобы получить абсолютный адрес, умножьте его на $40 и прибавьте $D000).
Переменные для боссов
БайтТипОписание
$21 byte Оставшееся количество ударов.
$30 word X-позиция
$38 word Y-позиция (в отличие от $C, без амплитуды - см. байт $3F)
$3E byte Количество раз для моргания босса после удара.
$3F byte Y-амплитуда. Используется для небольшого колебания вверх/вниз при полете.