DDRaceNetwork
DDNet, as it is popularly known, is a sidescrolling platform game, featuring weaponry and a cooperative gameplay, and is a mod of Teeworlds. The game name comes from Dummy Drag Race Network, as it was based in DDRace.
From the official website ddnet.tw:
- DDraceNetwork (DDNet) is an actively maintained version of DDRace, a Teeworlds modification with a unique cooperative gameplay. Help each other play through custom maps with up to 64 players, compete against the best in international tournaments, design your own maps, or run your own server. The official servers are located in Germany, Russia, USA, Canada, China, Japan, Singapore, Chile, Brazil, South Africa and Australia. All ranks made on official servers are available worldwide and you can collect points!
You control a tee, a ball-shaped 2D character, using your keyboard and mouse to shoot, grapple hook and jump around to interact with other players and the environment in the map with the finish line as target.
The game works in a client–server model, where the user plays using a Client which connects to a local or remote Server. Since DDNet has official servers, you most likely will only start the Client and play online.
Installation
Install ddnetAUR. Alternatively, you can install its development version ddnet-gitAUR.
Optional skins
Install ddnet-skinsAUR.
This package provides all skins from DDNet Skin Database for your client (except for those already provided by ddnetAUR), so you can choose between many skins to play with a fancy tee char. However, this will not affect anything in the gameplay.
These skins are installed in /usr/share/ddnet/data/skins/
.
Since DDNet 15.0, you don't need this package to see other users' fancy skins: Skins can be downloaded on-demand (i.e. to see other's tee skin) in settings (gear icon) > Skins and enabling Download skins.
Optional offline maps
This package provides all playable maps from the ddnet-maps repository with default configuration files for running an offline DDNet server. So, once installed, eases running a offline server.
Having these maps offline is beneficial for both client and server:
- Clients will not need to download maps that are already installed by this package. Only new versions of installed maps (rarely happens) or new maps will be downloaded to the user directory (See #File and directory for user settings.
- Servers can use the provided maps and configuration files to run without the server-administrator having to expend time creating configurations for them; see #Server for more info.
Play
To play DDNet, run the command
$ DDNet
or run the .desktop
file provided in the package (e.g. in GNOME, search for "ddnet" in its Activities Overview)
It is very straightforward – all user configuration (skin selection, video, controls etc.) can be done from the GUI of the DDNet Client.
No server setup is required; if you want to set up a local server, see #Server.
Also, some extra tools – which you probably will not need – are available in /usr/lib/ddnet/tools/
. See #Extra tools.
Gametypes
Gametypes (a.k.a game types or game modes) are different ways of playing Teeworlds-like games (DDNet included!), and different ways of exploring its resources (e.g. physics, weapons kill or just push other players, etc.).
In the main dashboard of DDNet Client, several server instances are listed (not only DDNet's), each one is launched with only one gametype. In order to play a gametype, you have to join the server instance that has the desired gametype (e.g. you want to play "ctf", you have to look for and join a "ctf" server instance)
See below a non-exhaustive list with name and an explanation of gametypes that can be found in DDNet official servers (although there are a lot more).
DDNet gametypes
These are the official DDNet gametypes, which DDNet maintains. That means these gametypes' maps are stored and made available in DDNet's maps repository. It also means that the Test Staff runs some test before the maps being added to the repository and published.
Some of these might require DDNet Client due to features (e.g. dummy tee, teaming, specific key bindings) that this client provides, but other could be played with other clients, like Teeworlds.
The goal of these maps, unless mentioned otherwise below, is to overcome obstacules and other difficulties of the map, while helping each other, in order to reach the finish line of map.
This set of gametypes consists of:
- novice – The easiest collaborative maps can be found here. Newcomers should start here.
- moderate – Moderate-level collaborative maps for more experienced users.
- brutal – Hard collaborative maps for very experienced users.
- insane – Insanely hard collaborative maps for insanely experienced users.
- solo – Play alone the whole map, without any a dummy or any physical interaction with users (you can chat with other players, though)
- ddmax – Maps from DDracemaX, one of the first race mod and very popular one. This project discontinued, so DDNet adopted[1] its maps and made available in official servers. See [2] for info of this gametype.
- dummy – Move your dummy to the finish line, collaboratively or solo depending on the map.
- oldschool – Some old maps to make long-time players nostalgic.
- race – Reach the finish line as fast as you can in a solo run.
Vanilla gametypes
The so-called vanilla gametypes are the first ones, and were created in Teeworlds, and which DDNet supports. This set of gametypes include:
- dm (deathmatch) – The goal is to kill as many players as possible until you reach the death or time limit. The match is over as soon as one of the conditions is met, and the winner is the player that accumulated the greatest number of kills.
- tdm (team deathmatch) – Same as Deathmatch above, except that the players are organized into two teams, with each team having its own kill count.
- ctf (capture the flag) – Two teams each have a flag (red for red team and blue for blue team) and the objective is to capture the other team's flag, located at the team's "base," and bring it safely back to their own base until reach a certain score or the time runs out. Kill the enemy to avoid having your flag captured or to get the flag back to your team's base.
Blocker gametype
Blocker has as only target to block other players, which means to fool around throwing into freeze areas. There is no score or time limit in this type of game, or at least it doesn't matter.
Please notice that while being a blocker is expected in the blocker gametype, the same does not apply to #DDNet gametypes – in this last case it is rude and you most likely will be banned by vote of others.
FNG-like gametypes
Types noteworthy: fng (discontinued, incompatible), openfng (thread), fng2 (source).
In this gametype, the players are divided in 2 teams and the target is to win by making more points. You will points by hitting the player with hammer or laser gun (the only weapons available), which will cause freeze, and to throwing into the spikes.
Configuration
Configurations are stored in plain text files in the user's home directory and can be applied in the GUI options or in the embedded console. See more information below on this topic.
File and directory for user settings
The directory $HOME/.teeworlds/
stores user configuration, demos, screenshots downloaded maps and other user contents.
The config file settings_ddnet.cfg
is where user's configuration is stored, in a simple text format in a proper syntax. This file is loaded by the Client on startup, and updated when exiting. Therefore, you're not required to set your settings manually in the config file. For all supported client settings, see Client Settings.
The subdirectory downloadedmaps/
will store maps downloaded in runtime by DDNet Client when connecting to server instances, if the maps are not available already.
Server
Although a local DDNet server is not required for playing DDNet (See #Play), one may want to run it for playing without Internet connection, want to avoid high latency ("ping" in the game interface) of servers on the Internet, simply want to test features, etc.
For more info, see Server Features, Server Settings, Server Commands, and much more in DDNet Forums.
Server via systemd service
DDNet packages provide the ddnet-server.service
systemd unit file for ease start, stop etc. the server instance.
This unit file runs the server instance as sysuser ddnet
from its home folder /var/lib/ddnet/
as working directory, having log messages available in /var/lib/ddnet/autoexec_server.log
file and via systemd journal command-line journactl -u ddnet-server
.
MySQL support
DDNet provide MySQL support to store records achieved in the server, however it is not enabled by default.
To enable MySQL support when using ddnetAUR or ddnet-gitAUR, simply edit the PKGBUILD by setting the variable _enable_mysql
to 1
, and the proper dependencies will be added and proper flags will be enabled.
Case you are building DDNet by yourself, be sure to:
- install the buildtime dependency boost and the runtime dependencies mariadb-libs and mysql-connector-c++AUR;
- append
-DMYSQL=ON
to the cmake command-line.
Running a server with ddnet-maps-git
ddnet-maps-gitAUR provides maps and server configs that allows running a server without further configuration. To have the server up:
- Install ddnet-maps-gitAUR
- Start/enable
ddnet-server.service
Your local server instance should now be available and visible in the "LAN" tab of the DDNet Client.
Extra tools
This section lists and describes some tools that, while most might not need them, could be useful for e.g. mappers. Some of these tools are developed by the DDNet development team, but other tools were inherited from Teeworlds when forking its source code in the beginning.
The tools below are provided in /usr/lib/ddnet/
by the DDNet packages.
config_retrieve
$ /usr/lib/ddnet/config_retrieve mapfile.map
Retrieves configuration embedded in DDNet map file and stores in a .cfg with same filename (e.g. "Kobra 4.map" returns "Kobra 4.cfg")
Available since DDNet version 9.0.
config_store
$ /usr/lib/ddnet/config_store mapfile.map
Stores configuration from a map's configuration file into the map file. Both configuration and map files must have the same filename in the same directory, otherwise the operation will fail.
Available since DDNet version 9.0.
configs coincide, not updating map
.crapnet
$ /usr/lib/ddnet/crapnet
Tests connection by setting a client–server connection locally and running ping between them. Reports dropped packets with message dropped packet
and successes with cfg = number
, where number varies from 0 to 2.
dilate
$ /usr/lib/ddnet/dilate imagefile1 [imagefile2 ... ]
It is a graphical tool, mainly useful for mappers. It takes care of transparent areas to prevent black/white outlines around your images ingame, therefore avoiding blending and mipmap issues. See Edge padding for more info.
dummy_map
$ /usr/lib/ddnet/dummy_map
Creates a dummy, small empty map to be used to start a server. See [3] for more info.
fake_server
$ /usr/lib/ddnet/fake_server
Creates a fake server for testing.
map_convert_07
$ /usr/lib/ddnet/map_convert_07 mapfilesrc.map mapfiledest.map
Makes mapfiledest.map
compatible with Teeworlds version 7.x that otherwise would be compatible only to Teeworlds version 6.x. If successfully, it creates a valid 07-compatible destination map; otherwise, it returns the following:
- an usage message if incorrect arguments are provided
failed to open source map
if an error happens when opening the source mapfailed to open destination map
if an error happens when opening the destination maperror loading storage
if failed to open storage for some reasonfailed to open image file
if error happens on opening PNG imageinvalid image format
if incorrectly formatted PNG.
Available since DDNet version 12.9.
map_diff
$ /usr/lib/ddnet/map_diff mapfile1.map mapfile2.map
Compares two map files, reporting one of the follow:
- no diff output (maps are the same)
different layer numbers
, if one map has more layers than anotherdifferent tile layers
, if the number of layers is the same, but at least one layer is different- lastly, the index and flags positions that differ.
If there is no difference between maps, returns 0; otherwise, returns 1.
map_extract
$ /usr/lib/ddnet/map_extract mapfile.map [directory]
Extracts content from mapfile.map into directory. If optional argument directory is not provided, extracts to the current directory.
map_optimize
$ /usr/lib/ddnet/map_optimize source_map_filepath [dest_map_filepath]
Optimizes the map file in the source_map_filepath
given (see how it works) and stores the output in the given dest_map_filepath
; if dest_map_filepath
is unset, output path defaults to out/source_map_filename.map
, stripping the path and the extension of the source file.
Note the name of the embedded images optimized is changed from originalname
to originalname_cut_newSHA256
(where newSHA256
is the new sha256 of the embedded optimized image). It is renamed is to make clear it was optimized because this tool will make changes in the mapres used by the map file.
If failed to open source or target file, returns -1.
map_replace_image
$ /usr/lib/ddnet/map_replace_image mapfile1.map mapfile2.map imagename imagefile
Replaces the image imagename currently inside the map filename mapfile1.map with the image filepath imagefile, and save into the map filename mapfile2.map.
- Both map filenames must be relative to user default DDNet folder
- New image filepath can be absolute, or relative to the current directory
map_resave
$ /usr/lib/ddnet/map_resave mapfile.map imagefile
Updates the map file mapfile.map with the provided file imagefile.
The error status 255 is returned if 1) a number of arguments different from 2 is provided, 2) if the mapfile.map is not valid, or 3) if imagefile is not a valid image file (e.g. it is a text file); otherwise, return 0.
packetgen
$ /usr/lib/ddnet/packetgen
Generates packets to localhost in default port (8303) to test communication with a local server instance.
unicode_confusables
$ /usr/lib/ddnet/unicode_confusables string1 string2
Compare string1 with string2 and report if they are "confusable", i.e. if the characters are "equal" and could cause confusion. For this to work, the characters with accents or other things around them are considered the "confusable" with the base character. Therefore, aa and aá are confusable (á was considered as a), while aa and ab are not.
If they are confusable, it returns not_confusable=0
, otherwise, returns not_confusable=1
.
Available since DDNet version 10.3.5. Since DDNet version 12.9, supports Unicode 12.0 and the tool name was renamed from confusables to unicode_confusables.
uuid
$ /usr/lib/ddnet/uuid name
Prints uuid for the provided name.
The uuid system was implemented to be easily extended by independent authors without collisions, something that the old system – with increasing integers – did not allow. This works for engine and game messages, snapshot items and events.
Exits with error status 255 if name is not provided.
Available since DDNet 10.6.1
Troubleshooting
Build failed, MYSQL_CPPCONN_INCLUDEDIR and MYSQL_CPPCONN_LIBRARY not found
Problem:
Build fails and the following message is displayed:
CMake Error: The following variables are used in this project, but they are set to NOTFOUND. Please set them or make sure they are set and tested correctly in the CMake files: /build/ddnet/src/DDNet-11.1.9/MYSQL_CPPCONN_INCLUDEDIR used as include directory in directory /build/ddnet/src/DDNet-11.1.9 [...] used as include directory in directory /build/ddnet/src/DDNet-11.1.9 MYSQL_CPPCONN_LIBRARY linked by target "DDNet-Server" in directory /build/ddnet/src/DDNet-11.1.9 -- Configuring incomplete, errors occurred! See also "/build/ddnet/src/build/CMakeFiles/CMakeOutput.log". See also "/build/ddnet/src/build/CMakeFiles/CMakeError.log".
Solution:
It means your cmake command-line has the -DMYSQL=ON
flag set, you have mariadb-libs package installed, but mysql-connector-c++AUR is missing.
Either install mysql-connector-c++AUR to build with MySQL support or remove -DMYSQL=ON
(or set to off with -DMYSQL=OFF
) to build without it.
Problem:
Build fails and the following message is displayed:
[ 38%] Building CXX object CMakeFiles/DDNet-Server.dir/src/engine/server/server.cpp.o In file included from /build/ddnet/src/DDNet-11.1.9/src/engine/server/sql_server.h:4, from /build/ddnet/src/DDNet-11.1.9/src/engine/server/sql_connector.h:4, from /build/ddnet/src/DDNet-11.1.9/src/engine/server/server.h:28, from /build/ddnet/src/DDNet-11.1.9/src/engine/server/server.cpp:40: /usr/include/mysql_connection.h:31:10: fatal error: boost/shared_ptr.hpp: No such file or directory #include <boost/shared_ptr.hpp> ^14:06, 19 June 2018 (UTC)14:06, 19 June 2018 (UTC)14:06, 19 June 2018 (UTC)14:06, 19 June 2018 (UTC)~ compilation terminated. make[2]: *** [CMakeFiles/DDNet-Server.dir/build.make:116: CMakeFiles/DDNet-Server.dir/src/engine/server/server.cpp.o] Error 1 make[1]: *** [CMakeFiles/Makefile2:281: CMakeFiles/DDNet-Server.dir/all] Error 2 make: *** [Makefile:152: all] Error 2
Solution:
It means your cmake command-line has the -DMYSQL=ON
flag set, you have both mariadb-libs and mysql-connector-c++AUR packages installed, but boost is missing.
Either install boost to build with MySQL support or remove -DMYSQL=ON
(or set to off with -DMYSQL=OFF
) to build without it.