From ArchWiki
Jump to: navigation, search

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, Chile, Brazil and South Africa. 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.


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, 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/.

Please notice that other players will only see your chosen skin if they also have it installed and, in this case, they will see a default yellowish one. So, this may happen with the skins from this package or any other skin you modify or create yourself.

Tip: It is possible to create or modify skins and use for your char. If you do so, consider publishing it , so other users can use via DDNet Skin Database. For publishing skins, go to this forum thread
Warning: This package brings around an additional RAM memory consumption of 120MB for the DDNet Client, so users playing in a computer with low RAM available might want to avoid it.

Optional offline maps

Install ddnet-maps-gitAUR.

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.

Note: Client downloads maps automatically upon connection to, or map change of, a server instance. Therefore, it is optional.

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.


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.


This section lists some gametype names and will provide a brief explanation about them.

DDNet gametypes

These are the gametypes to which DDNet provides support, which means that their 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 the repository.

Some of these might require DDNet Client due to features (e.g. dummy tee, teaming, specific key bindings) that this client provides.

The target 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, thought)
  • 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 – as well as (almost?) all other mods of Teeworlds. This set of gametypes include:

  • dm (deathmatch) – The target is to kill as many enemy players as possible, until a certain score is reached or the time runs out.
  • tdm (team deathmatch) – Same as Deathmatch, except that the players now fight in 2 teams and target for a higher, combined kill score.
  • ctf (capture the flag) – Two teams try to capture and score the enemy flag to reach a certain score (combined with team kills), or to have the higher score when the time runs out.

Blocker gametype

Note: You'll find it with type ddrace, but the server title and map name can be easily identified as Blocker

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.


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.

Tip: With ddnet-maps-gitAUR installed, you avoid having to download maps while connecting to server instances


Tango-view-fullscreen.pngThis article or section needs expansion.Tango-view-fullscreen.png

Reason: Much more information could be added here, like specific instructions for setting up, NAT forwarding etc. (Discuss in Talk:DDRaceNetwork#)
Note: These instructions are not required for playing DDNet; see #Play.

Use these instructions if you want a local server in a LAN to play with friends, or due to high latency of Internet servers, or for testing.

MySQL support

The DDNet packages provide a server binary, but MySQL support is disabled. In order to enable MySQL support you have to edit the PKGBUILD:

  1. Add mariadb and mysql-connector-c++AUR to depends() array.
  2. Append -DMYSQL=ON to the cmake command-line.
Tip: MySQL wiki page provides some instructions post-initially. Make sure to check in there, to avoid problems.

Setting up a server

In order to have a server, you need DDNet installed, config file(s) and maps.

1- Easy method:

  1. install the package ddnet-maps-gitAUR
  2. start a server instance using the .desktop file provided in the package (e.g. in GNOME, search for "ddnet server" in its Activities Overview), or by running the command
    $ DDNet-Server

The server instance should be available and visible for a Client in the LAN servers tab.

Extra tools

This section list and describe 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.

These following tools are provided in /usr/lib/ddnet/tools/ by the DDNet packages.


$ /usr/lib/ddnet/tools/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.


$ /usr/lib/ddnet/tools/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.

Note: If there is no difference between the configuration to stored and the configuration embedded in the map, then operation will be cancelled with message configs coincide, not updating map.


$ /usr/lib/ddnet/tools/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 are confusable (á was considered as a), while aa and ab are not.

If they confusable, returns not_confusable=0, otherwise, returns not_confusable=1.

Available since DDnet version 10.3.5.


$ /usr/lib/ddnet/tools/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.


$ /usr/lib/ddnet/tools/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.

Note: This works only in RGBA image files. So, it will not work for, for instance, in JPEG files.


$ /usr/lib/ddnet/tools/dummy_map

Creates a dummy, small empty map to be used to start a server. See [3] for more info.


$ /usr/lib/ddnet/tools/fake_server

Creates a fake server for testing.


$ /usr/lib/ddnet/tools/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 another
  • different 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.


$ /usr/lib/ddnet/tools/map_extract mapfile.map [directory]

Extracts content from mapfile.map into directory. If optional argument directory is not provided, extracts to the current directory.


$ /usr/lib/ddnet/tools/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 must be absolute or relative to the current position


$ /usr/lib/ddnet/tools/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.


$ /usr/lib/ddnet/tools/packetgen

Generates packets to localhost in default port (8303) to test communication with a local server instance.


$ /usr/lib/ddnet/tools/tileset_borderadd tileset1 [tileset2 ...]

It is a graphical tool, mainly useful for mappers. It fixes blending issues, similar to [#dilate], but only applies to tileset files. It expects as input tilesets with a size of 960x960 pixels with 60x60 tiles. After you apply the borderadd operation, the image will be 1024x1024 with 64x64 tiles with a 2px border.

Returns 255 with a usage message if less than 1 argument is provided, returns 1 if the image is not a RGBA image (i.e. invalid tileset file), and return 0 for success operation.


$ /usr/lib/ddnet/tools/tileset_borderfix tileset1 [tileset2 ...]

Similarly to #tileset_borderadd, it is a graphical tool, mainly useful for mappers, that fix blending issues by tilesets. However, this tool expects an input file with 1024x1024 pixels and does not produce output images as great as tileset_borderadd. e.g. it does not add 2px border.

Returns 255 with a usage message if less than 1 argument is provided, returns 1 if the image is not a RGBA image (i.e. invalid tileset file), and return 0 for success operation.


$ /usr/lib/ddnet/tools/tileset_borderrem tileset1 [tileset2 ...]

This is a graphic tool, mainly useful for mappers. It does the inverse operation of #tileset_borderadd and #tileset_borderset, i.e. this remove border of tilesets.

Returns 255 with a usage message if less than 1 argument is provided, returns 1 if the image is not a RGBA image (i.e. invalid tileset file), and return 0 for success operation.


$ /usr/lib/ddnet/tools/tileset_borderset tileset1 [tileset2 ...]

This is a graphic tool, mainly useful for mappers. It does pretty much the same as #tileset_borderadd but expects 1024x1024 images instead of 960x960, and the border will be done in place. So each 60x60 tile should be placed inside a 64x64 tile.

Returns 255 with a usage message if less than 1 argument is provided, returns 1 if the image is not a RGBA image (i.e. invalid tileset file), and return 0 for success operation.


$ /usr/lib/ddnet/tools/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

See also