DayZ Command Line Launcher
dayz-ctl β this is an experimental launcher (server explorer and launcher) DayZ on Steam Proton for Linux.
This document is available in languages: eng π¬π§, rus π·πΊ, ua πΊπ¦
At the time of this project, Bohemia Interactive was still unable to make a working launcher for the game that could correctly install modifications and connect to game servers. That is why this project was born.
Key Features:
- Server Explorer with information about each server
- Fuzzy search in Server Explorer based on fzf
- Automatic installation of mods (as an option)
- A wide range of filters for searching servers (map, time of day, modifications, number of players, first person, password, etc.)
- Additional information in the form of country of location (using geoip base) and ping for each server
- Favorites list, last 10 games history and creation of quick launch shortcuts to connect to servers
- Offline mode DayZCommunityOfflineMode with automatic installation, updates and the ability to select modifications
- Configuration menu with game launch options, launcher settings, mod controls and statistics
- Provides a link with detailed server information to battlemetrics
Special thanks to dayz-linux-cli-launcher for the idea and dayzsalauncher for the API.
Preview
Features of using SteamCMD
There are two modes of operation of the launcher with and without using SteamCMD to manage mods in manual mode.
You can combine both approaches, for example, subscribe to those modifications that you will definitely need in the future by clicking on the link, and check for updates or force update mods using the launcher. Also, you can not subscribe to the "doubtful 50 mods" of the next server and easily remove them with one action from the launcher, while maintaining all the mods for which you have a subscription.
Using SteamCMD
π’ Everything happens automaticallyπ’ Automatically check for mod updates right now (forced)π‘ Mod subscriptions are not created, they are just downloadedπ‘ Requires closing the Steam client to download modsπ΄ Sometimes you need to re-login to Steam
Not using SteamCMD
π’ Familiar behavior if you have already used other solutions, for example dayz-linux-cli-launcherπ‘ The game itself will not start after downloading modsπ‘ Steam sometimes delays checking for updates and downloads them only after restarting or subscribing/unsubscribing from the modπ΄ You need to subscribe to mods with your own hands
Installation
With installer
For ease of installation, there is a small script that will do everything for you (at least try to do it)
Execute this:
curl -sSfLA dayz-ctl bit.ly/3Vf2zz3 | bash
Manual installation
For the launcher to work, you need to make sure that you have all the dependencies installed:
- jq - JSON processing utility
- fzf - fuzzy search utility
- gum - utility for creating dialogs and styling output
ping
(iputils-ping
) - find out the ping to the server (where ICMP is enabled)geoiplookup
(geoip-bin
) - find out the country where the server is locatedwhois
- fallback for geoiplookup, less accurate and slower, but not all entries are in the standard geoip databasecurl
- utility for communicating with various APIs over HTTP/Scut, tr, grep, pgrep, pkill, killal, timeout, sed, awk
(gawk
) - where without classic utilities in scripts- Steam - online service for digital distribution of computer games
- SteamCMD - steamcmd Steam console client
- DayZ - and of course the game itself
Then you can clone the repository:
git clone git@github.com:WoozyMasta/dayz-ctl.git
# or
git clone https://github.com/WoozyMasta/dayz-ctl.git
# and run
cd dayz-ctl
./dayz-ctl
Or download the script file itself:
curl -sSfL -o ~/.local/bin/dayz-ctl \
https://raw.githubusercontent.com/WoozyMasta/dayz-ctl/master/dayz-ctl
chmod +x ~/.local/bin/dayz-ctl
# and run
dayz-ctl
Emoji
Emojis can be used to properly display elements, you may need to install them, for example, you can use the Noto font from Google.
Below is a list with the package name for different distributions:
fonts-noto-color-emoji
- debian/ubuntugoogle-noto-emoji-color-fonts
- centosgoogle-noto-emoji-fonts
- fedoranoto-fonts-emoji
- archfont-noto-emoji
- alpinenoto-coloremoji-fonts
- suse
Or if you don't like emoji or can't use them for some reason, you can apply a patch to replace them with strings:
sed -e 's/β«οΈ/β’/g' -e 's/π©/β/g' -e 's/β¬/ /g' -e 's/π/time/g' -e 's/β/?/g' \
-e 's/π’/ok/g' -e 's/π΄/no/g' -e 's/π/night/g' -e 's/βοΈ/day/g' \
-e 's/π/yes/g' -e 's/π/no/g' -e 's/β
/ok/g' -e 's/β/no/g' \
-i "$(which dayz-ctl)"
Tested distros
π’ Debian bookwormπ’ Debian bullseyeπ’ Debian busterπ’ Ubuntu 18.04π’ Ubuntu 20.04π― - π’ Ubuntu 22.04 π―
π’ Fedora latestπ‘ Centos 7 (small bugs)π‘ Centos stream9 (small bugs)π’ Alpine latestπ’ Alpine edgeπ’ Archlinuxπ‘ Opensuse leap (small bugs)
Other
Steam
It is better to remove all DayZ launch options in Steam and manage them from the launcher or vice versa. Since the keys can be duplicated and this can cause confusion, or in the worst case, cut off some of the keys, because the argument string has a length limit, and on servers with a large number of mods, a very long launch parameter is also used.
Those. leave the launch options empty, or specify only the set of auxiliary utilities and variables you need, for example:
MANGOHUD=1 ENABLE_VKBASALT=1 gamemoderun %command%
Search syntax
You can enter multiple search terms separated by spaces. e.g. ^namalsk DE !PVE !RP
token | match type | description |
---|---|---|
sbtrkt |
fuzzy match | Items that match sbtrkt |
wild |
exact-match (quoted) | Items that include wild |
^music |
prefix-exact-match | Items that start with music |
.mp3$ |
suffix-exact-match | Items that end with .mp3 |
!fire |
inverse-exact-match | Items that do not include fire |
!^music |
inverse-prefix-exact-match | Items that do not start with music |
!.mp3$ |
inverse-suffix-exact-match | Items that do not end with .mp3 |
A term with a single bar character acts as an OR operator
PVE | RP
Environment variables
You can fine-tune how the launcher works with the help of environment
variables that you can pass to the environment as usual or write to the
configuration file $HOME/.local/share/dayz-ctl/dayz-ctl.conf
(by default)
List of available variables:
DAYZ_CTL_VERSION
β application versionDAYZ_CTL_NAME
=dayz-ctl
β application nameDAYZ_GAME_ID
=221100
β Steam game IDAPPLICATIONS_DIR
=$HOME/.local/share/applications
β directory for storing application shortcutsDAYZ_CTL_DIR
=$HOME/.local/share/dayz-ctl
β launcher working directoryDAYZ_CTL_BIN_DIR
=$HOME/.local/share/dayz-ctl/bin
β directory for storing additional executable filesDAYZ_REQUEST_TIMEOUT
=10
β standard timeout for HTTP requests in secondsDAYZ_CONFIG_FILE
=$DAYZ_CTL_DIR/$DAYZ_CTL_NAME.conf
β dayz-ctl configuration fileDAYZ_SERVER_DB
=$DAYZ_CTL_DIR/servers.json
β server database fileDAYZ_SERVER_DB_TTL
=300
β TTL for server database in secondsDAYZ_SERVER_REQUEST_TIMEOUT
=30
β timeout for getting a list of servers in secondsDAYZ_NEWS_DB
=$DAYZ_CTL_DIR/news.json
β news base fileDAYZ_NEWS_DB_TTL
=3600
β TTL for the news database in secondsDAYZ_MODS_DB
=$DAYZ_CTL_DIR/mods.json
β modification database fileDAYZ_PROFILE
=$DAYZ_CTL_DIR/profile.json
β user profile fileDAYZ_HISTORY_SIZE
=10
- server explorer history sizeDAYZ_FZF_HISTORY
=$DAYZ_CTL_DIR/.$DAYZ_CTL_NAME-history
β history file for fuzzy searchDAYZ_USERAGENT
="$DAYZ_CTL_NAME $DAYZ_CTL_VERSION"
β User-Agent used for HTTP requestsDAYZ_API
=https://dayzsalauncher.com/api/v1
β API address for getting a list of serversDAYZ_STEAMCMD_ENABLED
=true
- switch to enable or disable the use of SteamCMDDAYZ_FILTER_MOD_LIMIT
=10
- default mod limit filter valueDAYZ_FILTER_PLAYERS_LIMIT
=50
- default player limit filter valueDAYZ_FILTER_PLAYERS_SLOTS
=60
β default slot limit filter value for players
Useful
- https://github.com/FeralInteractive/gamemode - can help with game performance
- https://github.com/flightlessmango/MangoHud - displays information about resource usage and allows you to limit the frame rate
- https://github.com/DadSchoorse/vkBasalt - image enhancement, adds clarity to the picture
- https://github.com/crosire/reshade-shaders - additional shaders, can be used from vkBasalt
- https://github.com/StuckInLimbo/OBS-ReplayBuffer-Setup - setting up replay recording in OBS
- https://github.com/matanui159/ReplaySorcery - utility for recording replays
Steam launch options with MangoHud, vkBasalt and gamemode enabled:
MANGOHUD=1 ENABLE_VKBASALT=1 gamemoderun %command%
Also, without resorting to third-party utilities, you can display an overlay with information about resources and limit FPS using standard DXVK tools, for example:
DXVK_HUD=fps DXVK_FRAME_RATE=60 gamemoderun %command%
Meaning of DXVK_HUD=fps
... DXVK_HUD=full
:
devinfo
- Displays the name of the GPU and the driver version.fps
- Shows the current frame rate.frametimes
- Shows a frame time graph.submissions
- Shows the number of command buffers submitted per frame.drawcalls
- Shows the number of draw calls and render passes per frame.pipelines
- Shows the total number of graphics and compute pipelines.descriptors
- Shows the number of descriptor pools and descriptor sets.memory
- Shows the amount of device memory allocated and used.gpuload
- Shows estimated GPU load. May be inaccurate.version
- Shows DXVK version.api
- Shows the D3D feature level used by the application.cs
- Shows worker thread statistics.compiler
β Shows shader compiler activitysamplers
- Shows the current number of sampler pairs used [D3D9 Only]scale=x
β Scales the HUD by a factor of x (e.g. 1.5)
Frame rate limit DXVK_FRAME_RATE=0