Unser eigener Geschmack von DDRACE, einem TeeWorlds -Mod. Weitere Informationen finden Sie auf der Website.
Entwicklungsdiskussionen finden Sie auf #DDNET auf Quakenet (Webchat) oder auf Discord im Entwicklerkanal.
Sie können Binärveröffentlichungen auf der DDNET -Website erhalten, sie auf Steam finden oder aus dem Repository installieren.
Wenn Sie den Quellcode kennenlernen möchten, können Sie den Entwicklungsartikel im Wiki überprüfen.
So klonen Sie dieses Repository mit vollem Geschichte und externen Bibliotheken (~ 350 MB):
git clone --recursive https://github.com/ddnet/ddnet
Um dieses Repository mit vollem Verlauf zu klonen, wenn Sie bereits über die erforderlichen Bibliotheken in Ihrem System verfügen (~ 220 MB):
git clone https://github.com/ddnet/ddnet
Um dieses Repository mit dem Verlauf zu klonen, da wir die Bibliotheken auf https://github.com/ddnet/ddnet-libs (~ 40 MB) verschoben haben:
git clone --shallow-exclude=included-libs https://github.com/ddnet/ddnet
Um die Bibliotheken zu klonen, wenn Sie zuvor DDNET ohne sie geklont haben oder wenn Sie die DDNET-Libs-Geschichte anstelle eines flachen Klons benötigen:
git submodule update --init --recursive
Sie können die erforderlichen Bibliotheken in Ihrem System installieren, touch CMakeLists.txt und CMake verwenden die systemweiten Bibliotheken standardmäßig. Sie können alle erforderlichen Abhängigkeiten und CMake in Debian oder Ubuntu wie folgt installieren:
sudo apt install build-essential cargo cmake git glslang-tools google-mock libavcodec-extra libavdevice-dev libavfilter-dev libavformat-dev libavutil-dev libcurl4-openssl-dev libfreetype6-dev libglew-dev libnotify-dev libogg-dev libopus-dev libopusfile-dev libpng-dev libsdl2-dev libsqlite3-dev libssl-dev libvulkan-dev libwavpack-dev libx264-dev python3 rustc spirv-tools
Bei älteren Verteilungen wie Ubuntu 18.04 installieren Sie google-mock nicht, sondern setzen Sie -DDOWNLOAD_GTEST=ON das Erstellen, um eine neuere GTEST/GMOCK -Version zu erhalten.
Bei älteren Verteilungen ist rustc -Version möglicherweise zu alt. Um einen aktuellen Rost-Compiler zu erhalten, können Sie stattdessen Rustup mit stabilem Kanal verwenden oder das rustc-mozilla -Paket ausprobieren.
Oder auf CentOS, Redhat und Almalinux wie folgt:
sudo yum install cargo cmake ffmpeg-devel freetype-devel gcc gcc-c++ git glew-devel glslang gmock-devel gtest-devel libcurl-devel libnotify-devel libogg-devel libpng-devel libx264-devel make openssl-devel opus-devel opusfile-devel python2 rust SDL2-devel spirv-tools sqlite-devel vulkan-devel wavpack-devel
Oder auf Fedora wie folgt:
sudo dnf install cargo cmake ffmpeg-devel freetype-devel gcc gcc-c++ git glew-devel glslang gmock-devel gtest-devel libcurl-devel libnotify-devel libogg-devel libpng-devel make openssl-devel opus-devel opusfile-devel python2 SDL2-devel spirv-tools sqlite-devel vulkan-devel wavpack-devel x264-devel
Oder auf Arch Linux wie folgt:
sudo pacman -S --needed base-devel cmake curl ffmpeg freetype2 git glew glslang gmock libnotify libpng opusfile python rust sdl2 spirv-tools sqlite vulkan-headers vulkan-icd-loader wavpack x264
Oder auf Gentoo wie folgt:
emerge --ask dev-db/sqlite dev-lang/rust-bin dev-libs/glib dev-libs/openssl dev-util/glslang dev-util/spirv-headers dev-util/spirv-tools media-libs/freetype media-libs/glew media-libs/libglvnd media-libs/libogg media-libs/libpng media-libs/libsdl2 media-libs/libsdl2[vulkan] media-libs/opus media-libs/opusfile media-libs/pnglite media-libs/vulkan-loader[layers] media-sound/wavpack media-video/ffmpeg net-misc/curl x11-libs/gdk-pixbuf x11-libs/libnotify
Bei MacOS können Sie Homebrew verwenden, um Build -Abhängigkeiten wie folgt zu installieren:
brew install cmake ffmpeg freetype glew glslang googletest libpng molten-vk opusfile rust SDL2 spirv-tools vulkan-headers wavpack x264
Wenn Sie die Systembibliotheken nicht verwenden möchten, können Sie die -DPREFER_BUNDLED_LIBS=ON Parameter an cmake übergeben.
Um DDNET selbst zu kompilieren, führen Sie die folgenden Befehle im Quell -Root aus:
mkdir build
cd build
cmake ..
make -j$(nproc)
Geben Sie die Anzahl der Threads für die Kompilierung über, um make -j . $(nproc) In diesem Fall gibt die Anzahl der Verarbeitungseinheiten zurück.
DDNET benötigt zusätzliche Bibliotheken, von denen einige für die gängigsten Plattformen (Windows, Mac, Linux, alle x86 und x86_64) für die Bequemlichkeit und die offiziellen Builds gebündelt sind. Die gebündelten Bibliotheken für offizielle Builds befinden sich jetzt im DDNET-Libs-Submodul. Beachten Sie, dass Sie beim Erstellen und Entwickeln lokal den Paketmanager Ihres Systems zur Installation der Abhängigkeiten verwenden sollten, anstatt sich auf DDNET-Libs-Submodul zu verlassen, das ohnehin nicht alle Abhängigkeiten enthält (z. B. OpenSSL, Vulkan). Weitere Informationen finden Sie im vorherigen Abschnitt, um die Abhängigkeiten zu erhalten. Alternativ sehen Sie die folgenden Build -Argumente für die Deaktivierung einiger Merkmale und deren Abhängigkeiten ( -DVULKAN=OFF erfordern beispielsweise Vulkan nicht).
Im Folgenden finden Sie eine nicht exexhustive Liste von Build-Argumenten, die an das cmake -Befehlszeilen-Tool übergeben werden können, um Optionen in der Erstellung Zeit zu aktivieren oder zu deaktivieren:
-Dcmake_build_type = [Release | Debug | relwithdebinfo | minSizerel]
Eine optionale CMake -Variable zum Einstellen des Build -Typs. Wenn nicht festgelegt, wird die Standardeinstellung zu "Freigabe", wenn -DDEV=ON nicht verwendet wird, und "Debugg", wenn -DDEV=ON verwendet wird. Weitere Informationen finden Sie in der CMake -Dokumentation CMAKE_BUILD_TYPE in der CMake -Dokumentation.
-Dprefer_bundled_libs = [on | off]
Ob Sie gebündelte Bibliotheken gegenüber Systembibliotheken bevorzugen. Durch die Einstellung von DDNET werden DDNET-Bibliotheken im Ordner ddnet-libs verwendet. Dies ist das oben erwähnte Git-Submodule-Ziel des DDNET-Libs-Repositorys-nützlich, wenn Sie nicht über diese Bibliotheken installiert sind und sie vermeiden möchten. Wenn Sie auf Off eingestellt sind, werden nur gebündelte Bibliotheken verwendet, wenn Systembibliotheken nicht gefunden werden. Der Standardwert ist ausgeschaltet.
-Dwebsockets = [on | off]
Ob Sie WebSocket -Unterstützung für den Server aktivieren. Die Einstellung zum Einsatz erfordert die installierte Bibliothek libwebsockets-dev . Der Standardwert ist ausgeschaltet.
-Dmysql = [on | off]
Ob die Unterstützung von MySQL/MariadB für Server aktiviert werden soll. Benötigt mindestens MySQL 8.0 oder Mariadb 10.2. Die Einstellung von Einstellungen erfordert die libmariadbclient-dev Bibliothek, die auch als gebündelte Bibliotheken für die gemeinsamen Plattformen bereitgestellt wird. Der Standardwert ist ausgeschaltet.
Beachten Sie, dass die gebündelten MySQL -Bibliotheken möglicherweise nicht ordnungsgemäß in Ihrem System funktionieren. Wenn Sie Verbindungsprobleme mit dem MySQL -Server begegnen, z. B. als Root mit einem anderen Benutzer eine Verbindung hergestellt, sollten Sie Ihre Systembibliotheken für den MySQL -Client installieren. Stellen Sie sicher, dass die Zusammenfassung der CMAKE -Konfiguration besagt, dass MySQL -Libs nicht gebündelt wurden (nein "mit gebündelten Libs").
-Dtest_mysql = [on | off]
Ob Sie MySQL/Mariadb -Unterstützung in GTEST -basierten Tests testen. Der Standardwert ist ausgeschaltet.
Beachten Sie, dass dies eine laufende MySQL/MariadB -Datenbank auf Localhost mit diesem Setup erfordert:
CREATE DATABASE ddnet;
CREATE USER 'ddnet'@'localhost' IDENTIFIED BY 'thebestpassword';
GRANT ALL PRIVILEGES ON ddnet.* TO 'ddnet'@'localhost';
FLUSH PRIVILEGES;
-Dautoupdate = [on | off]
Ob das Autoupdater aktiviert werden soll. Verpacker möchten dies möglicherweise für ihre Pakete deaktivieren. Der Standardwert ist für Windows und Linux eingeschaltet.
-Dclient = [on | off]
Ob die Client -Kompilierung aktiviert werden soll. Wenn DDNET auf OFF gesetzt ist, hängt er nicht von Curl, Freetype, OGG, Opus, OpusFile und SDL2 ab. Standardwert ist eingeschaltet.
-Dvideorecorder = [on | off]
Unabhängig davon, ob Sie den Client mit FFMPEG die Videoaufzeichnung hinzufügen möchten. Standardwert ist eingeschaltet.
-Download_gtest = [on | off]
Ob Sie GTest herunterladen und kompilieren möchten. Nützlich, wenn GTest nicht installiert ist, und für Linux -Benutzer gibt es kein geeignetes Paket. Der Standardwert ist ausgeschaltet.
-Ddev = [on | off]
Ob die Entwicklung optimiert werden soll, das Kompilierungsprozess ein wenig beschleunigt. Wenn Sie aktiviert sind, generieren Sie keine Sachen, die für die Verpackung notwendig sind. Die Einstellung auf ON wird cmake_build_type standardmäßig auf Debuggen festgelegt. Der Standardwert ist ausgeschaltet.
-Dupnp = [on | off]
Ob die UPNP -Unterstützung für den Server aktiviert werden soll. Sie müssen libminiupnpc-dev auf Debian, miniupnpc unter Arch Linux, installieren. Der Standardwert ist ausgeschaltet.
-Dvulkan = [on | off]
Ob das Vulkan -Backend aktiviert werden soll. Unter Windows müssen Sie das Vulkan SDK installieren und das Flag von VULKAN_SDK entsprechend festlegen. Der Standardwert ist für Windows X86_64 und Linux sowie für Windows X86 und MacOS eingeschaltet.
-Gninja
Verwenden Sie das Ninja -Build -System anstatt zu machen. Dies ist automatisch den Build parallel und ist im Allgemeinen schneller. Kompilieren Sie mit ninja anstatt zu make . Installieren Sie Ninja mit sudo apt install ninja-build auf Debian, sudo pacman -S --needed ninja auf Arch Linux.
-DcMake_cxx_link_flags = [Flags]
Benutzerdefinierte Flags für den Compiler beim Verknüpfen festgelegt.
-Dexception_handling = [on | off]
Aktivieren Sie die Ausnahmebedingung (funktioniert ab sofort nur mit Windows und verwendet dort dringw). Der Standardwert ist ausgeschaltet.
-Dipo = [on | off]
Aktivieren Sie interprocedurale Optimierungen, auch als Link Time Optimization (LTO) bezeichnet. Der Standardwert ist ausgeschaltet.
-Dfuse_ld = [off | linker]
Linker zu verwenden. Der Standardwert ist ausgeschaltet, um Schimmel, LLD, Gold zu versuchen.
-Decurity_compiler_flags = [on | off]
Ob Sicherheitsrelevant-Compiler-Flags wie -D_FORTIFY_SOURCE=2 und -fstack-protector-all festgelegt werden. Standardwert ist eingeschaltet.
Um die Tests auszuführen, müssen Sie die folgende Bibliothek libgtest-dev installieren.
Diese Bibliothek wird nicht zusammengestellt, also müssen Sie es tun:
sudo apt install libgtest-dev
cd /usr/src/gtest
sudo cmake CMakeLists.txt
sudo make -j $( nproc )
# copy or symlink libgtest.a and libgtest_main.a to your /usr/lib folder
sudo cp lib/ * .a /usr/lib Um die Tests auszuführen, müssen Sie run_tests mit make: make run_tests abzielen
Wir verwenden Clang-Format 10, um den C ++-Code dieses Projekts zu formatieren. Führen Sie scripts/fix_style.py aus. Nachdem Sie den Code geändert haben, um sicherzustellen, dass der Code ordnungsgemäß formatiert ist, wird ein Github Central Style Checker dieselbe erledigen und verhindern, dass Ihre Änderung eingereicht wird.
Auf Arch Linux können Sie Clang-Format 10 mit dem Clang-Format-Static-Bin-AUR-Paket installieren. Auf macOS können Sie Clang-Format 10 mit einem Homebrew-Tap installieren:
brew install r-lib/taps/clang-format@10
sudo ln -s /opt/homebrew/Cellar/clang-format@10/10.0.1/bin/clang-format /opt/homebrew/bin/clang-format-10Asan+Ubsan und Memcheck sind nützlich, um Codeprobleme leichter zu finden. Bitte verwenden Sie sie, um Ihre Änderungen zu testen, wenn Sie können.
Für Asan+Ubsan kompilieren Sie mit:
CC=clang CXX=clang++ CXXFLAGS= " -fsanitize=address,undefined -fsanitize-recover=address,undefined -fno-omit-frame-pointer " CFLAGS= " -fsanitize=address,undefined -fsanitize-recover=address,undefined -fno-omit-frame-pointer " cmake -DCMAKE_BUILD_TYPE=Debug .
makeund rennen mit:
UBSAN_OPTIONS=suppressions=./ubsan.supp:log_path=./SAN:print_stacktrace=1:halt_on_errors=0 ASAN_OPTIONS=log_path=./SAN:print_stacktrace=1:check_initialization_order=1:detect_leaks=1:halt_on_errors=0 LSAN_OPTIONS=suppressions=./lsan.supp ./DDNetÜberprüfen Sie danach die san.* -Fateien. Dies findet mehr Probleme als Memcheck, läuft schneller, erfordert jedoch einen modernen GCC/Clang -Compiler.
Für Valgrinds Memcheck kompilieren Sie einen normalen Debug -Build mit: valgrind --tool=memcheck ./DDNet erwarten eine große Verlangsamung.
Laden Sie eine Version von Microsoft Visual Studio (zum Zeitpunkt des Schreibens, MSVS Community 2022) mit C ++ - herunter.
Sie müssen sowohl Python 3 als auch Rost installieren.
Stellen Sie sicher, dass die MSVC-Build-Tools, C ++ CMake-Tools und die neueste Windows-SDK-Version, die Ihrer Windows-Version angemessen ist, im Installationsprogramm ausgewählt sind.
Öffnen Sie nun Ihren Projektordner, Visual Studio sollte Ihr Projekt automatisch mit CMAKE erkennen und konfigurieren.
Auf Ihren Tools HotBar neben der Taste "Triangular" Run "können Sie jetzt auswählen, was Sie starten möchten (z. B. Game-Client oder Game-Server) und sie erstellen.
Zunächst müssen Sie die MSVC -Build -Tools Python 3 sowie Rost installieren.
Verwenden Sie, um DDNET unter Windows zu kompilieren und zu erstellen, entweder mit einer CMake -Integration (z. B. Visual Studio Code) oder durch veraltet Verwenden der CMake -GUI.
Konfigurieren Sie CMake so, dass sie die MSVC -Build -Tools verwenden, die an den Anweisungen Ihrer IDE angemessen sind.
Wenn Sie Visual Studio -Code verwenden, können Sie die CMAKE -Tools -Erweiterung verwenden, um das Projekt zu konfigurieren und zu erstellen.
Sie können dann den Projektordner in VSC öffnen und Ctrl+Shift+P drücken, um die Befehlspalette zu öffnen. Suchen Sie dann nach CMake: Configure
Dadurch wird eine Eingabeaufforderung geöffnet, mit der Sie ein Kit auswählen, Ihre Visual Studio -Version auswählen und speichern können. Sie können jetzt die GUI (unten links) verwenden, um Ihr Projekt zu kompilieren und zu erstellen.
Installieren Sie MingW-Cross-Compiler des Formulars i686-w64-mingw32-gcc (32 Bit) oder x86_64-w64-mingw32-gcc (64 Bit). Dies ist wahrscheinlich der schwierige Teil. ;))
Fügen Sie dann -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/mingw64.toolchain in die anfängliche CMake -Befehlszeile hinzu.
Installieren Sie EMSCIPTEN Cross-Compilers (z. B. sudo apt install emscripten ) auf einer modernen Linux-Distribution.
Wenn Sie die DDNET-Libs für die WebAssembly kompilieren müssen, rufen Sie einfach an
# <directory to build in> should be a directory outside of the project's source directory
scripts/compile_libs/gen_libs.sh < directory to build in > webasm Aus dem Quellverzeichnis des Projekts. Es wird automatisch ein Verzeichnis namens ddnet-libs erstellt. Sie können dieses Verzeichnis dann manuell mit dem im DDNET -Quellverzeichnis verbinden.
Dann führen Sie emcmake cmake .. -DVIDEORECORDER=OFF -DVULKAN=OFF -DSERVER=OFF -DTOOLS=OFF -DPREFER_BUNDLED_LIBS=ON in Ihrem Build -Verzeichnis.
Um den kompilierten Code lokal zu testen, verwenden Sie einfach emrun --browser firefox DDNet.html
So hosten Sie die kompilierte .html -Datei alle .data , .html , .js ,. .wasm -Dateien auf den Webserver. (siehe /oother/emscripten/minimal.html für ein minimales HTML -Beispiel)
Aktivieren Sie dann Cross -Ursprungs -Richtlinien. Beispiel für Apache2 auf Debian -basierter Distributionen:
sudo a2enmod header
# edit the apache2 config to allow .htaccess files
sudo nano /etc/apache2/apache2.conf
# set AllowOverride to All for your directory
# then create a .htaccess file on the web server (where the .html is)
# and add these lines
Header add Cross-Origin-Embedder-Policy " require-corp "
Header add Cross-Origin-Opener-Policy " same-origin "
# now restart apache2
sudo service apache2 restart Installieren Sie OSXCross und fügen Sie -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/darwin.toolchain und -DCMAKE_OSX_SYSROOT=/path/to/osxcross/target/SDK/MacOSX10.11.sdk/ an die anfängliche CMake -Befehlslinie hinzu.
Installieren Sie dmg und hfsplus von libdmg-hfsplus und newfs_hfs von diskdev_cmds, um das package_dmg Ziel zu entsperren, das ein MacOS-Datenträgerbild ausgibt.
$ wget https://ddnet.org/stats/ddnet-sql.zip
$ unzip ddnet-sql.zip
$ yaourt -S mariadb mysql-connector-c++
$ mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
$ systemctl start mariadb
$ mysqladmin -u root password ' PW '
$ mysql -u root -p ' PW '
MariaDB [(none)] > create database teeworlds ; create user ' teeworlds ' @ ' localhost ' identified by ' PW2 ' ; grant all privileges on teeworlds. * to ' teeworlds ' @ ' localhost ' ; flush privileges ;
# this takes a while, you can remove the KEYs in record_race.sql to trade performance in queries
$ mysql -u teeworlds -p ' PW2 ' teeworlds < ddnet-sql/record_ * .sql
$ cat mine.cfg
sv_use_sql 1
add_sqlserver r teeworlds record teeworlds " PW2 " " localhost " " 3306 "
add_sqlserver w teeworlds record teeworlds " PW2 " " localhost " " 3306 "
$ mkdir build
$ cd build
$ cmake -DMYSQL=ON ..
$ make -j $( nproc )
$ ./DDNet-Server -f mine.cfgDebian/Ubuntu
$ apt-get install ddnet
Macos
$ brew install --cask ddnetFedora
$ dnf install ddnetArch Linux
$ yay -S ddnetFreeBSD
$ pkg install DDNetWindows (Scoop)
scoop bucket add games
scoop install games/ddnet
DDNET ist in der Phoronix Test Suite erhältlich. Wenn Sie PTs installiert haben, können Sie DDNET in Ihrem eigenen System wie folgt problemlos bewerten:
$ phoronix-test-suite benchmark ddnet Verwenden Sie zunächst ein besseres Werkzeug als git blame , z. B. tig . Es gibt wahrscheinlich auch eine gute Benutzeroberfläche für Windows. Verwenden Sie alternativ die GitHub -Benutzeroberfläche und klicken Sie in jeder Dateiansicht auf "Schuld".
Verwenden Sie für tig tig blame path/to/file.cpp um die Schuldansicht zu öffnen.
Nur dann können Sie Git auch einrichten, um bestimmte Formatierungsrevisionen zu ignorieren:
git config blame.ignoreRevsFile formatting-revs.txtKopieren Sie die Dateierkennungs- und Syntaxdateien in Ihren VIM -Konfigurationsordner:
# vim
cp -R other/vim/ * ~ /.vim/
# neovim
cp -R other/vim/ * ~ /.config/nvim/