Recs.
Updated
Godot is free(libre), open source, MIT license, no royalties, 2D, 3D game engine full-featured. You can make any kind of complex games.
SpecsUpdate
Pros
Pro Free, open source and cross-platform
Godot is under MIT license so you can use it for your project without paying a single buck to its owner. Godot is licensed under MIT license. Anyone can grab the source from github.com/okamstudio/godot, and compile the engine him/herself. It targets Win/Mac/Linux/Android/iOS/BB10/HTML5.
Pro Easy to learn scripting language
Godot has their own scripting language called GDscript. The scripting language is easy to learn with python-like format, but it is not python. More like a mix of Javascript, PHP, C++. It's very powerful, easy to learn, and it's free of unnecessary things because it's designed for this purpose.
It can be used to add custom behaviors to any object by extending it with scripting, using the built-in editor with syntax highlighting and code completion.
A built-in debugger with breakpoints and stepping can be used and graphs for possible bottlenecks can be checked.
Pro Free and open source
Godot is licensed under MIT license. Anyone can grab the source from https://github.com/godotengine/godot, and compile the engine themselves.
Pro Under constant development
This engine barely released one year ago has more than 1000 forks on github and about 100 developers. Not only that just a bit of browsing trough issues you will quickly find out the dev community loves new esp free technology and does not shy away from completely rewriting parts of the engine. The audio engine is being completely rewritten to use threads and so forth.
Pro Internationalization of the editor
You can change the language shown in menus. Godot translations: https://hosted.weblate.org/projects/godot-engine/godot/
Pro Friendly towards Version Control Systems
The engine is build not only to support version control but to really use it. Scene files for example which usually get compiled into some sort of unreadable data stay in a text format - that way you can actually see your changes in a version control system like Git.
Pro Easy to learn scripting language
Godot has their own scripting language called GDscript. The scripting language is easy to learn with python-like format, but it is not python. More like a mix of Javascript, PHP, C++. It's very powerful, easy to learn, and it's free of unnecessary things because it's designed for this purpose.
It can be used to add custom behaviors to any object by extending it with scripting, using the built-in editor with syntax highlighting and code completion.
A built-in debugger with breakpoints and stepping can be used and graphs for possible bottlenecks can be checked.
Pro Easily expanded scripting system
With 3.0's addition of NativeScript and PluginScript via GDNative, developers can easily define bindings for new scripting languages. In addition to the primarily supported C++, GDScript, VisualScript, and C# languages, the community has contributed D, Nim, and Python as well with more on the way.
Pro Simple and readable codebase
The engine's source code is easy to read and understand with a self-documenting approach to code design. You don't have to wait months or years for other people to fix an engine bug that is important to your game. Often times, you can spend an hour or two of your own time to fix whatever problems you encounter yourself.
Pro Built-in documentation linked to the internal ScriptEditor
The editor has a fully searchable index of class API documentation for everything the engine offers (NOT just a web interface). You can easily open the documentation for any class by Ctrl-clicking the class's name in the in-engine text editor for scripts.
Cons
Con GDScript is quite immature language
GDScript is copy of python and the real problem is, it is not python. Which means it cannot have all the power and new features that is available in Python or other programming language.
It does have some good features but it is not good enough for what you need if you want to deep dive into game development. You can just feel that by the godot team is solving that matter by supporting mono version. Because C# is popular in other game engine and it contains all the new features that is available from new programming language.
If i give you very simple example for why GDScript is immature, GDScript does not support asynchronous programming. Which is very efficient for performance of your game.
You may mention about multi-threading because asynchronous programming is one way of multi-threading. However If you try that in Godot, you cannot multi-threading where you want to implement asynchronous system. For example, Autoload (Fake singleton) where you want to manage data in real time. Autoload is not real singleton. It is not a separated thread that manage data. Therefore everything is synchronous in autoload. Even though you create new thread from Autoload script, your game will just stop and wait for your thread to finish its task...
Con GDScript is quite immature language
GDScript is copy of Python and the real problem is, it is not Python. Which means it cannot have all the power and new features that is available in Python or other programming language.
It does have some good features but it is not good enough for what you need if you want to deep dive into game development. You can just feel that by the godot team is solving that matter by supporting mono version. Because C# is popular in other game engine and it contains all the new features that is available from new programming language.
To give you very simple example for why GDScript is immature, GDScript does not support asynchronous programming. Which is very efficient for performance of your game.
You may mention about multi-threading because asynchronous programming is one way of multi-threading. However If you try that in Godot, you cannot multi-threading where you want to implement asynchronous system. For example, Autoload (Fake singleton) where you want to manage data in real time. Autoload is not real singleton. It is not a separated thread that manage data. Therefore everything is synchronous in autoload. Even though you create new thread from Autoload script, your game will just stop and wait for your thread to finish its task...
Con Self-designed scripting language
Implementing new scripting language instead of using an existing scripting engine (such as Lua or V8 JS) looks expensive, but easy to learn.
Con Poor documentation
The documentation has been rather lacking in the past. It has gotten better but it's not quite there yet still.
Con Bad performance on mobile
There is a framerate drops every 5 - 8 seconds and it's hard not to notice.
Recommendations
Comments
Flagged Pros + Cons
Con NoAdmob or other AdNetwork support
Godot has no native support for implementing advertisements into your game.