Often, game developers ask: Does it make sense to use GGZ for my games? What kind of functionality can I expect? Which kinds of games are supported? Those questions should be clarified after reading through this document. In addition, reading "GGZ Game Modules" and the "GGZ Game Developer Guide" is recommended for developers.
Certainly, when evaluating GGZ as a platform for multiplayer games, a look to existing game projects will give the best answer. There is a dedicated webpage for the so-called "external game projects". Most prominently, the GNOME Games suite as well as individual game projects like Freeciv, TEG and Widelands make use of GGZ. GGZ is also widely available on Linux distributions, which makes the use of GGZ libraries very easy. Some efforts have been directed at integrating GGZ libraries with other games and toolkits. We want game authors to use GGZ!
GGZ always assumes a client-server model. This is because until today, no safe method exists for determining a winner without a trusted instance. However, peer-to-peer games can also use GGZ.
What does "using GGZ" mean at all? There are several possibilities. First, a game server is installed into a GGZ server, and made available to players who use a GGZ core client to look for players and launch games. Second, game authors can embed GGZ functionality into their games directly. This requires more work but leads to better integration. Third, additional services like the GGZ meta server or internet level and theme updates can be used, even when the network code itself doesn't use GGZ at all!
The following paragraphs deal with the three possibilities outlined above.
This is the classic case: a player launches a game from a GGZ core clients, fills some of the seats on its table with bot players, and leaves the remaining ones open for others to join. Once the table is full, the game starts and runs until a winner is determined.
GGZ games can make use of several features, if implemented correctly. The following list should give some hints.
There are well-documented convenient libraries available for development in C, C++ and Python. The base library, libggz, contains useful helper functions. The game client and server libraries, libggzmod and libggzdmod, offer a callback-based event management and allow for access on relevant game information. The core client library libggzcore is normally not used by game authors.
It is possible to integrate ggzcore functionality into a game. In this case, it would provide a connection dialog to a GGZ server, on which it joins the room of its kind, and lists the open tables within the game user interface. Currently, this is being done by Widelands.
Games which do not want to have the server running on GGZ, e.g. because of speed reasons, can still be designed in a peer-to-peer manner using UDP connections, while leaving a TCP connection to the GGZ game server open. This connection can be used to set up the game, find players and eventually report (untrusted) results to the GGZCollector server.
An advice for AI development is to keep the AI (and game logic) separate so that it can be reused for programming language wrappers and the chatbot, which can also play games. Often, such code is shared between game client and server also.
The GGZ meta server is currently used by the telnet client and KGGZ to find out on which host a particular version of the GGZ server is running. It is however a totally generic metaserver, and any game can store information in it as it needs, including replication and authentication for indicated areas of the information held by it.
Internet level and theme updates are implemented on GGZ community and currently used by KDE and SDL/Python games. Ideally, all games would provide the ability to load additional levels or designs while they run.