Skip to content

Instantly share code, notes, and snippets.

@alkavan
Last active April 8, 2023 07:37
Show Gist options
  • Save alkavan/79bae2783c9848f60d4c77dcdb19732c to your computer and use it in GitHub Desktop.
Save alkavan/79bae2783c9848f60d4c77dcdb19732c to your computer and use it in GitHub Desktop.
Install IOQUAKE3 on Rocky Linux 9.0
set sv_hostname "BewareSpace Q3 Arena (CTF)"
set sv_maxclients 12
set g_motd "mess with the best, die like the rest."
set g_forcerespawn 10
set g_gametype 4
set bot_minplayers 8
set g_spskill 3
set timelimit 15
set m1 "capturelimit 8; map q3ctf1 ; set nextmap vstr m2"
set m2 "capturelimit 8; map q3ctf2 ; set nextmap vstr m3"
set m3 "capturelimit 8; map q3ctf3 ; set nextmap vstr m4"
set m4 "capturelimit 8; map q3wctf1 ; set nextmap vstr m5"
set m5 "capturelimit 8; map q3wctf2 ; set nextmap vstr m6"
set m6 "capturelimit 8; map q3wctf3 ; set nextmap vstr m1"
vstr m1
set sv_hostname "BewareSpace Q3 Arena (DM)"
set sv_maxclients 16
set g_motd "mess with the best, die like the rest."
set g_forcerespawn 15
set g_gametype 1
set fraglimit 50
set timelimit 20
set bot_minplayers 10
//Here's the map-cycle. When fraglimit or timelimit is reached, the map is automatically changed.
//Otherwise it would just play the same map again.
set m1 "map q3dm1; set nextmap vstr m2"
set m2 "map q3dm2; set nextmap vstr m3"
set m3 "map q3dm3; set nextmap vstr m4"
set m4 "map q3tourney1; set nextmap vstr m5"
set m5 "map q3dm4; set nextmap vstr m6"
set m6 "map q3dm5; set nextmap vstr m7"
set m7 "map q3dm6; set nextmap vstr m8"
set m8 "map q3tourney2; set nextmap vstr m9"
set m9 "map q3dm7; set nextmap vstr m10"
set m10 "map q3dm8; set nextmap vstr m11"
set m11 "map q3dm9; set nextmap vstr m12"
set m12 "map q3tourney3; set nextmap vstr m13"
set m13 "map q3dm10; set nextmap vstr m14"
set m14 "map q3dm11; set nextmap vstr m15"
set m15 "map q3dm12; set nextmap vstr m16"
set m16 "map q3tourney4; set nextmap vstr m17"
set m17 "map q3dm13; set nextmap vstr m18"
set m18 "map q3dm14; set nextmap vstr m19"
set m19 "map q3dm15; set nextmap vstr m20"
set m20 "map q3tourney5; set nextmap vstr m21"
set m21 "map q3dm16; set nextmap vstr m22"
set m22 "map q3dm17; set nextmap vstr m23"
set m23 "map q3dm18; set nextmap vstr m24"
set m24 "map q3dm19; set nextmap vstr m25"
set m25 "map q3tourney6; set nextmap vstr m1"
vstr m1

Quake 3 Arena Server Install

Prepare Server (on Digital Ocean)

We are using 4 CPU / 8GB RAM configuration, adjust for your requirements.
The operating system is Rocky Linux but this should work on any modern Red Hat system.

Initial server setup and system update:

sudo dnf update
hostnamectl set-hostname q3a.youkewldomain.com
dnf install nano tmux
sudo reboot

Create a user to run Quake3 and give it administrative permissions:

adduser quake
cp -r -p /root/.ssh/ /home/quake/
chown -R quake:quake /home/quake/.ssh
usermod -a -G wheel quake
echo '%wheel        ALL=(ALL)       NOPASSWD: ALL' > /etc/sudoers.d/nopass

Build IOQUAKE3

Install build tools and libraries:

sudo dnf group install "Development Tools"
sudo dnf install SDL2-devel

Clone repository and enter it:

git clone https://github.com/ioquake/ioq3.git
cd ioq3

Create custom path for the game and run make:

mkdir -p ~/games/quake3/
make copyfiles COPYDIR=~/games/quake3/

Copy Original Game Assets

Enter the directory containing your local installation of Quake 3 Arena.

Copy the pack assets to the server:

scp baseq3/* quake@q3a.youkewldomain.com:~/games/quake3/baseq3
scp missionpack/* quake@q3a.youkewldomain.com:~/games/quake3/missionpack

Download point release patch files and unpack:

cd ~/games
wget https://files.ioquake3.org/quake3-latest-pk3s.zip
unzip quake3-latest-pk3s.zip

Copy patched files into ~/games/quake3 directory:

cd quake3-latest-pk3s
cp baseq3/* ../quake3/baseq3/
cp missionpack/* ../quake3/missionpack/

Server Security

Firewall

Install default firewall:

dnf install firewalld

Add QUAKE3 port ranges:

firewall-cmd --add-port=27960-27969/tcp --permanent
firewall-cmd --add-port=27960-27969/udp --permanent

Start firewall and confirm:

systemctl start firewalld.service
firewall-cmd --list-all

Server Operations

Start Server

./ioq3ded.x86_64 +set fs_game missionpack

Server Configurations

Capture the Flag

Create configuration file nano ~/.q3a/missionpack/ctf.cfg:

set sv_hostname "Kewl Q3 Arena (CTF)"
set sv_maxclients 16
set g_motd "mess with the best, die like the rest."
set g_forcerespawn 10
set g_gametype 4
set bot_minplayers 8
set g_spskill 3

set m1 "capturelimit 8; map q3ctf1; set nextmap vstr m2"
set m2 "capturelimit 8; map q3ctf2 ; set nextmap vstr m3"
set m3 "capturelimit 8; map q3ctf3 ; set nextmap vstr m4"
set m4 "capturelimit 8; map q3wctf1 ; set nextmap vstr m5"
set m5 "capturelimit 8; map q3wctf2 ; set nextmap vstr m6"
set m6 "capturelimit 8; map q3wctf3 ; set nextmap vstr m1"

vstr m1

Deathmatch

Create configuration file nano ~/.q3a/missionpack/dm.cfg:

set sv_hostname "Kewl Q3 Arena (DM)"
set sv_maxclients 16
set g_motd "your welcome message."
set g_forcerespawn 15
set g_gametype 1
set fraglimit 50
set timelimit 20
set bot_minplayers 8
set g_spskill 3

set m1 "map q3dm1; set nextmap vstr m2"
set m2 "map q3dm2; set nextmap vstr m3"
set m3 "map q3dm3; set nextmap vstr m4"
set m4 "map q3tourney1; set nextmap vstr m5"
set m5 "map q3dm4; set nextmap vstr m6"
set m6 "map q3dm5; set nextmap vstr m7"
set m7 "map q3dm6; set nextmap vstr m8"
set m8 "map q3tourney2; set nextmap vstr m9"
set m9 "map q3dm7; set nextmap vstr m10"
set m10 "map q3dm8; set nextmap vstr m11"
set m11 "map q3dm9; set nextmap vstr m12"
set m12 "map q3tourney3; set nextmap vstr m13"
set m13 "map q3dm10; set nextmap vstr m14"
set m14 "map q3dm11; set nextmap vstr m15"
set m15 "map q3dm12; set nextmap vstr m16"
set m16 "map q3tourney4; set nextmap vstr m17"
set m17 "map q3dm13; set nextmap vstr m18"
set m18 "map q3dm14; set nextmap vstr m19"
set m19 "map q3dm15; set nextmap vstr m20"
set m20 "map q3tourney5; set nextmap vstr m21"
set m21 "map q3dm16; set nextmap vstr m22"
set m22 "map q3dm17; set nextmap vstr m23"
set m23 "map q3dm18; set nextmap vstr m24"
set m24 "map q3dm19; set nextmap vstr m25"
set m25 "map q3tourney6; set nextmap vstr m1"

vstr m1
#!/bin/bash
./ioq3ded.x86_64 \
+set fs_game alliance \
+set bot_saveroutingcache 1 \
+set r_smp 1 \
+set com_hunkMegs 128 \
+set g_gametype 4 \
+exec sv_alliance.cfg \
+set sv_maplist maplist_ctf \
+map actf01
#!/bin/bash
# run: ./start_server.sh <cfg_file>
if [ -z "${1}" ]
then
echo "error: missing .cfg file"
exit 1
fi
./ioq3ded.x86_64 \
+set bot_saveroutingcache 1 \
+set com_hunkMegs 128 \
+set fs_game missionpack \
+set rconpassword "fu123" \
+exec "${1}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment