Which platform do I develop for?This of course depends on what platforms you have access to and the level of expertise that you are at. At present, the PSP, GP2X, GBA, NDS, Xbox360 and PC are the most accessible in terms of getting started and going.
PSPThis is usually the most viable option for most people as there is no extra hardware needed to run homebrew, just the right firmware (more details can be found
here). It is a mainstream console that you can easily buy in the high street and has a large audience to distribute to. There is a stable programming SDK for C or C++ with many external libraries available to download for free or you can use a high level scripting language such as Lua or Python. Part of the appeal of developing for the PSP is that it is very similar to developing for a PC, just on slower hardware.
Due to the extra accessibility of the platform, there are already a large number of experienced developers currently using the platform but you will find that this is outweighed by the number of beginner programmers that are just starting out. This can make it difficult when asking for advice as it suffers from the 'beginner teaching the beginner' syndrome where either person doesn't know better.
As mentioned earlier, it is a mainstream console so the range of your users is broad, this can range from the enthusiastic that know the scene inside and out to the clueless expecting everything for free and just be as good as commercial work. The latter are more likely to leave comments that such as "This game is shit, my mum can do better". These, you ignore or even better, don't give them an excuse to say so (see
When should I release?).
GP2XOtherwise known as the Open Source handheld, it runs homebrew games straight out of the box without any extra hardware or special firmware or software. As with the PSP there are stable SDKs for C or C++ with hardware accelerated
SDL libraries. This means it is very fast (even for emulators to use) and because it is a common cross platform library used by many games and applications, ports of games can be very easy to do and help can be widely found.
However, the console itself is nowhere as mainstream as the PSP and is a niche platform with limited user base. While this limits your audience, you find that there less whiners and idiots in the community that you find in the PSP. The developer community is usually pretty tight nit and tend to stick together, helping each other out as much as possible and you find the frequency of high quality releases is better then the PSPs.
GBA and NDSAgain, SDKs for C and C++ exist and are very stable, however extra hardware in the form of flash cartridges is usually needed to run homebrew on the platform. Thankfully, emulators exist for both platforms which makes development a little easier. Developing on either platform is considered much more difficult then any of the other platforms mentioned here because much of the hardware is rather unique and the developer programs close to hardware with reasonable knowledge in how they work. Not recommended for beginners to programming.
Xbox360Microsoft have rather unexpectedly, released and supported tools with libraries to use with the Xbox 360 and PC.
C# (pronounced C Sharp) is their language of choice and quite frankly, it is a great language to program with. The downside is that it isn't free if you want to get it onto the 360. More information can be found on the
XNA's Creator Club site.
Microsoft have launched a Community Games section on Live where you can buy games made using the the above tools by other developers. This does mean you can potentially make a profit by releasing software using this platform but be warned, it is extremely make any significant amount of money at given
developers' past experiences.
PCAnything goes, you can pretty much use any language, there are a
tremendous amount of libraries that can be used to create games with on the PC platform. No extra software or hardware is needed to play games and there is no shortage of tools or tutorials to use. The only real downside is the sheer infinite number of combinations of hardware that can be used to make a PC and the possibility that it won't work on the ones that you want to run it on.