This article is written from the point of view of an independent solo game developer.
Developing games is a very demanding process. In order to create a successful game, a lot of time, determination and knowledge are required. One of the most time taking tasks could be finding the right tools for the job. The tools can improve the quality of the end product, while saving a lot of time.
Choosing the Right Tools
Choosing the game engine/framework is probably the most significant decision that you have to make. Here is a list cross platform tools that can be used by indie game developers. All of these tools have desktop, Android and IOS support.
A) Libgdx (http://libgdx.badlogicgames.com/):
This is my favorite solution. I have spend huge amount of time with Libgdx. I made Futile Tiles (http://www.futiletiles.com) and some live wallpapers with Libgdx. I will definetely use it also in the future.
+ Open source. Being open source has a huge benefit. You are not on the mercy of other developers. In closed source products, you might end up in a situation, where you cannot fix a bug and the developer of the product is unable/unwilling to do it for you. I have faced this situation myself several times.
+ Enough low level to add new functionality and fix bugs, but still quite easy to learn.
+ Enough high level reduce wasted time.
+ Very wide range of helper functions.
+ You can use Eclipse IDE, which is in my opinion the best IDE that exists (I know many will disagree). Eclipse takes a lot of time to setup, but it is the most customizable IDE that I have seen. You can setup keyboard shortcuts for almost any imaginable function and there is vast range of free extensions. Eclipse has also the best Android support of the IDEs. If you plan to use it, I recommend to go through all the settings in Eclipse to make it more comfortable. Find the functions that you use the most and make shortcuts for them. My most use functions trigger by pressing the function buttons F1-F12.
+ Friendly, helpful and relatively active community. Open source development simply does not work, if people are not helping each other.
+ First class support for Spine animation editor (http://esotericsoftware.com/)
+ Excellent profiler support. While developing for Android, you can exactly find the functions that slow your game down or reserve memory.
+ Abitity to run the project as Java Application. It is very helpful in debugging, recording videos, live coding and has very fast compilation time.
- IOS support is lacking behind Android. It is OK, but I recommend to make the game first on other platforms and then finally focus on IOS.
- The level editing tools of Libgdx are not as high quality as in some of the other solutions. There is a good editor for 2d physics based games, called Rube (https://www.iforce2d.net/rube/). There are some tile based editors, but I have not tried them. I am not aware of any good 3d level editor.
- Documentation and information available online is not always complete or up to date, but helpfulness of the community and being open source usually compensates the problem.
B) Unity (http://www.unity.com):
My second favorite solution. I have spend several months with Unity. I have some working prototypes ready, but I did not publish anything yet. However, I might use it for some complete game in the future.
+ Unity asset store can speed up development a lot, at least, if you have a bit of money to invest. This fact alone is huge plus.
+ Quick to make prototypes.
+ Much information available online.
+ Much easier to make simple 3d game that in Libgdx.
+ Visual prototyping has its benefits.
+ I think C# is very good language.
- Closed source, which causes vast range of problems. You are completely on the mercy of other developers. Because there is vast amount of bug reports and features requests appearing to their website all the time, the requests from the little people have very little chance to be fixed in reasonable time frame.
- Some of the features are paid (and very expensive). If you are focusing on mobile development, the lack of good free profilers could be a deal breaker. It could be very difficult and slow to detect the source of the problems in your game without a good profiler. Also many visual effects are only available in the paid version.
- Lack of good IDEs. The standard IDE (MonoDevelop) is just awful. If you are used to Eclipse, you are not going to have fun here. However, there is a possibility to use Microsoft Visual Studio, which is a bit better than MonoDevelop, but I think it is still lacking a lot behind Eclipse. Some of the keyboard shortcuts and functionalities that I am used in Eclipse are just not available in Visual Studio, which can slow the development speed.
- Even, if and maybe because, the community is huge, getting help might be challenging. Because of the huge amount of noob questions, people are are fed up answering them. If you don't find help in some article or other resource, you will probably not get help by posting on the forums or IRC.
C) Unreal Development Kit (https://www.unrealengine.com/products/udk/):
I tried UDK about three years ago, so this information might be slightly outdated. I think it is mostly designed for large teams and individual developers will have rough time here. I decided to not use it anymore.
+ The graphics are just awesome. This is the reason, why I spend quite a lot of time with it.
+ Nice amount of help online.
- Not completely free.
- Not very flexible. It is quite difficult to make anything else, but a first person shooter.
- It is very difficult to learn compared to Unity and Libgdx.
- You might have to learn a lot of the code made by other developers in order to use it effectively.
D) Cocos2d-x (http://www.cocos2d-x.org/):
I have only learned the basics of Cocos2d-x. The main reason for studying it, was its popularity. I wanted to know why it is more popular in game development that Libgdx. I did not find the reason/reasons.
+ Open Source
+/- Little bit higher level than Libgdx. This can be good or bad. It can make development faster. Doing your own optimizations can be more difficulty.
- Lack of good IDEs.
- This is personal choice, but I feel that Windows support is not very good. I might be wrong though.
- Cross platform projects don't feel as convenient as in the other solutions.
- I think the amount of helper functions is lacking behind Unity and Libgdx.
I think graphics of games are very important. If you create exceptional graphics, your game has much more chance to succeed In my opinion, every game developer should know the basics of graphics asset creation.
The best free alternative is, to my knowledge, GIMP. I used it a lot before, it is quite good. If you don't have money, you will use it happily. However, now am using Photoshop, which is quite expensive, but superior compared to Gimp or cheap commercial raster tools.
The best free 2d vector tool is Inkscape. Even after buying Adobe Illustrator, I find myself going back to it sometimes. Somethings are better in Inkscape, but still my main tool is Adobe Illustrator.
Blender is the best free tool on the market. It is time taking to learn, but has huge potential. There are many good commercial tools, however, they are very expensive.
In my opinion, Spine is the best tool for 2d animation in games. One of the huge benefits it has, is the ability to not pre-render the animations, which decreases the download file size of final product a lot. Spine is, however, a commercial product. I don't know any good free products in this category.
Audacity is to my knowledge the best free solution. I was very happy with it, however, now I am using Adobe Audition, which has some benefits in the field of sound quality improvement.
FL Studio is quite good and relatively cheap sequencer. I am quite happy with it. There are more expensive solutions that are, according to other people, better. I tried many free solutions and did not like them.
To my knowledge, I have tried every major free video editing software available on Windows and Linux. The only usable free tool is FFMPEG. It is, however, a command line tool and definitely not as good as some of the commercial ones with graphical user interface. My current commercial solution is Adobe Premiere Pro + After Effects. There are many other commercial solutions available, but I have not tried them out that much. Word of notice here: many cheap video editing tools don't allow commercial production. Read the licenses before buying them.
One of the most important things, while developing games, is doing backups. I recommend using Git with http://bitbucket.org. It is free for small teams even in commercial projects. Using Git is much better solution that making backups to external hard drives. You can see individually the history of specific files. You can restore any previously saved version. Your files are safe even, if the house burns.
Colornote on Android can be used for writing ideas down.
Mind mapping tool called Freeplane can be used for organizing ideas on computer.
If you find yourself repeating the same task over and over again, find out, if there is a way to do it with batch scripts, which can save a lot of time. In many cases it enables tasks that could not be done by other means.
What do you think about my choices in game development? Which tool is in your opinion superior to my choices? Which tool could have made my recently published Android/IOS game Futile Tiles (http://www.futiletiles.com) better?
Please, follow me on Twitter for more awesome tutorials and games: https://twitter.com/IndiumIndeed