Copyright: HelpBuilder ® 1993 - 1996 G.Plowman


About the program

"Metroid" is a popular series of action/adventure games made by Nintendo. The first installment, which this program is dedicated to, was released for the NES in 1986.

MetEdit allows you to edit many aspects of the original Metroid game, such as the level design, the enemy types and positions, and  the locations of the special items. The goal is that, one day, all important aspects of the game will be editable, so that entirely new games can be created using the Metroid "engine". In order words, MetEdit is a highly ambitious project.

If you make a Metroid hack using this program, do mention me and/or this program in the credits. I'm not charging any money for MetEdit even though I've spent countless hours developing it, so I don't think I'm asking for much.

For the latest version of MetEdit, visit:

http://home.sol.no/~kenhanse

If you have any comments, email:

kentmhan@online.no

Thanks

The following people deserve credit for their help and support:

Rob Mocca

Charles DuMarr

Jay McGavren


Attribute table
The attribute table is a part of NES PPU (video) memory which holds 2-bit palette selectors for each 2x2 tile grid of the screen.


Basic editing

Game map

The areas of Metroid are built up of several "rooms" (a room = one NES

screen, 256x240 pixels in size), which are chained together to form larger

shafts and corridors. The internal game map basically tells which room to

display at each map position. In the main editor window, you move around on

the map by using the arrow keys. When you want to see exactly where you are

on the map, or get to a certain spot in the game quickly, enter the map

editor from the Tools menu. (More info on the map editor at the Tools page.)

You can change what room to display at a certain map position by using

the -/+ keys.

Unfortunately, the fact that rooms can and must be re-used, limits the freedom of level editing. You have to remember that the room you are making changes to is most likely used somewhere else in the area, which means you have to design them in such a manner that they can be used in more than one place without causing trouble (you don't want Samus to go through a door and then get stuck in a wall, for example). But hey, the Metroid designers could do it, so why can't you? ;-)

Editing room objects

Each room consists of a certain number of objects. In order to

manipulate an object, you have to select the object to edit. To

do this, point at the desired object, then click and hold the

left mouse button. To change the object's position, simply move

the mouse. To change the object type, click the right mouse button

repeatedly until you find the desired type. Hold the Shift key

while doing so to go backwards through the available object types.

Press spacebar repeatedly to cycle through the 4 4-color palettes that

the object can use.

The objects are drawn in the order in which they appear in the

room data, thus giving each object a unique priority. This can

be used to make one object appear partially or completely behind

another object.

Editing enemies

You edit enemies just like you edit room objects: Select the desired

enemy and manipulate it as desired according to the description above.

Pressing spacebar now toggles between the normal edition and the

"hard-type" edition of the enemy. The "hard-type" edition is usually twice as powerful as the normal edition, or has some other quality that makes it harder (or impossible) to beat.

Status bar

The status bar describes the current editing process. When an object isn't

selected for editing, the current map position and the room number at this

position is displayed. When you click on an object, the status bar will

display relevant info about the object.


Contents Page
MetEdit for Windows 9X

Thanks for downloading MetEdit. To ensure maximum enjoyment of the program, make sure to read this help file thoroughly.

  About the program

  Basic editing

  Tools menu

  Metroid bugs and quirks

  The secret worlds

© Kent Hansen 1999


Metroid Secret Worlds

Most fans of Metroid have probably heard of the so-called "Secret Worlds". For a long time, I maintained a site concerning these strange areas. It was my hope that they weren't just a glitch, but actually put there on purpose, as an added bonus to those who had played the game to death (and there are a lot of us). So I spent many hours creating maps and writing detailed descriptions on how to access every one of these parts of the game. Through my hacking of Metroid, however, I've come to the (sad) conclusion that the areas are simply bugs  in the game engine. To understand what really happens when you access one of these areas, one has to know about the format of the level data.

Each of the main parts of Metroid: Brinstar, Norfair, Tourian, Kraid's Hideout and Ridley's Hideout, have an area map. (Actually, they are all part of one large map.) Each location in this map contains a value which holds the room number to display at that location in the area. OK, let's take a concrete example. Here's what the map data for the first horizontal corridor in the game (where you start out) looks like:

08 17 09 14 13

|      |

|      |

|      +------ This is where you get beamed down.

+--------- This is where the Maru Mari (crystal ball) is.

The actual room data (the objects and enemies in the rooms) for these map locations is defined elsewhere in the ROM. (I won't get into the format of that data, since it's quite complex and you don't really need to know it, unless you're planning to make your own level editor for Metroid.)

What does this mean, then? Well, it means that the game can use the same rooms more than once; it simply has to reference the appropriate room number in the map data. For example, the following sequence of values make up a long horizontal corridor:

14 14 14 14 14

Next follows an explanation of how the game code uses the map data when you're playing the game.

At all times, when you're playing Metroid, there is a value in NES memory which holds the offset (pointer) into the area map. When you go one room left, the pointer is decreased by one. When you go one room right, the pointer is increased by one. When you go one room up, the pointer is decreased by 32 (32 is the width of the map). When you go one room down, the pointer is increased by 32. This way the game code can effectively fetch the room number from the current area map

position and set up the room you've entered. For a graphical representation of what I just explained, check out the map in the upper left corner of Zelda; it's very similar to how the Metroid area maps look like in memory.

OK, now for the "hidden area" part. You probably know about the so-called "wall-door" trick; the method that must be employed in order to access these areas. (Actually, you don't have to anymore, because there are Game Genie codes which enable you fall right through the floor and jump through walls - see end of this document.) The game programmers never intended this to be

possible.

So what happens when you go up or down, when you're not really supposed to be able to? Well, the map pointer will be decreased/increased as usual. But the data it points to will no longer be valid, because the data it accesses isn't part of

the area's map! This won't crash the game though; it will continue to treat the data as valid. So there you have your "secret world": a mix of invalid map locations containing who-knows-what.

But wait: the map data accessed in such cases, is actually technically valid; it is part of the game map. The problem is that the data belongs to a different area. You've probably heard of the "huge secret world" above Ridley's Hideout. Well, what really happens when you enter that area, is that you're accessing the map data from Norfair, since that is the data contained in memory directly above the map for Ridley's Hideout. I know that this may sound strange, but to make things clearer, let me explain what happens when you take an elevator from one part of the game to the other.

The elevators are actually just excuses for the game code to bank-switch. As you probably know, the NES has a pretty limited amount of memory; only 32K of program ROM space. So when you take an elevator, the game uses this opportunity to switch to another ROM bank, containing the music, graphics

data (since Metroid has no VROM), pointer tables, room data and other things specific to that area of the game. This explains why the "secret world" above Ridley's Hideout uses map data from Norfair, yet the rooms look just like they are

part of Ridley's Hideout: the game code hasn't bank-switched. It will use the map data from Norfair, but the room data and graphics from Ridley's Hideout!

MetEdit doesn't require you to go via the elevators to change the graphics and room data; every time you enter a new room, the editor checks which area that position in the map belongs to, and sets the pointers to the data accordingly. This makes it easy to test what I just explained above:

From the elevator in Ridley's Hideout, go down one room, then go to the far right, until you reach the top of a long vertical shaft. Above this point, one of the "secret

worlds" is located. But by going up a couple of times you see that, WOW, this isn't a hidden zone; it's Norfair! Press spacebar to enter the map viewer, then you can see where you're actually at. Does it look like a secret world to you?

And that's it. This document has probably crushed the hopeful dreams of quite a few avid Metroid gamers, but on the other hand; at least you know the truth now.

Some interesting Game Genie codes for Metroid:

SUPEAI - descend through floor a little each time you shoot up.

TTXTTT - walk left through walls.

EEXTTY - jump through ceilings.

KAPGEI - jump in mid-air.

SSAEAI - travel freely through walls when you're a ball.

SSXAEI - get stuck in walls (it CAN be useful).

KUSTIN - standby if you get stuck in a wall.

Thanks to Dave Stewart & Jeffrey Toyes for these codes.


Metroid bugs and quirks

This is a collection of bugs and weird things discovered in the course of

hacking Metroid and studying the game's code.

There are three locations on the original game map that are inaccesible

in the game - I guess you could call these the *real* secret worlds of

Metroid, even though they are just single rooms. The programmers or

designers somehow forgot to remove them; the map locations in question are

most likely left-overs from an early design.

There are two rooms in Brinstar which aren't used at all: Room 2Ah and 2Dh.

The only thing they do is waste valuable ROM space which could have been

used for something else.

Even though the programmers seem to have gone out of their way to make data formats as tight as possible, there is room for considerable

improvements  in some cases. The best example of this is the room data format. Each room object is three bytes in size: One byte containing the object's X,Y position on the screen, another containing the object's type,

and a third  byte holding the object's palette selector. The palette selector is a 2-bit value, while the object type value never goes higher than 6 bits. This means that

the palette value and type value could easily be combined into one byte,

thereby shrinking the room data down to 2/3 of its original size! I have

written a patcher which compresses the data this way, and makes the

necessary changes to the game code - it works perfectly.

For each room, there is a default palette selector. This is (supposed to be)

the background palette number that is used the most in that particular room.

All the entries in the Attribute Table are set to this value before the room

objects are set up. The idea behind this is that the object routine won't

have to modify the attribute table as many times afterwards, because most of

the objects use the default palette. But because of programmer sloppiness,

this isn't true in many cases: Some rooms have the wrong default palette

enabled. I can think of two possible reasons for this. One is that the

designers changed some rooms completely around, and modified the palette

number of most of the room objects, but then the programmers forgot to

update the default palette number. Another possible reason is that while

some rooms have the correct default palette according to the highest

number of objects that share the same palette, the palette # is incorrect

if you take the size of the objects into account. For example, six

2x2-tile objects (with the same palette) together occupy a smaller region of

the screen than just one 16x16-tile object (with a different palette).

Therefore, the default palette should be that of the one large structure,

but it's not. In such cases, setting up the room will be slower, because

the piece of code which modifies the Attribute Table will be executed for

almost every object.

The conclusion is that Metroid uses lots of (in theory) clever tricks, but

many of them fail because of sloppiness in the final process.


Tools menu

Map editor

Your current position on the map is indicated by a white cursor. You

can move around on the map with the arrow keys, just like in the

main editor window, but you can also use the left mouse button to

select the map position you wish to go to. The color of a certain

map position specifies which area it is part of. Color codes are as

follows:

Blue      -       Brinstar

Green   -       Norfair

Red       -       Tourian

Purple  -       Kraid's Hideout

Cyan     -       Ridley's Hideout

Some of the map positions are black, meaning that they are currently

unused in the game; Samus can't go there. Such positions can be

activated simply by pressing the left mouse button on the position

you want to activate. The area code of a certain map position can be

changed by clicking on that position with the right mouse button.

Press repeatedly to cycle through the 5 different area codes. If you

want to remove an active map position, select that position, then

press Delete.

When you save the changes to your Metroid ROM, MetEdit saves the area

codes for all the map positions to a file named "metedit.map", and

this file is automatically loaded the next time you load the ROM.

MetEdit needs this info to know what room data to associate with

each map position, since this can't be retrieved directly from the

ROM without actually running the game. This means that if you change

an area code on the map through the map editor, you have to be sure

that when this map position is accessed _when the game is actually

played_, the proper ROM bank is already loaded into $8000. For

example, if you change the area code at the position where you begin

in Brinstar from Blue to Red (Tourian), MetEdit will think that this

map position is actually part of Tourian - which it isn't.

You can change the start position on the map for a certain area by clicking the left mouse button on the desired position while holding Shift down. A messagebox will appear, letting you know that the starting position for the current area was changed.

Some words about how the scrolling works in Metroid. Every time you go through a door, the scrolling type is toggled; it switches from vertical to horizontal, or vice versa. The only times this does not hold true is when you enter or exit the room which has a chozo statue in it, in that case the scrolling stays horizontal. Keep this is mind when designing the area maps. Generally, you can't have two horizontal shafts next to each other - you have to alternate between horizontal and vertical shafts.

Item editor

Select the area you wish to edit from the first listbox, and the item

you want to change in the box below it. To change the map position of a

selected special item, simply click on the desired position on the map

to the right.

One limitation to be conscious of, is that you can't have more than one

special  item on the same Y line of the map. If you put two or more items on the

same line, only one of the items will be shown when playing the game. A similar problem exists with items which are already on the same line in the original game: They share the same Y coordinate, so moving one of them automatically moves the other item to the same line! Its X coordinate, however, is retained. Examples of this include Tourian elevator <-> Varia, and Maru Mari <-> Energy tank. Currently, MetEdit can only display the 1st item on the line.

Palette editor

The palette editor lets you change the colors of the background objects

and enemies in the game. The area palettes are arranged in 4-color

groups. (Each object can't have more than 4 different colors -

actually only 3, because entry #0 of each palette is transparent.)

In the upper left portion of the window are the 4 background palettes

in descending order, and to the right of them are the sprite palettes.

The currently selected palette entry is indicated by a white cursor.

Below the game palettes are all the available NES colors. To change a

palette entry, simply click on the desired entry, then click on the

desired NES color.

Password creator

The password is generated based on which item boxes are checked in the

item list. There are some item descriptions missing; if you figure out

the meaning of some of the unknown bits, please send a brief description

to me. Some of the password bits are maybe not used at all, though.

You can also decode an existing password by entering it in the space next

to the "Decode" button, then clicking that button. This will check the

appropriate boxes in the item list according to the password data.

A note about the game's starting point: Check both the "Norfair" and

"Kraid's Hideout" box to begin in Tourian.