Users who would like to develop games in Linux can choose from numerous specialized libraries, frameworks, and development environments. The three game creation systems (GCSs) described here contain everything that both beginners and advanced programmers alike need to quickly create a game that will run on various operating systems.
All you need to do in the development environments offered by GDevelop, Godot and JMonkeyEngine is to import a few graphics, arrange them to your liking in a level, then write some program code with a very convenient editor. Then, as a final step, you create the game with the push of a button. Programming is made easier by virtue of a special library called the Engine. It drastically simplifies the output of images, sounds, and animations as well as network communications. These three systems let you produce an integrated package and create arbitrary games; however, each has its own set of disadvantages.
If you want to create a game but you don't have any programming skills, then GDevelop is a good choice [1]. The development environment constructed by the French developer Florian Rival lets you click a game together with your mouse (Figure 1). GDevelop creates only 2D games in which the graphics output on the screen run on the 3D interface OpenGL.
Once you are in the development environment, you should start by importing 2D graphics to use later to put together a complete scene. You can specify the game sequence by matching important events like "left mouse click" with suitable actions like "move object space craft 10 pixels upward" (Figure 2). The events can be linked via simple conditions (e.g., a logical or ). Actions repeat via loops. If necessary, you can encapsulate the procedures that come out of these steps as functions for later reuse.
You can distribute graphics across various layers and place them on top of one another like slides. This creates the parallax effect in which objects that appear far away glide across the display screen more slowly than objects that appear to be closer. Additional functions come in the form of extensions. In this way, you can obtain functions including a physics simulator, an automatic opponent tracker for opponents, and a particle system as well. The latter function provides effects like flying sparks and dramatic explosions. You can use the tile map to produce larger game fields by putting tiles together.
You can use GDevelop to create programs for Windows, Mac OS X, and Linux. Additionally, the development environment allows for exporting the game as an HTML5 application, which runs in every browser. The only issue here is that you must decide from the beginning between a native and a web application. The choice you make determines which extensions will be available. For example, HTML5 games have to do without the particle system. However, they can make use of touch screen and multitouch gestures. When generating native Linux games, you can make use of a debugger and a profiler (Figure 3). The profiler lets you track down performance problems and excessive processor load. The Engine comes with the MIT license and the development environment itself with the GPLv3.
To date, GDevelop mainly has been used to make small freeware games like Blazing Inferno of Space [2] – a game that is well worth playing. The documentation consists of an English language wiki, which is somewhat verbose but also full of tutorials for beginners. Additionally, the development environment offers countless examples of games. Among these is the car race from Figure 1. There is a joint forum for developers and users that answers open questions.
In February 2014, the Argentinian OKAM studio published the complete source code for its development environment, which it had been using exclusively for its own games. Although Godot software had already been in use for several years, it advanced to Version 1.0 in that same year. Further open development is taking place on GitHub under the MIT license; the sponsor continues to be OKAM Studio [3].
Godot contains a 2D and a 3D engine that you can use simultaneously in a game (Figure 4). The display formats can also be mixed, making it possible to do things like place a 3D figure in front of a painted 2D background (Figure 5).
As with GDevelop, the first thing you should import into the development environment are graphical objects that you can arrange in individual scenes. The objects form so-called nodes, which the game programmer arranges into a hierarchy. A house, for example, would be built out of a roof and four walls. The concept takes some getting used to, but it simplifies the reuse of objects and makes it possible to automate some things. For example, the programmer does not need to separately make each wheel move continuously.
The individual parts of 2D figures, such as arms and legs, can be attached to one another and animated. This would be similar to the animation used in the TV series South Park , for example. Additionally, the particle system can produce nice explosions and other effects. The individual graphical objects should be organized as needed into layers, which permits parallax scrolling. Using a tile map editor, you can also quickly build 2D levels from individual tiles.
The 3D engine can import ready-made models from popular graphics programs, for example, from Maya and Blender. Godot supports animation techniques such as Skeleton Deform and Blend Shape , which can be used to create things like realistic lip movements. Numerous graphics effects are also available. Among these are simple shadowing with Shadow Maps , antialiasing, HDR, blurring effects, and a fog simulator. You can let appropriate mini programs, the so-called shaders, create the material properties of the 3D objects.
The 2D and 3D engines have separate physics simulators and collision recognition, both developed by Godot makers. The game developer will not need to learn anything new. Instead, it is possible to speak to both systems from the same interface. Furthermore, Godot animates all properties of an object across time. This means that the modifications can be precisely controlled on a timeline using key frames, and Godot computes the changes between two key frames. This concept will be familiar if you have ever worked with Synfig or some other animation program.
Godot offers many pre-assembled buttons, sliders, and lists for creating a user interface. You can adapt the appearance of the control elements with skins. Godot also supports game localization, but you will need to deliver translations in your own text files. If these possibilities still don't meet all of your expectations, then you can expand the functionality of the engine with a C++ interface so it can do things like execute time-critical program code separately.
The program logic of the game is programmed in Godot's own scripting language called GDScript (Figure 6). The code editor offers syntax highlighting to highlight the source code and other things. It also automatically suggests key words with code completion. Game execution can be stopped at targeted points by setting breakpoints in the code. If desired, the integrated debugger can jump from command to command and show current values of all variables with a simple key press. The performance analyzer delivers information about memory and processor load, which can be used to optimize the game. Godot can connect to version control systems such as Git and SVN.
The games created with Godot run on Windows, Mac OS X ,Linux, iOS, Android, PlayStation 3, and PS Vita. Both of the latter platforms require an expensive license from Sony. An export feature for HTML5 and Windows phone is currently under development.
At press time, version 1.1, which has a completely overhauled 2D engine, an improved car-building feature in the code editor, and a visual shader editor (Figure 7), is the latest release. The documentation for Godot has many gaps and is available as a GitHub wiki. This documentation consists primarily of a series of tutorials.
According to its marketing material, jMonkeyEngine is a "cross platform game engine for adventurous Java programmers" [4]. The engine proper only makes it possible to create 3D games and is written completely in Java. Supposedly, the use of Java results in rather slow applications.
The jMonkeyEngine makers promise "high performance 3D games that are on equal footing with every other engine." If you want to convince yourself that this is true, you can take a look at games like Bang!Howdy [5] or Grappling Hook [6], which are created with the jMonkeyEngine.
The software development kit (SDK) made available by the developers contains the slightly adapted NetBeans development environment [7] in addition to the engine proper. The core of the environment consists of a high-performance code editor that can automatically highlight the source, offer automatic code completion, and provide a small reference for each function which appears when typing (Figure 8).
Additional functions include source code cleanup or refactoring, a debugger, a profiler, and a connection to the version control systems Git, Mercurial, and Subversion. The development environment also supports the translation of games into other languages. To expand the functionality, you can use all of the available NetBeans plugins.
Games that are created completely in Java run on Windows, Mac OS X, Linux, Android, and on the Ouya console. In the coming 3.1 version, jMonkeyEngine is supposed to support iOS and VR glasses like Oculus Rift. A game can be exported as a JAR archive or in the form of an executable program in Windows, Mac OS X, and Linux.
When developing games, you are primarily working with the source code directly. In comparison to the competition, the development environment offers only a little bit in the way of programming assistance. For example, an assistant imports 3D objects created in Blender, which can then be arranged in a very rudimentary visual editor into a complete scene (Figure 9). The jMonkeyEngine creators recommend Blender as the preferred modeling tool. The development environment also imports Ogre and Wavefront objects.
Similarly to Godot, you can add individual 3D objects to a scene via nodes. You can arrange the nodes in a hierarchy that makes it possible to build relationships among the 3D objects. The material properties of the 3D objects come from a programmable shader, as is the case in Godot as well. If needed, a component named TerraMonkey can create a 3D landscape from an image with a topographical map or Highmaps.
The jMonkeyEngine simulates a wide variety of light sources. Techniques like screen space ambient occlusion (SSAO) conjure up realistic shadows onto the screen. Moreover, jMonkeyEngine offers a wide array of special effects such as a particle system, a smoke and water simulation, and light reflection. Post-processor filters act on the displayed scenes and create effects like fade outs at the end of a level. The jMonkeyEngine supports keyboards, joysticks, and touchscreens as input devices.
You can create menus and configuration windows with the NiftyGUI Java library [8]. This comes with jMonkeyEngine for constructing the user interface via XML markup or Java code. A Java port of the popular Bullet library, jBullet [9], controls physically correct process flows. It also allows for ragdoll physics, which is the correct movement made by body parts when in motion.
You can test the source code for your games with the accompanying jUnit framework. You can translate the code with the MonkeyBrains Engine that was developed in a separate project [10]. Thanks to the BSD license, every developer is permitted to adapt the source code for jMonkeyEngine as desired for use in commercial projects.
The documentation consists of an extremely large and well-organized wiki, which contains tutorials for beginners and detailed articles for advanced programmers. Several books are available, and an open forum can also clear up questions.
GDevelop lets even the non-programmer create simple games. In fact, you can click together an entire small action game inside an hour. This GCS is suitable therefore for quickly building prototypes. Game developers are limited to relatively simple 2D games. Furthermore, the lists of events and actions can easily get messy.
Godot is well suited for both 2D and 3D games and is similar to the popular Unity 3D, a commercial game platform (see the "Commercial Competition" box). However, with Godot, you will need to learn its scripting language, which should be fairly straightforward especially for Python users. The functionality is greater than that of GDevelop but does not approach that of jMonkeyEngine.
Commercial Competition
Unigine was one of the first commercial 3D engines to officially support Linux [11]. Its performance capacity is about that of Unity 3D and Godot. The Unigine corporation only distributes a license upon request. You will first need to register even if you want only a test version.
Most commercial Linux games are currently created with Unity 3D [12]. The engine supports 2D and 3D environments. The programs developed with Unity 3D run on a total of 21 platforms or operating systems and also on devices like VR glasses and Oculus Rift. You can use the C#, JavaScript, and Boo programming languages with the platform. Box2D makes physics simulations available.
As with Godot, you can put scenes and animation together via clicking directly in the development environment. The integrated asset store plays a part in the success of Unity 3D, because it allows you to sell graphical objects and tools to other game programmers. The development environment only runs on Windows or OS X. Moreover, many functions can be activated only for a fee, which starts at $75 per month.
GameMaker Studio [13] is likewise only available on Windows. In the past, mostly small role-playing and action games were developed with this. You can use it to create Linux games after you pay at least $198 to the manufacturer YoYo Games.
Epic Games and Crytek have adopted a slightly modified version of the Unity 3D business model. Their engines represent the upper limit of the performance scale and accordingly they also require a lot of learning. The video titled Building Unreal Paris [14] delivers an impressive demonstration of Unreal Engine from Epic Games [15]. The Cryengine from Crytek is the workhorse in the action game Far Cry [16].
The development tools that come with both engines are available only for Windows except that the tools for Unreal Engine are also available for Mac OS X. Licensing fees must also be paid, which for Crytek means $10 per month. Epic Games demands a percentage of the net sales of the game.
Table 1
Game Creation Systems
URL | http://compilgames.net/main-de.html | http://www.godotengine.org | http://jmonkeyengine.org |
License | MIT-License/GPLv3 | MIT License | BSD-License |
Platforms | Windows, Mac OS X, Linux, HTML5 | Windows, Mac OS X, Linux, iOS, Android, PS3, PS Vita | Windows, Mac OS X, Linux, Android, Ouya |
Engine | 2D | 2D and 3D | 3D |
Programming languages | graphical (event based) | GDScript | Java |
Physics simulation | yes | yes | yes |
Ragdoll physics | no | no | yes |
Fog simulation | no | yes | yes |
Particle simulation | yes | yes | yes |
Artificial intelligence | Path finding | no | yes |
Collision recognition | yes | yes | yes |
Animation system | no | yes | yes1 |
Tile maps | yes | yes | no |
Construction of a GUI | no | yes | yes |
Network connection | yes | yes | yes2 |
Localization | no | yes | yes |
Debugger | yes | yes | yes |
Profiler | yes | yes | yes |
1 No visual editor; 2 Client/Server games possible |
jMonkeyEngine targets experienced Java programmers and has many well-known standard components like the Bullet Physics simulation. If you have not yet worked with NetBeans, you will first have to work your way into the complex development environment or forego its help and integrate the engine directly into your program. The project gets high marks for its extremely comprehensive documentation.
Infos