We've just updated MediaWiki and its underlying software. If anything doesn't look or work quite right, please mention it to us. --RanAS

SMW level data format: Difference between revisions

From SnesLab
Jump to: navigation, search
(italicize SMW)
(Added table formatting to most tables, removed some unwanted formattings.)
Line 1: Line 1:
This article contains information about how levels are stored in ''Super Mario World''.
This article contains information about how levels are stored in [[Super Mario World]].


Pointer tables
== Pointer tables ==


x2E200/$05E000 Layer 1 data 0x200 levels, 3  bytes each. (1,536 bytes)
x2E200/$05E000 Layer 1 data 0x200 levels, 3  bytes each. (1,536 bytes)
Line 7: Line 7:
x2EE00/$05EC00 Sprite data 0x200 levels, 2** bytes each. (1,024 bytes)
x2EE00/$05EC00 Sprite data 0x200 levels, 2** bytes each. (1,024 bytes)


*)  Layer 2 BG only uses the two lower bytes. The upper byte should be FF.
<nowiki>*)</nowiki> Layer 2 BG only uses the two lower bytes. The upper byte should be FF.
     The backgrounds are stored in bank 0C.
     The backgrounds are stored in bank 0C.
**) The sprite data is located in bank 07.
<nowiki>**)</nowiki> The sprite data is located in bank 07.


Primary level header
== Primary level header ==


The first five bytes of the Layer 1 data is the primary level header.
The first five bytes of the Layer 1 data is the primary level header.


|First | |Second| |Third | |Fourth| |Last |
{| class="wikitable"
BBBLLLLL CCCOOOOO 3MMMSSSS TTPPPFFF IIVVZZZZ
|-
First !!  Second !!  Third !!  Fourth !!  Last
|-
| BBBLLLLL || CCCOOOOO || 3MMMSSSS || TTPPPFFF || IIVVZZZZ
|}


BBB  =BG palette
BBB  =BG palette
Line 32: Line 36:
ZZZZ  =Tile set
ZZZZ  =Tile set


Secondary level header
== Secondary level header ==


The secondary level header consists of four bytes.
The secondary level header consists of four bytes.
Line 41: Line 45:
Location of Byte 4: x2F800/$05F600 + level number
Location of Byte 4: x2F800/$05F600 + level number


|Byte 1| |Byte 2| |Byte 3| |Byte 4|
{| class="wikitable"
SSSSYYYY 33TTTXXX MMMMFFBB IUVEEEEE
|-
Byte 1 !!  Byte 2 !!  Byte 3 !!  Byte 4
|-
| SSSSYYYY || 33TTTXXX || MMMMFFBB || IUVEEEEE
|}


S = Layer 2 scroll settings
S = Layer 2 scroll settings
Line 57: Line 65:
E = Level entrance screen number
E = Level entrance screen number


Sprite header
=== Sprite header ===


The sprite header is the first byte of sprite data.
The sprite header is the first byte of sprite data.


|Byte |
{| class="wikitable"
SBMMMMMM
|-
! Byte
|-
| SBMMMMMM
|}


S      = Sprite buoyancy
S      = Sprite buoyancy
Line 68: Line 80:
MMMMMM = Sprite memory*
MMMMMM = Sprite memory*


*) Values up to 0x3F are possible, but only up to 0x12 are valid according to Lunar Magic.
<nowiki>*)</nowiki> Values up to 0x3F are possible, but only up to 0x12 are valid according to Lunar Magic.


Layer 1
== Layer 1 ==


(Note that MAP16 is not documented, as it's a feature added by Lunar Magic)
(Note that MAP16 is not documented, as it's a feature added by Lunar Magic)
Line 76: Line 88:
Each block is three bytes long, with the exception of the screen exit objects.
Each block is three bytes long, with the exception of the screen exit objects.


Standard objects
=== Standard objects ===
 
{| class="wikitable"
|-
!  First  !!  Second  !!  Last
|-
| NBBYYYYY || bbbbXXXX || SSSSSSSS
|}


|First | |Second| |Last  |
NBBYYYYY bbbbXXXX SSSSSSSS


N        = New Screen flag
N        = New Screen flag
Line 157: Line 174:
3F Tileset Specific 18
3F Tileset Specific 18


Extended objects
=== Extended objects ===


(Standard object 00)
(Standard object 00)


|First | |Second| |Last |
{| class="wikitable"
N00YYYYY 0000XXXX BBBBBBBB
|-
First !!  Second !!  Last
|-
| N00YYYYY || 0000XXXX || BBBBBBBB
|}


N        = New Screen flag
N        = New Screen flag
Line 312: Line 333:
98-FF Unused?
98-FF Unused?


Screen exits
=== Screen exits ===


(Extended object 00)
(Extended object 00)


|First | |Second| |Third | |Last |
{| class="wikitable"
000PPPPP 0000WUSH 00000000 DDDDDDDD
|-
First !!  Second !!  Third !!  Last
|-
| 000PPPPP || 0000WUSH || 00000000 || DDDDDDDD
|}


PPPPP    = Page number
PPPPP    = Page number
Line 335: Line 360:
(Extended object 01)
(Extended object 01)


|First | |Second| |Last |
{| class="wikitable"
000PPPPP 0000???? 00000001
|-
First !!  Second !!  Last
|-
| 000PPPPP || 0000???? || 00000001
|}


PPPPP    = Page to jump to
PPPPP    = Page to jump to
Line 343: Line 372:
The loading routine jumps to another screen.
The loading routine jumps to another screen.


Layer 2
== Layer 2 ==
Background
=== Background ===


Layer 2 backgrounds are compressed using a simple RLE system.
Layer 2 backgrounds are compressed using a simple RLE system.
Line 361: Line 390:
The line "FFFF" marks the end of the data.
The line "FFFF" marks the end of the data.


Level
=== Level ===


Layer 2 levels are stored in exactly the same way as Layer 1.
Layer 2 levels are stored in exactly the same way as Layer 1.
The five byte header is there as well, but doesn't seem to be used.
The five byte header is there as well, but doesn't seem to be used.


Sprites
== Sprites ==


The first byte of the sprite data is the sprite header.
The first byte of the sprite data is the sprite header.
Each sprite is three bytes long.
Each sprite is three bytes long.


|First | |Second| |Last |
{| class="wikitable"
YYYYEEsy XXXXSSSS NNNNNNNN
|-
First !!  Second !!  Last
|-
| YYYYEEsy || XXXXSSSS || NNNNNNNN
|}


yYYYY    = Y position
yYYYY    = Y position
Line 382: Line 415:
(Note: The first byte being FF marks the end of the data)
(Note: The first byte being FF marks the end of the data)


Secondary entrances
== Secondary entrances ==


(Not yet documented.)
(Not yet documented.)


[[Category:Super Mario World]]
[[Category:Super Mario World]]

Revision as of 18:50, 5 May 2023

This article contains information about how levels are stored in Super Mario World.

Pointer tables

x2E200/$05E000 Layer 1 data 0x200 levels, 3 bytes each. (1,536 bytes) x2E800/$05E600 Layer 2 data 0x200 levels, 3* bytes each. (1,536 bytes) x2EE00/$05EC00 Sprite data 0x200 levels, 2** bytes each. (1,024 bytes)

*) Layer 2 BG only uses the two lower bytes. The upper byte should be FF.

   The backgrounds are stored in bank 0C.

**) The sprite data is located in bank 07.

Primary level header

The first five bytes of the Layer 1 data is the primary level header.

First Second Third Fourth Last
BBBLLLLL CCCOOOOO 3MMMSSSS TTPPPFFF IIVVZZZZ

BBB =BG palette LLLLL =Length of level (amount of screens) CCC =BG color OOOOO =Level mode 3 =Layer 3 Priority MMM =Music SSSS =Sprite set TT =Time PPP =Sprite palette FFF =FG palette II =Item memory VV =Vertical scroll ZZZZ =Tile set

Secondary level header

The secondary level header consists of four bytes. (These four bytes are not stored together) Location of Byte 1: x2F200/$05F000 + level number Location of Byte 2: x2F400/$05F200 + level number Location of Byte 3: x2F600/$05F400 + level number Location of Byte 4: x2F800/$05F600 + level number

Byte 1 Byte 2 Byte 3 Byte 4
SSSSYYYY 33TTTXXX MMMMFFBB IUVEEEEE

S = Layer 2 scroll settings Y = Level entrance Y position 3 = Layer 3 settings T = Level entrance type X = Level entrance X position M = Level entrance midway screen F = Level entrance FG init position B = Level entrance BG init position I = Disable no-Yoshi intro flag U = Unknown vertical position flag V = Vertical positioning flag E = Level entrance screen number

Sprite header

The sprite header is the first byte of sprite data.

Byte
SBMMMMMM

S = Sprite buoyancy B = Sprite buoyancy (no sprite-L2 interaction) MMMMMM = Sprite memory*

*) Values up to 0x3F are possible, but only up to 0x12 are valid according to Lunar Magic.

Layer 1

(Note that MAP16 is not documented, as it's a feature added by Lunar Magic) The Layer 1 data begins with the primary level header, followed by the actual Layer 1 data. Each block is three bytes long, with the exception of the screen exit objects.

Standard objects

First Second Last
NBBYYYYY bbbbXXXX SSSSSSSS


N = New Screen flag BBbbbb = Object number YYYYY = Y position XXXX = X position SSSSSSSS = Settings byte

(Note: The first byte being FF marks the end of the data)

Settings byte Num Desc Upper 4 Lower 4


00 (Extended Objects) Extended object number 01 Water (Blue) Height Width 02 Invisible coin blocks Height Width 03 Invisible note blocks Height Width 04 Invisible POW coins Height Width 05 Coins Height Width 06 Walk-through dirt Height Width 07 Water (Other color) Height Width 08 Note blocks Height Width 09 Turn blocks Height Width 0A Coin ? blocks Height Width 0B Throw blocks Height Width 0C Black piranha plants Height Width 0D Cement blocks Height Width 0E Brown blocks Height Width 0F Vertical pipes Height Type 10 Horizontal pipes Type Width 11 Bullet shooter Height Unused 12 Slopes Height Type 13 Ledge edges Height Type 14 Ground ledge Height Width 15 Midway/Goal point Height Type 16 Blue coins Height Width 17 Rope/Clouds Type Width 18 Water surface (ani) Height Width 19 Water surface (not ani) Height Width 1A Lava surface (ani) Height Width 1B Net top edge Height Width 1C Donut bridge Unused Width 1D Net bottom edge Height Width 1E Net vertical edge Height Type 1F Vert. Pipe/Bone/Log Height Unused 20 Horiz. Pipe/Bone/Log Unused Width 21 Long ground ledge Width 22 Special - Used by LM 23 Special - Used by LM 24 Special - Used by LM 25 Special - Used by LM 26 Special - Used by LM 27 Special - Used by LM 28 Special - Used by LM 29 Special - Reserved 2A Special - Reserved 2B Special - Reserved 2C Special - Reserved 2D Special - Used by LM 2E Tileset Specific 1 2F Tileset Specific 2 30 Tileset Specific 3 31 Tileset Specific 4 32 Tileset Specific 5 33 Tileset Specific 6 34 Tileset Specific 7 35 Tileset Specific 8 36 Tileset Specific 9 37 Tileset Specific 10 38 Tileset Specific 11 39 Tileset Specific 12 3A Tileset Specific 13 3B Tileset Specific 14 3C Tileset Specific 15 3D Tileset Specific 16 3E Tileset Specific 17 3F Tileset Specific 18

Extended objects

(Standard object 00)

First Second Last
N00YYYYY 0000XXXX BBBBBBBB

N = New Screen flag YYYYY = Y position XXXX = X position BBBBBBBB = Extended object number

Num Desc


00 Special - Screen Exit 01 Special - Screen Jump 02-0F Unused? 10 Small door 11 Invisible ? block (1-UP) 12 Invisible note block 13 Top left corner edge tile 1 14 Top right corner edge tile 1 15 Small POW door 16 Invisible POW ? block 17 Green star block 18 3-UP moon 19 Invisible 1-UP #1 1A Invisible 1-UP #2 1B Invisible 1-UP #3 1C Invisible 1-UP #4 1D Red berry 1E Pink berry 1F Green berry 20 Always turning block 21 Bottom right of midway point (unused) 22 Bottom right of midway point (unused) 23 Note block (flower/feather/star) 24 ON/OFF block 25 Direction coins ? block 26 Note block 27 Note block, bounce on all sides 28 Turn block (Flower) 29 Turn block (Feather) 2A Turn block (Star) 2B Turn block (Star 2/1-UP/Vine) 2C Turn block (Multiple coins) 2D Turn block (Coin) 2E Turn block (Nothing) 2F Turn block (POW) 30 ? block (Flower) 31 ? block (Feather) 32 ? block (Star) 33 ? block (Star 2) 34 ? block (Multiple coins) 35 ? block (Key/Wings/Balloon/Shell) 36 ? block (Yoshi) 37 ? block (Shell) 38 ? block (Shell) 39 Turn block, unbreakable (Feather) 3A Top left corner edge tile 2 3B Top right corner edge tile 2 3C Top left corner edge tile 3 3D Top right corner edge tile 3 3E Top left corner edge tile 4 3F Top right corner edge tile 4 40 Transculent block 41 Yoshi Coin 42 Top left slope 43 Top right slope 44 Purple triangle, left 45 Purple triangle, right 46 Midway point rope 47 Door 48 Invisible POW door 49 Ghost house exit 4A Climbing net door 4B Conveyor end tile 1 4C Conveyor end tile 2 4D Line guide, top left 1/4 large circle 4E Line guide, top right 1/4 large circle 4F Line guide, bottom left 1/4 large circle 50 Line guide, bottom right 1/4 large circle 51 Line guide, top left 1/4 small circle 52 Line guide, top right 1/4 small circle 53 Line guide, bottom left 1/4 small circle 54 Line guide, bottom right 1/4 small circle 55 Line guide end, for horizontal line 56 Line guide end, for vertical line 57 Switch palace bottom right corner tile 58 Switch palace bottom left corner tile 59 Switch palace top right corner tile 5A Switch palace top left corner tile 5B Bit of brick background tile 1 5C Bit of brick background tile 2 5D Bit of brick background tile 3 5E Bit of brick background tile 4 5F Large background area 60 Lava/mud top right corner edge 61 Ghost house clock 62 Ghost house top left to bottom right beam 1 63 Ghost house top right to bottom left beam 1 64 Ghost house cobweb, top right 65 Ghost house cobweb, top left 66 Ghost house top right to bottom left beam 2 67 Ghost house top left to bottom right beam 2 68 Cloud fringe, bottom and right edge 69 Cloud fringe, bottom and left edge 6A Cloud fringe, bottom right 6B Cloud fringe, bottom left 6C Cloud fringe on white, bottom and right edge 6D Cloud fringe on white, bottom and left edge 6E Cloud fringe on white, bottom right 6F Cloud fringe on white, bottom left 70 Bit of canvass 1 71 Canvass 1 72 Canvass 2 73 Canvass 3 74 Canvass 4 75 Canvass tile 1 76 Canvass tile 2 77 Canvass tile 3 78 Canvass tile 4 79 Canvass tile 5 7A Canvass tile 6 7B Canvass tile 7 7C Bit of canvas 2 7D Bit of canvas 3 7E Bit of canvas 4 7F Torpedo launcher 80 Ghost house entrance 81 Water weed 82 Big bush 1 83 Big bush 2 84 Castle entrance 85 Yoshi's house 86 Arrow sign 87 ! block, green 88 Tree branch, left 89 Tree branch, right 8A Switch, green 8B Switch, yellow 8C Switch, blue 8D Switch, red 8E ! block, yellow 8F Ghost house window 90 Boss door 91 Steep left slope (vert. lev.) 92 Steep right slope (vert. lev.) 93 Normal left slope (vert. lev.) 94 Normal right slope (vert. lev.) 95 Very steep left slope (vert. lev.) 96 Very steep right slope (vert. lev.) 97 Switch palace right and bottom edge tile 98-FF Unused?

Screen exits

(Extended object 00)

First Second Third Last
000PPPPP 0000WUSH 00000000 DDDDDDDD

PPPPP = Page number W = Water (secondary exit) U = Secondary Exit? * S = Secondary Exit H = Unused ** DDDDDDDD = Lower 8 bits of destination level

Creates a screen exit. Should be placed right before the end of the level.

  • ) Used by a Lunar Magic ASM hack: If set, the H bit will be used
    • ) Used by a Lunar Magic ASM hack: High bit of destination level (only if the U bit is set)

Screen jump

(Extended object 01)

First Second Last
000PPPPP 0000???? 00000001

PPPPP = Page to jump to ???? = Unused?

The loading routine jumps to another screen.

Layer 2

Background

Layer 2 backgrounds are compressed using a simple RLE system.

A background consists of any number of "lines". There are two types: Normal line and RLE line

Each line begins with a start byte. The highest bit decides what kind of line it is. (0 = Normal, 1 = RLE) The other 7 bits are the "length" setting, which is the amount of tiles in the line minus 1.

A normal line is then followed by (length+1) bytes, each being a tile in the background. An RLE line is only followed by a single byte which is repeated (length+1) times.

The entire left half of the background is stored first, followed by the entire right half.

The line "FFFF" marks the end of the data.

Level

Layer 2 levels are stored in exactly the same way as Layer 1. The five byte header is there as well, but doesn't seem to be used.

Sprites

The first byte of the sprite data is the sprite header. Each sprite is three bytes long.

First Second Last
YYYYEEsy XXXXSSSS NNNNNNNN

yYYYY = Y position EE = Extra bits XXXX = X position sSSSS = Screen number NNNNNNNN = Enemy number

(Note: The first byte being FF marks the end of the data)

Secondary entrances

(Not yet documented.)