Структуры объектов начинаются с адреса $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 |
|
| $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 |
Состояние объекта:
| Бит | Описание |
| 0 | X-ориентация. 0 = лево, 1 = право
|
| 1 | Y-ориентация. 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-амплитуда. Используется для небольшого колебания вверх/вниз при полете.
|