Using SMB3 Workshop

SMB3 Workshop is an editor for Super Mario Bros. 3, for the NES. This version was created in 2007 by hukka, and he will ask for a donation to continue it. It edits levels, palettes (colors), a few miscellaneous properties, and graphics, if needed. Basically, it can "make custom levels" for Super Mario Bros. 3. This page is a tutorial or guide for SMB3 Workshop. You can look at this page if there's some problem or help you need with SMB3 Workshop. To start, open up SMB3 Workshop, and open a ROM that you are ready to edit. You will get to choose which level you would like to edit. Get into one, and you can select objects by left-clicking on them, and selecting enemies by right clicking on them. You can save the ROM by clicking the green disk button, or clicking the red disk button to save it as a different ROM. The program will start editing the ROM that you saved it as if you used the red disk. All the buttons do what they say, really. Toolbar

Making a level


Starting to edit a levelFirst, go to the Object tab, and find the Delete All list. Here, you will be able to delete all objects and enemies in a level and clear it (you wouldn't want to play a level almost exactly like the original game, would you?). Select 3-byte Objects, 4-byte Objects, and Enemies to remove everything and start building your own level. From then on, editing a level is really easy. Click on the "Add 3-byte Object" button. There are arrows on the left and a slider on the right. Use these to change the object. 4-byte objects’ have one more byte than 3-byte objects, and it is used for length. Add a 4-byte object, and the arrows and scrolling tools will be enabled, and the length can be altered.

Apart from having fun and looking neat, level editing is also about keeping the total number of objects and enemies in the level equal or less than the totals of the original level (unless you can make up for it through some hex editing). Look for the total number of bytes that your level currently has. You can see it when nothing is currently selected. In the lower right-hand corner, the first number is the total number of bytes in hex; the number in parenthesis is the number of bytes in decimal, the normal number system we’ve always used (you only have to mind the hex number if you want to use extra space or use another level’s data using a hex editor). There is a document that contains the total number of objects and enemies in each level and the location of those levels. However, it doesn’t say the total number of bytes combined. You will either have to calculate this or take a quick peek into an original SMB3 ROM with SMB3 Workshop. Also, the Limit Size feature may be useful when you edit a new level. This keeps you from exceeding object and enemy data limits. It doesn't, however, keep the original data size stored; if you reload the level after editing, or close SMB3 Workshop and open it again, and Limit Size is still checked, then it will keep you from adding any more objects and enemies. The number of objects and enemies that was in the level right before you saved and reloaded will be the limit that SMB3 Workshop will use.

Object that requires a pointer, with horizontal hex position in blue.Pointer Properties window of the level above.
When you want a door or pipe that can be entered, or a red note block, you need to use a pointer. Pointers are 3-byte objects that you can add simply by changing the bank of any 3-byte object to Bank 7.Pointers do what their name says; they "point" Mario/Luigi to an exact location in the level described in the level header. The level that a pointer is pointing to (unless using the pipe that "ignores pointers" or goes to a level ending) is found under the Next area/Start tab when you are looking at the header. The offset for the level and the object set is displayed. Input these, and make sure to set the proper object set. Click OK, and save the ROM. Click on your object that's going to take Mario to the next level. The second number near the bottom right-hand corner (indicated here by the blue arrow) is the horizontal location of the object, in hex. Add a 3-byte object, and go to Bank 7. The object is now a pointer; either press Enter, click the Pointer Properties button in the toolbar, or go to the bottom-right corner of SMB3 Workshop and click Edit Pointer. The pointer properties box uses hex numbers. Remember the horizontal position of your object? Set the Entrance Horizontal range so that it fits that hex number. In the case above, the red note block is located at X:22 in hex, so the Entrance Horizontal would be 20-2F. The Exit Horizontal is the exact location where Mario will enter the next stage. The Exit Vertical can be set to a certain number of vertical positions. Keep in mind that Y:00 starts at the top and ends with Y:26 (1A in hex) at the very bottom. Set the Exit Action to the way that Mario should exit. There aren't any differences between the two downward pipe entries. For reference, Exit Type 7 is a rebound from a red note block.

The header contains the information about the level: the length, music, level that the pointers point to, type of scrolling, choice of palette, and a few other things. The level header editor will open when you click on the H. The level header is nine bytes long and isn't counted towards level size. There are three tabs: the Visual tab, the Next Area/Start tab, and the Miscellaneous tab.


Click on “Add Enemy”. A Goomba will be added. When the same object/enemy is added repeatedly, the next time you add one, the one used most often will show up instead. Like objects, enemies have their own data locations and they need to stay in their limits as well. Many combinations of enemies will glitch graphically if they’re on the screen on the same time. The NES can’t load some graphics banks at the same time. The Enemy Compatibility page given with SMB3 Workshop (under the Help menu) gives a list of the enemies that can be shown together. You can also view it in a link at the bottom of this page.

Some kinds of enemies will act differently depending on their vertical(Y) or horizontal(X) position. They're often referred to as sprites. For example, the ausoscrolling enemy will make the screen scroll, and every Y location has its own scrolling path. At some locations below Y:26, the autoscrolling enemy will make the screen rise and fall. The coins required for a White Mushroom House to appear is indicated by the Y value of the White Mushroom House sprite (its X value needs to be uneven). There are also some sprites that stop or generate enemies; there's a sprite that stops infinite flying cheep-cheeps and spiny cheep-cheeps, and a sprite for each kind that will start them. There are sprites that start an infinite number of leftward-moving wooden platforms, and one that serves as a "boundary" for Lakitu.

Two sprites that should go along with the Treasure Chest.A treasure chest needs two special sprites along with the chest: Enemy 214 and Enemy 186. The treasure chest alone will give you an inverted image of a treasure chest, which is nothing. Enemy 214 will indicate which item the treasure chest will give you when it's collected. Its Y position determines which item the chest will give you. The X position is flexible. However, you may notice that the timer stops when the chest is collected. Enemy 186 ends the level after the chest is collected. Unlike sprite 214, this sprite doesn't have to be placed anywhere in particular. The Y positions that sprite 214 uses to give items are as follows:

Vertical locations for sprite 214
Y Location Item in Chest
00 Nothing
01 Mushroom
02 Fire Flower
03 Leaf
04 Frog Suit
05 Tanooki Suit
06 Hammer Bros. Suit
07 Jugem's Cloud
08 P-Wing
09 Starman
10 Anchor
11 Hammer
12 Whistle
13 Music Box


Level Palette

To edit a level's palette, click the icon with the painting tools. Simply choose the colors you wish to have in your hack. The Object Set drop-down menu lets you choose which Object Set's palette to edit, and the Level Colorset menu lets you select which palette you'll edit. None of these options are necessary for use. If you happen to be editing an Undergound level, the palette you've chosen might not stay. Hilly levels share their palettes with Underground levels; simply edit the Hilly palette instead because you are editing both Object Sets' palettes at the same time. To do this, select Object Set 3, the Hilly Object set.
Changing the Underground palette

Be sure to read what's below to ensure that your level works properly.