Google Summer Of Code
- 1 Summer of Code
- 2 Mentors
- 3 Overall Expectations and Goals
- 4 Project Ideas
- 4.1 Beginner-Friendly Ideas
- 4.2 Novice Ideas
- 4.3 Intermediate Ideas
- 4.4 Advanced Ideas
- 4.5 Note
Summer of Code
devkitPro is the provider and maintainer of toolchains and libraries of choice for (homebrew) game development, currently available for Nintendo's GameBoy Advance, DS, 3DS, GameCube, Wii, WiiU and Switch as well as the Gamepark GP32.
There are currently three sets of toolchains--
- devkitARM for the 3DS, DS, GBA, and GP32
- devkitPPC for GameCube, Wii, and Wii U
- devkitA64 for Switch
Further information and discussion of these toolchains can be found in the devkitPro forums, located at http://devkitpro.org, and additionally there are several IRC channels dedicated to homebrew development:
- #dsdev and #wiidev on irc.blitzed.org.
- #switchdev and #3dsdev on irc.efnet.org.
devkitPro is applying to become a mentoring organization for the 2019 Google Summer of Code. You can find more information about GSoC 2019 at the GSoC page.
A list of mentors is available on the mentors page. Our goal is to pair mentors with students based on which project idea the student would like to tackle, and so that the particular strengths and weaknesses of each mentor and student will balance out and create a strong bond.
Overall Expectations and Goals
Our organizational goal in participating in the Google Summer of Code is to encourage growth and community contribution for devkitPro, the toolchains and the support libraries, and to better support our end users. For students, we hope to increase your skills and give you experience working on a large project, while not totally drowning you in responsibility or isolating you from help.
We have split our project ideas into four categories, based on difficulty. If you aren't sure if you can tackle one of the more difficult ones, it may be in your best interests to pick a less challenging idea, but we will support whatever you think you can handle. Please feel free to hop on irc (blitzed/#devkitPro) and have a chat with one of the mentors if you need help deciding (or for any reason, really. we won't bite!)
For all of these projects, we'd like to emphasize not just programming skill, but also design, planning, and documentation. At the very least, we expect you to follow good programming practices, but in addition we'd like to see good inline comments as well as end-user documentation, tutorials, and sample code where applicable. It is just as important to learn good documenting as it is to learn good programming--it often does not matter as much who has the better solution, as much as it matters who can explain it better.
Potential projects that would benefit the homebrew scene in general. Please note that this list is not exclusive; if you have something you want to do, please please feel free to apply to do it and we will assign an appropriate mentor to you.
These are ideas that are probably best for someone who hasn't worked on a project with other people before, and may need a higher degree of assistance. These may require less programming than other ideas, but are still very useful.
Create Game Resource Editor/Manager
There is a definite need for a free, open source "map editor" for creating and managing tile/game maps for tile based games. Most GBA and Many NDS games are tile based, or at least have tile based components.
- We'd like to see this be cross-platform utility
- Initially, we would like a tile/map editor that supports several layers and optimizing tiles
- A long term goal of this project is to provide a means to organize and manipulate all common game resources. It would be beneficial if it also could work with and manage graphics objects (such as sprites and other non animated objects), strings and scripts, music files, and general data files. Being able to group these things and define rules for conversion as well as provide a means for integration into the build process is a more complex problem.
- Image Processing
- Documentation Skills
- UI Skills
It would be great if we had a cross-platform sprite editor.
- This is listed as a separate idea, for reasons of scope. It is recommended/preferred this be an addon or be worked on with addition to the game resource editor, but that is not mandatory.
- Programming (Same language as above if an addon)
- UI Design
- Image Manipulation
ndstool is the application which builds a .nds file from its component parts - the arm7 & arm9 binaries, icons, banner text and the embedded filesystem.
Currently it cannot edit an existing file without first extracting the indvidual parts. There was also a feature request asking for separate banner & banner text manipulation.
- possible rewrite, with the objective to allow editing as well as extraction & creation.
- ground-up rewrite utilizing OOP would be great
- support existing command line arguments
- binary file manipulation
Online Homebrew Catalog
This would be browsable from the 3DS and Switch's Homebrew Menus, as well as the web. Amateur developers would be able to upload games and applications for peer review which would then be accessible in the catalog. Support for more consoles could also be added as needed.
- This would be similar in functionality to app stores and other software distribution channels.
- Web development
- Good UI design
Refactor GameCube and Wii SDL ports
SDL ports already exists but use custom makefiles rather than the existing configure system. It also converts from RGB to the wii/cube YCbCr framebuffer in software where using the 3D hardware would make more sense. We'd like these refactored and packaged for use with our pacman installer.
3D model export/conversion tools
We need a standardized way of getting 3D models and textures from modeling applications into a format which is easily usable on the 3DS, Switch, NDS, Gamecube and Wii. Currently everyone who wants to write 3D applications has to either hobble along with partially working tools, or write their own from scratch. Having a full-featured, highly-compatible conversion/export tool would make 3D development accessible to many more people. Some work has been done on a collada parser which could be provided as a starting point.
- ability to read 3d models (mesh, bone, texture, etc) from programs such as Blender, LightWave, Milkshape
- Wings3D, Maya, 3dsMAX, and other support if time permits
- define a standard model format for NDS/GC/Wii and allow export to this format
- sample code and documentation is a must
- 3D Math
- 3D Math (really important!)
Cross-platform 3D/game framework
In relation to the previous idea, it would be good to create a lightweight 3D/game framework that would allow developers to write 3D games and applications running on 3DS and Switch (and possibly Wii or Wii U). It would tie in with the 3D model conversion tool, and would abstract the differences between the 3DS' citro3d and the Switch's OpenGL interface.
- Write a framework in C/C++
- Write additional tools for producing resources
- Experience with existing frameworks such as Unity
- 3D Math (can't stress this enough!)
Silent games are no fun. For that reason, we need an easy to use sound system. On DS/GBA there's Maxmod; however on 3DS and Switch we have no such library. Ideally, this library would allow playback of sequenced music (with soundfonts), streamed music and perhaps even tracked music as well; and the library would take advantage of the 3DS and Switch's DSP-powered hardware mixing capabilities.
- Write a sound system library
- Write tools needed to produce and convert sound content
- Audio programming
- Audio theory
- Digital signal processing (DSP), especially filters
Up for a challenge? These ideas are things we'd really like to see done, but feel that their scope or difficulty may lay outside of what can be accomplished during the GSoC. That said, you don't have to stop when the GSoC is over, and these would make great projects for some.
GDB stub and host proxy
For GBA, there was a device called Xboo which allowed for hardware debugging. No such device has been developed for the Nintendo DS If developed, this would allow developers to debug their applications on the target platform via a stub which communicates with GDB (GNU Debugger) running on a host PC. Being able to debug on hardware is very valuable, since currently all PC-based emulators are either lacking debug capability or lacking in emulation accuracy.
- Create hardware (or possibly wifi) debugging interface for Nintendo DS
- Tie in to GDB
- Great knowledge of ARM Architecture
- Knowledge of GDB/Insight
- Some hardware design experience
Wii U Homebrew
Nintendo created an ill fated console many years ago, the Nintendo Wii U. Due to a lack of scene interest, there had never been proper fully integrated homebrew support in devkitPro's toolchains. However, recently a revival of Wii U homebrew is taking place and we're looking towards standardising development on the Wut library, as well as creating a clean and reliable homebrew execution environment through the help of a new and refactored "custom firmware" for the console as well as a redesigned Homebrew Menu on par with the ones available for other consoles.
- Reverse engineer security mechanisms to find a way to inject or otherwise run homebrew code <ref>the DMCA allows software developers to circumvent technological protection measures of a lawfully obtained computer program in order "the elements necessary to achieve interoperability of an independently created computer program with other programs."</ref>
- Reverse engineering
- PPC Assembly
- Hardware/FGPA experience will help (for prototyping and intercepting data)