Homebrew on 3DS

Share

Recently Nintendo shut down its online services for the 3DS, having closed the online store the year prior. This event has prompted me to go ahead and install Homebrew on my 3DS with the following being a few capabilities I wanted to unlock:

  • Ability to backup my physical games and run from an SD Card.
  • Region unlocking my 3DS, so I can import games from other regions into the future, especially now that I can’t purchase titles digitally.
  • Setup Pretendo Network, which is a project looking to emulate the Nintendo Online network and restore online capabilities to games.

Before moving on I do want to note that I find it very disappointing that companies such as Nintendo are unable to preserve their online capabilities for their devices. While I appreciate that maintaining infrastructure has a cost, it raises serious doubts as to whether I should be investing in digital sales in a company when in the next decade I won’t have access to content any longer. I do revisit older titles for past systems and having services disappear is a great loss for consumers. For this reason I do prefer to buy physically, but as time goes on more and more frequently essential patches or game data are not included on physical media. I can only hope Nintendo and other companies can commit to providing ongoing access to older releases on newer hardware via official emulation or hardware compatability.

With that out of the way, here’s some things to look at for those wanting to setup Homebrew on the 3DS and a few of the interesting things you can do.

Custom Firmware and Homebrew Install

I’m not going to repeat all the steps required to deploy custom Homebrew. There’s an amazing guide at https://3ds.hacks.guide which you should refer to which covers all 2DS/3DS models and firmware combinations. The long and short of it is, all current devices and firmwares are supported and the guide will walk you through this. Set aside 30 or 60 minutes to run through it. I recommend having a large SD card, but do follow guides on how to properly format anything above 32GB as the 3DS can be fussy with block sizing.

Backing up Games

Having followed the above guide on 3DS hacks, you will now have an ability to back up your physical games. This takes around 5 – 15 minutes per a game and doing so is a good way to preserve your physical title should you ever lose the media. It also enables you to play games you have purchased off a micro SD card. This obviously is convenient for anyone travelling or juggling multiple titles at once.

To backup your games

  1. Enter GodMode9 by holding Start as you power on your console.
  2. From the menu select GameCart.
  3. Select the *.trim.3ds file by navigating to it and pressing A.
  4. Either
    • Backup the .3ds file itself to the external storage by selecting ‘Copy to 0:/gm9/out’. This may be handy for storage on a PC etc. For 2DS games get the .2DS file instead.
    • Create a CIA file (installable game file) by navigating to ‘NCSD image options’ followed by ‘Build CIA from image’. With this option you can later install the game on the 3DS by using the FBI application on your Homebrew 3DS.
    • Load the game directly to your SD card so you can play of it by navigating to ‘NCSD image options’ followed by ‘Install game image’. This skips needing to use the FBI application to perform an install.

Generally generating a CIA file or installing direct to the 3DS will be more handy. I do however believe those options are not applicable to 2DS backups.

Moving Save Files

If you are copying games from your physical cartridges to the SD card, you may also want to copy save data back and forth. To do this I downloaded an application via ‘Universal Updater’ called JKSM.

To move save data from a cartridge to the console with JKSM:

  1. First ensure you have launched a digital copy of your game (and potentially created an initial save file).
  2. Insert the physical cartridge for the title.
  3. Launch JKSM.
  4. Select ’Titles’ on the initial screen.
  5. The first option should be the cartridge, with ‘Media: Game Cart’ displayed. Select this with the A button.
  6. Select ’Save Data’ and then ’New’. Leave the default name (the current date) and hit OK.
  7. Wait a moment for the save data to be duped. A file with todays date should now be displayed under the ’New’ entry.
  8. Click B a few times to return to the game titles list.
  9. Navigate to the digital copy of the same game. Look for “Media: SD”. Select the digital copy with the ‘A’ button.
  10. Again select ‘Save Data’. If you correctly selected the same game as you exported the cartridge data from, you will see the save dump from step 6.
  11. Move the cursor to the save dump file and then click the ‘Y’ button. Click ‘Yes’ to restore the data.

This process will ‘restore’ the data backed up from the cartridge to the copy of the game on your SD card. Launching the digital copy should see existing game saves or progress transferred over.

I haven’t tested this, but I believe you should be able to repeat a similar process in reverse to move data from the console to the cartridge.

Fake Street Pass Visits

Over at GBAtemp there is a group of people that have found a way to load in Street Pass data to fake visits. This makes it easier to complete the Street Pass games, particularly as many games need hundreds of visits to complete and it’s probably rare to get visits any longer. For a while there was a solution called HomePass that could emulate ‘StreetPass Relay’, a feature where places like McDonalds would have Street Pass access points for picking up visits. With that gone, the following is a current way to emulate visits.

  1. There is a script that needs to be run by GodMode9 for importing or backup up of Street Pass data that is available on GitHub. All credit goes to the user Noxious Ninja. Download the script from Github and save it as /gm9/scripts/StreetPass2.gm9 on your 3DS memory card. (should this repository become unavailable, I have included the source code below).
  2. Download one or more Street Pass files from this Google Drive share. This is a compiled list of many users data shared by One_Eye_Smiley on this GBAtemp forum post. Having multiple files will allow you to get greater variety of visitors, which can be important for games where the colour of visitors matters or if you want to collect all puzzle pieces in Puzzle Quest. Having 10 visitors of the same colour makes the ghost house game incredibly simply too.
  3. Copy the data to somewhere on your SD card. I opted to create a ‘StreetPass’ folder on the root of the SD card where I dumped all files from the above Google Drive share.
  4. Move a single StreetPass file (called ‘00000000’) to /gm9/in/streetpass/. You can do this on a PC or using the FBI app on your 3DS.
  5. Start your 3DS in GodMode9 by holding Start while powering on the console.
  6. Click the ‘Home’ button to bring up the HOME menu
  7. Select ‘Scripts…
  8. Select ‘StreetPass2’. This is the script added to the SD card earlier
  9. The first time you run this, you may want to select ‘Backup’. This will copy your existing Street Pass incoming visit data to /gm9/out/streetpass_000
  10. To import the new StreetPass data select ‘Install’. Confirm the install of file ‘00000000’. If prompted unlock the SysNAND using the instructions on screen.
  11. After the import, Select Exit. If prompted re-lock the SysNAND file permissions.
  12. Reboot the console (press the ‘Start’ button’ while in GodMode9).
  13. On the Home Screen you should see a notification of Streetpass visits (green dot on icon).
  14. Launch Street Pass.

If you visit the Street Pass entry you will now have a number of visits.

The process can be repeated by following step 4 onwards over and over again. There is no cool down needed between loading in new visit data, allowing you to progress rapidly through games. Try loading in different set of Street Pass data to get different visitors to best suit the needs of the games you are playing.

I believe if you use enough of the data in the Street Pass repository provided in Step 2, that you can fully complete Puzzle Quest, although it may take quite a lot of passes to finish that one.

As promised, here is a backup of Noxious Ninjas script for prosperity.

set PREVIEW_MODE "StreetPass2 Inject/Backup/Restore Script\nby Noxious Ninja\n \nInspired by scripts by KiTA"
# Installation:
#   - Place this file in the /gm9/scripts/ directory on your SD card.
#   - Place any StreetPass2 (CECD) files you want to install in the
#     /gm9/in/streetpass/ directory on your SD card.  You may need to
#     create this directory if it doesn't exist.
#
# Usage:
#   1. Launch GodMode9
#   2. Press the Home button on your 2DS/3DS
#   3. Select Scripts...
#   4. Select StreetPass2
#
# Changelog:
#   - v1.0 (2021-08-30)
#     - Initial release
#
# Discussions:
#   - https://old.reddit.com/r/3dshacks/comments/on4efi/streetpass_2_up_and_running/
#   - https://gbatemp.net/threads/streetpass-2-rise-from-the-ashes.526749/

set GM9IN "0:/gm9/in"
if not find $[GM9IN] NULL
    mkdir $[GM9IN]
end

set SPIN "$[GM9IN]/streetpass"
if not find $[SPIN] NULL
    mkdir $[SPIN]
end

set SYS_CECD_FILE 1:/data/$[SYSID0]/sysdata/00010026/00000000

@sp_menu
set PREVIEW_MODE "StreetPass2 Inject/Backup/Restore Script\nby Noxious Ninja\n \nInspired by scripts by KiTA"
labelsel -s "Select an option." spopt_*
goto sp_menu


@spopt_Install
set PREVIEW_MODE "Install a CECD (StreetPass) data file from\nSDCARD:/gm9/in/streetpass/"
set SUCCESSMSG "Successfully installed StreetPass data"
set ERRORMSG "ERROR! StreetPass data install failed.\nMaybe you forgot to unlock SysNAND?"

if filesel -d -x "Install which CECD file?" $[SPIN]/* CECDFILE
    if ask "Install file?\n$[CECDFILE]!"
        set PREVIEW_MODE "Installing:\n$[CECDFILE]\n \nPlease unlock SysNAND if prompted"
        cp -w -n $[CECDFILE] $[SYS_CECD_FILE]
        fixcmac $[SYS_CECD_FILE]
        echo "SUCCESS! StreetPass data file installed to:\n$[SYS_CECD_FILE]"
    end
else
    echo "Installation cancelled."
end
goto sp_menu


@spopt_Backup
set PREVIEW_MODE "Backup current CECD (StreetPass) data to\nSDCARD:/gm9/out/streetpass_???"
set ERRORMSG "ERROR! StreetPass data file backup failed."

if ask "Create StreetPass data file in $[GM9OUT]?"
    findnot $[GM9OUT]/streetpass_??? OUTPATH
    set PREVIEW_MODE "Saving backup to:\n$[OUTPATH]"
    cp $[SYS_CECD_FILE] $[OUTPATH]
    echo "SUCCESS! StreetPass data backup created at:\n$[OUTPATH]"
else
    echo "Backup cancelled."
end
goto sp_menu


@spopt_Restore
set PREVIEW_MODE "Restore a CECD (StreetPass) data backup from\nSDCARD:/gm9/out/streetpass_???"
set ERRORMSG "ERROR! StreetPass data file restore failed.\nMaybe you forgot to unlock SysNAND?"

if ask "Restore StreetPass data file from $[GM9OUT]?"
    if filesel -d -x "Restore which backup?" $[GM9OUT]/streetpass_* COPYPATH
        set PREVIEW_MODE "Restoring backup from:\n$[COPYPATH]\n \nPlease unlock SysNAND if prompted!"
        cp -w $[COPYPATH] $[SYS_CECD_FILE]
        fixcmac $[SYS_CECD_FILE]
        echo "SUCCESS! StreetPass data restored from:\n$[COPYPATH]"
    end
else
    echo "Restore cancelled."
end
goto sp_menu


@spopt_Exit
set SUCCESSMSG "Goodbye"
Source: Noxious Ninja GitHub

Restore Online Services

A group is working to replicate the Wii U and 3DS online networks via a solution called Pretendo. I strongly recommend having a look at these guides on how to set that up. Once you have established Pretendo capability, you can access online play and services in titles impacted by the shutdown of 3DS (and Wii U) online servers. It’s a work in progress, but many games are supported including the likes of Mario Kart etc.

Summary

Those are a few things to get started with 3DS Homebrew. There are guides with settings needed to enable region free gaming as well as the ability to play Game Boy Advance or DS titles. As a neat fact, the 3DS contains hardware required to play GBA titles natively, so it’s a great device to play such titles. Check out Open AGB for that.