Files
wolfenstein-et/README.md
T

172 lines
5.7 KiB
Markdown

# 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 `<linux_user>` and `<path_to>` placeholders with your configuration (`<linux_user>` 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.
* **[relay](./relay)**: `etrelay`, a small Rust UDP relay running on the front. It proxies players and sends the master heartbeats from the front public address. Build, deploy and usage: [relay/README.md](./relay/README.md), how it works (with diagrams): [relay/ENGINE.md](./relay/ENGINE.md).
* 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/<username>/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
```