Mar 20, 2015 you need to place the boot9.bin in the 3ds simple cia converter folder on your desktop. Put the 3ds roms in the roms folder then run the exe, then choose convert 3ds rom to cia. It will ask you to select a folder, select the roms folder, even if you dont see any files. Wait till it says finished. There are many other 3DS theme tutorials now since it has been around 1 - 2 years, and if you want to check out a more modern tutorial and is quite simple (a bit), check this thread by Simsoy at GBATemp - Tutorial how to create custom 3ds themes (2018 edition) The way I have done it still works though.
3DS Homebrew | |
---|---|
Introduction • Homebrew Development • Glossary • Flashcart FAQ | |
Lists | All Homebrew • Applications • Games • Emulators • Demos • CFWs • Exploits • Development libraries & tools • PC Utilities |
This page contains general information for 3DS Homebrew developers.
If you have any questions, you can come to GBAtemp's main homebrew development and help thread. It contains shared sources, examples and libraries.
You can find all known resources (hardware registers, syscalls, utilities) to develop your homebrew on 3dbrew.
To develop 3DS homebrew you need a development environment consisting of tools, scripts and libraries which will be detailed below. The sources are compiled to binary using GNU GCC-ARM or devkitPro with devkitARM. The available tools and SDK work on Windows 32/64bit and Linux.
The languages used to write homebrew are C, C++ and occasionally ASM. There are various online tutorials and books available to learn these languages.
Alternatively, you can also write homebrew in Lua by using Lua Player Plus.
- 1Install devkitARM
- 2Compiling sources
- 2.1Troubleshooting
- 4Editor setup
- 63ds/cia homebrew
- 8Using git
Install devkitARM
Windows
Use the automated-installer. Install in C:devkitPro and it will install all the latest versions of the required programs (you can disable devkitPSP, but be sure to enable libctru in devkitARM menu). It will create the environment variables automatically.
Linux / Mac OSX
1) Open a terminal and execute these commands:
Install libraries
You may want to install various libraries/tools if your project requires them.
Compiling sources
If you simply want to compile a homebrew project without (or after) editing it, you can use the make
utility from the command prompt/terminal.
1) Windows: Open a Command Prompt (Run -> cmd); Linux/Mac OSX: Open a Terminal from your applications
2) Navigate to the project directory (change to the correct path)
3) Run make
If you ever want to remove the compiled files, you can use this command:
This is often needed when re-compiling a project.
Troubleshooting
It is possible that sometimes your project will not compile. This can have various causes, for example missing libraries. In order to find out the problem, look into the output for the lines that start with 'error:
'; those will tell you what the problem is. You can ignore the warnings, they do not cause the compilation to fail.
If the output is big, you can filter it:
If you can't figure out what's wrong, feel free to make a post on the forums about it. Make sure to post all of the error output.
Windows Tip: To copy from your command prompt, right click and choose Mark. Then select the text to copy and press the Enter key.
Common errors
- cannot find 3dsx_crt0.o: No such file or directory
- In your makefile, find
-mfloat-abi=softfp
and change it to-mfloat-abi=hard
. You shouldn't ever usesoftfp
for 3DS homebrew.
- (name) uses VFP register arguments but (name2) does not
- Part of your project or the libraries you use were compiled with
-mfloat-abi=softfp
while other parts were compiled with-mfloat-abi=hard
. Make sure to use-mfloat-abi=hard
everywhere. You may have to manually recompile the libraries you use, if needed.
- (command) is not recognized as an internal or external command...
- Your PATH environment variable is not set up correctly. It should contain the msys folder in your devkitPro installation path (eg.
C:devkitPromsys
). Edit your PATH environment variable and make sure it includes this directory. If the command ispython
, make sure the python install directory (eg.C:PythonXX
, where XX is the version you installed) is in your PATH as well.
- unknown field 'rmdir_r' specified in initializer
- Your devkitARM is out of date. Rerun the installer or script.
- make[1]: *** No rule to make target `/c/Users/***/path/to'. Stop.
- Move the project to a folder with no spaces anywhere in its path
SMDH
Every homebrew application has an smdh file, containing additional information:
- Icon
- Name of the application (Short description)
- Description of the application (Long description)
- Name of the author (Publisher)
This information is used in The Homebrew Launcher (3DSX), and in the home menu (3DS/CIA).
The icon is a simple 48x48px png file. You can place this png in your project folder (the same folder as your Makefile is in) and name it icon.png. If no icon.png is present, a default icon from the ctrulib folder will be used.
The other data can be set in the Makefile directly:
The SMDH file is automatically created when building the project (unless you explicitly set NO_SMDH in the Makefile).
You can also manually build the SMDH using bannertool by steveice10:
Editor setup
This section explains how to set up various editors to edit and compile (existing) homebrew projects. If you want to start a new homebrew project, you should preferably copy an example project and edit the sources.
Note that this section lists only the more advanced editors which have features such as code auto-completion. You can use any text editor to edit the source files and compile as detailed above. You should however use a proper code editor (aka not notepad). Some examples are Notepad++, Sublime Text, vim, and Emacs.
Programmer's Notepad
The Programmer's Notepad is (optionally) installed by the devkitPro installer.
1) File -> New -> Project
Give it a name and save anywhere.
2) Right click the project -> Add Files
Now navigate to the example you want and add the files from that folder (eg. Makefile, readme.md, ...)
3) Right click the project -> Add Magic Folder
Navigate to the example directory again and add the source folder within. Repeat this for any other folders in the example (if any).
4) You can build the project using Tools -> Make
Make sure the project you want to build is the active project (Right click project -> active project)
Visual Studio 2015 (community)
When installing Visual Studio, make sure to install the Visual C++ packages!
1) File -> New -> Project From Existing Code...
2) In the dropdown, choose Visual C++ and click Next
3) Under Project file location, navigate to the folder with all sources. Enter a name for the project and click next.
4) Use external build system, Next
5) Build command line:
Clean command line:
Leave the rest blank. Click Finish.
6) Right click project (in the solution explorer) -> properties
7) Under VC++ directories -> General -> Include directories, add the devkitARM and ctrulib include directories (change if needed):
Make sure not to remove anything already in the box! You can add any other include folder that the project may need as well. In the end it'll read something like:
Click OK
8) (Optional) Right click project -> Add -> Existing Item
Choose the Makefile and any other files you want to add, then click Add. This step isn't required, but allows you to edit the Makefile etc. from the editor.
Alternatively, you can use 'Show All Files' under the 'Project' menu (on the top) to display all files and folders as they are on the file system.
9) You can now build the project (Right click -> Build)
Eclipse CDT
Tested with the standalone Eclipse Mars CDT on Linux. Instructions may be slightly different for other cases. Another alternate guide can also be found here.
1) File -> New -> Makefile Project with Existing Code
2) Under Existing Code Location, navigate to the folder containing the code.
You can leave both C and C++ checked, even if the project only contains one.
Under Toolchain for Indexer Settings, choose a valid Toolchain (eg. Linux GCC)
3) Right click the Project in the project explorer and choose properties.
4) Go to C/C++ Build -> Environment.
Here you need to add the DEVKITPRO and DEVKITARM variables, with their correct paths, eg.
Name | Value |
---|---|
DEVKITPRO | /opt/devkitPro |
DEVKITARM | /opt/devkitPro/devkitARM |
Make sure to change the values to the paths on your system.
5) This step isn't needed to build, but it will make Eclipse recognize the external libraries when editing code.Go to C/C++ General -> Paths & Symbols -> Includes
Under 'GNU C' (or 'GNU C++', or both, depending on what files your project has), add the following include directories:
Again, change the paths if needed. When finished, click OK.
6) You can now build the project. Right click project -> Build project
Code::Blocks
This premade project can be used as a base https://github.com/TricksterGuy/3ds-template
1) Open the project within Code::Blocks
2) Choose File > Save project as template, and choose a name for the template
3) When creating a new project, choose File > New > From template...
4) In the dialog select the template you created in 2)
5) Choose a directory to put the project
6) To build the 3dsx file choose target 3dsx and click the build (gear) button
7) To build and run your homebrew in citra choose the citra target and hit the build button (only works if citra is installed and in your PATH).
3dsx homebrew
Homebrew in this format is the most common, and can be played with ninjhax/ironhax/tubehax. No additional steps have to be taken to create this kind of homebrew; it is the default format produced when using make
.
Homebrew examples: https://github.com/devkitPro/3ds-examples
3ds/cia homebrew
If you don't need Kernel access, prefer developing homebrew in 3dsx format.
After building the project (see above), you should have an .elf file. You can convert this into a .3ds/.cia file with makerom:
- Download makerom (and compile it with
make
if needed) - Add the folder where you placed the makerom executable to your PATH environment variable
To create a .3ds or .cia file, you need some additional files in your project:
- An RSF file - Contains various info such as permissions etc. (TODO: Make guide on how to create these)
- An icon.bin - The icon and information for the home menu. This is equivalent to the compiled SMDH file, so you can just use that one.
- A banner.bin - The banner for the top screen
You should preferably put them in your project folder (or a subfolder).
Banner
Homebrew in 3DS or CIA format requires a banner, which appears on the top screen in the Home menu.
The banner consists of an image and an audio file. The image should be a 256x128px png file. This image may contain transparent parts. The audio file is a 16bit wav file.
You can create the banner.bin using bannertool by Steveice10:
Convert .elf to .3ds
Run the following commands:
For example:
Please note that the first command will alter the ELF file, so you may want to back it up first.
Convert .elf to .cia
CIA files are generic data containers that can be installed on a 3DS. In order to do this you need to have a 3DS below 9.2.
The process of building a CIA is similar to building a .3DS file:
Note that the used RSF file is not the same one as the one used for building .3DS files.
Releasing
When you are ready to release your homebrew application, create a new thread in the Homebrew Development section. In this thread, you can describe your project.
Make sure to attach (or link to an uploaded version of) the relevant files for your homebrew. This will usually be the 3DSX and SMDH files that have been compiled. You can also include the ELF file, which will allow people to repack it with makerom to a 3DS (and CIA) file. The ELF file can also be used on 3DS Emulators (currently two available: Citra and 3DMoo).
If your project is open source, you can upload the code to GitHub. Alternatively, you can simply provide the source as a separate download, or include it with the compiled files.
Using git
git is a distributed version control system. This allows you to put your code into a repository, which can then be shared with others. The main advantage is that you can keep track of your (and others') changes and even revert them if needed.
You can find instructions on the git website on how to install git on your system.
After git is installed on your system, you need to setup your username and email address. This allows git to identify who made the changes. If you have a GitHub account, use the same username and email as there!
Open a command prompt (Windows) or Terminal (Linux/OSX) and use the following commands:
Getting started
1) If you have not yet done so, create a file named README.md
in your project folder. You can use this file to add a description and information of your project. This description will be shown when people view your repository on GitHub. You can use markdown to add formatting such as bold and headings.
2) Open a command prompt (Windows) or Terminal (Linux/OSX).
3) Navigate to your project folder
4) Initialize it as a git repository
5) Add your existing code to the repository (note: the .
is part of the command)
6) Do the initial commit
Committing
When you make changes to your code, they need to be committed in order to 'save' them to your git repository. When and how often you commit is up to you, but try to do at most one major change per commit.
1) Make the repository aware of your changes
2) Add them to a commit
Add your project to GitHub
GitHub is a popular host for online git repositories.
1) Create a GitHub repository.
Make sure to name the repository after your project and optionally give it a description. Make sure the checkbox to create a README is not checked. The .gitignore
and license
should also be set to None
2) Open a command prompt (Windows) or Terminal (Linux/OSX) and navigate to your project folder.
3) Add GitHub as a remote host (change the URL):
4) From now on, you can push
your changes to GitHub with the following command:
This pushes the master
branch to the remote called origin
, which we setup as GitHub.
You don't have to push after every commit, but your changes will only show up on GitHub after you push.
3ds To Cia Converter
Tags
Tags are a way on git to mark specific commits as special. For example, you could use them to track your major releases.
1) Create the tag
For example:
To tag an older commit, specify the sha1 hash of the commit:
3ds Cia Converter Pc
2) If you are using GitHub, you must manually push the tag:
3DS Pokemon Maniac
So, surprisingly, there isn't many tutorials on XY rom hacking out there. So I decided to create this thread to write various tutorial about XY rom hacking.
NO LINK REDIRECTING TO ILLEGAL STUFF (basically roms) WILL BE PROVIDED.
1: Extracting
-A computer(Windows, sorry Mac users unless you are dual booting or using a VM)
-HackingToolKit3DS, you can find it easily by searching it on google (can't post links due to the 5 post rules). Download the V9 under the release tab
- A 3DS rom. You can have one by dumping your gamecart/digital game using a hacked 3DS (or by downloading one online even if it'S illegal)
Once you got everything, extract the .rar of hacking toolkit and run the setup.exe. Then, create a new folder where you will put your rom and hackingtoolkit3ds.exe.
Run the .exe, and enter the combo key to extract the game depending on it's extention, then wait for the program to extract your game.
If it ask you to decompress the code.bin, do the key combo for yes (should be just entering a y)
After a couple minutes, you should have a ExtractedExFS folder, a ExtractedRomfs and a ExtractedBanner + some other files.
Congrats ! you got an extracted game ! You can now follow any of the next tutorials.
2: Randomizing
You will need:
1:An extracted game
2:PK3DS from Teamcity ( log in as guest if the log in page appears) grab the latest link under the artifact tab.
Firstly, you want to create a new folder where you will put your ExtractedExeFS and ExtractedRomFS folders.
Launch PK3DS, go in the file tab, open, and search for the previous folder you created. Open it.
If an error saying there is too much files, remove the sound folder. After that it should work perfectly.
Now you can randomize/edit some basic things, like texts, stats, wild encounters, trainers... everything should speak by itself
3: Texture editing
You will need:
1:An extracted game (obvious)
2:An old version of Ohana3DS(like really old, but it is so simple to use and works perfectly with XY)(please let me post link lol)
3: Garctool, with can be found easily on google. It will be on a GitHub page, under the release tab.
4: A software to edit .png. Paint will do the job, but Photoshop is recommended for the job, because of all the tools available to be super precise and to be super quick.
Alright. First thing off, you want to locate the Pokemon/OW Trainers/Battle Trainers.(Won't provide the position for the maps as I haven't tested if editing the texture of them work).
Pokemon are located at a/0/0/7
OW trainers + all Pokemon appearing in the OW are located at a/0/2/1
Battle models are located at 1/4/0
locate the garc, then open Garctool. you want to drag and drop the garc on the window, then click process and wait. After a couple seconds, you should get a folder full of dec_nb.bin.
Editing pokemons is a bit more complicated then trainers. here is why.
Each Pokemon is made of 8 .bin. It would stand like this:
1=model
2=???
3=normal texture
4=Shiny texture
5=???
6=???
7=???
8=???
As you may have expected, you only need the 1, 3 and 4 files. for the OW, each file is one character. in the battle one, each. BCH is a character.
Once you found the files, open them in Ohana (for the pokemons, load the texture then the model)
Then, create a new folder to contains your textures. Go under the texture tab, and click on extract all and search for your new folder.
Once it's extracted, open your favorite picture editing software, open the aping and edit them as you wish (don't delete some parts as it may do some weird stuff when being loaded in the game lol)
Once you are done, save everything and close your software. go back to Ohana, texture tab, ans there should be a 'Import all' button. Click on it and grab the folder containing your modded png's. If everything was done correctly, the Pokemon in Ohana should appear with your modded files. If it doesn't, refresh your texture by dragging the bin again on Ohana.
Once that you've edited everything, close Ohana and reopen garctool. Drag the folder containing the bin on Garctool then click process. You should get a nb.garc. Rename it to the number of the original garc (For example, if you edited Pokemon, rename the 7_.garc to 7). If it prompt you to replace, do it.
And Voila ! You are now a pro of texture editing ! Enjoy !
4: Model Swapping
You wil need:
1: The same tools as the third tutorial. Nothing more. (I assume you still have your extracted graces from before)
Model swapping is very simple. It's just about renaming files. For example, if you want to replace OW Sycamore by OW Serena (Not the player model, but the rival one), make a copy of the bin file of Serena, and rename that copied bin to dec_[number of Sycamore].bin. It should prompt you to replace.
For pokemons, I recommend making a copy of every 8 file for the Pokemon you want to put. Then, rename each .bin to the numbers of the Pokemon you want to replace. Make sure you don't make any mistake in the file structure, or the game will crash.
For the Battle Trainers, I haven't really messed with them for now, but I assume you need to copy each .BCH ( + the .bins after it until a new .bch appear) to the numbers you want to place them, and it should swap correctly.
And bam ! You can now swap the game models around.
5: Musics
EDIT: It is now possible ! Check the tutorial !
Oh I know. Musics. You obviously DON’T love them if you are reading this part. Here is how you can fix that.
You will need
- The sound folder from your extracted game
- the latest release of brawlbox
- audacity
-HxD
- An internet connection
You got everything ? Alright. First you want to get a song. Any song. Just go to youtube and get a remix, then use a youtube converter to get the .mp3. Open it in audacity, and edit the song on how you want (for the battle songs, I recommend increasing the volume a little bit because of the song effects). Once you are done, got to File -> Export -> Export audio and select the wav 16 bit. Export it.
Open brawlbox and ignore the internwt popup. Go to File -> New -> Audio -> BRSTM Audio stream and open your .wav. Here you can set the loop start point and the end loop point. Play with the ticks to see how it works. When you are done, LEAVE EVERYTHING THERE AND DON’T TOUCH IT ! We will need the start value and the end value later.
Here is the complicated part. We need to edit the xy_sound.bcsar (make a backup of this file) file to put your loop points. Load the .bcsar in HxD. Now you will need a loop list. Link :pastebin.com/EJetua4J . in this pastebin there are all the song with there start loop and end loop. Now go into HxD -> Search -> Number and type in the start loop number and tick the direction : all, then click search. Now open your internet browser and search for a decimal to hexadecimal converter. Convert your start loop point in brawlbox. Now what you have to do is REVERSE your hexadecimal output. For example, if your start loop is 233832, the output will be 39168 and the value you need will be 68 91 03 00. Edit the original start loop in you bcsar file and then do the exact same thing with the end loop. Once it’s done, save everything and close HxD.
Now you might have noticed that XY is using .aac audio files. Open your web browser and search for a wav to aac converter, and convert your edited .wav to a .aac.
Once it’s done, rename your fresh .aac to the file name of the song you want to edit. If it was the pokemon league, then the name will be bgm_xy_pokemon_league.
If you have done everything correctly, you should get a custom looped music in XY. Well done !
If it didn’t work, check your hex. You might have missed something.
6: Playing your rom hack
1: Rebuild as a .3ds using 3ds builder in hackingtoolkit, then convert it to .cia using Godmode9 on your 3DS. Kinda the long method, but isn't complicated.
2: Using LayeredFS. This is the method that I recommend, but you need to grab each file manually and recreate the roofs file structure.
METHOD 1:
You decided to rebuild as a rom to install it on your system. It's easy:
Open Hackingtoolkit3DS, and enter the key combo to open 3DS Builder.
In the 3ds builder program, find the ExtractedRomfs folder, the ExtractedExeFS folder(it will ask you to recompress the code.bin, press yes) and the DecryptedHexHeader with can be found in your extracted game folder. Then specify an output folder and click rebuild (Or build or compress I can't remember) and after a couple minutes, you will get a fresh .3ds.
But it's not done yet ! You need to copy it to your 3ds SD card, and launch Godmode9. Go into the SD card, find you 3ds, select it and select 'Build CIA from file' and wait around 30 minutes. You will get a .cia with can be installed through FBI.
METHOD 2:
This is the method I recommend, because your mod will be loaded from the SD card, so you can easily replace the files if needed with Filezilla.
To do it, create a folder named 'romfs' (remove the quotes for each folder name). In this folder, create another one named 'a'. Now, go in the pk3ds folder. There should be a backup folder. go in it and there will be a bunch of files named with the garc location and the garc name. Memorize each location for each garc you modified in pk3ds, and locate them in your extractedromfs folder. Once it's done, go back to your romfs/a folder, and recreate the EXACT file structure(Like a/0/1/ and put the garc number 2 and etc). do this for each garc you modded.
For the musics, create a sound folder in the romfs folder, and put your custom .aac in it, with your edited .bcsar. The .bcsar is really important otherwise your music will loop using the original loop points.
Once it's done, go in your 3ds sd card in the luma folder. create a new folder called 'titles'. In this one, create a new folder named with the titleID for your game.
Pokemon X: 000400000055D00
Pokemon Y: 000400000055E00
then copy your 'romfs' folder containing all your modded garc in the titleID folder.
If you have done everything correctly, your SD card file structure should look like this:
:/luma/titles/[titleID]/romfs/a/['a' garc file structure]
Once it 's done, launch the Luma configuration menu by holding select and pressing power. In the menu, check 'Enable Game Patching' then press start.
If you launch your game, it should load your modded files .
And there you go, you can now make XY rom hacks !
If you would like me to add a specific tutorial (Editing Title Screens for example) Just ask and I will add it when I will have the time.
3ds Simple Cia Converter Tutorial Free
Have a good time modding !
Credits:
Asia81 for hackingtoolkit3DS
3ds To Cia Converter Online
Kaphotics and ScireM for the XY garc list and PK3DSgdkchan for Ohana3DS