我們自己的ddrace風味,一個Teeworlds mod。請參閱網站以獲取更多信息。
開發討論發生在Quakenet(Webchat)上的#DDNET上或開發人員頻道中的Discord上進行。
您可以在DDNET網站上獲取二進製版本,在Steam上找到它或從存儲庫中安裝。
如果您想了解源代碼,可以查看Wiki上的開發文章。
克隆這個具有完整歷史記錄和外部庫的存儲庫(〜350 MB):
git clone --recursive https://github.com/ddnet/ddnet
當您已經在系統上擁有必要的庫時(〜220 MB),請克隆該存儲庫,具有完整的歷史記錄:
git clone https://github.com/ddnet/ddnet
自從我們將圖書館移至https://github.com/ddnet/ddnet-libs(〜40 MB)以來,請使用歷史庫克隆這個存儲庫:
git clone --shallow-exclude=included-libs https://github.com/ddnet/ddnet
如果您以前沒有它們克隆的DDNET,則克隆庫,或者如果您需要DDNET-LIBS歷史記錄而不是淺層克隆:
git submodule update --init --recursive
您可以在系統上安裝所需的庫, touch CMakeLists.txt和cmake將默認使用系統範圍的庫。您可以在Debian或Ubuntu上安裝所有必需的依賴項和CMAKE,例如:
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
在像Ubuntu這樣的較舊的發行版中,請不要安裝google-mock ,而是設置-DDOWNLOAD_GTEST=ON構建時以獲取最新的GTEST/GMOCK版本。
在較舊的發行版中, rustc版本可能太舊了,無法獲得最新的生鏽編譯器,您可以將Rustup與穩定的通道一起使用,或者嘗試rustc-mozilla包裝。
或在Centos上,Redhat和Almalinux這樣:
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
或像這樣的軟呢帽:
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
或這樣的Arch Linux上:
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
或這樣的Gentoo:
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
在MacOS上,您可以使用自製的構建依賴項來安裝這樣的依賴性:
brew install cmake ffmpeg freetype glew glslang googletest libpng molten-vk opusfile rust SDL2 spirv-tools vulkan-headers wavpack x264
如果您不想使用系統庫,則可以將-DPREFER_BUNDLED_LIBS=ON參數傳遞給cmake。
要自己編譯DDNET,請在源根中執行以下命令:
mkdir build
cd build
cmake ..
make -j$(nproc)
將彙編的線程數傳遞給make -j 。 $(nproc)在這種情況下,返回處理單元的數量。
DDNET需要其他庫,其中一些庫是為最常見的平台(Windows,Mac,Linux,All X86和X86_64)捆綁在一起的,並出於官方構建。現在的官方版本捆綁圖書館已在DDNET-LIBS子模塊中。請注意,當您在本地構建和開發時,理想情況下應該使用系統的軟件包管理器來安裝依賴項,而不是依靠DDNet-Libs subpodule,而DDNet-Libs submodule不包含所有依賴項(例如OpenSSL,Vulkan)。有關如何獲得依賴項,請參見上一節。或者,請參閱以下構建參數,以了解如何禁用某些功能及其依賴項( -DVULKAN=OFF不需要Vulkan)。
以下是可以傳遞給cmake命令行工具的構建參數的非排量列表,以便在構建時間中啟用或禁用選項:
-dcmake_build_type = [釋放| debug | relwithdebinfo | minsizerel]
用於設置構建類型的可選CMAKE變量。如果未設置,則不使用-DDEV=ON默認為“ repution”,而使用-DDEV=ON “ debug”。有關更多信息,請參見CMAKE文檔中的CMAKE_BUILD_TYPE 。
-dprefer_bundled_libs = [on | off]
是否更喜歡捆綁的庫而不是系統庫。設置為ON將使DDNET使用ddnet-libs文件夾中可用的第三方庫,該文件夾是上面提到的DDNET-LIBS存儲庫的Git-SubModule目標 - 如果您安裝了這些庫並希望避免構建它們,則非常有用。如果設置為關閉,則只會在找不到系統庫時使用捆綁的庫。默認值關閉。
-dwebsockets = [on | off]
是否啟用Websocket對服務器的支持。設置需要安裝libwebsockets-dev庫。默認值關閉。
-dmysql = [on | off]
是否啟用MySQL/MariadB對服務器的支持。至少需要MySQL 8.0或Mariadb 10.2。設置需要安裝的libmariadbclient-dev庫,該庫也作為通用平台的捆綁庫提供。默認值關閉。
請注意,捆綁的MySQL庫可能無法在您的系統上正常工作。如果您遇到了MySQL Server的連接問題,例如,它在選擇另一個用戶時將其作為root連接,請確保為MySQL客戶端安裝系統庫。確保CMAKE配置摘要說它發現了沒有捆綁的mysql libs(沒有“使用捆綁的libs”)。
-dtest_mysql = [on | off]
是否在基於GTEST的測試中測試MySQL/MariadB支持。默認值關閉。
請注意,這需要使用此設置運行Localhost上的MySQL/MariadB數據庫:
CREATE DATABASE ddnet;
CREATE USER 'ddnet'@'localhost' IDENTIFIED BY 'thebestpassword';
GRANT ALL PRIVILEGES ON ddnet.* TO 'ddnet'@'localhost';
FLUSH PRIVILEGES;
-dautoupdate = [on | off]
是否啟用自動化器。包裝商可能希望將其用於包裝。 Windows和Linux的默認值將打開。
-dclient = [on | off]
是否啟用客戶彙編。如果設置為關閉,DDNET將不取決於捲曲,freetype,ogg,opus,opusfile和sdl2。默認值已打開。
-dvideorecorder = [on | off]
是否將使用FFMPEG的視頻記錄支持添加到客戶端。默認值已打開。
-ddownload_gtest = [on | off]
是否下載和編譯GTEST。如果未安裝GTEST,並且對於Linux用戶而言,沒有合適的軟件包提供。默認值關閉。
-ddev = [on | off]
是否為開發優化,加快彙編過程的加速。如果啟用,請勿生成包裝所需的東西。設置為ON Will將將CMAKE_BUILD_TYPE設置為默認情況下調試。默認值關閉。
-dupnp = [on | off]
是否啟用對服務器的UPNP支持。您需要在Arch Linux上的miniupnpc上安裝libminiupnpc-dev 。默認值關閉。
-dvulkan = [on | off]
是否啟用Vulkan後端。在Windows上,您需要安裝Vulkan SDK並相應地設置VULKAN_SDK環境標誌。 Windows X86_64和Linux的默認值以及Windows X86和MacOS的OFF。
-gninja
使用忍者構建系統而不是製造系統。這會自動使構建平行,並且通常更快。用ninja而不是make編譯。使用Sudo Apt安裝忍者,在Arch Linux上的sudo pacman -S --needed ninja上sudo apt install ninja-build 。
-dcmake_cxx_link_flags = [flags]
鏈接時為編譯器設置的自定義標誌。
-dexception_handling = [on | off]
啟用異常處理(目前僅適用於Windows,在那裡使用Drmingw)。默認值關閉。
-dipo = [on | off]
啟用腦外部優化,也稱為鏈接時間優化(LTO)。默認值關閉。
-dfuse_ld = [off |鏈接]
使用的鏈接器。默認值未能嘗試模具,lld,金。
-dsecurity_compiler_flags = [on | off]
是否設置與安全相關的編譯器標誌,例如-D_FORTIFY_SOURCE=2和-fstack-protector-all 。默認值已打開。
為了運行測試,您需要安裝以下庫libgtest-dev 。
該庫未編譯,因此您必須這樣做:
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 make run_tests運行run_tests
我們使用Clang-Format 10格式化該項目的C ++代碼。執行scripts/fix_style.py更改代碼以確保正確格式化代碼後,GitHub Central樣式檢查器將執行相同的操作並防止您的更改提交。
在Arch Linux上,您可以使用clang-Format靜態式AUR軟件包安裝Clang-Format 10。在MacOS上,您可以使用自製龍頭安裝Clang-Format 10:
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和MEMCHECK更容易找到代碼問題。如果可以的話,請使用它們來測試您的更改。
對於Asan+Ubsan編譯:
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 .
make並與:
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檢查SAN。 *之後文件。這比Memcheck發現更多的問題,運行速度更快,但需要現代的GCC/Clang編譯器。
對於Valgrind的Memcheck,編譯了正常的調試構建和運行: valgrind --tool=memcheck ./DDNet期望很大的放慢速度。
通過C ++支持下載並安裝某些版本的Microsoft Visual Studio(MSVS Community 2022)。
您還必須同時安裝Python 3和Rust。
確保在安裝程序中選擇了MSVC構建工具,C ++ Cmake-Tools和適合您Windows版本的最新Windows SDK版本。
現在打開您的項目文件夾,Visual Studio應使用CMAKE自動檢測和配置您的項目。
在三角“運行”按鈕旁邊的Hotbar上,您現在可以選擇要啟動的內容(例如游戲 - 客戶或遊戲服務器)並構建它。
首先,您需要安裝MSVC構建工具,即Python 3和Rust。
要在Windows上編譯和構建DDNET,請使用CMAKE集成(例如Visual Studio代碼)或通過棄用使用CMAKE GUI。
配置CMAKE使用IDE的說明使用適合您系統的MSVC構建工具。
如果您使用的是Visual Studio代碼,則可以使用CMAKE工具擴展名配置和構建項目。
然後,您可以在VSC中打開項目文件夾,然後按Ctrl+Shift+P打開命令調色板,然後搜索CMake: Configure
這將為您選擇套件,選擇Visual Studio版本並保存它的提示。現在,您可以使用GUI(左下)來編譯和構建項目。
安裝i686-w64-mingw32-gcc (32位)或x86_64-w64-mingw32-gcc (64位)的MINGW跨編譯器。這可能是困難的部分。 )
然後,添加-DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/mingw64.toolchain到初始cmake命令行。
在現代Linux發行版上安裝Emscripten跨編譯器(例如sudo apt install emscripten )。
如果您需要編譯WebAssembly的DDNET LIBS,只需致電
# <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來自項目的源目錄。它將自動創建一個稱為ddnet-libs的目錄。然後,您可以手動將此目錄與DDNET源目錄中的該目錄合併。
然後運行emcmake cmake .. -DVIDEORECORDER=OFF -DVULKAN=OFF -DSERVER=OFF -DTOOLS=OFF -DPREFER_BUNDLED_LIBS=ON on build Directory。
要在本地測試編譯的代碼,只需使用emrun --browser firefox DDNet.html
要託管編譯的.html文件複製所有.data , .html , .js , .wasm文件到Web服務器。 (有關最小HTML示例
然後啟用交叉起源政策。 Apache2在Debian的發行版中的示例:
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安裝OSXCROSS,然後添加-DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/darwin.toolchain和-DCMAKE_OSX_SYSROOT=/path/to/osxcross/target/SDK/MacOSX10.11.sdk/ to Initial cmake命令行。
從libdmg-hfsplus和newfs_hfs安裝dmg和hfsplus從diskdev_cmds安裝newfs_hfs,以解鎖輸出MACOS磁盤映像的package_dmg目標。
$ 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 ddnet軟呢帽
$ dnf install ddnetArch Linux
$ yay -S ddnetfreebsd
$ pkg install DDNetWindows(Scoop)
scoop bucket add games
scoop install games/ddnet
DDNET可在Phoronix測試套件中使用。如果您安裝了PTS,則可以像這樣輕鬆在自己的系統上基準DDNET:
$ phoronix-test-suite benchmark ddnet首先,使用比git blame自己更好的工具,例如tig 。 Windows可能也有一個很好的UI。或者,使用GitHub UI,在任何文件視圖中單擊“責備”。
對於tig ,請使用tig blame path/to/file.cpp打開責備視圖,您可以使用箭頭鍵或KJ導航,按逗號,訪問當前行的上一個修訂版,q退出。
只有這樣,您還可以設置git來忽略特定格式的修訂:
git config blame.ignoreRevsFile formatting-revs.txt將文件檢測和語法文件複製到您的VIM配置文件夾:
# vim
cp -R other/vim/ * ~ /.vim/
# neovim
cp -R other/vim/ * ~ /.config/nvim/