Editing ROMs with Sky EditorEverything you need to know to start editing ROMs with Sky Editor. Useful for all ROMs, but especially for Pokémon Mystery Dungeon.
3DS Mystery Dungeon ModsThis applies to both Gates to Infinity and Super Mystery Dungeon, unless otherwise specified.
IntroductionSky Editor is a plugin-based multi-tool for Mystery Dungeon games. One of the plugins allows for the editing of ROMs, and this tutorial will show you how. Before we begin, let's understand how exactly Sky Editor works. Most ROM editors simply edit the ROM, leaving you to create distribution patches on your own (because distributing the full ROM is a breach of copyright). Sky Editor takes care of this for you, creating a zip file that contains all of your edits, along with a patcher that can apply those edits to another clean ROM. This zip file is called a "mod pack". Mod packs contain one or more "mods". When patching your ROM, you will be given the option to enable or disable each mod. For example, if a mod pack a mod that changes the available starters and another mod that changes the main menu backgrounds, you can choose to apply both, or you can disable the starter mod so you can enjoy the new backgrounds. Or you can leave the backgrounds as-is and enjoy the starter mod. While Sky Editor is primarily intended to edit ROMs for Pokémon Mystery Dungeon, it can be used for any NDS or 3DS ROM (more on that when I write about the Generic Mod). Supported Games US and European ROMs generally work fine, but Japanese ROMs might have issues in some cases. Pokémon Mystery Dungeon: Blue Rescue Team (US is supported, Europe is untested and might not work.) Pokémon Mystery Dungeon: Explorers of Sky Pokémon Mystery Dungeon: Gates to Infinity Pokémon Super Mystery Dungeon All other NDS and 3DS games can still be used if you would like to create a distributable patcher for edits made using external tools. System Requirements Windows with the .Net Framework 4.6.2. Mono will not work. Java, if you want to edit scripts or starters for Pokémon Super Mystery Dungeon or Pokémon Mystery Dungeon: Gates to Infinity. A beefy computer or lots of time. I don't know what the minimum specs are, but the better computer you have, the faster things will run. Downloading Sky Editor Sky Editor can be downloaded from the following location: After download it, it is important to unblock the zip file: In Windows Explorer, Right-Click the zip file and click Properties. Click or check Unblock. It may either be a button or a checkbox. Click OK. Extract the zip file with your favorite zip extractor. I use 7-zip, but any zip extractor should do. Run "SkyEditor.ROMEditor.UI.WPF.exe". You should now see the main Sky Editor window. If you do not, please let me know in the comments section below. Please note that these steps will need to be repeated for every new build you download, and the exact procedure may change in the future. I recommend following the Sky Editor blog, where I'll announce whenever such a change occurs: You can now proceed to the next part of this tutorial:
Setting up the Main WindowNow that you've started Sky Editor, it's time to set up the window to have everything it needs for ROM editing. It should look something like this: Follow these steps to add everything it needs: The View menu has 3 menu items: Solution Explorer, Solution Build Progress, and Errors. Click all of them. Sky Editor should now look like this: (Optional) I recommend rearranging these windows. You can do so by dragging and dropping the tab part: While you're dragging, it should look like this: You can place the window by mousing over one of the new icons: You can drag multiple windows together by dragging this part (in this screenshot, both Build Progress and Errors are dragged together): There is no right or wrong way to arrange everything. You should experiment to find what works best for you, but I recommend this layout: After you've arranged everything to your liking, you can save this layout by closing and restarting Sky Editor. You can now proceed to the next section:
Creating a ModpackNow it's time to create the modpack. Creating a Modpack Click File -> New Solution. Enter the requested information. The name what you want the modpack to be called. This must be something that can be in a filename, as no error checking is currently done (pending #31). Under "type", choose "DS Modpack". Under "Location", choose or create any directory with a decent amount of free space. The modpack and all child mods will be created inside a subfolder of this directory, which is referred to as the solution directory. When you're done, click OK. Go through the wizard that appears. The first step is just an introduction. Read it, then click "Next >". The second step asks for a ROM. You can give it any decrypted 3DS or NDS ROM. For the purpose of this tutorial, I'll be using Pokémon Mystery Dungeon: Explorers of Sky. After you browse to a supported ROM, click the Extract button, and wait for the extraction to complete. When it's done, click the Finish button. Click File -> Save -> Save Solution. You can get away without doing it, but if there's a problem further on, this will keep you from needing to repeat these steps. I recommend doing this before and after every time you create, edit, or delete projects. Refer to "Opening a Modpack" below for instructions on how to reopen this solution. In the Solution Explorer, expand Directory. Right-click Directory. (If you don't see any context menu items, try left-clicking it, then right-clicking it.) Then click Create Project. You should be presented with this window: Like when creating a solution, make sure the Name you choose doesn't contain any invalid path characters. Making Mods There's a lot of different mods you can make. Please refer to these pages for descriptions of them: All Games (NDS and 3DS) Generic Mod Pokémon Mystery Dungeon: Blue Rescue Team Starter Mod Pokémon Mystery Dungeon: Explorers of Sky Starter Mod Portrait Mod Background Mod Stats Util Project Pokémon Mystery Dungeon: Gates to Infinity Script Mod Pokémon Super Mystery Dungeon Starter Mod Portrait Mod Model Mod Script Mod Opening a Modpack If you close Sky Editor after saving the solution, here's how to reopen it. Click File -> Open -> Open (Auto-Detect File Type). Browse to the directory you chose in step 2 of the previous section. Then open the directory matching the name you chose. Choose the file ending in "*.skysln". If you do not see a file with that extension, and you are 100% sure you are looking in the right location, you did not save your modpack and will need to recreate it. Your solution is now open, and you can continue at step 5 in the previous section.
Building the ModpackAfter making the changes you've always wanted, it's time to put everything together. Setting the 3DS output If you're editing 3DS ROMs, you may want to choose what kind of output you want. By default, it will output a folder whose contents you paste onto your 3DS's SD card for use with Luma 3DS game patching, but you can choose a variety of other formats. Refer to this section for instructions. Building Luckily, this is a one-step process. Simply click Solution > Build: Sky Editor will start doing a lot of things: Then it will open up another form that applies all your changes to a ROM so you can try it out. Don't touch this window: When it's all done, "Modpack"'s status should be Complete: The files you want are on disk under (Solution Directory)/Modpack/Output. You should see two things: a zip file, and a either a NDS ROM, 3DS ROM, or a directory labled "SD Card". The zip file is the distributable patcher. You can give this to anyone you want, and they'll be able to apply your changes to their ROM. The other thing is the result of the patches for your use only. Do not distribute this, as it is illegal to share ROMs even if they are modified.
The Generic ModThe generic mod the simplest of mods that works on any NDS or 3DS ROM. Like all mod types, it can generate a patch based on the files you edit within it. Instructions On the New Project window, choose "Generic Mod" in the drop-down, and fill in the name with something that makes sense. Then click OK. Wait for the file copy to complete. The bottleneck here is the hard drive you created the modpack on, though this generally doesn't take as much time as most other mod types. Go to "(Solution Directory)/(Project Directory)/Raw Files" in your favorite file explorer. You should see a copy of your unpacked ROM. Using whatever external tools you like (or even Sky Editor in some cases), you can edit these files to your heart's content. When you're finished, build the modpack, and your changes will be made into a patch along with all of your other projects, if applicable. Remarks By default, any files you delete in a generic mod will not result in deletions in the patch. Instead, this guarantees these files are not modified by the mod. This can be useful if you want to save disk space, or if you want to set up a more advanced solution with multi-Base ROM projects, and have this mod build against both.
The Modpack ProjectThroughout this tutorial, I've been referring to the solution as a modpack. By default, they can be thought of as synonymous, because a solution automatically has a modpack solution created. Any mod project that the modpack project references is part of it, and is kept when the modpack is built. However, a solution can contain multiple modpacks. Another modpack project can be created the same way as any other project. However, the UI currently does not support managing the required references, and this requires manually editing the project JSON, and is not recommended. If this feature interests you, please leave feedback in this issue on GitHub so I can prioritize it. The reason this is useful is that you can have multiple distributions. Modpacks contain mods that make sense to have together, but with multiple modpacks, you could split up the mods that don't make sense to have together. For example, if you modify the wild Pokemon that can be encountered in a main series game, one mod-pack could change the encounters and level them accordingly, another could change the encounters and leave their levels unchanged, and a third could leave the encounters alone. Unlike other project types, this can only be used with a single Base ROM project. Setting the 3DS output When a modpack is built, it automatically applies its mods to its associated base ROM. If the base ROM is a 3DS ROM, there are a few options for how this can be done. This defaults to Luma 3DS game patching, but you can follow these instructions to set the output to your liking: Right-click the Modpack project in the Solution Explorer and click Properties. Go to the 3DS Build Options tab and check whatever you'd like. Do not check the first two at the same time. If you do, one will be overwritten. Leave feedback on this GitHub issue if you want to do both at the same time, and I can prioritize it accordingly. If you made any changes, Click File -> Save -> Save File.
The Base ROM ProjectThe Base ROM project is a special project type that contains the ROM to be modified. It is automatically created with the solution, and all mods projects in the solution automatically reference it. There is some internal support for having multiple Base ROM projects, but there is no way to accomplish this with the UI. It may be possible through manual project file editing, but even I, the author of Sky Editor, wouldn't want to attempt that. If you're interested in this feature after reading the rest of this tutorial, please leave feedback in this GitHub issue, and I'll prioritize it accordingly. The reason one may want multiple Base ROM projects is for ROMs that are very similar, such as Pokémon Sun and Pokémon Moon. They're similar enough that some mod projects may be able to properly build against both. Such a setup would look like this: Solution Sun BaseRom Moon BaseRom Generic Mod Sun Modpack Moon Modpack When this build is complete, there would be two modpacks, one for each game.
Bonus Feature: Mystery Dungeon 3DS Soundtrack GenerationAfter creating a modpack solution for either Pokémon Mystery Dungeon: Gates to Infinity or Pokémon Super Mystery Dungeon, right-click the base ROM project and click Utilities -> Export Soundtrack. This will create a tagged MP3 soundtrack from the ROM.