Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

ModMoon 3DS: Difference between revisions

From GameBrew
No edit summary
m (Text replacement - "Category:Other 3DS homebrew applications" to "")
 
(16 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{Infobox-3DS-Homebrews
{{Infobox 3DS Homebrews
| title = ModMoon
|title=ModMoon
| image = https://dlhb.gamebrew.org/3dshomebrew/modmoon.png|250px
|image=Modmoon2.png
| type = Other Apps
|description=A beautiful mod loader for games. Works for SaltySD, and LayeredFS.
| version=v3.0.1
|author=Swiftloke
| lastupdated = 2018/09/30
|lastupdated=2018/09/30
| licence = Mixed
|type=Other Apps
| author = Swiftloke
|version=3.0.1
| website = https://github.com/Swiftloke/ModMoon
|license=Mixed
| download = https://dlhb.gamebrew.org/3dshomebrew/ModMoon-3.0.1.rar
|download=https://dlhb.gamebrew.org/3dshomebrews/modmoon.7z
| source = https://github.com/Swiftloke/ModMoon
|website=https://github.com/Swiftloke/ModMoon
|source=https://github.com/Swiftloke/ModMoon
}}
}}
<youtube>k079hJsV01I</youtube>
ModMoon is a LayeredFS/SaltySD manager for the 3DS. It supports every title in existence, even homebrew. It also includes many awesome easter eggs and features for the user to discover, but core functionality is its main goal. Switching mods is painless, and the user-interface is beautifully simple.


...I must be crazy; especially given that this was originally just a recreation of Smash Selector.
What makes ModMoon especially unique is its UI, built off of the sDraw rendering engine- an original, immensely flexible graphics core created for ModMoon.


==So, what exactly is ModMoon?==
This is much, much more impressive than it sounds. For end users, the result will be a UI experience superior and better looking to nearly all homebrew on the 3DS. sDraw is the reason ModMoon started development.


This software is a LayeredFS/SaltySD manager for the 3DS. It supports every title in existence, even homebrew! It also includes many awesome easter eggs and features for the user to discover, but core functionality is its main goal. Switching mods is painless, and the user-interface is beautifully simple.
ModMoon is [[Smash-Selector 3DS|Smash Selectors]]' successor, and superior, in every way possible.
What makes ModMoon especially unique is its UI, built off of the sDraw rendering engine- an original, immensely flexible graphics core created for ModMoon.
 
==User guide==
===Main Menu===
* '''Launch:'''
** Applies and launches mods for the selected game.
* '''Tools:'''
** Opens up the tools menu, which provides access to more functionality.
* '''Selector Bar:'''
** Changes the currently selected mod for the current game.
 
===Tools Menu===
* '''Active Title Selection:'''
** This menu allows you to change the titles currently active (which titles are available in the title selection menu).
** This is to minimize clutter by only displaying the titles the user actually uses.
 
* '''Smash Controls Modifier:'''
** This code is taken straight out of Smash Selector 2.4 with no changes.
** It allows you, like Smash Selector, to modify the controls of the game with much greater customization than the game itself allows, including mapping two buttons to the same action, changing the controls of the D-Pad, and even changing the actions of the New 3DS buttons/C-Stick.
 
* '''Tutorial:'''
** This replays the tutorial that was shown at the first start of ModMoon.
 
* '''Migrate Mods:'''
** This allows you to migrate mods that were used in Smash Selector.
** This action is done automatically at first start.
 
* '''Dark/Light Mode:'''
** This option allows you to change between two themes - dark mode and light mode.
** To you dark theme master racers out there, this one is for you.


This is much, much more impressive than it sounds. For end users, the result will be a UI experience superior and better looking (in my humble opinion :) ) to nearly all homebrew on the 3DS. sDraw is the reason ModMoon started development - I wanted Smash Selector to have an excellent UI, instead of boring and confusing console text.
===Major Features===
* '''Error Checking:'''
** ModMoon supports checking, displaying, and sometimes even automatically fixing errors when moving mods around.
** This is a significant source of information for users and helpers, as earlier mod tools were very opaque about what went wrong.
** Anyone who has ever used Smash mods knows this aggravation - this feature alone makes Smash Selector obsolete.


==Functionality==
* '''Help Pop-up:'''
ModMoon has a ton of stuff packed in to it. Here's a quick overview of what everything does throughout the various menus.
** At any time, you can press X while hovering over a button or in a menu to get some helpful information about that feature.  
** It includes a desciption of what it is, how to use it, and helpful tips.


==Main Menu:==
* '''Title Selection Menu:'''
* Launch: Applies and launches mods for the selected game.
** Press Y to open this from any menu.  
* Tools: Opens up the tools menu, which provides access to more functionality.
** Allows you to select the current game from your list of active titles.
* Selector Bar: Changes the currently selected mod for the current game.


==Tools Menu:==
* '''Built-in SaltySD files:'''
'''Active Title Selection:''' This menu allows you to change the titles currently ""active"" (which titles are available in the title selection menu). This is to minimize clutter by only displaying the titles the user actually uses.
** For Smash players, ModMoon contains a set of built in IPS files for SaltySD, just like its predecessor Smash Selector.
** These files will be copied when you select Smash from the Active Title Selection menu.  
** (If Smash on an SD card is automatically selected for you, these files will also be copied automatically. If you have Smash on a cartridge, just tap it like you would any other title to trigger the copy.)


'''Smash Controls Modifier:''' This code is taken straight out of Smash Selector 2.4 with no changes. It allows you, like Smash Selector, to modify the controls of the game with much greater customization than the game itself allows- including mapping two buttons to the same action, changing the controls of the D-Pad, and even changing the actions of the New 3DS buttons/C-Stick!
* '''Background title loader:'''
** All titles, both active and non-active, installed on the system will be loaded immediately in the background.
** It will not caused any delay/lag to the rest of the system.


'''Tutorial:''' This replays the tutorial that was shown at the first start of ModMoon.
* '''Auto-updater (ModMoon):'''
** If you're connected to the internet, ModMoon will check for updates for itself.
** This system runs in the background, which means you'll experience no lag while it does its thing.
** If an update is available, it will prompt you to update (and give you an opportunity to skip it) and install the update.


'''Migrate Mods:''' This allows you to migrate mods that were used in Smash Selector. This action is done automatically at first start.
* '''Auto-updater (SaltySD):'''
** This is a big one for Smash players. Smash Selector, like ModMoon had built in SaltySD IPS files.
** However, those files were very old, and there was never a system in place to update them.  
** This is, of course, solved with ModMoon. Alongside updating itself, it will check for updates to the aforementioned SaltySD files used to run Smash mods, and download them seamlessly without rebooting.
** To disable auto-updaters, open the config file (/3ds/ModMoon/settings.txt) and set "ShouldDisableUpdater" to "True", but keep in mind that you'll miss out on any improvements until you either update manually or re-enable the updater.


'''Dark/Light Mode:''' This option allows you to change between two ""themes""- dark mode and light mode! To you dark theme master racers out there, this one is for you.
* '''Flexible Cartridge System:'''
**  This system automatically detects if you've inserted/ejected a cartridge, and reacts based on that, just like the HOME menu.
** Unfortunately, there seems to be a bug with either the 3DS homebrew development system (libctru) or Luma3DS which makes this code, when enabled, take upwards of 30 seconds to exit ModMoon.
** It is disabled by default, and you can try it out by, in the config system, setting "EnableFlexibleCartridgeSystem" to "True" (until a solution is found).  


==Major Features:==
* '''Configurable Highlighter Colors:'''
'''Error Checking:''' ModMoon supports checking, displaying, and sometimes even automatically fixing errors when moving mods around. This is a significant source of information for users and helpers, as earlier mod tools were very opaque about what went wrong (and even if something went wrong at all), thus breaking quite a bit. Anyone who has ever used Smash mods knows this aggravation- this feature alone makes Smash Selector obsolete.
** Alongside the Dark Mode functionality, a user can change the highlighter colors used in each of the menus.
** Open the config file (/3ds/ModMoon/settings.txt), and inside the "*HighlighterColors" option (where * is the menu you want to change) write the red, blue and green values (in 0-255 format) with commas separating them. Google has a nice tool to do this for you (use the rgb(*, *, *) output).


'''Help Pop-up:''' At any time, you can press X while hovering over a button or in a menu to get some helpful information about that feature- what it is, how to use it, and helpful tips!
* '''Custom SaltySD:'''
** This one is particularly useful for Smash mod creators.
** It allows you to provide a custom code.ips file within the /codes folder of your modpack, and it will automatically be moved to the correct location.
** LayeredFS games need not worry about this since the file structure will allow you to do this anyway.


'''Title Selection Menu:''' Press Y to open this from any menu. Allows you to select the current game from your list of active titles.
===How to use===
ModMoon works with mods that it finds in your "ModsFolder" config setting (by default, it's /3ds/ModMoon, but you can change it to whatever you'd like by opening the file (/3ds/ModMoon/settings.txt) and changing the setting).  


'''Built-in SaltySD files:''' For Smash players, ModMoon contains a set of built in IPS files for SaltySD, just like its predecessor Smash Selector. These files will be copied when you select Smash from the Active Title Selection menu. (If Smash on an SD card is automatically selected for you, these files will also be copied automatically. If you have Smash on a cartridge, just tap it like you would any other title to trigger the copy.)
It then looks into the folder of the title ID of the game you want to load mods for (created automatically when you select a title from the Active Title Selection menu) and reads mods from the "Slot_X" folder, where X is a number starting at 1.  


'''Background title loader:''' All titles, both active and non-active, installed on the system will be loaded immediately in the background, with no lag to the rest of the system.
The following is an example for Smash 3DS (00040000000EDF00) and Pokemon Sun (0004000000164800).


'''Auto-updater (ModMoon):''' If you're connected to the internet, ModMoon will check for updates for itself. This system runs in the background, which means you'll experience no lag while it does its thing. If an update is available, it will prompt you to update (and give you an opportunity to skip it) and install the update.
G:\3ds\ModMoon
|
|
+---00040000000EDF00
|    \---Slot_1
|    |  |  desc.txt
|    |  |
|    |  \---animcmd
|    |      \---fighter
|    |          \---captain
|    |                \--game.bin
|    |
|    \---Slot_2
|    |    \--desc.txt
|    |
|    \---Slot_3
|    |    \--desc.txt
|    |
|    \---Slot_4
|    |    \--desc.txt
|    |
|    \---Slot_5
|    |    \--desc.txt
|    |
|    \---Slot_6
|    |    \--desc.txt
|    |
|    \---Slot_7
|        \--desc.txt
|
+---0004000000164800
|    \---Slot_1
|    |    |    desc.txt
|    |    |
|    |    \---romfs
|    |        \--Shop.cro
|    |    \---a
|    |        \---0
|    |            \---1
|    |                \--3


'''Auto-updater (SaltySD):''' This is a big one for Smash players. Smash Selector, like ModMoon had built in SaltySD IPS files. However, those files were very old, and there was never a system in place to update them. This is, of course, solved with ModMoon. Alongside updating itself, it will check for updates to the aforementioned SaltySD files used to run Smash mods, and download them seamlessly without rebooting.
When you first start up ModMoon, it will migrate your mods from Smash Selector, check for updates, then play a quick tutorial. It will show you how to set your active titles in the Active Title Selection menu, then how to select which game to run mods for. Because the Active Title Selection menu makes the folders for the games you select, it is recommended you go through this tutorial before adding the mods.


Not a fan of auto-updaters? Understandable. Just open the config file (/3ds/ModMoon/settings.txt) and set ""ShouldDisableUpdater"" to ""True"", but keep in mind that you'll miss out on any improvements I ever make until you either update manually or re-enable the updater. I highly recommend against this, but the choice is there.
On a regular use, you'll select the game you want to use, then change what mod you want to run by scrolling through the list, tapping on the selector bar (or moving the Circle Pad left and right with the selector bar highlighted). To disable mods, simply select "Disabled" from the mods list. You'll then press the Launch button, and ModMoon will fade into the game!


'''Flexible Cartridge System:''' This system automatically detects if you've inserted/ejected a cartridge, and reacts based on that, just like the HOME menu. Unfortunately, there seems to be a bug with either the 3DS homebrew development system (libctru) or Luma3DS which makes this code, when enabled, take upwards of 30 seconds to exit ModMoon. It is disabled by default, and you can try it out by, in the config system, setting ""EnableFlexibleCartridgeSystem"" to ""True"". When a solution is found, I will release an update with the fix and enable this for all users.
Note that you must exit ModMoon by either pressing Start or launching a game. Shutting down the 3DS, or closing ModMoon by pressing "close" in the Home Menu, will, on top of hanging the system, not give it the chance to save configuration information for itself and the mods it handles. On top of the aforementioned hang, you will receive several error messages the next time ModMoon starts due to this failure to save.


'''Configurable Highlighter Colors:''' ModMoon, as a modding tool, has some customization tools for itself as well. Alongside the Dark Mode functionality, a user can change the highlighter colors used in each of the menus! Open the config file (/3ds/ModMoon/settings.txt), and inside the ""*HighlighterColors"" option (where * is the menu you want to change) write the red, blue and green values (in 0-255 format) with commas separating them. Google has a nice tool to do this for you (use the rgb(*, *, *) output).
As for using the many tools available, check the help popup for each option for instructions.


'''Custom SaltySD:''' For Smash mod creators, this one is pretty nice. It allows you to provide a custom code.ips file within the /codes folder of your modpack, and it will automatically be moved to the correct location. LayeredFS games need not worry about this since the file structure will allow you to do this anyway.
===Errors===
As previously mentioned, ModMoon has quite a bit of built in error checking. Here are some of the things it will warn the user about, and how you should solve them.


==Usage==
'''Warning: Failed to find mods for this game!'''
Usage of ModMoon is pretty easy. Here's how everything works:


ModMoon works with mods that it finds in your ""ModsFolder"" config setting (by default, it's /3ds/ModMoon, but you can change it to whatever you'd like by opening the file (/3ds/ModMoon/settings.txt) and changing the setting). It then looks into the folder of the title ID of the game you want to load mods for (created automatically when you select a title from the Active Title Selection menu) and reads mods from the ""Slot_X"" folder, where X is a number starting at
ModMoon couldn't find any mod slots for the game you just selected. You should make some.


'''1. Here's a quick visual example:'''
'''Failed to enable/disable mods! This may resolve itself through normal usage.'''  


Spoiler: Folder Structure
Try the inverse of the action you just performed (as in, if you just enabled mods and that error message occurred, try disabling them; if you tried to disable mods, try enabling them) and this error message will probably disappear. You can then move on with your modding experience.


The following is an example for Smash 3DS (00040000000EDF00) and Pokemon Sun (0004000000164800).
'''Congrats! You have gained 30 extra lives!'''
<pre>
Code:
G:\3ds\ModMoon
|
|
+---00040000000EDF00
|    \---Slot_1
|    |  |  desc.txt
|    |  |
|    |  \---animcmd
|    |      \---fighter
|    |          \---captain
|    |                \--game.bin
|    |
|    \---Slot_2
|    |    \--desc.txt
|    |
|    \---Slot_3
|    |    \--desc.txt
|    |
|    \---Slot_4
|    |    \--desc.txt
|    |
|    \---Slot_5
|    |    \--desc.txt
|    |
|    \---Slot_6
|    |    \--desc.txt
|    |
|    \---Slot_7
|        \--desc.txt
|
+---0004000000164800
|    \---Slot_1
|    |    |    desc.txt
|    |    |
|    |    \---romfs
|    |        \--Shop.cro
|    |    \---a
|    |        \---0
|    |            \---1
|    |                \--3
</pre>


When you first start up ModMoon, it will migrate your mods from Smash Selector, check for updates, then play a quick tutorial. It will show you how to set your active titles in the Active Title Selection menu, then how to select which game to run mods for. Because the Active Title Selection menu makes the folders for the games you select, I'd recommend going through this tutorial before adding your mods.
Hmmmm... Where does this appear, and what does it indicate?


On a regular use, you'll select the game you want to use, then change what mod you want to run by scrolling through the list, tapping on the selector bar (or moving the Circle Pad left and right with the selector bar highlighted). To disable mods, simply select ""Disabled"" from the mods list. You'll then press the Launch button, and ModMoon will fade into the game!
'''Failed to move slot file from X to X! Error code:'''  


Note that you must exit ModMoon by either pressing Start or launching a game. Shutting down the 3DS, or closing ModMoon by pressing ""close"" in the Home Menu, will, on top of hanging the system, not give it the chance to save configuration information for itself and the mods it handles. On top of the aforementioned hang, you will receive several error messages the next time ModMoon starts due to this failure to save.
What could be going wrong here depends on the error code. See below.


As for using the many tools available, check the help popup for each option for instructions.
'''The currently selected title is not Smash. Please select Smash and try again.'''


==Errors==
(In the Smash Controls Modifier) ModMoon will not attempt to modify the save data of a game other than Smash - this would probably cause save corruption. Set Smash as your active title and try to open it again.
As previously mentioned, ModMoon has quite a bit of built in error checking. Here are some of the things it will warn the user about, and how you should solve them:


Warning: Failed to find mods for this game! ModMoon couldn't find any mod slots for the game you just selected. You should make some!
'''Custom SaltySD code.ips move failed! (original move) Error Code:'''


Failed to enable/disable mods! This may resolve itself through normal usage. Try the inverse of the action you just performed (as in, if you just enabled mods and that error message occurred, try disabling them; if you tried to disable mods, try enabling them) and this error message will probably disappear. You can then move on with your modding experience :)
ModMoon failed to move the normal SaltySD file out of, or in to, the /luma/titles folder.


Congrats! You have gained 30 extra lives! Hmmmm... Where does this appear, and what does it indicate? ( ͡° ͜ʖ ͡° )
'''Custom SaltySD code.ips move failed! (custom move) Error Code:'''


Failed to move slot file from X to X! Error code: What could be going wrong here depends on the error code. See below.
ModMoon failed to move the custom code.ips file from or to the mod slot it originated from.


In the Smash Controls Modifier: The currently selected title is not Smash. Please select Smash and try again. ModMoon will not attempt to modify the save data of a game other than Smash- this would probably cause save corruption. Set Smash as your active title and try to open it again.
'''Error Code 2: No such file or directory.'''


Custom SaltySD code.ips move failed! (original move) Error Code: ModMoon failed to move the normal SaltySD file out of, or in to, the /luma/titles folder.
ModMoon itself indicates that this is probably the result of you not properly closing it out.  


Custom SaltySD code.ips move failed! (custom move) Error Code: ModMoon failed to move the custom code.ips file from or to the mod slot it originated from.
ModMoon requires that you close it either by pressing Start to exit or launching a game - otherwise, it will not be able to properly save mod configurations.


I have come across two prominent error codes in development:
'''Error Code C82044BE: Destination already exists.'''
* Error Code 2: ""No such file or directory"". ModMoon itself indicates that this is probably the result of you not properly closing it out. ModMoon requires that you close it either by pressing Start to exit or launching a game- otherwise, it will not be able to properly save mod configurations.
* Error Code C82044BE: ""Destination already exists"". ModMoon will attempt to handle this error automatically, but will not attempt to destroy any files. This error code means that ModMoon cannot move a folder somewhere because that folder already exists.


Check the destination folder it provided you, and if necessary manually move it back to where it should be (this error may occur if you broke its record-keeping by, say, shutting it off improperly (see ""Usage"") and ModMoon won't fix it automatically if the attempt will destroy files in the process.
ModMoon will attempt to handle this error automatically, but will not attempt to destroy any files. This error code means that ModMoon cannot move a folder somewhere because that folder already exists.


It's like asking a robot to move records around file cabinets, except you already had them do it but you wiped their memory, and now they can't try doing that same movement again without intervention from someone who can analyze the situation.) If this error occurred while disabling Smash mods, check the luma/titles/ folder.  
Check the destination folder it provided you, and if necessary manually move it back to where it should be (this error may occur if you broke its record-keeping by, say, shutting it off improperly and ModMoon won't fix it automatically if the attempt will destroy files in the process. It's like asking a robot to move records around file cabinets, except you already had them do it but you wiped their memory, and now they can't try doing that same movement again without intervention from someone who can analyze the situation). If this error occurred while disabling Smash mods, check the luma/titles/ folder.  


There will be a Disabled(smash title ID) folder and a (smash title ID) folder. Remove one or the other to resolve the situation.
There will be a Disabled(smash title ID) folder and a (smash title ID) folder. Remove one or the other to resolve the situation.


==Development Time==
==Screenshots==
Smash Selector 2.4 is just over a year old at the time of writing. Why did it take so long to make its successor?
https://dlhb.gamebrew.org/3dshomebrews/modmoon9.png
https://dlhb.gamebrew.org/3dshomebrews/modmoon10.png


Soon-ish (within the next few weeks) I intend on making a full article about what goes into homebrew development, and why that caused ModMoon to release rather late. Check back soon, I'll post a link to it when it's done.
https://dlhb.gamebrew.org/3dshomebrews/modmoon11.png
https://dlhb.gamebrew.org/3dshomebrews/modmoon12.png
 
https://dlhb.gamebrew.org/3dshomebrews/modmoon13.png
https://dlhb.gamebrew.org/3dshomebrews/modmoon14.png
 
==Changelog==
'''v3.0.1'''
* Include SaltySD files that do not crash after the character select screen in Smash (taken from the [https://github.com/shinyquagsire23/SaltySD/releases SaltySD 1.2 release page]).
* Correct the updater not working, at all, when trying to grab stuff from GitHub.
* Also correct, in the actual release builds, the lack of a #define for BUILTFROM3DSX - this will allow the updater to work properly for 3dsx files from now on. The readme has also been updated to reflect this.
* Fix an edge case where the user may be unable to write a SaltySD file using ModMoon.
* Fix a bug that prevented the user from skipping the updater.
* Add a version string within the title selection menu.


==Credits==
==Credits==
ModMoon was my first from-the-ground-up, full-scale, completely polished program. Along the course of its development there are many, many people I want to thank for making development of this program possible.
ModMoon was my first from-the-ground-up, full-scale, completely polished program. Along the course of its development there are many, many people to thank for making development of this program possible.
 
* The USM-eM Team, composed of @LinkSoraZelda, @Dannyo15, @DewTek, @Yudowat, Gryz, Karma, and M-1: Fostering the scene in which I developed ModMoon. Encouraging me to work on Smash-Selector, which is what taught me to program, and many more small pieces of encouragement that have made a significant impact.
* The USM-eM Team, composed of @LinkSoraZelda, @Dannyo15, @DewTek, @Yudowat, Gryz, Karma, and M-1: Fostering the scene in which I developed ModMoon. Encouraging me to work on Smash-Selector, which is what taught me to program, and many more small pieces of encouragement that have made a significant impact.
* @Yudowat, @LinkSoraZelda and @xGhostBoyx for the amazing design of the UI!
* @Yudowat, @LinkSoraZelda and @xGhostBoyx for the amazing design of the UI!
Line 176: Line 234:
* mtheall, for his incredible work in two areas. The first: resolving a ridiculous crash that left ModMoon in an unreleaseable state for weeks on end. This guy put several days of his own time in to use his significant expertise to solve my mistake. The release of 3.0 would have been delayed indefinitely without him. The second: Creating Tex3DS (a fancy graphics tool for building textures), and helping me migrate ModMoon's codebase to use it instead of a nasty hack.
* mtheall, for his incredible work in two areas. The first: resolving a ridiculous crash that left ModMoon in an unreleaseable state for weeks on end. This guy put several days of his own time in to use his significant expertise to solve my mistake. The release of 3.0 would have been delayed indefinitely without him. The second: Creating Tex3DS (a fancy graphics tool for building textures), and helping me migrate ModMoon's codebase to use it instead of a nasty hack.


===Builds and Source===
==External links==
The latest release can be found here:
* GitHub - https://github.com/Swiftloke/ModMoon
https://github.com/Swiftloke/ModMoon/releases
* GBAtemp - https://gbatemp.net/threads/modmoon-a-beautiful-simple-and-compact-mods-manager-for-the-nintendo-3ds.519080
 
The source code can be found here: https://github.com/Swiftloke/ModMoon
 
Did I forget something in this release writeup? Got an idea for a new feature for me to add? Don't hesitate to reply and mention it or contact me on Discord at Swiftloke#3647. (I will not respond to DMs on GBATemp.)
 
I hope you enjoy this thing. All the effort that's gone in to it pays off, I hope :)

Latest revision as of 04:19, 6 Mayıs 2024

ModMoon
Modmoon2.png
General
AuthorSwiftloke
TypeOther Apps
Version3.0.1
LicenseMixed
Last Updated2018/09/30
Links
Download
Website
Source

ModMoon is a LayeredFS/SaltySD manager for the 3DS. It supports every title in existence, even homebrew. It also includes many awesome easter eggs and features for the user to discover, but core functionality is its main goal. Switching mods is painless, and the user-interface is beautifully simple.

What makes ModMoon especially unique is its UI, built off of the sDraw rendering engine- an original, immensely flexible graphics core created for ModMoon.

This is much, much more impressive than it sounds. For end users, the result will be a UI experience superior and better looking to nearly all homebrew on the 3DS. sDraw is the reason ModMoon started development.

ModMoon is Smash Selectors' successor, and superior, in every way possible.

User guide

Main Menu

  • Launch:
    • Applies and launches mods for the selected game.
  • Tools:
    • Opens up the tools menu, which provides access to more functionality.
  • Selector Bar:
    • Changes the currently selected mod for the current game.

Tools Menu

  • Active Title Selection:
    • This menu allows you to change the titles currently active (which titles are available in the title selection menu).
    • This is to minimize clutter by only displaying the titles the user actually uses.
  • Smash Controls Modifier:
    • This code is taken straight out of Smash Selector 2.4 with no changes.
    • It allows you, like Smash Selector, to modify the controls of the game with much greater customization than the game itself allows, including mapping two buttons to the same action, changing the controls of the D-Pad, and even changing the actions of the New 3DS buttons/C-Stick.
  • Tutorial:
    • This replays the tutorial that was shown at the first start of ModMoon.
  • Migrate Mods:
    • This allows you to migrate mods that were used in Smash Selector.
    • This action is done automatically at first start.
  • Dark/Light Mode:
    • This option allows you to change between two themes - dark mode and light mode.
    • To you dark theme master racers out there, this one is for you.

Major Features

  • Error Checking:
    • ModMoon supports checking, displaying, and sometimes even automatically fixing errors when moving mods around.
    • This is a significant source of information for users and helpers, as earlier mod tools were very opaque about what went wrong.
    • Anyone who has ever used Smash mods knows this aggravation - this feature alone makes Smash Selector obsolete.
  • Help Pop-up:
    • At any time, you can press X while hovering over a button or in a menu to get some helpful information about that feature.
    • It includes a desciption of what it is, how to use it, and helpful tips.
  • Title Selection Menu:
    • Press Y to open this from any menu.
    • Allows you to select the current game from your list of active titles.
  • Built-in SaltySD files:
    • For Smash players, ModMoon contains a set of built in IPS files for SaltySD, just like its predecessor Smash Selector.
    • These files will be copied when you select Smash from the Active Title Selection menu.
    • (If Smash on an SD card is automatically selected for you, these files will also be copied automatically. If you have Smash on a cartridge, just tap it like you would any other title to trigger the copy.)
  • Background title loader:
    • All titles, both active and non-active, installed on the system will be loaded immediately in the background.
    • It will not caused any delay/lag to the rest of the system.
  • Auto-updater (ModMoon):
    • If you're connected to the internet, ModMoon will check for updates for itself.
    • This system runs in the background, which means you'll experience no lag while it does its thing.
    • If an update is available, it will prompt you to update (and give you an opportunity to skip it) and install the update.
  • Auto-updater (SaltySD):
    • This is a big one for Smash players. Smash Selector, like ModMoon had built in SaltySD IPS files.
    • However, those files were very old, and there was never a system in place to update them.
    • This is, of course, solved with ModMoon. Alongside updating itself, it will check for updates to the aforementioned SaltySD files used to run Smash mods, and download them seamlessly without rebooting.
    • To disable auto-updaters, open the config file (/3ds/ModMoon/settings.txt) and set "ShouldDisableUpdater" to "True", but keep in mind that you'll miss out on any improvements until you either update manually or re-enable the updater.
  • Flexible Cartridge System:
    • This system automatically detects if you've inserted/ejected a cartridge, and reacts based on that, just like the HOME menu.
    • Unfortunately, there seems to be a bug with either the 3DS homebrew development system (libctru) or Luma3DS which makes this code, when enabled, take upwards of 30 seconds to exit ModMoon.
    • It is disabled by default, and you can try it out by, in the config system, setting "EnableFlexibleCartridgeSystem" to "True" (until a solution is found).
  • Configurable Highlighter Colors:
    • Alongside the Dark Mode functionality, a user can change the highlighter colors used in each of the menus.
    • Open the config file (/3ds/ModMoon/settings.txt), and inside the "*HighlighterColors" option (where * is the menu you want to change) write the red, blue and green values (in 0-255 format) with commas separating them. Google has a nice tool to do this for you (use the rgb(*, *, *) output).
  • Custom SaltySD:
    • This one is particularly useful for Smash mod creators.
    • It allows you to provide a custom code.ips file within the /codes folder of your modpack, and it will automatically be moved to the correct location.
    • LayeredFS games need not worry about this since the file structure will allow you to do this anyway.

How to use

ModMoon works with mods that it finds in your "ModsFolder" config setting (by default, it's /3ds/ModMoon, but you can change it to whatever you'd like by opening the file (/3ds/ModMoon/settings.txt) and changing the setting).

It then looks into the folder of the title ID of the game you want to load mods for (created automatically when you select a title from the Active Title Selection menu) and reads mods from the "Slot_X" folder, where X is a number starting at 1.

The following is an example for Smash 3DS (00040000000EDF00) and Pokemon Sun (0004000000164800).

G:\3ds\ModMoon
|
|
+---00040000000EDF00
|    \---Slot_1
|    |   |   desc.txt
|    |   |
|    |   \---animcmd
|    |       \---fighter
|    |           \---captain
|    |                \--game.bin
|    |
|    \---Slot_2
|    |    \--desc.txt
|    |
|    \---Slot_3
|    |    \--desc.txt
|    |
|    \---Slot_4
|    |    \--desc.txt
|    |
|    \---Slot_5
|    |    \--desc.txt
|    |
|    \---Slot_6
|    |    \--desc.txt
|    |
|    \---Slot_7
|         \--desc.txt
|
+---0004000000164800
|    \---Slot_1
|    |    |    desc.txt
|    |    |
|    |    \---romfs
|    |        \--Shop.cro
|    |    \---a
|    |        \---0
|    |            \---1
|    |                \--3

When you first start up ModMoon, it will migrate your mods from Smash Selector, check for updates, then play a quick tutorial. It will show you how to set your active titles in the Active Title Selection menu, then how to select which game to run mods for. Because the Active Title Selection menu makes the folders for the games you select, it is recommended you go through this tutorial before adding the mods.

On a regular use, you'll select the game you want to use, then change what mod you want to run by scrolling through the list, tapping on the selector bar (or moving the Circle Pad left and right with the selector bar highlighted). To disable mods, simply select "Disabled" from the mods list. You'll then press the Launch button, and ModMoon will fade into the game!

Note that you must exit ModMoon by either pressing Start or launching a game. Shutting down the 3DS, or closing ModMoon by pressing "close" in the Home Menu, will, on top of hanging the system, not give it the chance to save configuration information for itself and the mods it handles. On top of the aforementioned hang, you will receive several error messages the next time ModMoon starts due to this failure to save.

As for using the many tools available, check the help popup for each option for instructions.

Errors

As previously mentioned, ModMoon has quite a bit of built in error checking. Here are some of the things it will warn the user about, and how you should solve them.

Warning: Failed to find mods for this game!

ModMoon couldn't find any mod slots for the game you just selected. You should make some.

Failed to enable/disable mods! This may resolve itself through normal usage.

Try the inverse of the action you just performed (as in, if you just enabled mods and that error message occurred, try disabling them; if you tried to disable mods, try enabling them) and this error message will probably disappear. You can then move on with your modding experience.

Congrats! You have gained 30 extra lives!

Hmmmm... Where does this appear, and what does it indicate?

Failed to move slot file from X to X! Error code:

What could be going wrong here depends on the error code. See below.

The currently selected title is not Smash. Please select Smash and try again.

(In the Smash Controls Modifier) ModMoon will not attempt to modify the save data of a game other than Smash - this would probably cause save corruption. Set Smash as your active title and try to open it again.

Custom SaltySD code.ips move failed! (original move) Error Code:

ModMoon failed to move the normal SaltySD file out of, or in to, the /luma/titles folder.

Custom SaltySD code.ips move failed! (custom move) Error Code:

ModMoon failed to move the custom code.ips file from or to the mod slot it originated from.

Error Code 2: No such file or directory.

ModMoon itself indicates that this is probably the result of you not properly closing it out.

ModMoon requires that you close it either by pressing Start to exit or launching a game - otherwise, it will not be able to properly save mod configurations.

Error Code C82044BE: Destination already exists.

ModMoon will attempt to handle this error automatically, but will not attempt to destroy any files. This error code means that ModMoon cannot move a folder somewhere because that folder already exists.

Check the destination folder it provided you, and if necessary manually move it back to where it should be (this error may occur if you broke its record-keeping by, say, shutting it off improperly and ModMoon won't fix it automatically if the attempt will destroy files in the process. It's like asking a robot to move records around file cabinets, except you already had them do it but you wiped their memory, and now they can't try doing that same movement again without intervention from someone who can analyze the situation). If this error occurred while disabling Smash mods, check the luma/titles/ folder.

There will be a Disabled(smash title ID) folder and a (smash title ID) folder. Remove one or the other to resolve the situation.

Screenshots

modmoon9.png modmoon10.png

modmoon11.png modmoon12.png

modmoon13.png modmoon14.png

Changelog

v3.0.1

  • Include SaltySD files that do not crash after the character select screen in Smash (taken from the SaltySD 1.2 release page).
  • Correct the updater not working, at all, when trying to grab stuff from GitHub.
  • Also correct, in the actual release builds, the lack of a #define for BUILTFROM3DSX - this will allow the updater to work properly for 3dsx files from now on. The readme has also been updated to reflect this.
  • Fix an edge case where the user may be unable to write a SaltySD file using ModMoon.
  • Fix a bug that prevented the user from skipping the updater.
  • Add a version string within the title selection menu.

Credits

ModMoon was my first from-the-ground-up, full-scale, completely polished program. Along the course of its development there are many, many people to thank for making development of this program possible.

  • The USM-eM Team, composed of @LinkSoraZelda, @Dannyo15, @DewTek, @Yudowat, Gryz, Karma, and M-1: Fostering the scene in which I developed ModMoon. Encouraging me to work on Smash-Selector, which is what taught me to program, and many more small pieces of encouragement that have made a significant impact.
  • @Yudowat, @LinkSoraZelda and @xGhostBoyx for the amazing design of the UI!
  • @Cydget, for originally developing Smash Selector and allowing me to work on it with him. Also for nerd-sniping me late in development into making several interesting graphics effects (namely, the animated banner and launch button).
  • @realWinterMute and fincs, for giving me early access to the new versions of citro3d and early access to citro2d, and for a very particular event.
  • You, for reading the credits! As a reward, here's a hint- try entering the Konami Code in ModMoon.
  • fincs, for a TON of things. Inspiring me to learn graphics programming, without which ModMoon in its present maturity would have been impossible. Making citro3d, without which ModMoon would also have been impossible. Countless hours of help with citro3d, without which ModMoon would have been (guess what!) impossible. Helping me track down many different bugs within ModMoon's codebase. Just being awesome. Props to this guy.
  • @smealum, @realWinterMute, mtheall, fincs, yellows8, Lectem, and every other contributor to libctru, for building such an awesome library for 3DS development.
  • @Aurora Wright and @TuxSH for making Luma3DS, and more importantly LayeredFS and code.ips loading.
  • @shinyquagsire23, for developing SaltySD.
  • @LinkSoraZelda and Cloud Road Music for the banner music (taken from USM-eM)
  • M-1 for shooting me the code.bin files to build SaltySD with at the last minute.
  • @ih8ih8sn02 for the reverse engineering work that made the Smash Controls Modifier possible.
  • The USM-eM beta testers, specifically, @NoThisIsStupider, Solid, and Lil-G.
  • mtheall, for his incredible work in two areas. The first: resolving a ridiculous crash that left ModMoon in an unreleaseable state for weeks on end. This guy put several days of his own time in to use his significant expertise to solve my mistake. The release of 3.0 would have been delayed indefinitely without him. The second: Creating Tex3DS (a fancy graphics tool for building textures), and helping me migrate ModMoon's codebase to use it instead of a nasty hack.

External links

Advertising: