1. Manurocker95

    OP Manurocker95 Game Developer & Pokémon Master
    Member

    Joined:
    May 29, 2016
    Messages:
    1,368
    Country:
    Spain
    Note: these tools are mainly deprecated. Please use citro2d (https://github.com/devkitPro/citro2d) and citro3d (https://github.com/fincs/citro3d).

    Other solutions to make graphical homebrew are SDL1.2 and LovePotion.

    Portlibs has been replaced by devkitPro's pacman (https://github.com/devkitPro/pacman)




    Hello! The github page of this https://www.reddit.com/r/3dshacks/comments/4ne82e/setting_up_visual_studio_2015_environment_for/ is down and it helped me so much to start in the scene, so I'd like to remake here the tutorial (as noob friendly as possible). I've reached for something like this in the forum and didn't find anything so here I am.

    First of all, credits to wedr2 for the original guide. I'm just rewriting it for those who want to start here. :)

    This is mainly made for Windows, so there are maybe some things you cannot use on MAC/Linux. Just change those as needed.

    I've updated the tutorial to the library PP2D made by @EventAssistant. Nowadays, it has better results than Xerpi's stuff.

    Introduction:

    This guide shows how to set up the initial 3DS homebrew development environment using Visual Studio 2015 Community Edition. This guide should also apply to Visual Studio 2015 Professional and up. This setup will allow you to use Visual Studio's IntelliSense when working with your code, while being able to compile your code into .3DSX and .ELF files for homebrew applications. We can create .cia, .cci and .3ds of our homebrews.

    By following this guide, you will be creating your own project from scratch. However, should you feel like using a pre-made Visual Studio project template, you may use https://github.com/usagirei/3DS-VS-Template or my own test examples: https://github.com/Manurocker95/3DS-Homebrew-Test-Example

    You have here a template with .cia compiling, Stereoscopic 3D, romfs, image loading from romfs, sounds and savedata with SF2D, SFTD and SFIL:

    https://github.com/Manurocker95/3DS-Homebrew-Template-With-Libraries

    And a template with .cia compiling, image loading from romfs, shared fonts, sounds and savedata with PP2D:

    https://github.com/Manurocker95/3DS-Homebrew-Template-With-PP2D

    We will call Visual Studio 2015 Community as "VS2015" from here on out.

    Microsoft Visual C/C++ is not bundled with VS2015 by default. You must choose to install this package, as it is required for 3DS homebrew development. If you cannot find it in the VS2015 Installer, you can follow the instructions to obtain this package below.

    Minum Requirements:

    - Latest version of Visual Studio 2015 Community: https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx
    - Microsoft Visual C/C++ package for Visual Studio 2015 Community.
    - Latest stable version of devkitPro: http://devkitpro.org/wiki/Getting_Started
    - Xerpi's Portlibs installed
    - Creativity to make good stuff.

    Extras:

    - Additional Libraries (We will install some of them below): https://www.3dbrew.org/wiki/Homebrew_Libraries_and_Tools
    - Templates mentioned above:

    https://github.com/usagirei/3DS-VS-Template
    https://github.com/Manurocker95/3DS-Homebrew-Test-Example
    https://github.com/Manurocker95/3DS-Homebrew-Template-With-Libraries
    https://github.com/Manurocker95/3DS-Homebrew-Template-With-PP2D

    Notes:

    To explain the inconsistencies of slashes, "\" and "/", used in this guide:

    In Windows, of any editions, it uses backslashes "\" as file separators, and not forward slashes "/". This also means in Visual Studio of any editions, it natively uses backslashes "\" as file separators. If you see forward slashes "/", this clearly means it is used in Makefiles.

    The usage of backslashes "\" was due to the forward slashes "/" being used as indicators for "switches" or "flags" (cmd.exe /w, or /help) in IBM software, and is not compatible to parse as file separators. MS-DOS adopted this, and to this day, forward slash switches are still used in many places.

    Setup:


    1) Acquiring Microsoft Visual C/C++ for VS2015:


    - Install VS2015 Community.

    - Run VS2015 once it is installed.

    - In the Start page, under the Start section, click on "New Project".

    - On the left pane, click on Installed > Templates > Visual C++> Install Visual C/C++.

    - Click OK.

    VS2015 will then install Visual C/C++ packages. Follow the instructions, then continue to the next section.

    2) Nintendo 3DS Homebrew Development Setup:


    - Install devkitPro, by following the instructions given in the Getting Started article.

    - Download Xerpi's precompiled portlibs (You can compile your own ones) for devkitPro: https://github.com/xerpi/3ds_portlibs/releases

    - Unzip it to $DEVKITPRO (usually C:\devkitPro on Windows and /opt/devkitpro on Linux).

    - Run Visual Studio 2015 Community.

    - On the Start page in VS2015, under the Start section, click "New Project...".

    - When in the New Project wizard, click on Installed > Templates > Visual C++ > Makefile Project.

    - Down at the bottom, choose your project name, your solution location, and the solution action.

    NOTE: MAKE SURE your solution location is located in a directory where the file path does NOT contain any WHITESPACES!


    - Click OK.

    - In the Solution Explorer, right click on your project, and choose Properties.

    - On the left pane, click on General.

    - Make sure under General, Configuration Type is set to Makefile.

    - On the left pane, click on VC++ Directories.

    - Under General, click on Include Directories, click on the arrow dropdown button on the right, and select <Edit>.

    - Add the following filepaths, and do not remove the others:

    \path\to\devkitPro\devkitARM\arm-none-eabi\include
    \path\to\devkitPro\libctru\include

    - On the left pane, click on NMake.

    On the right pane, under the General section, add the commands for Build, Rebuild, and Clean, as follows:

    Make Command Command Values

    Build make
    Rebuild make clean all
    Clean make clean

    On the right pane, under the IntelliSense section, add the following path to the "Include Search Path" and do not remove the others. You should only have the following paths set, with the $(Macro) paths untouched:

    \path\to\devkitPro\libctru\include
    \path\to\devkitPro\devkitARM\arm-none-eabi\include\

    - Click OK to go back to the VS2015 editor.

    - In the Solution Explorer, add a new item under the filter, "Source Files", by right clicking the filter, Add > "New Item...".

    - In the Add New Item wizard, click on C++ File.

    - Down at the bottom of the wizard, make sure the Location is the following, with the folder, "source" added at the end (And yes, it is all lowercase "source"):

    \path\without\whitespace\to\project\source\

    - Type your C++ file name, and click on "Add".
    Add the following #if and #defines macros at the top of your CPP file:


    Code:
     #if __INTELLISENSE__
     typedef unsigned int __SIZE_TYPE__;
     typedef unsigned long __PTRDIFF_TYPE__;
     #define __attribute__(q)
     #define __builtin_strcmp(a,b) 0
     #define __builtin_strlen(a) 0
     #define __builtin_memcpy(a,b) 0
     #define __builtin_va_list void*
     #define __builtin_va_start(a,b)
     #define __extension__
     #endif
    
     #if defined(_MSC_VER)
     #include <BaseTsd.h>
     typedef SSIZE_T ssize_t;
     #endif
    
    Then add the following code to your C++ file after it:


    Code:
    #include <3ds.h>
    
    int main()
    {
        // Initialize the services
       gfxInitDefault();
       consoleInit(GFX_TOP, NULL);
    
       //Main loop
       while (aptMainLoop())
       {
           hidScanInput();
     
           // If Start button is pressed, we exit
           if (hidKeysDown() & KEY_START)
           {
              break;
           }
        }
    
       // Exit the services
       gfxExit();
       return 0;
    }
    
    
    This is the part where it gets tricky.

    Ignore the errors in the Error List by turning it off or clicking "X of X Errors" once, where X is any given number.

    If you see any squiggly lines underneath ANY letter or character in the code provide above, it means you have set your IntelliSense incorrectly. Make sure to double check all of the steps above, to see if you have missed any.


    Tricky part is finished. Congratulations!

    - In File Explorer, navigate to the following directory:

    \path\to\devkitPro\examples\3ds\templates\application

    - Copy the Makefile file.

    - In File Explorer, navigate back to your project root directory.

    - Paste the Makefile file to the project root directory.

    - In VS2015, in the Solution Explorer, right click on your project, Add > "Existing Item...".

    - Select Makefile.

    - Click on "Add".

    - In the Solution Explorer, open the Makefile, so the file is opened in VS2015.

    - At the very top, add the following, with FORWARD SLASHES:

    export DEVKITPRO=/path/to/devkitPro
    export DEVKITARM=/path/to/devkitPro/devkitARM

    This is an example:

    If devkitPro is installed at "C:\devkitPro":

    Code:
    export DEVKITPRO = /c/devkitPro
    export DEVKITARM = /c/devkitPro/devkitARM
    
    - Go to LIBDIRS and place something like this:

    Code:
    LIBDIRS := $(CTRULIB) $(PORTLIBS)
    
    - Save Makefile.

    - In the Solution Explorer, right click on the Makefile, and select "Properties".

    - In the Makefile Property Pages, make sure on the right pane, under General, the Item Type is Text, and the rest of the entries are empty.

    - Click OK to exit back to VS2015 editor.

    - Hit CTRL+SHIFT+B or in the taskbar, "Build > Build Solution" or "Build > Build [project name]", where [project name] is your project name.

    - In VS2015, in the Output tab, you should see your code being built via Makefile.

    And that's it! From this point on, you are free to add more libraries you need to use from the Additional homebrew libraries and tools. You can now utilize Visual Studio's IntelliSense to help you while you code.

    Adding PP2D to our homebrew:

    - Download Bernardo's library from his github: https://github.com/BernardoGiordano/pp2d or take it from my template

    - Copy pp2d folder to your source folder.

    - Open your Makefile in VS2015

    - Go to SOURCES and place something like this:

    Code:
    SOURCES        :=    source source/pp2d
    
    - Go to LIBS and place something like this:

    Code:
    LIBS    := -lcitro3d -lctru -lm
    
    And that's it. It should work.

    [OUTDATED] Installing and Adding SF2D, SFTD and SFIL to our homebrew:

    Only if you want to use them. No need to do this if you do your homebrew with PP2D.

    This part is mainly my own as I experienced some problems setting up the libraries. It may help you.

    A) SF2D (PORTLIBS NEEDED):

    - Download Xerpi's SF2DLib master from his github: https://github.com/xerpi/sf2dlib

    - Unzip wherever you want.

    - Go to the folder path/to/sf2dlibmaster/libsf2d and hit SHIFT+Right Click > Open CMD here

    - Write "make install" and press Enter.

    Now you got SF2D library installed.

    B) SFTD (PORTLIBS + SF2D NEEDED):

    - Download Xerpi's SFTDLib master from his github: https://github.com/xerpi/sftdlib

    - Unzip wherever you want.

    - Go to the folder path/to/sftdlibmaster/libsftd and hit SHIFT+Right Click > Open CMD here

    - Write "make install" and press Enter.

    Now you got SFTD library installed.

    C) SFIL (PORTLIBS NEEDED):

    - Download Xerpi's SFILLib master from his github: https://github.com/xerpi/sfillib

    - Unzip wherever you want.

    - Go to the folder path/to/sfillibmaster/libsfil and hit SHIFT+Right Click > Open CMD here

    - Write "make install" and press Enter.

    Now you got SFIL library installed.

    D) Edit the Makefile to use them in your code.

    - Open your Makefile in VS2015

    - Go to LIBS and place something like this:

    Code:
    LIBS := -lsftd -lsfil -lpng -ljpeg -lsf2d -lctru -lm
    
    And that's it. You can now compile SF2D, SFTD and SFIL. I'd recommend you to install Citro3D made by Fincs: https://github.com/fincs/citro3d

    Credits:
    Original Tutorial:

    - usagirei for the 3DS Visual Studio Template.
    - astronautlevel for sharing the 3DS VS Template.
    - nich, Al3x_10m, FenrirWol, mtheall, donttalkt, Hamcha, Plailect, and PokeAcer for solving programming issues.
    - Shadowhand and Miah_Molkot for encouragements and support.
    - Redy, Gelex, Tobago, MasterCheese, TricksterGuy for many other things.
    - DaGamer12345 for feedback and testing.
    - wedr2 for the original tutorial

    This tutorial:

    Xerpi for portlibs sf2d, sftd and sfil
    BernardoGiordano for PP2D
    Fincs for Citro3D
    Manurocker95 for making this tutorial.

    If this tutorial has been useful for you, credits are appreciated :3
     
    Last edited by Quantumcat, Jan 10, 2019
  2. Manurocker95

    OP Manurocker95 Game Developer & Pokémon Master
    Member

    Joined:
    May 29, 2016
    Messages:
    1,368
    Country:
    Spain
    Hope this helps someone to start x)

    If you want me to add something else to the tutorial, just tell me :D
     
    Last edited by Manurocker95, Feb 14, 2017
    iAqua likes this.
  3. proflayton123

    proflayton123 Sakura思い
    Member

    Joined:
    Jan 11, 2016
    Messages:
    6,024
    Country:
    Japan
    This is lovely, thanks very much I'll sure to be giving this a go
     
    Manurocker95 likes this.
  4. adrifcastr

    adrifcastr GBAtemp Addict
    Member

    Joined:
    Sep 12, 2016
    Messages:
    2,036
    Country:
    Germany
    already tried that with the original guide, but I´m still getting errors


    nn.png
     
  5. Manurocker95

    OP Manurocker95 Game Developer & Pokémon Master
    Member

    Joined:
    May 29, 2016
    Messages:
    1,368
    Country:
    Spain
    In Output what error does it show?

    Hope to see new homebrews soon ^^
     
    Last edited by Manurocker95, Feb 14, 2017
  6. adrifcastr

    adrifcastr GBAtemp Addict
    Member

    Joined:
    Sep 12, 2016
    Messages:
    2,036
    Country:
    Germany
    wait I'mma take a look, btw, I assume it is still the same process if I'd rather use c then c++?

    — Posts automatically merged - Please don't double post! —

    @Manurocker95 there you go it says that the 3dsx is not found. I ´m really mad also the original guide did not worked for me

    1>------ Build started: Project: Test1, Configuration: Debug Win32 ------
    1> Datei *.3dsx nicht gefunden
    1> make: *** [all] Error 2
    1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.MakeFile.Targets(41,5): error MSB3073: The command "make" exited with code 2.
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
     
  7. Manurocker95

    OP Manurocker95 Game Developer & Pokémon Master
    Member

    Joined:
    May 29, 2016
    Messages:
    1,368
    Country:
    Spain
    Did you link everything correctly? How is your code and makefile?
     
  8. adrifcastr

    adrifcastr GBAtemp Addict
    Member

    Joined:
    Sep 12, 2016
    Messages:
    2,036
    Country:
    Germany
    its just a test project to see if it builds the files now the source files just contains whats also in the guide so yeah its just for testing if it builds the files.
     
  9. Manurocker95

    OP Manurocker95 Game Developer & Pokémon Master
    Member

    Joined:
    May 29, 2016
    Messages:
    1,368
    Country:
    Spain
    I made a test example for those who want to use it. It compiles without any issue. Try it and report if it gives you any problem while compiling: https://drive.google.com/open?id=0B66zoi0CftI2NjNXeGpBR3NyZmM

    You need to have devkitpro installed in C:\devkitPro and the portlibs installed.
     
  10. adrifcastr

    adrifcastr GBAtemp Addict
    Member

    Joined:
    Sep 12, 2016
    Messages:
    2,036
    Country:
    Germany
    Im not dumb. I have devkupro since ages. (updates of course) and yeah I'll take a look.
     
  11. Manurocker95

    OP Manurocker95 Game Developer & Pokémon Master
    Member

    Joined:
    May 29, 2016
    Messages:
    1,368
    Country:
    Spain
    I meant you need installed portlibs and devkitpro in that path (You may have it in other path) for this example. If it gives you any issue compiling, delete the build folder and try again. It should work.
     
    adrifcastr likes this.
  12. adrifcastr

    adrifcastr GBAtemp Addict
    Member

    Joined:
    Sep 12, 2016
    Messages:
    2,036
    Country:
    Germany
    k thanks. damn i spelled devkitpro wrong. wow.

    — Posts automatically merged - Please don't double post! —
     
  13. Shikkichu

    Shikkichu A little Pika girl~
    Member

    Joined:
    Jan 28, 2017
    Messages:
    626
    Country:
    United States
    Awesome guide, it seems very noob friendly.. well for those who can read xD
     
  14. Evernew

    Evernew Member
    Newcomer

    Joined:
    Nov 18, 2016
    Messages:
    41
    Country:
    I tried many times create a project from 0 with this guide but I can't do it.I put a image from the errors for if someone can help me.
    I have devkitpro, portlibs, visual studio 2017, windows sdk and windows redistributable c++

    [​IMG]
     
  15. Manurocker95

    OP Manurocker95 Game Developer & Pokémon Master
    Member

    Joined:
    May 29, 2016
    Messages:
    1,368
    Country:
    Spain
    Delete the Build folder of my test project, I 4got it only compiles on my computer. Did you set up the include paths correctly for devkit?
     
  16. Manurocker95

    OP Manurocker95 Game Developer & Pokémon Master
    Member

    Joined:
    May 29, 2016
    Messages:
    1,368
    Country:
    Spain
    Edited some confusing parts with Portlibs and deleted no needed stuff in the simple template. Now should be totally noob-friendly.

    Created a new template with .cia compiling, Stereoscopic 3D, use of romfs, SF2D, SFTD and SFIL (including .cia compiling).

    You can use it as base for what you want.
     
    Last edited by Manurocker95, Apr 18, 2017
  17. Manurocker95

    OP Manurocker95 Game Developer & Pokémon Master
    Member

    Joined:
    May 29, 2016
    Messages:
    1,368
    Country:
    Spain
    Tutorial updated to @EventAssistant 's PP2D library. Template made with it too.
     
  18. Sciencejet

    Sciencejet Newbie
    Newcomer

    Joined:
    Feb 27, 2017
    Messages:
    1
    Country:
    United States
    Do you have to do these steps with every project that you do?

    — Posts automatically merged - Please don't double post! —

    That and everytime I try and make the example code shown up above, it fails.
     

    Attached Files:

  19. Manurocker95

    OP Manurocker95 Game Developer & Pokémon Master
    Member

    Joined:
    May 29, 2016
    Messages:
    1,368
    Country:
    Spain
    Once you setup the environment, you don't need to set it up again. Just the project.


    Do you have everything well set up? Portlibs included?

    Can you compile any of the examples?
     
    Last edited by Manurocker95, Oct 31, 2017
  20. KyoLikesTrees

    KyoLikesTrees Advanced Member
    Newcomer

    Joined:
    Jun 17, 2018
    Messages:
    93
    Country:
    Austria
    I followed the guide and it has worked (but the links to xerpi's portlibs and pp2d don't work anymore).
    But how can I make a cia?

    EDIT: I just found out, I think.
     
    Last edited by KyoLikesTrees, Nov 14, 2018
Draft saved Draft deleted
Loading...

Hide similar threads Similar threads with keywords - environment, development, [TUTORIAL]