# Wolfenstein Enemy Territory This [archive](http://et.sonak.fr/archives/et_full_linux.tar.gz) contains all files needed to run **Wolfenstein ET 2.60b** on Linux. It includes two folders: One to launch the main game : * The [official game](https://cdn.splashdamage.com/downloads/games/wet/et260b.x86_full.zip) * [et-sdl-sound](base/et-sdl-sound) (enabling sound - fetch from https://web.archive.org/web/20160804014221/http://nullkey.kapsi.fi/et-sdl-sound/) One to launch a Jaymod server: * [Jaymod 2.2.0](https://jaymod.clanfu.org/) * [Omnibot 0.9](https://github.com/jswigart/omni-bot/releases) ## Requirements Wolfenstein ET is built on a 32 bits arch. So, 32 bits libraries must exist to run the game. ```bash # add the i386 architecture sudo dpkg --add-architecture i386 # do update to fetch i386 libraries sudo apt update # install the 32 bits compatible libraries sudo apt install ia32-libs # Mint sudo apt install lib32z1 # Ubuntu # after the installation the following lib must be present sudo apt install libsdl1.2debian:i386 ``` ## Installation **NOTE**: The installation has been tested on **Mint 20.04 | Ubuntu 20/22.04**. * Download the archive ```bash wget http://et.sonak.fr/archives/et_full_linux.tar.gz ``` * Extract it ```bash tar xzvf et_full_linux.tar.gz cd wolfenstein-et ``` * Create the main folders ```bash sudo mkdir -p /usr/local/games/enemy-territory sudo chown 1000 /usr/local/games/enemy-territory && chmod 775 /usr/local/games/enemy-territory sudo mkdir -p /opt/games/enemy-territory sudo chown 1000 /opt/games/enemy-territory && chmod 775 /opt/games/enemy-territory cp -r base/* /usr/local/games/enemy-territory cp -r server /opt/games/enemy-territory ``` ## Launch the game ```bash cd /usr/local/games/enemy-territory ./et-sdl-sound ``` Enjoy ! **NOTE** : Some libraries may be missing, you need to install it one by one (test to launch ./et.x86 and see missing libs). ## Create a systemd service (server creation only) In order to launch the server properly, a systemd service is a right solution instead of the **serverctl** sh script. To do so: * put the **[launch_server.bash](./service/launch_server.bash)** wherever you want (ex: /opt/games/enemy-territory/server/linux). * put the **[wolfenstein-et.service](./service/wolfenstein-et.service)** file in **/etc/systemd/system** directory (must be **root**). * replace `` and `` placeholders with your configuration (`` must have rights to exec `launch_server.bash`). * enable the service (on reboot the service will autostart). ```bash sudo systemctl enable wolfenstein-et ``` * start the service ```bash sudo service wolfenstein-et start ``` * check the service status ```bash sudo service wolfenstein-et status ``` ## Public server behind a tunnel When the server runs at home and is only reachable through a front server (WireGuard), its own heartbeats leave through the home box: masters challenge the wrong IP and the server never shows up in the in-game browser. * **[etrelay](https://gitea.sonak.fr/rmanach/etrelay)**: a small Rust UDP relay running on the front. It proxies players and sends the master heartbeats from the front public address. Build, usage and how it works (with diagrams): see its repository. * Disable the server's own heartbeats in `server.cfg`, the relay sends them: ```cfg set sv_master1 "" set sv_master2 "" set sv_master3 "" set sv_master4 "" set sv_master5 "" ``` ### List the servers known by the masters **[etmasters.py](./etmasters.py)** (Python 3, standard library only) asks the masters (`etmaster.idsoftware.com`, `etmaster.net`) for their server list, then every server for its info: name, map, players, mod. Handy to check the server is listed. ```bash ./etmasters.py # table sorted by players ./etmasters.py --json servers.json # JSON file instead ./etmasters.py --master etmaster.net:27950 --timeout 5 ``` ## Settings More useful information: https://wiki.archlinux.org/title/Wolfenstein:_Enemy_Territory. ### Set screen size in **1920*1080** * Open the player configuration file: ```bash vi $HOME/.etwolf/etmain/profiles//etconfig.cfg ``` * Override this settings ```cfg seta r_mode -1 // -1 mean we are using a custom screen resolution seta r_customwidth 1920 // monitor's width seta r_customheight 1080 // monitor's height ``` ## Common errors ### "libstdc++.so.6: cannot open shared object file: No such file or directory" ```bash sudo apt install lib32stdc++6 ``` ### SDL driver error ``` ------- sound initialization ------- SDL audio driver initializing... ALSA lib conf.c:3722:(snd_config_hooks_call) Cannot open shared library libasound_module_conf_pulse.so (/usr/lib/i386-linux-gnu/alsa-lib/libasound_module_conf_pulse.so: libasound_module_conf_pulse.so: cannot open shared object file: No such file or directory) ALSA lib pcm.c:2642:(snd_pcm_open_noupdate) Unknown PCM default SDL_AudioDriverName() = NULL ------------------------------------ ``` You must install the corresponding 32 bits library: ```bash sudo apt install libasound2-plugins:i386 ``` ### Keyboard input does not work Try moving to `Xorg` instead of `Wayland`... To do so, on Ubuntu, logout, click on the **Settings** icon and select **Xorg**. ### libGL.so.1: cannot open shared object file: No such file or directory ```bash sudo apt install libgl1-mesa-glx:i386 ``` ### libasound_module_pcm_pipewire.so ``` SDL audio driver initializing... ALSA lib dlmisc.c:337:(snd_dlobj_cache_get0) Cannot open shared library libasound_module_pcm_pipewire.so (/lib/i386-linux-gnu/alsa-lib/libasound_module_pcm_pipewire.so: cannot open shared object file: No such file or directory) SDL_AudioDriverName() = NULL ``` ```bash sudo apt install pipewire-alsa:i386 ```