Welcome to Data Crystal's new home! Data Crystal is now part of the TCRF family (sort of).
The wiki has recently moved; please report any issues in Discord. Pardon the dust.

Blaster Master/ROM map

From Data Crystal
Jump to navigation Jump to search

Chip tiny.png The following article is a ROM map for Blaster Master.

All offsets in this document are relative to the beginning of the headerless ROM. To get the offset for a headered ROM (.nes) file, add 0x10 (16 in decimal) to the offset. The data structures listed below are described in detail here.

Note that because the game references data via pointers, the layout of level data doesn't necessarily need to be in a consistent order. In theory the data for all of the levels within a single bank could be intermixed, though this would be impractical.

PRG-ROM

The PRG-ROM consists of 8 banks of 16 KB each. First three of these contain all the data associated with level maps (both tank and overhead levels) including their physical attributes. The fourth bank contains data related to enemies and powerups, together with some additional data. Banks 4-7 presumably contain the actual game engine code, music, sound effects, etc.

Bank 0

0x00000   Level 1 base pointers
0x00004   Level 2 base pointers
0x00008   Level 3 base pointers
0x0000C   Level 4 base pointers
0x00010   Level 5 base pointers
0x00014   Level 1 data pointer table
0x00020   Level 1 background palette
0x00030   Level 1 combo description list (154 combos)
0x00298   Level 1 structure description list (244 structures)
0x00668   Level 1 block description list (203 blocks)
0x00994   Level 1 map data
0x00D94   Level 1 combo attribute list
0x00E2E   Level 1 scroll data
0x00E3E   Level 2 data pointer table
0x00E4A   Level 2 background palette
0x00E5A   Level 2 combo description list (152 combos)
0x010BA   Level 2 structure description list (142 structures)
0x012F2   Level 2 block description list (160 blocks)
0x01572   Level 2 map data
0x01972   Level 2 scroll data
0x01982   Level 2 combo attribute list
0x01A1A   Level 3 data pointer table
0x01A26   Level 3 background palette
0x01A36   Level 3 combo description list (121 combos)
0x01C1A   Level 3 structure description list (128 structures)
0x01E1A   Level 3 block description list (179 blocks)
0x020E6   Level 3 map data
0x024E6   Level 3 combo attribute list
0x0255F   Level 3 scroll data
0x0256F   Level 4 data pointer table
0x0257B   Level 4 background palette
0x0258B   Level 4 combo description list (131 combos)
0x02797   Level 4 structure description list (182 structures)
0x02A6F   Level 4 block description list (158 blocks)
0x02CE7   Level 4 map data
0x030E7   Level 4 combo attribute list
0x0316A   Level 4 scroll data
0x0317A   Level 5 data pointer table
0x03186   Level 5 background palette
0x03196   Level 5 combo description list (130 combos)
0x0339E   Level 5 structure description list (159 structures)
0x0361A   Level 5 block description list (184 blocks)
0x038FA   Level 5 map data
0x03CFA   Level 5 combo attribute list
0x03D7C   Level 5 scroll data
0x03D8C   [628 bytes of unused space]

Bank 1

0x04000   Level 6 base pointers
0x04004   Level 7 base pointers
0x04008   Level 8 base pointers
0x0400C   Level 9 base pointers
0x04010   Level 11 base pointers
0x04014   [2 bytes of unused space]
0x04016   Level 6 data pointer table
0x04022   Level 6 background palette
0x04032   Level 6 combo description list (104 combos)
0x041D2   Level 6 structure description list (193 structures)
0x044D6   Level 6 block description list (202 blocks)
0x047FE   Level 6 map data
0x04BFE   Level 6 scroll data
0x04C0E   Level 6 combo attribute list
0x04C76   Level 7 data pointer table
0x04C82   Level 7 background palette
0x04C92   Level 7 combo description list (122 combos)
0x04E7A   Level 7 structure description list (177 structures)
0x0513E   Level 7 block description list (206 blocks)
0x05476   Level 7 map data
0x05876   Level 7 combo attribute list
0x058F0   Level 7 scroll data
0x05900   Level 8 data pointer table
0x0590C   Level 8 background palette
0x0591C   Level 8 combo description list (133 combos)
0x05B30   Level 8 structure description list (149 structures)
0x05D84   Level 8 block description list (254 blocks)
0x0617C   Level 8 map data
0x0657C   Level 8 combo attribute list
0x06601   Level 8 scroll data
0x06611   Level 9 data pointer table
0x0661D   Level 9 background palette
0x0662D   Level 9 combo description list (76 combos)
0x0675D   Level 9 structure description list (124 structures)
0x0694D   Level 9 block description list (136 blocks)
0x06B6D   Level 9 map data
0x06E8D   Level 9 combo attribute list
0x06ED9   Level 9 scroll data
0x06EE9   Level 11 data pointer table
0x06EF5   Level 11 background palette
0x06F05   Level 11 combo description list (90 combos)
0x0706D   Level 11 structure description list (99 structures)
0x071F9   Level 11 block description list (114 blocks)
0x073C1   Level 11 map data
0x077C1   Level 11 scroll data
0x077D1   Level 11 combo attribute list
0x0782B   [2005 bytes of unused space]

Bank 2

0x08000   Level 13 base pointers
0x08004   Level 10 base pointers
0x08008   Level 14 base pointers
0x0800C   Level 16 base pointers
0x08010   Level 12 base pointers
0x08014   Level 15 base pointers
0x08018   [10 bytes of unused space]
0x08022   Level 13 data pointer table
0x0802E   Level 13 background palette
0x0803E   Level 13 combo description list (112 combos)
0x081FE   Level 13 structure description list (112 structures)
0x083BE   Level 13 block description list (128 blocks)
0x085BE   Level 13 map data
0x0895E   Level 13 scroll data
0x0896E   Level 13 combo attribute list
0x089DE   Level 10 data pointer table
0x089EA   Level 10 background palette
0x089FA   Level 10 combo description list (75 combos)
0x08B26   [4 bytes of unused space]
0x08B2A   Level 10 structure description list (124 structures)
0x08D1A   Level 10 block description list (108 blocks)
0x08ECA   Level 10 map data
0x092CA   Level 10 scroll data
0x092DA   Level 10 combo attribute list
0x09325   Level 14 data pointer table
0x09331   Level 14 background palette
0x09341   Level 14 combo description list (73 combos)
0x09465   [12 bytes of unused space]
0x09471   Level 14 structure description list (112 structures)
0x09631   Level 14 block description list (120 blocks)
0x09811   Level 14 map data
0x09C11   Level 14 scroll data
0x09C21   Level 14 combo attribute list
0x09C6A   Level 16 data pointer table
0x09C76   Level 16 background palette
0x09C86   Level 16 combo description list (75 combos)
0x09DB2   [4 bytes of unused space]
0x09DB6   Level 16 structure description list (136 structures)
0x09FD6   Level 16 block description list (144 blocks)
0x0A216   Level 16 map data
0x0A616   Level 16 scroll data
0x0A626   Level 16 combo attribute list
0x0A671   Level 12 data pointer table
0x0A67D   Level 12 background palette
0x0A68D   Level 12 combo description list (94 combos)
0x0A805   [8 bytes of unused space]
0x0A80D   Level 12 structure description list (132 structures)
0x0AA1D   Level 12 block description list (108 blocks)
0x0ABCD   Level 12 map data
0x0AFCD   Level 12 scroll data
0x0AFDD   Level 12 combo attribute list
0x0B03B   Level 15 data pointer table
0x0B047   Level 15 background palette
0x0B057   Level 15 combo description list (92 combos)
0x0B1C7   Level 15 structure description list (116 structures)
0x0B397   Level 15 block description list (152 blocks)
0x0B5F7   Level 15 map data
0x0B9F7   Level 15 scroll data
0x0BA07   Level 15 combo attribute list
0x0BA63   [1437 bytes of unused space]

(Overhead levels are denoted here with numbers 9-16.)

Notes

  • The size of any data entry in the list above can be calculated by subtracting its offset from the offset of the next entry. All gaps and unused areas between data structures are explicitly mentioned in the list.
  • Level data pointer table, background palette, and scroll data all have the same sizes for every level (12, 16 and 16 bytes, respectively). Map data is 1024 bytes long for all other levels except 9 and 13, the former having only 800 bytes of map data and the latter having 928 bytes.
  • Combo description list, structure description list, block description list, and combo attribute list have different sizes for each level. The description lists consist of 4-byte items, thus their sizes are multiples of four. Combo attribute list has the same number of items as the corresponding combo description list, and since each attribute list item takes one byte, the size of combo attribute list is one fourth of the corresponding combo description list.

CHR-ROM

The character ROM consists of 32 banks of 4 KB in size. CHR-ROM layout is as follows:

0x20000   Bank 00   Sprite graphics for tank levels 1, 4 and 7
0x21000   Bank 01   Sprite graphics for tank levels 2, 6 and 8
0x22000   Bank 02   Sprite graphics for tank level 5
0x23000   Bank 03   Sprite graphics for tank level 3

0x24000   Bank 04   Game intro sequence graphics (1/3)
0x25000   Bank 05   Game intro sequence graphics (2/3)
0x26000   Bank 06   Graphics for tank explosion & Jason's death at tank levels
0x27000   Bank 07   Game title screen & text only screens

0x28000   Bank 08   Background graphics for tank level 1
0x29000   Bank 09   Background graphics for tank level 2
0x2A000   Bank 10   Background graphics for tank level 3
0x2B000   Bank 11   Background graphics for tank level 4
0x2C000   Bank 12   Background graphics for tank level 5
0x2D000   Bank 13   Background graphics for tank level 6
0x2E000   Bank 14   Background graphics for tank level 7
0x2F000   Bank 15   Background graphics for tank level 8

0x30000   Bank 16   Sprite graphics common to all overhead levels
                    (also partially used for the pause screen)

0x31000   Bank 17   Background/enemy graphics for overhead levels 1 and 8
0x32000   Bank 18   Background/enemy graphics for overhead levels 3 and 5
0x33000   Bank 19   Background/enemy graphics for overhead levels 2 and 6
0x34000   Bank 20   Background/enemy graphics for overhead levels 4 and 7

0x35000   Bank 21   Pause screen graphics
0x36000   Bank 22   Game intro sequence graphics (3/3)
0x37000   Bank 23   Graphics for the end credits

0x38000   Bank 24   Boss graphics for levels 2, 4, 6 and 7
0x39000   Bank 25   Boss graphics for levels 1 and 3
0x3A000   Bank 26   Graphics for level 5 boss
0x3B000   Bank 27   Graphics for level 8 boss
0x3C000   Bank 28   Graphics for the final boss

0x3D000   Bank 29   Animation shown when starting a new game
0x3E000   Bank 30   Level 1 gatekeeper graphics
0x3F000   Bank 31   Cinematic sequence before the end credits

The first 160 tiles of banks 0, 1, 2, 3 and 30 are identical - only the last 96 tiles differ. This means that the level-specific enemy sprites reside in the last 96 tiles of those banks. Additionally, the first 128 tiles of bank 6 are identical with those of banks 0, 1, 2, 3 and 30.

Miscellaneous info

  • Background palettes for each level:
    (t=tank, o=overhead)
1t:  0f 07 00 01   0f 02 01 1c   0f 0a 18 28   0f 17 19 10
2t:  0f 0b 00 10   0f 0a 1b 20   0f 07 17 10   0f 05 16 10
3t:  0f 06 17 10   0f 07 00 10   0f 14 19 10   0f 0b 00 37
4t:  0f 0b 00 10   0f 0b 11 3c   0f 07 00 3b   0f 06 17 38

5t:  0f 0c 1b 10   0f 07 17 10   0f 0b 1a 2a   0f 0c 14 24
6t:  0f 1c 2c 31   0f 00 26 36   0f 0b 1c 2b   0f 2c 3c 30
7t:  0f 16 26 36   0f 07 16 26   0f 05 15 26   0f 08 0a 1a
8t:  0f 05 14 35   0f 05 16 36   0f 02 13 23   0f 05 1b 20

1o:  0f 06 17 27   0f 07 19 28   0f 07 17 19   0f 07 00 10
2o:  0f 0b 00 10   0f 07 17 10   0f 07 00 3b   0f 00 10 20
3o:  0f 07 00 10   0f 05 14 10   0f 0b 1b 2c   0f 16 26 36
4o:  0f 0a 1b 20   0f 07 17 3a   0f 19 10 20   0f 0c 1c 31

5o:  0f 0a 1a 2a   0f 02 12 21   0f 0a 11 2c   0f 16 26 36
6o:  0f 1c 2c 3c   0f 0b 1b 2c   0f 02 22 31   0f 1c 2c 30
7o:  0f 08 1a 2b   0f 03 12 22   0f 07 17 10   0f 05 15 27
8o:  0f 09 19 04   0f 07 17 36   0f 04 19 2a   0f 05 23 14