Формат хранения уровней в ROM-файлах

Описание формата хранений данных об уровнях

CadEditor - редактор уровней для множества игр под разные платформы (NES, Sega Mega Drive, GBA).

Список форматов данных уровней в играх, поддерживаемых редактором.

Название игры Формат блоков Формат макроблоков Формат экранов
Darkwing Duck
Little Mermaid
Tale Spin
Chip & Dale
Mega Man 3
Mega Man 4
Mega Man 5
Mighty Final Fight
Adventure in the Magic Kingdom
Aligned(2x2 + palByte1) Linear(2x2) Linear(8x8)
Mega Man 6 Aligned(2x2 + palByte1) Linear(2x2) (-)
Duck Tales Aligned(2x2 + palByte1) Linear(2x2) Linear(8x8)
прим.1
Duck Tales 2 Aligned(2x2 + palByte1p) Aligned(2x2) Linear(8x8)
Chip & Dale 2
Guerrilla War
Aligned(2x2 + palByte1p) - Linear(16x15)
Tiny Toon Adventures
Jetsons
Aligned(2x2) Aligned(2x2 + palByte4) Linear(8x6)
Tiny Toon Adventures 2 Linear(2x2) + palByte1p - Linear(16x15); Linear(16x12)
Juuouki Linear(2x2) + palByte1 - Linear(10x16)
SD Hero Soukessen - Taose! Aku no Gundan Linear(2x2) + palByte1 - (-)T
Flintstones RoD&H Linear(2x2)T + palByte1 Linear(4x4)T (-)T
Flintstones SaDP Linear(2x2)T + palByte1 Linear(2x4)T (-)T
Jungle Book Aligned(2x2 + palByte1)x2 Linear(2x2)x2 -
Crystal Mines Unaligned(2x2 + palByte1) - -
Aladdin
Earth Worm Jim 3
Super Mario World
Donkey Kong Country 4
Titenic
Harry's Legend
Final Fight 3
Sonic the Hedgehog
Tiny Toon 6
Indivisible
Ji Qi Mao Xiao Ding Dang
Aligned(2x2 + palByte1) - Linear(16x16)
Tom & Jerry
Terminator 2
Takahashi Meijin no Bugutte Honey
Zombie Nation
Super Robin Good
Aligned(2x2 + palByte1) - -
Little Nemo
Super Spy Hunter
Aligned(2x2 + palByte1) Aligned(2x2) Linear(8x8)
Rockin' Kats Linear(2x2 + palByte1) Linear(1x4)->
Linear(4x1)->
Linear(2x1)
Linear(3x2)
Battletoads
Battletoads & DD
Mickey's Adventure in Numberland
Mickey's Safari in Letterland
Alien 3
Darkman
Robocop 2
Akumajou Special - Boku Dracula-kun
Metal Storm
Splatter House
Spelunker 2
Hook
Linear(4x4) + palByte4 - -
TMNT 3
Contra Force
Super C
Adventure Island 2
Adventure Island 3
Zen Intergalactic Ninja
Castle of Dragon
Rollergames
Isolated Warrior
Burai Fighter
Kick Master
Wai Wai World 2
Wizard of the Oz
Doki! Doki! Yuuenchi
Linear(4x4) + palByte4 - Linear(8x8)
Power Blade
Power Blade 2
Batman Returns
TMNT
TMNT 2
Bucky O'Hare
Adventures of Bayou Billy
Goonies 2
Castlevania 3
Linear(4x4) + palByte4 - Linear(8x6)
Snake's Revenge Linear(4x4) + palByte4 - Rle(Linear(8x8))
Castlevania 2
Super Contra 7 (unl)
Linear(4x4) + palByte4 - Linear(8x7)
Moon Crystal
Don Doko Don
Rocman X
Panda Prince
Tagin's Dragon
Silent Assault
Silkworm
Little Red Hood
Linear(2x2) - Linear(16x15), palByteX
Dooly Bravo Land Linear(2x2) - Linear(16x14), palByteX
Asterix Linear(2x2) - (-)T, (palByteX)T
Driar Linear(2x2) + palByte1 - Linear(16x14)
Toxic Crusaders
Insector X
Linear(2x2) - Linear(16x13), palByteX
Challenger Linear(4x4) + palByte4 Linear(2x2) -
Felix the Cat Aligned(2x2 + palByte1) - Comp(-)
Jurassic Park
James Bond Jr
Linear(2x2) - Comp(-), palByteX
Ninja Cat Linear(2x2) Linear(2x2) + palByte4 Linear(8x5)T
Shadow of the Ninja Linear(2x2)T Linear(mix(2x2, palByte4))T Linear(8x8)
Little Samson const(2x2) Linear(mix(2x2, palByte4)) Linear(8x8)
Banana Prince const(2x2)T Linear(2x2) + palByte4 Linear(8x8)
Mega Man
Mega Man 2
const(2x2)T Linear(2x2)T + palByte4 Linear(8x8)T
Gun Smoke
Legendary Wings
const(2x2) Linear(2x2 + palByte4) (-)Iy
Gaiapolis Linear(2x2)+ palByte1 - Linear(16x16)Iy
New Ghostbusters 2
BreakThru
Aligned(2x2 + palByte1) - Linear(16x15)
Captain America
Ghosts'n Goblins
Kaiketsu Yanchamaru 3
Happily Ever After
Super Pitfall
Ikari Warriors
Metal Mech - Man and Machine
Super Painter
Universal Soldiers
Linear(2x2) + palByte1 - Linear(16x15)
Time Diver Eon Man
Super City Tank
Bad Dudes
Heavy Barrel
Ninja Jajamaru Jinga Daisakusen
Bugs Bunny Crazy Castle
Amagon
Linear(2x2) + palByte1 - -
Low G Man
Utsurun Desu
Karnov
Robocop
Parasol Henbee
Vice: Project Doom (level 2)
Linear(2x2) + palByte1 - Linear(16x12)
Donald Land
Athena
Robo Warrior
Linear(2x2) + palByte1 - Linear(16x13)
Cheetahmen
Cheetahmen 2
Garfield: Week of the Garfield
Linear(2x2) + palByte1 - Linear(16x16)
Bugs Bunny Birthdata Blowout Linear(2x2) + palByte1 - Linear(4x15)
Captain Silver
прим.5
Final Mission
прим.6
Linear(2x2 + palByte1) - Linear(16x15)
Dragon, The Linear(2x2) - Linear(16x12), palByteX
Shatterhand Linear(2x2)T + palByte1 Linear(2x2)T Linear(8x8)
Three Eyes Story
Vice: Project Doom (level 1)
Linear(2x2) + palByte1 Linear(2x2)T Linear(8x8)
Mickey Mouse 3 Linear(2x2) + palByte1 Linear(2x2) Linear(8x6)
Mickey Mouse
Doraemon
Linear(2x2) + palByte1 Linear(2x2) (-)
Addams Family - Pugsley's Scavenger Hunt Linear(2x2) + palByte1
прим.2
Linear(2x2) (-)
Raf World Linear(2x2) + palByte1 Linear(2x2) Linear(8x8)
Ninja Gaiden Linear(2x2)T Linear(2x2)T + palByte4 (-)T
Ninja Gaiden 2 Linear(2x2)T Linear(2x2) + palByte4 (-)T
Ninja Gaiden 3 Linear(2x2) Linear(2x2) + palByte4 (-)T
Yo-Noid
Jackie Chan Action Kung Fu
Linear(4x4) + palByte4 - (-)T
Jackal Linear(4x4)Iy + palByte4 - (-)Iy
Monster in my pocket Linear(4x4) + palByte4 - Linear(8x6); Linear(8x8)
Quest For Qi Linear(4x4) - -
Batman Linear(4x2) - Linear(8x15), palByteX
Predator Linear(4x2)T
прим.3
- (-)T, palByteX
Ninja Crusaders Linear(4x1) - Linear(8x24)T, palByteX
Dragon Fighter Linear(2x2 + palByte1)T Linear(2x2 + palByte1)T (-)T
Castlevania Linear(4x4 + palByte4) - (8x6)T
Addams Family Linear(1x20); Linear(1x6) - Linear(-), palByteX
Abadox Linear(4x30 + palByte30) - Linear(-)
Captain Planet Linear(4x8 + palByte8) - Linear(-)
Contra Spirits
Mickey Mania
Linear(2x2)W2 - Linear(16x15), palByteX
Takeshi no Chousenjou Linear(2x2)T - Linear(15x2)T, palByteX
Aliens Linear(2x2)T - -
Circus Caper Linear(2x2)T - (-)T, palByteX
Hudson Hawk
Youkai Club
Kabuki Quantum Warrior (прим.4)
Linear(2x2) - (-), palByteX
Young Indiana Jones Chronicles Linear(4x4)T + palByte1 (-) (-)

Обозначения

(NxM) - структура из N единиц в ширину и M в ширину. Var вместо числа означает, что в разных местах игры используются разные размеры, в основном для описания экранов
()T - структура хранится в транспонированном виде.
()Iy - структура хранится в инвертированном по оси Y виде.
()x2 - игра содержит по две копии наборов данных на уровень.
()W2 - индексы элементов кодируются с помощью слова длиной в 2 байта
Linear() - структуры хранятся последовательно, одна за другой.
Aligned() - структуры хранятся массивами из отдельных частей (отдельный массив из всех 1х элементов структуры, затем отдельный массив из всех 2х элементов структуры и т.д.).
Unaligned() - то же, что и Aligned(), но массивы хранятся в памяти не друг за другом, а раздельно (между ними может находиться переменное число других данных, не связанных с описанием блоков)
Const() - индексы элементов структуры не хранятся, а вычисляются из индексов самой структуры.
Aligned(NxM + palByteX) - массивы из отдельных частей структуры из NxM элементов, а затем массив из частей palByteX, в котором элементы означают доп. данные для соотвествующих индексу структур.
Linear(NxM)+ palByteX - последовательное описание структур размером NxM, а затем описание массива из частей palByteX, в котором элементы означают доп. данных для соотвествующих индексу структур
(NxM)->(PxQ) - структура PxQ, образованная из P элементов в ширину и Q элементов в высоту, где элементы структуры сами являются структурами из NxM элементов.
Linear(NxM), palByteX - описание бит палитры отдельным слоем от структур.
Comp() - данные в ROM сжаты каким-либо образом.
Linear(NxM); Linear(PxQ) - в игре используются и структуры размером NxM, и структуры размером PxQ элементов в разных местах.
mix(NxM, palByteX) - биты палитры хранятся в тех же байтах, что и индексы элементов структуры.
Rle() - данные хранятся в запакованном алгоритмом RLE виде.

Способы хранения бит палитры

palByte1 - биты палитры хранятся по 2 бита в байте. Дополнительные 6 бит байта в зависимости от игры могут использоваться для хранения доп. информации (тип физики блока) или не использоваться никак.
palByte1p - биты палитры хранятся сжатыми по 4 штуки в одном байте для четырёх отдельных (никак не связанных между собой) блоков
palByte4 - биты палитры хранятся в одном байте по 4 штуки для 4х блоков, связанных в один макроблок или для блока в 4x4 тайла.

Примечения

прим.1 Отдельно хранятся старшие биты номеров блоков (игра поддерживает до 512 блоков на уровень)
прим.2 Байты палитры хранят 2 варианта расцветки блока - для блоков стоящих на чётных и нечётных позициях
прим.3 Блоки пересекаются между собой (блок 1 размером 4x2 тайла состоит из субблоков 1 и 2 по 2x2 тайла, блок 2 состоит из субблоков 2 и 3 - (субблок 2 входит и в блок 1 и в блок 2)
прим.4 Формат слоя палитры не исследован. Предположительно один байт кодирует данные 2х блоков карты. Линии описаны вертикально прим.5 Блоки хранятся с шагом в 1 (по 5 байт на блок - 4 номера тайлов и 1 свойства блока). Индексы палитры хранятся отдельным массивом прим.6 Байт атрибута кодирует 4 возможных цвета блока (хранится перед тайлами блока) для разных вариантов размещения на экране (чётные и нечётные позиции по горизонтали и вертикали).

Todo

Назад