There is more scattered information spread around many different corners of the Internet, along with the entire SMB3 disassembly, as opposed to specific tutorials, I would say.SMB3 Workshop
is excellent for creating/editing/viewing levels/areas. However, it doesn't help you modify everything.
The SMB3 Map Editor
is perfect for taking care of everything to do with the overworld maps.
You can edit your title screen with SMB3TE
You can edit the graphics with graphics editors like Tile Layer Pro
, if it's something that you're considering as well.
For other modifications in the ROM file, you're better off having a hex editor (like HxD
) and/or a special emulator (for example, FCEUX
) to handle the ROM file more directly. However, it's recommended that you build some experience first, since you need to have an idea of what you're looking at and trying to do.
It sounds like you might have figured out your objects and enemies problem.
With SMB3 Workshop in general, yes, you need to click on one of the buttons between 3-byte objects, 4-byte objects, and enemies depending on which one you want to add next, and then you have to click on the screen to add it in, each and every single time.
If "Freeform Mode" under the Edit menu is checked, and "Limit Size" is unchecked, you should be able to add an object and/or an enemy. Otherwise, the editor should prevent you from doing so. However, this is for a very good reason, and it's best to learn this as early as possible in your ROM hacking journey: You do NOT
have unlimited space to work with. The ROM file you are modifying is a fixed
size, and each level cannot be exceeded by even one byte if you are editing the levels using the original game's ROM offsets.
The defaults for adding objects and enemies are:
3-byte object: Bank 0, Type 0 (00) (ex. "Background Hills A" in 1-Plains, "Door" in 2-Dungeon, etc.)
4-byte object: Bank 2, Type 176 (B0) (ex. "Blue X-Blocks" in 1-Plains, "Blocks with circles in the middle" in 2-Dungeon, etc.)
Enemy: Type 114 (72) (Goomba)
However, if there's a specific object or enemy that you're using a lot of and don't want to switch to multiple times in a row, select an object or enemy, and under the Object menu, select "Clone Object/Enemy". Then, instead of the regular default, that will be the starting object/enemy when you add another one in, until you copy another one, or close the program until next time.
Remember that left mouse clicks and drags deal with 3-byte objects and 4-byte objects, while right mouse clicks and drags deal with enemies. You can left-click the "Add an enemy" button and add it into your editing area with a left click, but to move the enemy, you'll need to use the right mouse clicker and hold it to drag the enemy to the spot that you want it.
As for your new problem regarding level crashes, that is because of yet another limitation within the original game's engine.
You cannot change a level's Object Set, because the levels are laid out within specific banks of the ROM file.
Some level types are interchangeable, but only because they share the same bank.
- Sky & Ice
- Piranha Plant, Giant & Cloudy
- Water & Pipe
1 - Plains: 0x1E509 - 0x2000F
2 - Fortress: 0x2A7F7 - 0x2C00F
*NOTE: 0x2A7F7 - 0x2A866 = 7 End Castles
3 - Hilly: 0x20587 - 0x2200F
4 - Sky: 0x227E0 - 0x2400F -----------------+
5 - Piranha Plant: 0x26A6F - 0x2800F -----+ |
6 - Water: 0x24BA7 - 0x2600F -----+-----+ |
8 - Pipe: 0x24BA7 - 0x2600F -----+-----+ |
9 - Desert: 0x28F3F - 0x2A00F | |
A - Ship: 0x2EC07 - 0x3000F | |
B - Giant: 0x26A6F - 0x2800F -----+ |
C - Ice: 0x227E0 - 0x2400F -----+-----------+
D - Cloudy: 0x26A6F - 0x2800F -----+
E - Underground: 0x1A587 - 0x1C00F
This is what you would have to do instead if you want 1-2 in your hack to be a Sky level; specifically, the original 1-6.
Open your ROM in the SMB3 Map Editor. Under the Mode menu, you can see that "Viewer" is checked by default. Select/switch to "Pointers".
You should see blue squares over each space on the map that can potentially be entered by Mario/Luigi, with Pointer #1 for 1-1 selected by default.
Left-click on 1-2 (labelled Pointer #3). This is the pointer that you want to change. Press the Enter key, and a "Select Stage" window appears.
Select 'World 1-6'. Press OK. Next, select the "Implement Changes (Do Before World/Mode Change)" option in the main window. Afterwards, under the File menu, select Save. To ensure your changes are saved successfully, and before you change to a different Mode, you have to do this every single time you change something.
Now, consider these two points while you are changing things within the SMB3 Map Editor.
Firstly, you will most certainly change your overworld layouts in the future so that they won't look like the maps in the original game. Therefore, the pointer you need to modify to make sure that your 1-2 points to the original 1-6 Sky level might not necessarily be Pointer #3, as the pointers are laid out going left-to-right, and up-to-down.
Secondly, to simplify testing levels as you are creating them, you can always edit the pointer for 1-1 to load up the level that you are currently editing while play-testing your hack in an emulator, if you choose to do so. This saves you time from having to play through every other level before you make it to the level you could be currently editing. Of course, you'll probably want to beta test the whole game from start to finish once or twice before you eventually release it.
Another point to consider in general:
If you have your ROM file open in SMB3 Workshop to edit the levels, but you also open it up in another utility to edit something else, like the SMB3 Map Editor to modify map details or change a pointer for testing purposes, or the hex editor in FCEUX/FCEUXD to modify level headers directly or other variables in the game, you HAVE
to reopen your ROM in any other utilities that you have it open in. Think about it. You are saving changes to your ROM in Utility B, but the ROM is still actively open in Utility A in the state it was in before
you just changed and saved it in Utility B. If you change something and save your ROM in Utility A without reopening it first, the changes you just made and saved to it in Utility B will be lost.
Therefore, if you use multiple utilities for different hacking purposes, be sure to take care and keep track of your modifications. To eliminate any potential risk, only ever have your ROM open in one utility at a time, save your ROM and exit the utility when you're done, and then open the new utility, followed by opening your ROM in that utility, so then there's no doubt that your ROM is in the most recent state when opened in the next utility.
It might not be a Romhacking.net thread, and for that I apologize, but I definitely recommend that you read through the "General SMB3 Hacking Thread" on Board 2. While there are a lot of posts that were made in regular conversation, there is a lot of valuable information, general and hacking related, buried within the (currently) 22 pages of posts.General SMB3 Hacking Thread (Board 2 Link)
Sorry if this post is a lot to take in, and/or if the directions provided haven't supplied you with the information that you've requested. If you can possibly provide anymore specific details about your actions and processes taken so far, and even provide some visuals of any issues in question, perhaps I and/or other members can attempt to provide you with some more direct assistance.
Until next time, hopefully you're able to figure more things out as you continue playing around with SMB3 Workshop and other utilities, and discover and learn from more resources available out there.
As always, best of luck. You can do it! Take care.