Compare commits

...

40 Commits

Author SHA1 Message Date
c 4a1dbef02b merge main into curennt to push 2023-05-04 14:32:58 +02:00
c ef8b4deed6 update email for letzencrypt 2023-05-04 14:28:38 +02:00
c f9e72747b0 update maxclients in ufoai to 12 2023-05-04 14:28:38 +02:00
c a35533d8b7 update icon 2023-05-04 14:28:38 +02:00
c 90e666a51f update icon 2023-05-04 14:28:38 +02:00
c 5f4a51d189 changed stk-config to tournament settings (10maps grandprix) 2023-05-04 14:21:08 +02:00
DeathByDenim 73e3feaae0
Added optional mimic of onfoss.libregaming.org style 2023-04-25 07:18:46 -04:00
DeathByDenim 819a783249
Order was wrong for setting CSS colours 2023-04-25 07:06:21 -04:00
DeathByDenim 49241ba690
Add smallrandomisland map to OpenSpades 2023-04-23 20:46:56 -04:00
DeathByDenim 4517bbc962
Fix spelling error 2023-04-23 15:50:28 -04:00
DeathByDenim 34ab07739e
Make home page aware of upcoming event 2023-04-23 12:27:49 -04:00
DeathByDenim cbf6cd07e6
Automatic score updating for Xonotic tournament 2023-04-23 12:00:42 -04:00
DeathByDenim 55fa2a41d1
Log Xonotic scores 2023-04-22 15:48:19 -04:00
DeathByDenim 9a062fe2f2
IPv6 support is only an optional feature for Minetest apparently 2023-04-22 12:41:11 -04:00
DeathByDenim 492561e81a
Fixed up tournament language with help of seancjscherer 2023-04-21 07:23:45 -04:00
DeathByDenim bfbb73e923
Add Blockbomber help 2023-04-20 20:10:43 -04:00
DeathByDenim 574f181ad8
Add tournament stuff for the website 2023-04-20 17:02:21 -04:00
DeathByDenim 909110b4cb
Allow individual game installs to fail but keep installing the rest 2023-04-16 15:34:47 -04:00
DeathByDenim 633d68c517
Don't fail install if single map doesn't convert 2023-04-16 10:37:13 -04:00
DeathByDenim 639d4485b6
BZflags needs pkg-config to compile 2023-04-16 10:36:30 -04:00
DeathByDenim bcaef38276
Add Jekyll output to .gitignore 2023-03-26 19:09:32 -04:00
DeathByDenim 26b00f60b3
Accidentally added Jekyll output to Git 2023-03-26 19:03:46 -04:00
DeathByDenim 6ad2fffbbc
Updated link to Matrix/XMPP/IRC channel 2023-03-26 19:01:58 -04:00
DeathByDenim 852f77ef5e
Added Minetest with Blockbomber mod 2023-03-12 17:05:32 -04:00
DeathByDenim 392be4c3f3
Odamex AppImage download is not available in offline mode 2022-12-18 15:20:57 -05:00
DeathByDenim 1ce13fcbb1
Update offline web deploy to use Jekyll too 2022-12-18 15:16:13 -05:00
DeathByDenim cd86a54e25
Update event data 2022-12-18 15:00:03 -05:00
DeathByDenim b7f850f661
Fix Odamex deploy and generate AppImage too 2022-12-18 14:55:47 -05:00
DeathByDenim dff12dae94
Added Lix help 2022-12-17 07:16:59 -05:00
DeathByDenim c535b9fa2e
Removed outdated tournament info 2022-12-17 06:52:53 -05:00
DeathByDenim 06cfda8440
Switch website to Jekyll 2022-12-15 12:46:53 -05:00
DeathByDenim f6feee34a4
Update macOS link for UFO:AI 2022-12-10 16:56:35 -05:00
DeathByDenim 0a6694153d
Add info about libre assets for OpenSpades 2022-12-10 16:17:57 -05:00
DeathByDenim 4d9a543d8f
Fix gamemode votes for Teeworlds 2022-12-09 16:04:39 -05:00
DeathByDenim 2fc06cff0c
Info about 17 Dec event 2022-12-04 16:05:03 -05:00
DeathByDenim d71f8fa743
Add Odamex 2022-12-04 16:04:16 -05:00
DeathByDenim bf14133b13
Lix server executable is called lixserv now 2022-11-20 14:12:16 -05:00
DeathByDenim 2496ca1b0b
Update link for SuperTuxKart 2022-11-20 11:58:04 -05:00
DeathByDenim 9a9ce43b63
Soldat service shouldn't depend on soldat monitor 2022-10-03 19:40:44 -04:00
DeathByDenim 8260ed15b2
Add telnet for monitoring games 2022-10-03 19:37:44 -04:00
95 changed files with 1167 additions and 1301 deletions

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
.sass-cache/
website/_sass/bootstrap/
website/_site/
website/config.yml
web.tar.bz2

View File

@ -9,16 +9,21 @@ panel for game servers that have interactive shells.
The following games are deployed:
* Armagetron Advanced
* Bzflag
* Hedgewars
* Lix
* Mindustry
* Minetest (Blockbomber mod)
* Odamex
* OpenHV
* OpenSpades
* OpenSoldat
* Shattered Paradise
* SuperTuxKart
* Super Tux Party
* Teeworlds (optionally as DDrace)
* UFO: Alien Invasion
* Unvanquished
* Xonotic (optionally as Battle Royale)
@ -42,6 +47,35 @@ The webpage will display "OFFLINE" and not attempt to show the server stats.
The password for the admin panel as well as for game servers that support admin password is stored in `/etc/gameserverpassword`. The username for the admin panel is just `onfoss`.
## Website
The website is generated using Jekyll which uses a config.yml that is generated by the deploy script. Additionally, there is a YAML file called events.yml in the _data directory where events are stored. The formatting is:
```
- date: 2022-12-17T14:00:00UTC
intro: "onFOSS-LAN hosted by DeathByDenim"
games:
- time: "14:00"
title: "Get together"
- time: "14:30"
title: "Doom (ODAMEX) XMAS mod"
- time: "15:15"
title: "Teeworlds"
tournament: true
- time: "16:00"
title: "OpenSpades"
- time: "17:00"
title: "Break"
- time: "18:00"
title: "Lix"
- time: "18:30"
title: "Free Play!"
extras: ["Shattered Paradise"]
```
Each game must have a title and it optionally can have a time as well. The optional field extras lists games that were played as part of a bigger category, in this example the free play section.
Finally, you can also specify tournament which will make this game appear in the tournament page.
## Repository
The main version of this git repository is on [git.libregaming.org](https://git.libregaming.org/DeathByDenim/gameserver). There is a mirror on [Github](https://github.com/DeathByDenim/gameserver)

View File

@ -37,6 +37,7 @@ fi
export stk_version="latest"
export bzflag_version="2.4"
export mindustry_version="latest"
export odamex_version="latest"
export openhv_version="latest"
export teeworlds_version="latest"
export teeworldsddrace_version="16.1"
@ -66,7 +67,7 @@ apt install --assume-yes \
fuse g++ gcc curl firewalld automake autoconf libtool \
libcurl3-dev libc-ares-dev zlib1g-dev libncurses-dev make python3-aiohttp \
nginx-core certbot python3-certbot-nginx sudo python3-psutil \
ldc dub libenet-dev python3-bcrypt jq
ldc dub libenet-dev python3-bcrypt jq telnet jekyll
# Create the user for running the game servers
if ! getent passwd ${systemuser}; then
@ -89,23 +90,32 @@ cp console2web/console2web.py /usr/bin/console2web
"$(dirname "$0")"/scripts/deploy_webserver.sh
# Deploy the game servers
"$(dirname "$0")"/scripts/deploy_supertuxkart.sh
"$(dirname "$0")"/scripts/deploy_bzflag.sh
"$(dirname "$0")"/scripts/deploy_hedgewars.sh
"$(dirname "$0")"/scripts/deploy_lix.sh
"$(dirname "$0")"/scripts/deploy_mindustry.sh
"$(dirname "$0")"/scripts/deploy_openhv.sh
"$(dirname "$0")"/scripts/deploy_openspades.sh
"$(dirname "$0")"/scripts/deploy_teeworlds.sh
"$(dirname "$0")"/scripts/deploy_teeworlds-ddrace.sh
"$(dirname "$0")"/scripts/deploy_unvanquished.sh
"$(dirname "$0")"/scripts/deploy_xonotic.sh
"$(dirname "$0")"/scripts/deploy_xonotic-br.sh
"$(dirname "$0")"/scripts/deploy_armagetron_advanced.sh
"$(dirname "$0")"/scripts/deploy_opensoldat.sh
"$(dirname "$0")"/scripts/deploy_supertuxparty.sh
"$(dirname "$0")"/scripts/deploy_ufoai.sh
"$(dirname "$0")"/scripts/deploy_shatteredparadise.sh
games="\
supertuxkart \
bzflag \
hedgewars \
lix \
mindustry \
minetest \
odamex \
openhv \
openspades \
teeworlds \
teeworlds-ddrace \
unvanquished \
xonotic \
xonotic-br \
armagetron_advanced \
opensoldat \
supertuxparty \
ufoai \
shatteredparadise"
failed_games=""
for game in $games; do
if ! "$(dirname "$0")"/scripts/deploy_${game}.sh; then
failed_games+="${game}\n"
fi
done
# Apply all pending firewall rules. NGINX shouldn't have to be restarted, but it seems to help.
firewall-cmd --reload
@ -113,3 +123,34 @@ systemctl restart nginx
echo
echo "Installation complete. Password is ${systempassword}"
if [ -n "$failed_games" ]; then
echo "The following games failed to install:"
echo -e "$failed_games"
echo
echo "Use /usr/local/bin/redeploy.sh [game] to try again"
fi
cat > /usr/local/bin/redeploy.sh <<EOF
#!/bin/bash
export stk_version="latest"
export bzflag_version="2.4"
export mindustry_version="latest"
export odamex_version="latest"
export openhv_version="latest"
export teeworlds_version="latest"
export teeworldsddrace_version="16.1"
export unvanquished_version="latest"
export xonotic_version="0.8.5"
export lix_version="latest"
export shatteredparadise_version="latest"
export systemuser="onfoss"
export letsencryptemail="jarno@jarno.ca"
export DOMAINNAME="$DOMAINNAME"
export HOSTEDBYNAME="$HOSTEDBYNAME"
export systempassword="$systempassword"
export systemuserhome="$systemuserhome"
"$(dirname "$(realpath -s "$0")")"/scripts/deploy_\${1}.sh
EOF
chmod +x /usr/local/bin/redeploy.sh

View File

@ -23,18 +23,30 @@
set -e
if ! which jekyll > /dev/null; then
echo "Jekyll is required to generate the website"
exit 1
fi
webroot=${TMPDIR:-/tmp}/website
mkdir -p ${webroot}
cp -r "$(dirname "$0")"/website/[^_]* ${webroot}
for file in ${webroot}/*\.html ${webroot}/js/*\.js; do
sed -i $file -e s/"DOMAINNAME"/"${DOMAINNAME}"/g
done
for file in ${webroot}/*\.html; do
sed -i $file -e s/"HOSTEDBYNAME"/"${HOSTEDBYNAME}"/g
done
for file in ${webroot}/*\.html; do
sed -i $file -e "/SERVERSTATE/r $(dirname "$0")/website/_state/offline.html"
sed -i $file -e "/SERVERSTATE/d"
done
tar -cjf web.tar.bz2 --directory="${webroot}" .
cp -r "$(dirname "$0")"/website/* ${webroot}
curl --location https://github.com/twbs/bootstrap/archive/v5.2.3.zip > ${TMPDIR:-/tmp}/bootstrap.zip
unzip -o -d ${TMPDIR:-/tmp}/bootstrap ${TMPDIR:-/tmp}/bootstrap.zip "bootstrap-5.2.3/scss/*"
if [ -d "$(dirname "$0")"/../website/_sass/bootstrap ]; then
rm -r "$(dirname "$0")"/../website/_sass/bootstrap
fi
mv ${TMPDIR:-/tmp}/bootstrap/bootstrap-5.2.3/scss ${webroot}/_sass/bootstrap
rm -r ${TMPDIR:-/tmp}/bootstrap.zip ${TMPDIR:-/tmp}/bootstrap
cat > ${webroot}/_config.yml <<EOF
content:
hosted_by_name: "${HOSTEDBYNAME}"
domain_name: "${DOMAINNAME}"
offline: true
ssl: true
md5password: "$(echo -n "${systempassword}" | md5sum | cut -d' ' -f1)"
EOF
jekyll build --source ${webroot} --destination ${webroot}/_site
tar -cjf web.tar.bz2 --directory="${webroot}/_site" .
rm -rf "${webroot}"

View File

@ -43,8 +43,8 @@ EOF
systemctl restart armagetronad-dedicated.service
cat > /etc/nginx/gameserver.d/armagetronad.conf <<EOF
location /armagetronad {
cat > /etc/nginx/gameserver.d/armagetron.conf <<EOF
location /armagetron {
proxy_pass http://localhost:62551/;
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;

View File

@ -21,6 +21,8 @@ if [ -e /etc/systemd/system/bzflag.service ]; then
systemctl stop bzflag
fi
apt-get -y install build-essential pkg-config
# Install BZFlag
mkdir -p ${TMPDIR:-/tmp}/bzflag-build
cd ${TMPDIR:-/tmp}/bzflag-build

View File

@ -35,7 +35,7 @@ git clone --branch v${lix_version} https://github.com/SimonN/LixD.git
cd LixD/src/server
dub build
mkdir -p /opt/lix-${lix_version}
cp ../../bin/server /opt/lix-${lix_version}
cp ../../bin/lixserv /opt/lix-${lix_version}
rm -rf ${TMPDIR:-/tmp}/lix-build
# Create SystemD unit
@ -45,7 +45,7 @@ Description=Lix server
After=network.target
[Service]
ExecStart=/opt/lix-${lix_version}/server
ExecStart=/opt/lix-${lix_version}/lixserv
Restart=on-failure
User=${systemuser}

75
scripts/deploy_minetest.sh Executable file
View File

@ -0,0 +1,75 @@
#!/bin/bash
# Collection of scripts to deploy a server hosting several open-source games
# Copyright (C) 2022 Jarno van der Kolk
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
set -e
apt install --assume-yes libsqlite3-dev zlib1g-dev libgmp-dev libjsoncpp-dev libzstd-dev libluajit-5.1-dev cmake
if [ -e /etc/systemd/system/minetest.service ]; then
systemctl stop minetest
fi
if [ -z ${minetest_version} ] || [ "${minetest_version}" = "latest" ]; then
minetest_version=$(curl -s https://api.github.com/repos/minetest/minetest/releases/latest | jq -r '.["tag_name"]')
fi
# Install minetest
mkdir -p ${TMPDIR:-/tmp}/minetest-build
curl --location "https://github.com/minetest/minetest/archive/refs/tags/${minetest_version}.tar.gz" | tar --extract --gzip --no-same-owner --directory=${TMPDIR:-/tmp}/minetest-build
mkdir -p ${TMPDIR:-/tmp}/minetest-build/minetest-${minetest_version}/build
git clone --depth 1 https://github.com/minetest/minetest_game.git ${TMPDIR:-/tmp}/minetest-build/minetest-${minetest_version}/games/minetest_game
git clone --depth 1 --branch "1.9.0mt10" https://github.com/minetest/irrlicht.git ${TMPDIR:-/tmp}/minetest-build/minetest-${minetest_version}/lib/irrlichtmt
cd ${TMPDIR:-/tmp}/minetest-build/minetest-${minetest_version}/build
cmake -DCMAKE_INSTALL_PREFIX=/opt/minetest-${minetest_version} -DBUILD_CLIENT=FALSE -DBUILD_SERVER=TRUE ..
make
make install
cd -
rm -rf ${TMPDIR:-/tmp}/minetest-build
sudo -u ${systemuser} mkdir -p /home/${systemuser}/.minetest/games
curl --location https://content.minetest.net/packages/MisterE/blockbomber/releases/11576/download/ > ${TMPDIR:-/tmp}/blockbomber.zip
sudo -u ${systemuser} unzip -o -d /home/${systemuser}/.minetest/games "${TMPDIR:-/tmp}"/blockbomber.zip
rm -f "${TMPDIR:-/tmp}/blockbomber.zip"
cat > /etc/systemd/system/minetest.service <<EOF
[Unit]
Description=Minetest server
After=network.target
[Service]
ExecStart=/opt/minetest-${minetest_version}/bin/minetestserver --config /etc/minetest.conf --gameid blockbomber
Restart=on-failure
User=${systemuser}
[Install]
WantedBy=multi-user.target
EOF
cat > /etc/minetest.conf <<EOF
server_name = onFOSS LAN server
server_address = ${DOMAINNAME}
server_announce = false
max_users = 32
enable_split_login_register = false
ipv6_server = true
EOF
systemctl daemon-reload
systemctl enable --now minetest.service
# Add firewall rules
firewall-cmd --zone=public --add-port=30000/udp --permanent

117
scripts/deploy_odamex.sh Executable file
View File

@ -0,0 +1,117 @@
#!/bin/bash
# Collection of scripts to deploy a server hosting several open-source games
# Copyright (C) 2022 Jarno van der Kolk
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
set -e
if [ -e /etc/systemd/system/odamex.service ]; then
systemctl stop odamex
fi
if [ -z ${odamex_version} ] || [ "${odamex_version}" = "latest" ]; then
odamex_version=$(curl -s https://api.github.com/repos/odamex/odamex/releases/latest | jq -r '.["tag_name"]')
fi
# Install ODAMEX
apt install --assume-yes libsdl2-dev libsdl2-mixer-dev cmake deutex freedoom libpng-dev
mkdir -p ${TMPDIR:-/tmp}/odamex-build
curl --location https://github.com/odamex/odamex/releases/download/${odamex_version}/odamex-src-${odamex_version}.tar.gz | tar --extract --gz --no-same-owner --directory="${TMPDIR:-/tmp}/odamex-build"
mkdir ${TMPDIR:-/tmp}/odamex-build/odamex-src-${odamex_version}/build
cd ${TMPDIR:-/tmp}/odamex-build/odamex-src-${odamex_version}/build
cmake -DBUILD_CLIENT=OFF -DBUILD_SERVER=ON -DBUILD_LAUNCHER=OFF -DCMAKE_INSTALL_PREFIX=/opt/odamex-${odamex_version} ..
make
make install
# Build AppImage
mkdir -p AppDir
cmake -DBUILD_CLIENT=ON -DBUILD_SERVER=OFF -DBUILD_LAUNCHER=OFF -DCMAKE_INSTALL_PREFIX=AppDir ..
make
make install
curl -O --location 'https://github.com/linuxdeploy/linuxdeploy-plugin-appimage/releases/download/continuous/linuxdeploy-plugin-appimage-x86_64.AppImage'
curl -O --location 'https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage'
chmod +x linuxdeploy-plugin-appimage-x86_64.AppImage linuxdeploy-x86_64.AppImage
mkdir -p AppDir/usr/share/applications
cat > AppDir/usr/share/applications/odamex.desktop <<EOF
[Desktop Entry]
Type=Application
Categories=Game
Name=Odamex
Exec=odamex
Icon=odamex
StartupNotify=false
Terminal=false
EOF
for f in ../media/icon_odamex_*.png; do
resolution=$(echo $f | sed s/"..\/media\/icon_odamex_\([0-9]*\).png"/\\1/g)
mkdir -p AppDir/usr/share/icons/hicolor/${resolution}x${resolution}/apps/
cp $f AppDir/usr/share/icons/hicolor/${resolution}x${resolution}/apps/odamex.png
done
cat > AppDir/AppRun <<EOF
#!/bin/bash
export DOOMWADPATH=\$APPDIR/share/odamex/
\$APPDIR/bin/odamex \$@
EOF
chmod +x AppDir/AppRun
./linuxdeploy-x86_64.AppImage --appdir AppDir --output=appimage
cp Odamex-x86_64.AppImage /var/www/html/assets
cd -
rm -rf ${TMPDIR:-/tmp}/odamex-build
proto="http"
if [ x"$NOSSL" = "x" ] || [ $NOSSL -ne 1 ]; then
proto="https"
fi
mkdir -p /home/${systemuser}/.odamex/
cat > /home/${systemuser}/.odamex/odasrv.cfg <<EOF
set sv_hostname "OnFOSS LAN"
set sv_motd "Welcome to OnFOSS LAN DOOM server"
set sv_website "${proto}://${DOMAINNAME}/"
set sv_downloadsites "${proto}://${DOMAINNAME}/wads/"
set rcon_password "${systempassword}"
set sv_gametype "0"
set sv_skill "3"
set sv_maxplayers "32"
set sv_monstersrespawn 120
set sv_warmup 1
set sv_countdown 5
EOF
chown -R ${systemuser}: /home/${systemuser}/.odamex/
# Create SystemD unit
cat > /etc/systemd/system/odamex.service <<EOF
[Unit]
Description=ODAMEX server
After=network.target
[Service]
ExecStart=/opt/odamex-${odamex_version}/bin/odasrv
Restart=on-failure
User=${systemuser}
[Install]
WantedBy=multi-user.target
EOF
# Make wads available for download
mkdir -p /var/www/html/wads
cp -r /usr/share/games/doom/freedoom?.wad /var/www/html/wads
systemctl daemon-reload
systemctl enable --now odamex.service
# Add firewall rules
firewall-cmd --zone=public --add-port=10666/udp --permanent

View File

@ -188,7 +188,6 @@ cat > /etc/systemd/system/opensoldat.service <<EOF
[Unit]
Description=Soldat server
After=network.target
Requires=opensoldat-monitor.service
[Service]
ExecStart=/usr/games/opensoldatserver -sv_adminpassword "${systempassword}"

View File

@ -47,7 +47,7 @@ sudo -u ${systemuser} sed -i ${systemuserhome}/.config/piqueserver/config.toml \
-e s/"color = \[ 0, 0, 255\]"/"color = [ 0, 255, 255]"/ \
-e s/"name = \"Green\""/"name = \"Pinkster\""/ \
-e s/"color = \[ 0, 255, 0\]"/"color = [ 255, 0, 255]"/ \
-e s/" \"classicgen\","/" \"island\",\n \"pinpoint\",\n \"realisticbridge\",\n \"rocketisland\",\n \"submarine\","/ \
-e s/" \"classicgen\","/" \"smallrandomisland\",\n \"island\",\n \"pinpoint\",\n \"realisticbridge\",\n \"rocketisland\",\n \"submarine\","/ \
-e s/"default_time_limit = \"2hours\""/"default_time_limit = \"20minutes\""/
deactivate
@ -69,6 +69,7 @@ for map in island pinpoint realisticbridge rocketisland submarine; do
curl "https://raw.githubusercontent.com/kinvaris/openspades-maps/master/${map}.txt" > ${systemuserhome}/.config/piqueserver/maps/${map}.txt
curl "https://raw.githubusercontent.com/kinvaris/openspades-maps/master/${map}.vxl" > ${systemuserhome}/.config/piqueserver/maps/${map}.vxl
done
curl "https://raw.githubusercontent.com/DeathByDenim/openspades-maps/main/smallrandomisland.txt" > ${systemuserhome}/.config/piqueserver/maps/smallrandomisland.txt
systemctl daemon-reload
systemctl enable --now openspades.service

View File

@ -30,7 +30,7 @@ fi
# Install SuperTuxKart
stk_dir="/opt/SuperTuxKart-${stk_version}"
mkdir -p ${stk_dir}
curl --location "https://github.com/supertuxkart/stk-code/releases/download/${stk_version}/SuperTuxKart-${stk_version}-linux-64bit.tar.xz" | tar --extract --xz --no-same-owner --strip-components=1 --directory=${stk_dir}
curl --location "https://github.com/supertuxkart/stk-code/releases/download/${stk_version}/SuperTuxKart-${stk_version}-linux-x86_64.tar.xz" | tar --extract --xz --no-same-owner --strip-components=1 --directory=${stk_dir}
ln -s ${stk_dir}/bin/supertuxkart /usr/games/supertuxkart
# Configuration

View File

@ -54,8 +54,9 @@ fi
unzip -o -d "${teeworldsddrace_directory}"/data/maps ${TMPDIR:-/tmp}/novice.zip
for f in "${teeworldsddrace_directory}"/data/maps/novice/maps/*.map; do
"${teeworldsddrace_directory}"/map_convert_07 "$f" "`echo "$f" | sed s/"maps\/novice\/maps"/"maps7"/g`"
cp "$f" "${teeworldsddrace_directory}"/data/maps
if "${teeworldsddrace_directory}"/map_convert_07 "$f" "`echo "$f" | sed s/"maps\/novice\/maps"/"maps7"/g`"; then
cp "$f" "${teeworldsddrace_directory}"/data/maps
fi
done
rm -rf "${teeworldsddrace_directory}"/data/maps/novice

View File

@ -52,9 +52,9 @@ sv_maprotation dm2,dm3,dm6,dm7
add_vote "Restart Round" "restart"
add_vote "Reload Map" "reload"
add_vote "Change Gamemode to DM" "exec dm.cfg"
add_vote "Change Gamemode to CTF" "exec ctf.cfg"
add_vote "Change Gamemode to TDM" "exec tdm.cfg"
add_vote "Change Gamemode to DM" "exec /etc/teedm.cfg"
add_vote "Change Gamemode to CTF" "exec /etc/teectf.cfg"
add_vote "Change Gamemode to TDM" "exec /etc/teetdm.cfg"
add_vote "Change Map to ctf1" "change_map ctf1"
add_vote "Change Map to ctf2" "change_map ctf2"
add_vote "Change Map to ctf3" "change_map ctf3"
@ -68,6 +68,27 @@ add_vote "Change Map to dm8" "change_map dm8"
add_vote "Change Map to dm9" "change_map dm9"
EOF
cat > /etc/teedm.cfg <<EOF
sv_maprotation dm2,dm3,dm6,dm7
sv_map dm3
sv_scorelimit 20
sv_gametype dm
EOF
cat > /etc/teetdm.cfg <<EOF
sv_maprotation dm2,dm3,dm6,dm7
sv_map dm3
sv_scorelimit 20
sv_gametype dm
EOF
cat > /etc/teectf.cfg <<EOF
sv_maprotation ctf2,ctf3,ctf4
sv_map ctf2
sv_scorelimit 400
sv_gametype ctf
EOF
cat > /etc/systemd/system/teeworlds.service <<EOF
[Unit]
Description=Teeworlds server

View File

@ -26,28 +26,29 @@ firewall-cmd --reload
# Request SSL certificate. This assumes DNS has been set up already
if [ x"$NOSSL" = "x" ] || [ $NOSSL -ne 1 ]; then
ssl="true"
certbot -n --nginx -d ${DOMAINNAME} -d www.${DOMAINNAME} --agree-tos -m "${letsencryptemail}"
else
ssl="false"
fi
# Put the website files in place
cp -r "$(dirname "$0")"/../website/[^_]* /var/www/html
for file in /var/www/html/*\.html /var/www/html/js/*\.js; do
sed -i $file -e s/"DOMAINNAME"/"${DOMAINNAME}"/g
done
for file in /var/www/html/*\.html; do
sed -i $file -e s/"HOSTEDBYNAME"/"${HOSTEDBYNAME}"/g
done
for file in /var/www/html/*\.html; do
sed -i $file -e "/SERVERSTATE/r $(dirname "$0")/../website/_state/online.html"
sed -i $file -e "/SERVERSTATE/d"
done
if [ x"$NOSSL" != "x" ] && [ $NOSSL -eq 1 ]; then
for file in /var/www/html/js/*\.js; do
sed -i $file -e s/"wss:"/"ws:"/g
sed -i $file -e s/"https:"/"http:"/g
done
# Generate the website and put in place
curl --location https://github.com/twbs/bootstrap/archive/v5.2.3.zip > ${TMPDIR:-/tmp}/bootstrap.zip
unzip -o -d ${TMPDIR:-/tmp}/bootstrap ${TMPDIR:-/tmp}/bootstrap.zip "bootstrap-5.2.3/scss/*"
if [ -d "$(dirname "$0")"/../website/_sass/bootstrap ]; then
rm -r "$(dirname "$0")"/../website/_sass/bootstrap
fi
sed -i /var/www/html/js/consoles.js -e s/"MD5GAMEPASSWORD"/"$(echo -n "${systempassword}" | md5sum | cut -d' ' -f1)"/g
mv ${TMPDIR:-/tmp}/bootstrap/bootstrap-5.2.3/scss "$(dirname "$0")"/../website/_sass/bootstrap
rm -r ${TMPDIR:-/tmp}/bootstrap.zip ${TMPDIR:-/tmp}/bootstrap
cat > "$(dirname "$0")"/../website/_config.yml <<EOF
content:
hosted_by_name: "${HOSTEDBYNAME}"
domain_name: "${DOMAINNAME}"
offline: false
ssl: ${ssl}
md5password: "$(echo -n "${systempassword}" | md5sum | cut -d' ' -f1)"
EOF
jekyll build --source "$(dirname "$0")"/../website --destination /var/www/html
# Patch the NGINX configuration for the web sockets
cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak

View File

@ -51,6 +51,9 @@ sv_vote_gametype 1
sv_vote_gametype_options "dm tdm dom ctf ca rc nb as kh inv ka lms ons"
sv_vote_call 1
sv_weaponstats_file http://www.xonotic.org/weaponbalance/
sv_logscores_console 1
sv_logscores_file 1
sv_logscores_filename xonscore.txt
EOF
cat > /etc/systemd/system/xonotic.service <<EOF
@ -82,4 +85,8 @@ location /xonotic {
}
EOF
if ! [ -h /var/www/html/xonscore.txt ]; then
ln -s "${systemuserhome}"/xonotic/data/data/xonscore.txt /var/www/html
fi
firewall-cmd --zone=public --add-port=26000/udp --permanent

99
website/_data/events.yml Normal file
View File

@ -0,0 +1,99 @@
- date: 2023-05-06T12:00:00UTC
intro: "onFOSS-LAN hosted by hribhrib"
games:
- time: "12:00"
title: "Get and chill together"
- time: "13:00"
title: "OpenSpades"
- time: "14:30"
title: "Blockbomber"
- time: "15:30"
title: "Break"
- time: "16:00"
title: "Xonotic"
tournament: true
- time: "18:00"
title: "Break"
- time: "18:30"
title: "OpenHV"
- time: "20:00"
title: "Mindustry"
- date: 2022-12-17T14:00:00UTC
intro: "onFOSS-LAN hosted by DeathByDenim"
games:
- time: "14:00"
title: "Get together"
- time: "14:30"
title: "Doom (ODAMEX) XMAS mod"
- time: "15:15"
title: "Teeworlds"
- time: "16:00"
title: "OpenSpades"
- time: "17:00"
title: "Break"
- time: "18:00"
title: "Lix"
- time: "18:30"
title: "Free Play!"
extras: ["Shattered Paradise"]
- date: 2022-07-02T14:00:00UTC
intro: "onFOSS-LAN hosted by DeathByDenim"
games:
- time: "14:00"
title: "OpenSoldat"
- time: "15:00"
title: "Lix"
- time: "16:00"
title: "Teeworlds DDrace"
- time: "17:00"
title: "Free play!"
extras: ["OpenSpades", "OpenHV"]
- date: 2022-03-19T14:00:00UTC
intro: "onFOSS-LAN hosted by DeathByDenim"
games:
- time: "14:00"
title: "Armagetron Advanced"
- time: "15:00"
title: "Xonotic - Battle Royale"
- time: "16:00"
title: "Lix"
- time: "16:30"
title: "Free play!"
extras: ["Hedgewars", "SuperTuxKart (Race and Soccer modes)"]
content: |
<p>
Additionally, there was a fundraiser to help the people suffering
from the war in Ukraine &#x1F1FA;&#x1F1E6;. I matched your donation
(up to $500 total) and additionally, the government of Canada
&#x1F1E8;&#x1F1E6; will match mine until 18 March. So, that's triple
the value for any donation you make. It doesn't have to be to the
Canadian Red Cross, you probably have a local equivalent.
</p>
<p>
<em>UPDATE (2022-03-08)</em>: Canada reached the $10M already so they are not
doubling anymore. I'll still double but this means your amount won't
count as triple anymore.
</p>
<p>
<em>UPDATE (2022-03-13)</em>: Canada increased the limit to $30M, so
any donation you make is once again tripled.
</p>
<p>
<em>UPDATE (2022-03-14)</em>: Oh, never mind, this goal has already
been reached. Anyway, I'll still match what you donate!
</p>
<p>
<em>UPDATE (2022-03-19)</em>: Donations are closed. A total amount
of &euro;40 was collected and the equivalent of CAD 55.64 was
donated to the Canadian Red Cross.
</p>
<p>List of donations:</p>
<ul>
<li>Anonymous: &euro;40</li>
</ul>
- date: 2022-02-12T15:00UTC
intro: "Session to test if it all works as intended"
games:
- title: "OpenSpades"
- title: "OpenHV"
- title: "Xonotic"

118
website/_data/games.yml Normal file
View File

@ -0,0 +1,118 @@
- name: armagetron
title: "Armagetron Advanced"
description: "Drive your lightcycle and leave a lightwall behind you. Survive as long as you can and try to make other run into walls."
download_link: "http://www.armagetronad.org/downloads.php"
has_console: true
console_output_coloring: "Terminal"
console_initial_command: "players"
console_help_link: "http://wiki.armagetronad.org/index.php?title=Console_Commands"
console_example_commands:
- ["players", "Show current players"]
- ["kick <name>", "Kick the player"]
- ["num_ais <num>", "Set the number of AIs for games with more than one player"]
- ["limit_rounds", "End the match after this number of rounds"]
- name: bzflag
title: "Bzflag"
description: "Drive around in a tank that can jump, trying to shoot your opponents while dodging their bullets."
download_link: "https://www.bzflag.org/downloads/"
has_console: true
console_output_coloring: "Terminal"
console_initial_command: "/playerlist"
console_help_link: "https://wiki.bzflag.org/Slash_Commands"
console_example_commands:
- ["/playerlist", "Display list of players"]
- ["/kick <name>", "Kick the player"]
- ["/gameover", "end the current game"]
- name: hedgewars
title: "Hedgewars"
description: "Worms-like game where your team of hedgehogs needs to destroy the other teams using the ludicrous arsenal at their disposal."
download_link: "https://www.hedgewars.org/download.html"
- name: lix
title: "Lix"
description: "Lemmings-like game where you need to guide your little people to safety despite their best efforts of wandering into things that will kill them."
download_link: "https://github.com/SimonN/LixD#get-lix"
- name: mindustry
title: "Mindustry"
description: "A building and tower defence game where you build up an industry and defences against ever larger waves of enemies."
download_link: "https://github.com/Anuken/Mindustry/releases"
has_console: true
console_output_coloring: "Terminal"
console_initial_command: "status"
console_help_link: "https://mindustrygame.github.io/wiki/servers/#dedicated-server-commands"
console_example_commands:
- ["status", "Display server status"]
- ["runwave", "Trigger the next wave"]
- ["kick <name>", "Kick a person by name"]
- name: minetest
title: "Minetest (Blockbomber)"
description: "The classic Bomberman game in 3D as a mod for Minetest"
download_link: "https://www.minetest.net/downloads/"
- name: odamex
title: "Odamex"
description: "Multiplayer-focused DOOM engine that allows deathmatch, coop, and capture the flag mode. Here we are using the Freedom assets so you don't need a copy of the original game to play."
download_link: "https://odamex.net/"
- name: openhv
title: "OpenHV"
description: "Real-time strategy game where you mine resources and build units to attack and defend."
download_link: "https://github.com/OpenHV/OpenHV/releases"
- name: openspades
title: "OpenSpades"
description: "Mix between a first person shooter and Minecraft. Build defence structures, dig many tunnels or go on the offensive."
warning: "uses potentially non-open assets. Fix is <a href=\"help_openspades.html#nonfreeassets\"> here</a>."
download_link: "https://github.com/yvt/openspades/releases"
- name: shatteredparadise
title: "Shattered Paradise"
description: "Real-time strategy game where you mine resources and build units to attack and defend."
download_link: "https://github.com/ABrandau/Shattered-Paradise-SDK/releases"
- name: opensoldat
title: "OpenSoldat"
description: "Fast-paced 2D side-scrolling shooter game where you have a big gun and a jetpack."
download_link: "https://github.com/opensoldat/opensoldat/releases/"
- name: supertuxkart
title: "SuperTuxKart"
description: "Kart racing game where you can use the various power-ups to give yourself a boost of hinder your opponents."
download_link: "https://supertuxkart.net/Download"
- name: supertuxparty
title: "Super Tux Party"
description: "Turn-based party game where you challenge other player in real-time mini games."
download_link: "https://supertux.party/download/latest/"
- name: teeworlds
title: "Teeworlds"
description: "Fast-paced 2D side-scrolling shooter game where you have a big gun and a grappling hook."
download_link: "https://www.teeworlds.com/?page=downloads"
has_console: true
console_output_coloring: "Terminal"
console_initial_command: "status"
console_help_link: "https://www.teeworlds.com/?page=docs&wiki=server_commands"
console_example_commands:
- ["status", "Display server status"]
- ["change_map <mapname>", "Switch to <mapname>"]
- ["kick <id>", "Kick a person by id"]
- name: ufoai
title: "UFO: Alien Invasion"
description: "Squad-based turn-based tactical strategy game in the tradition of the old X-COM PC games"
download_link: "https://ufoai.org/wiki/Download"
- name: unvanquished
title: "Unvanquished"
description: "First-person shooter of aliens vs humans. There are several classes and it's possible to build structures."
download_link: "https://unvanquished.net/download/"
has_console: true
console_output_coloring: "Daemoned"
console_initial_command: "/status"
console_help_link: "https://wiki.unvanquished.net/wiki/Server/Running#Commands"
console_example_commands:
- ["/listplayers", "List current players in-game"]
- ["/kick <name>", "Kick the player"]
- ["/nextmap", "Go to the next map in the rotation"]
- name: xonotic
title: "Xonotic"
description: "First-person shooter where players compete in a 3D world. It features Battle Royale mode."
download_link: "https://xonotic.org/download/"
has_console: true
console_output_coloring: "Daemoned"
console_initial_command: "who"
console_help_link: "https://gitlab.com/xonotic/xonotic/-/wikis/Basic-server-configuration"
console_example_commands:
- ["who", "List current players in-game"]
- ["kick <name>", "Kick the player"]
- ["gotomap <name>", "Go to the specified map"]

View File

@ -0,0 +1,29 @@
<h4>{{ event.date | date: "%A %d %B %Y, %H:%M %Z" }}</h4>
<script>
var event_year = {{ event.date | date: "%Y" }};
var event_month = {{ event.date | date: "%M" }};
var event_day = {{ event.date | date: "%M" }};
var d = new Date(Date.UTC(event_year, event_month, event_day, {{ event.date | date: "%H" }}, {{ event.date | date: "%M" }}));
document.writeln("<p>(Local time: "+d.toTimeString()+")</p>")
</script>
{% if event.intro %}
<p>{{ event.intro }}</p>
{% endif %}
<ul>
{% for game in event.games %}
{% assign time = game.time | split: ":"%}
{% if game.time %}
<li>{{ game.time }}UTC {{ game.title }}{%if game.tournament %} <a href="tournament.html" class="game-tournament">Tournament</a>{% endif %}<script>d=new Date(Date.UTC(event_year, event_month, event_day, {{ time | slice: 0 }}, {{ time | slice: 1 }}));document.writeln(" ("+ Intl.DateTimeFormat(undefined, {hour: '2-digit', minute: '2-digit', timeZoneName: 'short'}).format(d) + ")")</script></li>
{% else %}
<li>{{ game.title }}{%if game.tournament %} <a href="tournament.html" class="game-tournament">Tournament</a>{% endif %}</li>
{% endif %}
{% if game.extras %}
<ul>
{% for extra in game.extras %}
<li>{{ extra }}</li>
{% endfor %}
</ul>
{% endif %}
{% endfor %}
</ul>
{{ event.content }}

View File

@ -0,0 +1,27 @@
<nav class="container">
<header class="d-flex flex-wrap justify-content-center py-3 mb-4 border-bottom">
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none">
<img class="bi me-2" width="40" height="32" src="assets/img/blackmage.svg" alt="Site icon">
<span class="fs-4">onFOSS-LAN hosted by {{ site.content.hosted_by_name }}</span>
</a>
<ul class="nav nav-pills">
{% if layout.nav_pill %}
{% assign nav_pill = layout.nav_pill %}
{% else %}
{% assign nav_pill = page.nav_pill %}
{% endif %}
{% case nav_pill %}
{% when "tournament", "schedule", "help", "admin" %}
{% assign home = false %}
{% else %}
{% assign home = true %}
{% endcase %}
<li class="nav-item"><a href="index.html" class="nav-link {% if home %}active{% endif %}" aria-current="page">Home</a></li>
<li class="nav-item"><a href="tournament.html" class="nav-link {% if nav_pill == "tournament" %}active{% endif %}">Tournament</a></li>
<li class="nav-item"><a href="schedule.html" class="nav-link {% if nav_pill == "schedule" %}active{% endif %}">Schedule</a></li>
<li class="nav-item"><a href="help.html" class="nav-link {% if nav_pill == "help" %}active{% endif %}">Help</a></li>
<li class="nav-item"><a href="admin.html" class="nav-link {% if nav_pill == "admin" %}active{% endif %}">Admin</a></li>
</ul>
</header>
</nav>

View File

@ -0,0 +1,32 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>onFOSS-LAN</title>
<link rel="stylesheet" href="assets/css/main.css">
<link rel="stylesheet" href="assets/css/serverstats.css">
<link rel="icon" href="icon.svg" sizes="any" type="image/svg+xml">
<script src="https://d3js.org/d3.v7.min.js"></script>
<script src="js/serverstats.js"></script>
</head>
<body>
{% include nav.html %}
<div class="container">
<div class="row">
<div class="col-md-8">
{{ content }}
</div>
<div class="col-6 col-md-4">
<h5>Live stats</h5>
{% if site.content.offline %}
{% include offline.html %}
{% else %}
{% include online.html %}
{% endif %}
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,13 @@
---
layout: default
nav_pill: help
---
<link rel="stylesheet" href="assets/css/help.css">
{% assign game = site.data.games | where_exp: "item", "item.name == page.game" | first %}
<h1>{{ game.title }}</h1>
<p>{{ game.description }}</p>
<img src="assets/img/{{ game.name }}.png" alt="Screenshot of {{ game.title }}">
<h2>Getting the game</h2>
<div class="download"><a href="{{ game.download_link }}">DOWNLOAD</a></div>
{{ content }}
<p></p>

71
website/_sass/base.scss Normal file
View File

@ -0,0 +1,71 @@
// Custom style matching https://onfoss.libregaming.org/
//$primary: darkorange;
//$secondary: red;
//$body-bg: black;
//$body-color: orange;
//$warning: yellow;
//$font-family-base: Ubuntu Mono, monospace;
//$link-color: #4FBAD5;
//$dark: darkorange;
//$nav-pills-link-active-color: darkblue;
//$nav-pills-link-active-bg: darkorange;
// If you want to provide the Ubuntu font, place those font files in assets/css/font
///* ubuntu-mono-regular - latin */
//@font-face {
//font-family: 'Ubuntu Mono';
//font-style: normal;
//font-weight: 400;
//src: url('font/ubuntu-mono-v14-latin-regular.eot'); /* IE9 Compat Modes */
//src: local(''),
//url('font/ubuntu-mono-v14-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
//url('font/ubuntu-mono-v14-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */
//url('font/ubuntu-mono-v14-latin-regular.woff') format('woff'), /* Modern Browsers */
//url('font/ubuntu-mono-v14-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */
//url('font/ubuntu-mono-v14-latin-regular.svg#UbuntuMono') format('svg'); /* Legacy iOS */
//}
///* ubuntu-mono-italic - latin */
//@font-face {
//font-family: 'Ubuntu Mono';
//font-style: italic;
//font-weight: 400;
//src: url('font/ubuntu-mono-v14-latin-italic.eot'); /* IE9 Compat Modes */
//src: local(''),
//url('font/ubuntu-mono-v14-latin-italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
//url('font/ubuntu-mono-v14-latin-italic.woff2') format('woff2'), /* Super Modern Browsers */
//url('font/ubuntu-mono-v14-latin-italic.woff') format('woff'), /* Modern Browsers */
//url('font/ubuntu-mono-v14-latin-italic.ttf') format('truetype'), /* Safari, Android, iOS */
//url('font/ubuntu-mono-v14-latin-italic.svg#UbuntuMono') format('svg'); /* Legacy iOS */
//}
///* ubuntu-mono-700 - latin */
//@font-face {
//font-family: 'Ubuntu Mono';
//font-style: normal;
//font-weight: 700;
//src: url('font/ubuntu-mono-v14-latin-700.eot'); /* IE9 Compat Modes */
//src: local(''),
//url('font/ubuntu-mono-v14-latin-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
//url('font/ubuntu-mono-v14-latin-700.woff2') format('woff2'), /* Super Modern Browsers */
//url('font/ubuntu-mono-v14-latin-700.woff') format('woff'), /* Modern Browsers */
//url('font/ubuntu-mono-v14-latin-700.ttf') format('truetype'), /* Safari, Android, iOS */
//url('font/ubuntu-mono-v14-latin-700.svg#UbuntuMono') format('svg'); /* Legacy iOS */
//}
///* ubuntu-mono-700italic - latin */
//@font-face {
//font-family: 'Ubuntu Mono';
//font-style: italic;
//font-weight: 700;
//src: url('font/ubuntu-mono-v14-latin-700italic.eot'); /* IE9 Compat Modes */
//src: local(''),
//url('font/ubuntu-mono-v14-latin-700italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
//url('font/ubuntu-mono-v14-latin-700italic.woff2') format('woff2'), /* Super Modern Browsers */
//url('font/ubuntu-mono-v14-latin-700italic.woff') format('woff'), /* Modern Browsers */
//url('font/ubuntu-mono-v14-latin-700italic.ttf') format('truetype'), /* Safari, Android, iOS */
//url('font/ubuntu-mono-v14-latin-700italic.svg#UbuntuMono') format('svg'); /* Legacy iOS */
//}

View File

@ -1,45 +1,10 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Game server</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/serverstats.css">
<link rel="stylesheet" href="css/terminal.css">
<link rel="icon" href="icon.svg" sizes="any" type="image/svg+xml">
<script src="js/terminalcolors.js"></script>
<script src="https://d3js.org/d3.v7.min.js"></script>
<script src="js/serverstats.js"></script>
---
layout: default
nav_pill: admin
---
<link rel="stylesheet" href="assets/css/terminal.css">
<script src="assets/js/terminalcolors.js"></script>
<script src="js/consoles.js"></script>
</head>
<body>
<nav class="container">
<header class="d-flex flex-wrap justify-content-center py-3 mb-4 border-bottom">
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none">
<img class="bi me-2" width="40" height="32" src="img/blackmage.svg" alt="Site icon">
<span class="fs-4">onFOSS-LAN hosted by HOSTEDBYNAME</span>
</a>
<ul class="nav nav-pills">
<li class="nav-item"><a href="index.html" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="tournament.html" class="nav-link">Tournament</a></li>
<li class="nav-item"><a href="schedule.html" class="nav-link">Schedule</a></li>
<li class="nav-item"><a href="help.html" class="nav-link">Help</a></li>
<li class="nav-item"><a href="admin.html" class="nav-link active">Admin</a></li>
</ul>
</header>
</nav>
<div class="container">
<div class="row">
<div class="col-md-8" id="console-div">
<div id="console-div">
<noscript>The admin console needs JavaScript to function since it uses web sockets to connect to the controller processes</noscript>
</div>
<div class="col-6 col-md-4">
<h5>Live stats</h5>
SERVERSTATE
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,5 @@
---
---
@import "base";
@import "bootstrap/bootstrap";

View File

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 62 KiB

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 121 KiB

After

Width:  |  Height:  |  Size: 121 KiB

View File

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 45 KiB

View File

Before

Width:  |  Height:  |  Size: 87 KiB

After

Width:  |  Height:  |  Size: 87 KiB

View File

Before

Width:  |  Height:  |  Size: 207 KiB

After

Width:  |  Height:  |  Size: 207 KiB

View File

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 55 KiB

View File

Before

Width:  |  Height:  |  Size: 92 KiB

After

Width:  |  Height:  |  Size: 92 KiB

View File

Before

Width:  |  Height:  |  Size: 155 KiB

After

Width:  |  Height:  |  Size: 155 KiB

View File

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 65 KiB

View File

Before

Width:  |  Height:  |  Size: 155 KiB

After

Width:  |  Height:  |  Size: 155 KiB

View File

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 67 KiB

View File

Before

Width:  |  Height:  |  Size: 106 KiB

After

Width:  |  Height:  |  Size: 106 KiB

View File

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 46 KiB

View File

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

Before

Width:  |  Height:  |  Size: 180 KiB

After

Width:  |  Height:  |  Size: 180 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 105 KiB

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

View File

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 37 KiB

View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

View File

Before

Width:  |  Height:  |  Size: 162 KiB

After

Width:  |  Height:  |  Size: 162 KiB

View File

Before

Width:  |  Height:  |  Size: 95 KiB

After

Width:  |  Height:  |  Size: 95 KiB

View File

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 65 KiB

View File

Before

Width:  |  Height:  |  Size: 190 KiB

After

Width:  |  Height:  |  Size: 190 KiB

View File

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 134 KiB

View File

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 117 KiB

View File

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 51 KiB

View File

Before

Width:  |  Height:  |  Size: 163 KiB

After

Width:  |  Height:  |  Size: 163 KiB

View File

Before

Width:  |  Height:  |  Size: 126 KiB

After

Width:  |  Height:  |  Size: 126 KiB

View File

Before

Width:  |  Height:  |  Size: 175 KiB

After

Width:  |  Height:  |  Size: 175 KiB

View File

@ -12,7 +12,7 @@
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
// along with this program. If not, see <http://www.gnu.org/licenses/>.
// Shell command can have control codes. Some of these mean colours.
function convertTerminalCodeToHtml(line) {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,35 +1,7 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Game server</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/serverstats.css">
<link rel="icon" href="icon.svg" sizes="any" type="image/svg+xml">
<script src="https://d3js.org/d3.v7.min.js"></script>
<script src="js/serverstats.js"></script>
</head>
<body>
<nav class="container">
<header class="d-flex flex-wrap justify-content-center py-3 mb-4 border-bottom">
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none">
<img class="bi me-2" width="40" height="32" src="img/blackmage.svg" alt="Site icon">
<span class="fs-4">onFOSS-LAN hosted by HOSTEDBYNAME</span>
</a>
<ul class="nav nav-pills">
<li class="nav-item"><a href="index.html" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="tournament.html" class="nav-link">Tournament</a></li>
<li class="nav-item"><a href="schedule.html" class="nav-link">Schedule</a></li>
<li class="nav-item"><a href="help.html" class="nav-link active">Help</a></li>
<li class="nav-item"><a href="admin.html" class="nav-link">Admin</a></li>
</ul>
</header>
</nav>
<div class="container">
<div class="row">
<div class="col-md-8">
---
layout: default
nav_pill: help
---
<h1>Help</h1>
<h3>Communication</h3>
<h4>How to use Mumble</h4>
@ -48,7 +20,7 @@
using the mumble link from the <a href="index.html">Home</a> page.
You should be able to connect and see something like this:
</p>
<img src="img/mumble_interface.png" alt="Screenshot of the Mumble interface">
<img src="assets/img/mumble_interface.png" alt="Screenshot of the Mumble interface">
<p>
By default, you will be place in the Root, but you can double-click
on any channel to join. You will most likely want to go to the Lobby,
@ -72,7 +44,7 @@
Element before, click on the Continue button for that. You should
be able to connect and see something like this:
</p>
<img src="img/element_interface.png" alt="Screenshot of the Element interface">
<img src="assets/img/element_interface.png" alt="Screenshot of the Element interface">
<p>There are usually people here, even outside of the event.</p>
<h4>How to use XMPP/Movim</h4>
<p>
@ -91,7 +63,7 @@
From there, you can start the web-based client at <a href="https://mov.im">mov.im</a>.
After logging in, choose &quot;chats&quot; and then click on the big plus symbol.
</p>
<img src="img/movim_interface.png" alt="Screenshot of the Mov.im interface">
<img src="assets/img/movim_interface.png" alt="Screenshot of the Mov.im interface">
<p>
In the new screen that pops up, you will find &quot;Join a chatroom&quot;
and then &quot;Join a custom chatroom&quot;. Paste the room name from
@ -99,34 +71,13 @@
you want in the Name field. That's only visible for you as the name
of this room.
</p>
<img src="img/movim_interface2.png" alt="Screenshot of the Mov.im interface">
<img src="assets/img/movim_interface2.png" alt="Screenshot of the Mov.im interface">
<p>There are usually people here, even outside of the event.</p>
<h3>Games</h3>
<p>Each game has their own separate help page</p>
<ul>
<li><a href="help_armagetron.html">Armagetron Advanced</a></li>
<li><a href="help_bzflag.html">Bzflag</a></li>
<li><a href="help_hedgewars.html">Hedgewars</a></li>
<li><a href="help_lix.html">Lix</a></li>
<li><a href="help_mindustry.html">Mindustry</a></li>
<li><a href="help_openhv.html">OpenHV</a></li>
<li><a href="help_openspades.html">OpenSpades</a></li>
<li><a href="help_shatteredparadise.html">Shattered Paradise</a></li>
<li><a href="help_soldat.html">Soldat</a></li>
<li><a href="help_supertuxkart.html">SuperTuxKart</a></li>
<li><a href="help_supertuxparty.html">Super Tux Party</a></li>
<li><a href="help_teeworlds.html">Teeworlds</a></li>
<li><a href="help_ufoai.html">UFO: Alien Invasion</a></li>
<li><a href="help_unvanquished.html">Unvanquished</a></li>
<li><a href="help_xonotic.html">Xonotic</a></li>
{% assign sorted_games = site.data.games | sort: "title" %}
{% for game in sorted_games %}
<li><a href="help_{{ game.name }}.html">{{ game.title }}</a></li>
{% endfor %}
</ul>
</div>
<div class="col-6 col-md-4">
<h5>Live stats</h5>
SERVERSTATE
</div>
</div>
</div>
</body>
</html>

View File

@ -1,44 +1,7 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Game server</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/serverstats.css">
<link rel="stylesheet" href="css/help.css">
<link rel="icon" href="icon.svg" sizes="any" type="image/svg+xml">
<script src="https://d3js.org/d3.v7.min.js"></script>
<script src="js/serverstats.js"></script>
</head>
<body>
<nav class="container">
<header class="d-flex flex-wrap justify-content-center py-3 mb-4 border-bottom">
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none">
<img class="bi me-2" width="40" height="32" src="img/blackmage.svg" alt="Site icon">
<span class="fs-4">onFOSS-LAN hosted by HOSTEDBYNAME</span>
</a>
<ul class="nav nav-pills">
<li class="nav-item"><a href="index.html" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="tournament.html" class="nav-link">Tournament</a></li>
<li class="nav-item"><a href="schedule.html" class="nav-link">Schedule</a></li>
<li class="nav-item"><a href="help.html" class="nav-link active">Help</a></li>
<li class="nav-item"><a href="admin.html" class="nav-link">Admin</a></li>
</ul>
</header>
</nav>
<div class="container">
<div class="row">
<div class="col-md-8">
<h1>Armagetron Advanced</h1>
<p>
Drive your lightcycle and leave a lightwall behind you. Survive as
long as you can and try to make other run into walls.
</p>
<img src="img/armagetron.png" alt="Screenshot of Armagetron Advanced">
<h2>Getting the game</h2>
<div class="download"><a href="http://www.armagetronad.org/downloads.php">DOWNLOAD</a></div>
---
layout: help
game: armagetron
---
<h2>Tips</h2>
<ul>
<li>Press the down arrow key to brake</li>
@ -50,17 +13,7 @@
Then go to Multiplayer and then to Custom Connect.
</p>
<p>
Enter DOMAINNAME in the Address field and keep the port number at 4534.
Enter {{ site.content.domain_name }} in the Address field and keep the port number at 4534.
Navigate down to Connect to Server to join.
</p>
<p>You should now be connected.</p>
</div>
<div class="col-6 col-md-4">
<h5>Live stats</h5>
SERVERSTATE
</div>
</div>
</div>
</body>
</html>

View File

@ -1,41 +1,7 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Game server</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/serverstats.css">
<link rel="stylesheet" href="css/help.css">
<link rel="icon" href="icon.svg" sizes="any" type="image/svg+xml">
<script src="https://d3js.org/d3.v7.min.js"></script>
<script src="js/serverstats.js"></script>
</head>
<body>
<nav class="container">
<header class="d-flex flex-wrap justify-content-center py-3 mb-4 border-bottom">
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none">
<img class="bi me-2" width="40" height="32" src="img/blackmage.svg" alt="Site icon">
<span class="fs-4">onFOSS-LAN hosted by HOSTEDBYNAME</span>
</a>
<ul class="nav nav-pills">
<li class="nav-item"><a href="index.html" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="tournament.html" class="nav-link">Tournament</a></li>
<li class="nav-item"><a href="schedule.html" class="nav-link">Schedule</a></li>
<li class="nav-item"><a href="help.html" class="nav-link active">Help</a></li>
<li class="nav-item"><a href="admin.html" class="nav-link">Admin</a></li>
</ul>
</header>
</nav>
<div class="container">
<div class="row">
<div class="col-md-8">
<h1>Bzflag</h1>
<p>Drive around in a tank that can jump, trying to shoot your opponents while dodging their bullets.</p>
<img src="img/bzflag.png" alt="Screenshot of Bzflag">
<h2>Getting the game</h2>
<div class="download"><a href="https://www.bzflag.org/downloads/">DOWNLOAD</a></div>
---
layout: help
game: bzflag
---
<h2>Tips</h2>
<ul>
<li>Jump using the &lt;Tab&gt; key</li>
@ -45,18 +11,8 @@
<h2>Connecting</h2>
<p>Use the arrow keys to nagivate to Join Game and press &lt;Enter&gt;.</p>
<p>
Move down to Server and type DOMAINNAME and keep the port number at 5154.
Move down to Server and type {{ site.content.domain_name }} and keep the port number at 5154.
You can also set your Callsign here. This is how other players will see
your name. Then move up to Connect and press &lt;Enter&gt;.</p>
<img src="img/help_bzflag.png" alt="Server join screen for Bzflag" class="img-fluid">
<img src="assets/img/help_bzflag.png" alt="Server join screen for Bzflag" class="img-fluid">
<p>You should now be connected.</p>
</div>
<div class="col-6 col-md-4">
<h5>Live stats</h5>
SERVERSTATE
</div>
</div>
</div>
</body>
</html>

View File

@ -1,41 +1,7 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Game server</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/serverstats.css">
<link rel="stylesheet" href="css/help.css">
<link rel="icon" href="icon.svg" sizes="any" type="image/svg+xml">
<script src="https://d3js.org/d3.v7.min.js"></script>
<script src="js/serverstats.js"></script>
</head>
<body>
<nav class="container">
<header class="d-flex flex-wrap justify-content-center py-3 mb-4 border-bottom">
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none">
<img class="bi me-2" width="40" height="32" src="img/blackmage.svg" alt="Site icon">
<span class="fs-4">onFOSS-LAN hosted by HOSTEDBYNAME</span>
</a>
<ul class="nav nav-pills">
<li class="nav-item"><a href="index.html" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="tournament.html" class="nav-link">Tournament</a></li>
<li class="nav-item"><a href="schedule.html" class="nav-link">Schedule</a></li>
<li class="nav-item"><a href="help.html" class="nav-link active">Help</a></li>
<li class="nav-item"><a href="admin.html" class="nav-link">Admin</a></li>
</ul>
</header>
</nav>
<div class="container">
<div class="row">
<div class="col-md-8">
<h1>Hedgewars</h1>
<p>Worms-like game where your team of hedgehogs needs to destroy the other teams using the ludicrous arsenal at their disposal.</p>
<img src="img/hedgewars.png" alt="Screenshot of Hedgewars">
<h2>Getting the game</h2>
<div class="download"><a href="https://www.hedgewars.org/download.html">DOWNLOAD</a></div>
---
layout: help
game: hedgewars
---
<h2>Tips</h2>
<ul>
<li>Use the right mouse button to open the weapons menu.</li>
@ -60,19 +26,9 @@
</p>
<p>
At the bottom, there is a button called &quot;Specify addres&quot;.
Fill in DOMAINNAME for the host and leave the port number at 46631.
Fill in {{ site.content.domain_name }} for the host and leave the port number at 46631.
</p>
<img src="img/help_hedgewars.png" alt="Connection settings for Hedgewars" class="img-fluid">
<img src="assets/img/help_hedgewars.png" alt="Connection settings for Hedgewars" class="img-fluid">
<p>
You should now see a list of rooms. There should be one room you can join.
</p>
</div>
<div class="col-6 col-md-4">
<h5>Live stats</h5>
SERVERSTATE
</div>
</div>
</div>
</body>
</html>

View File

@ -1,52 +1,17 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Game server</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/serverstats.css">
<link rel="stylesheet" href="css/help.css">
<link rel="icon" href="icon.svg" sizes="any" type="image/svg+xml">
<script src="https://d3js.org/d3.v7.min.js"></script>
<script src="js/serverstats.js"></script>
</head>
<body>
<nav class="container">
<header class="d-flex flex-wrap justify-content-center py-3 mb-4 border-bottom">
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none">
<img class="bi me-2" width="40" height="32" src="img/blackmage.svg" alt="Site icon">
<span class="fs-4">onFOSS-LAN hosted by HOSTEDBYNAME</span>
</a>
<ul class="nav nav-pills">
<li class="nav-item"><a href="index.html" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="tournament.html" class="nav-link">Tournament</a></li>
<li class="nav-item"><a href="schedule.html" class="nav-link">Schedule</a></li>
<li class="nav-item"><a href="help.html" class="nav-link active">Help</a></li>
<li class="nav-item"><a href="admin.html" class="nav-link">Admin</a></li>
</ul>
</header>
</nav>
<div class="container">
<div class="row">
<div class="col-md-8">
<h1>Lix</h1>
<p>Lemmings-like game where you need to guide your little people to safety despite their best efforts of wandering into things that will kill them.</p>
<img src="img/lix.png" alt="Screenshot of Lix">
<h2>Getting the game</h2>
<div class="download"><a href="https://github.com/SimonN/LixD#get-lix">DOWNLOAD</a></div>
---
layout: help
game: lix
---
<h2>Tips</h2>
<ul>
<li>You can only control the Lix that are the colour you chose</li>
<li>You only get points for Lix going into the exits that are in your colour</li>
<li>You also get points if other coloured Lix go into your exits</li>
<li>The baseball bat is a great way to get rid of enemy blockers</li>
</ul>
<h2>Connecting</h2>
</div>
<div class="col-6 col-md-4">
<h5>Live stats</h5>
SERVERSTATE
</div>
</div>
</div>
</body>
</html>
<p>Click on &quot;Options&quot;. Then under the &quot;General&quot; tab, you can input your player name. Click on &quot;Okay&quot; to confirm.</p>
<p>Click on &quot;Network Game&quot;.</p>
<p>Under address, fill out {{ site.contents.domain_name }} and keep the port set to 22934. Then click on &quot;Okay&quot; to connect.</p>
<p>You should see a room on the upper right. Click on that to join.</p>
<p>Choose your colour and then click &quot;Okay&quot;</p>

View File

@ -1,41 +1,7 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Game server</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/serverstats.css">
<link rel="stylesheet" href="css/help.css">
<link rel="icon" href="icon.svg" sizes="any" type="image/svg+xml">
<script src="https://d3js.org/d3.v7.min.js"></script>
<script src="js/serverstats.js"></script>
</head>
<body>
<nav class="container">
<header class="d-flex flex-wrap justify-content-center py-3 mb-4 border-bottom">
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none">
<img class="bi me-2" width="40" height="32" src="img/blackmage.svg" alt="Site icon">
<span class="fs-4">onFOSS-LAN hosted by HOSTEDBYNAME</span>
</a>
<ul class="nav nav-pills">
<li class="nav-item"><a href="index.html" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="tournament.html" class="nav-link">Tournament</a></li>
<li class="nav-item"><a href="schedule.html" class="nav-link">Schedule</a></li>
<li class="nav-item"><a href="help.html" class="nav-link active">Help</a></li>
<li class="nav-item"><a href="admin.html" class="nav-link">Admin</a></li>
</ul>
</header>
</nav>
<div class="container">
<div class="row">
<div class="col-md-8">
<h1>Mindustry</h1>
<p>A building and tower defence game where you build up an industry and defences against ever larger waves of enemies.</p>
<img src="img/mindustry.png" alt="Screenshot of Mindustry">
<h2>Getting the game</h2>
<div class="download"><a href="https://github.com/Anuken/Mindustry/releases">DOWNLOAD</a></div>
---
layout: help
game: mindustry
---
<h2>Tips</h2>
<ul>
<li>
@ -51,16 +17,6 @@
From the main menu choose &quot;Play&quot; and then &quot;Join
Game&quot;. You will be able to set you in-game name here.
</p>
<p>To join the server, click on &quot;Add Server&quot; and type in DOMAINNAME. When you press Ok, it will be added under &quot;Remote Servers&quot;.</p>
<img src="img/help_mindustry.png" alt="The join screen in Mindustry with the server added" class="img-fluid">
<p>To join the server, click on &quot;Add Server&quot; and type in {{ site.content.domain_name }}. When you press Ok, it will be added under &quot;Remote Servers&quot;.</p>
<img src="assets/img/help_mindustry.png" alt="The join screen in Mindustry with the server added" class="img-fluid">
<p>You can then click on the server name to join.</p>
</div>
<div class="col-6 col-md-4">
<h5>Live stats</h5>
SERVERSTATE
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,19 @@
---
layout: help
game: minetest
---
<h2>Tips</h2>
<ul>
<li>Movement: A, S, W, D</li>
<li>Drop bomb: Left Shift (sneak)(</li>
<li>Throw a bomb that you are standing in: Space (jump) (if player has Spring)</li>
<li>Punch bomb: Left mouse button (punch) (with Fist)</li>
</ul>
<h2>Connecting</h2>
<p>
Under address fill in {{ site.content.domain_name }} and keep the port at
30000. Click on Register to set your in-game name. You can leave the password blank
since this server will disappear after the event anyway.
</p>
<img src="assets/img/help_minetest.png" alt="The register screen in the Minetest client" class="img-fluid">
<p>You will be placed in the lobby with the other players</p>

17
website/help_odamex.html Normal file
View File

@ -0,0 +1,17 @@
---
layout: help
game: odamex
download_link: https://odamex.net/
---
<p>An AppImage for Linux was automatically generated: {% if site.content.offline %}Odamex-x86_64.AppImage (only available when game servers are online){% else %}<a href="assets/Odamex-x86_64.AppImage">Odamex-x86_64.AppImage</a>{% endif %}</p>
<h2>Tips</h2>
<ul>
<li>Use &lt;SPACE&gt; to jump</li>
<li>Use E to open doors or to respawn if dead</li>
</ul>
<h2>Connecting</h2>
<p>While Odamex does have a launcher, if requires that you have DOOM assets available locally. It won't launch the game without it, which means you either need the original game data of open assets such as Freedoom.</p>
<p>However, if you connect to the game server directly, odamex will download the required assets automatically from the server.</p>
<p>From the terminal, type:</p>
<p><tt>odamex -connect {{ site.content.domain_name }} +set cl_name "YourName"</tt></p>
<p>Of course, substitute &quot;YourName&quot; with the in-game name you want.</p>

View File

@ -1,41 +1,7 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Game server</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/serverstats.css">
<link rel="stylesheet" href="css/help.css">
<link rel="icon" href="icon.svg" sizes="any" type="image/svg+xml">
<script src="https://d3js.org/d3.v7.min.js"></script>
<script src="js/serverstats.js"></script>
</head>
<body>
<nav class="container">
<header class="d-flex flex-wrap justify-content-center py-3 mb-4 border-bottom">
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none">
<img class="bi me-2" width="40" height="32" src="img/blackmage.svg" alt="Site icon">
<span class="fs-4">onFOSS-LAN hosted by HOSTEDBYNAME</span>
</a>
<ul class="nav nav-pills">
<li class="nav-item"><a href="index.html" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="tournament.html" class="nav-link">Tournament</a></li>
<li class="nav-item"><a href="schedule.html" class="nav-link">Schedule</a></li>
<li class="nav-item"><a href="help.html" class="nav-link active">Help</a></li>
<li class="nav-item"><a href="admin.html" class="nav-link">Admin</a></li>
</ul>
</header>
</nav>
<div class="container">
<div class="row">
<div class="col-md-8">
<h1>OpenHV</h1>
<p>Real-time strategy game where you mine resources and build units to attack and defend.</p>
<img src="img/openhv.png" alt="Screenshot of OpenHV">
<h2>Getting the game</h2>
<div class="download"><a href="https://github.com/OpenHV/OpenHV/releases">DOWNLOAD</a></div>
---
layout: help
game: openhv
---
<p>You will have to expand &quot;Assets&quot; to see the download links.</p>
<h2>Tips</h2>
<ul>
@ -57,18 +23,8 @@
</p>
<p>
From the main menu, click on &quot;Multiplayer&quot; and then click
on &quot;Direct IP&quot;. Fill in DOMAINNAME and keep the port at
on &quot;Direct IP&quot;. Fill in {{ site.content.domain_name }} and keep the port at
1234. Then click on &quot;Join&quot;
</p>
<img src="img/help_openhv.png" alt="The join screen in OpenHV" class="img-fluid">
<img src="assets/img/help_openhv.png" alt="The join screen in OpenHV" class="img-fluid">
<p>You will be placed in the lobby with the other players</p>
</div>
<div class="col-6 col-md-4">
<h5>Live stats</h5>
SERVERSTATE
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,20 @@
---
layout: help
game: opensoldat
---
<p>The game does not have a GUI yet. You need to start it from the terminal/command prompt. When you do so, it will create a configs directory with a client.cfg file. You can add your settings to that.</p>
<p>The AppImage for Linux creates the config file in <tt>~/.config/share/Soldat/Soldat</tt> instead.</p>
<p>Things you might like to set:</p>
<ul>
<li><tt>cl_player_name YourNameGoesHere</tt></li>
<li><tt>r_fullscreen 1</tt></li>
</ul>
<h2>Tips</h2>
<ul>
<li>Use the right mouse button to use your jetpack.</li>
<li>Press Q to switch to your secondary weapon and E to throw grenades.</li>
</ul>
<h2>Connecting</h2>
<p>Start Soldat by typing:</p>
<p><tt>./soldat -join {{ site.content.domain_name }}</tt></p>
<p>You should now be connected. If it doesn't work. Try to connect by IP address instead of domain name.</p>

View File

@ -1,41 +1,7 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Game server</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/serverstats.css">
<link rel="stylesheet" href="css/help.css">
<link rel="icon" href="icon.svg" sizes="any" type="image/svg+xml">
<script src="https://d3js.org/d3.v7.min.js"></script>
<script src="js/serverstats.js"></script>
</head>
<body>
<nav class="container">
<header class="d-flex flex-wrap justify-content-center py-3 mb-4 border-bottom">
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none">
<img class="bi me-2" width="40" height="32" src="img/blackmage.svg" alt="Site icon">
<span class="fs-4">onFOSS-LAN hosted by HOSTEDBYNAME</span>
</a>
<ul class="nav nav-pills">
<li class="nav-item"><a href="index.html" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="tournament.html" class="nav-link">Tournament</a></li>
<li class="nav-item"><a href="schedule.html" class="nav-link">Schedule</a></li>
<li class="nav-item"><a href="help.html" class="nav-link active">Help</a></li>
<li class="nav-item"><a href="admin.html" class="nav-link">Admin</a></li>
</ul>
</header>
</nav>
<div class="container">
<div class="row">
<div class="col-md-8">
<h1>OpenSpades</h1>
<p>Mix between a first person shooter and Minecraft. Build defence structures, dig many tunnels or go on the offensive.</p>
<img src="img/openspades.png" alt="Screenshot of OpenSpades">
<h2>Getting the game</h2>
<div class="download"><a href="https://github.com/yvt/openspades/releases">DOWNLOAD</a></div>
---
layout: help
game: openspades
---
<h2>Tips</h2>
<ul>
<li>
@ -53,6 +19,25 @@
the map go away again.
</li>
</ul>
<h2 id="nonfreeassets">Non-free assets</h2>
<p>
OpenSpades contains non-free assets that were copied from the original
Ace of Spades games. The creators of OpenSpades were unabled to contact
the authors, so these assets were never released under an open licence.
</p>
<p>
Fortunately, there is a drop-in replacement for these assets available.
All models have been recreated under a CC0 licence and the sound effects
have been replaced by mostly CC0 equivalents with a few exceptions that
are CC-BY.
</p>
<h3>Installation</h3>
<ul>
<li>Download the libre assets: <a href="https://github.com/DeathByDenim/openspades-free-pak/releases/download/latest/pak001-Free.pak">pak001-Free.pak</a></li>
<li>Find the location of pak000-Nonfree.pak for your OpenSpades installation. For example <tt>/usr/share/openspades/Resources/</tt></li>
<li>Copy the downloaded pak001-Free.pak to the same location.</li>
<li>Optionally, delete pak000-Nonfree.pak. It it no longer needed because pak001-Free.pak will overrule all of the content in pak000-Nonfree.pak.</li>
</ul>
<h2>Connecting</h2>
<p>
When you start the game you will immediately enter the server
@ -61,18 +46,8 @@
to return to the server browser.
</p>
<p>
To connect to the server, type DOMAINNAME in the input field at the
To connect to the server, type {{ site.content.domain_name }} in the input field at the
top and click on the &quot;Connect&quot; button to the right.
</p>
<img src="img/help_openspades.png" alt="The join screen in OpenSpades" class="img-fluid">
<img src="assets/img/help_openspades.png" alt="The join screen in OpenSpades" class="img-fluid">
<p></p>
</div>
<div class="col-6 col-md-4">
<h5>Live stats</h5>
SERVERSTATE
</div>
</div>
</div>
</body>
</html>

View File

@ -1,41 +1,7 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Game server</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/serverstats.css">
<link rel="stylesheet" href="css/help.css">
<link rel="icon" href="icon.svg" sizes="any" type="image/svg+xml">
<script src="https://d3js.org/d3.v7.min.js"></script>
<script src="js/serverstats.js"></script>
</head>
<body>
<nav class="container">
<header class="d-flex flex-wrap justify-content-center py-3 mb-4 border-bottom">
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none">
<img class="bi me-2" width="40" height="32" src="img/blackmage.svg" alt="Site icon">
<span class="fs-4">onFOSS-LAN hosted by HOSTEDBYNAME</span>
</a>
<ul class="nav nav-pills">
<li class="nav-item"><a href="index.html" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="tournament.html" class="nav-link">Tournament</a></li>
<li class="nav-item"><a href="schedule.html" class="nav-link">Schedule</a></li>
<li class="nav-item"><a href="help.html" class="nav-link active">Help</a></li>
<li class="nav-item"><a href="admin.html" class="nav-link">Admin</a></li>
</ul>
</header>
</nav>
<div class="container">
<div class="row">
<div class="col-md-8">
<h1>Shattered Paradise</h1>
<p>Real-time strategy game where you mine resources and build units to attack and defend.</p>
<img src="img/shatteredparadise.png" alt="Screenshot of Shattered Paradise">
<h2>Getting the game</h2>
<div class="download"><a href="https://github.com/ABrandau/Shattered-Paradise-SDK/releases">DOWNLOAD</a></div>
---
layout: help
game: shatteredparadise
---
<p>You will have to expand &quot;Assets&quot; to see the download links.</p>
<h2>Tips</h2>
<ul>
@ -57,18 +23,8 @@
</p>
<p>
From the main menu, click on &quot;Multiplayer&quot; and then click
on &quot;Direct IP&quot;. Fill in DOMAINNAME and set the port at
on &quot;Direct IP&quot;. Fill in {{ site.content.domain_name }} and set the port at
12340. The standard port is 1234, but is already taken. Then click on &quot;Join&quot;
</p>
<img src="img/help_shatteredparadise.png" alt="The join screen in Shattered Paradise" class="img-fluid">
<img src="assets/img/help_shatteredparadise.png" alt="The join screen in Shattered Paradise" class="img-fluid">
<p>You will be placed in the lobby with the other players</p>
</div>
<div class="col-6 col-md-4">
<h5>Live stats</h5>
SERVERSTATE
</div>
</div>
</div>
</body>
</html>

View File

@ -1,64 +0,0 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Game server</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/serverstats.css">
<link rel="stylesheet" href="css/help.css">
<link rel="icon" href="icon.svg" sizes="any" type="image/svg+xml">
<script src="https://d3js.org/d3.v7.min.js"></script>
<script src="js/serverstats.js"></script>
</head>
<body>
<nav class="container">
<header class="d-flex flex-wrap justify-content-center py-3 mb-4 border-bottom">
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none">
<img class="bi me-2" width="40" height="32" src="img/blackmage.svg" alt="Site icon">
<span class="fs-4">onFOSS-LAN hosted by HOSTEDBYNAME</span>
</a>
<ul class="nav nav-pills">
<li class="nav-item"><a href="index.html" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="tournament.html" class="nav-link">Tournament</a></li>
<li class="nav-item"><a href="schedule.html" class="nav-link">Schedule</a></li>
<li class="nav-item"><a href="help.html" class="nav-link active">Help</a></li>
<li class="nav-item"><a href="admin.html" class="nav-link">Admin</a></li>
</ul>
</header>
</nav>
<div class="container">
<div class="row">
<div class="col-md-8">
<h1>Soldat</h1>
<p>Fast-paced 2D side-scrolling shooter game where you have a big gun and a jetpack.</p>
<img src="img/soldat.png" alt="Screenshot of Soldat">
<h2>Getting the game</h2>
<div class="download"><a href="https://github.com/opensoldat/opensoldat/releases/">DOWNLOAD</a></div>
<p>The game does not have a GUI yet. You need to start it from the terminal/command prompt. When you do so, it will create a configs directory with a client.cfg file. You can add your settings to that.</p>
<p>The AppImage for Linux creates the config file in <tt>~/.config/share/Soldat/Soldat</tt> instead.</p>
<p>Things you might like to set:</p>
<ul>
<li><tt>cl_player_name YourNameGoesHere</tt></li>
<li><tt>r_fullscreen 1</tt></li>
</ul>
<h2>Tips</h2>
<ul>
<li>Use the right mouse button to use your jetpack.</li>
<li>Press Q to switch to your secondary weapon and E to throw grenades.</li>
</ul>
<h2>Connecting</h2>
<p>Start Soldat by typing:</p>
<p><tt>./soldat -join DOMAINNAME</tt></p>
<p>You should now be connected. If it doesn't work. Try to connect by IP address instead of domain name.</p>
</div>
<div class="col-6 col-md-4">
<h5>Live stats</h5>
SERVERSTATE
</div>
</div>
</div>
</body>
</html>

View File

@ -1,44 +1,7 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Game server</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/serverstats.css">
<link rel="stylesheet" href="css/help.css">
<link rel="icon" href="icon.svg" sizes="any" type="image/svg+xml">
<script src="https://d3js.org/d3.v7.min.js"></script>
<script src="js/serverstats.js"></script>
</head>
<body>
<nav class="container">
<header class="d-flex flex-wrap justify-content-center py-3 mb-4 border-bottom">
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none">
<img class="bi me-2" width="40" height="32" src="img/blackmage.svg" alt="Site icon">
<span class="fs-4">onFOSS-LAN hosted by HOSTEDBYNAME</span>
</a>
<ul class="nav nav-pills">
<li class="nav-item"><a href="index.html" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="tournament.html" class="nav-link">Tournament</a></li>
<li class="nav-item"><a href="schedule.html" class="nav-link">Schedule</a></li>
<li class="nav-item"><a href="help.html" class="nav-link active">Help</a></li>
<li class="nav-item"><a href="admin.html" class="nav-link">Admin</a></li>
</ul>
</header>
</nav>
<div class="container">
<div class="row">
<div class="col-md-8">
<h1>SuperTuxKart</h1>
<p>
Kart racing game where you can use the various power-ups to give
yourself a boost of hinder your opponents.
</p>
<img src="img/supertuxkart.png" alt="Screenshot of SuperTuxKart">
<h2>Getting the game</h2>
<div class="download"><a href="https://supertuxkart.net/Download">DOWNLOAD</a></div>
---
layout: help
game: supertuxkart
---
<h2>Tips</h2>
<ul>
<li>Use the arrow keys to accelerate, brake, and steer.</li>
@ -57,20 +20,9 @@
</p>
<p>
To connect to out server, click on &quot;Enter server address&quot;.
Then type in DOMAINNAME and click on &quot;OK&quot;.
Then type in {{ site.content.domain_name }} and click on &quot;OK&quot;.
</p>
<img src="img/help_supertuxkart.png" alt="Entering the server address" class="img-fluid">
<img src="assets/img/help_supertuxkart.png" alt="Entering the server address" class="img-fluid">
<p>
You will then be placed in the lobby of our game server and ready to go!
</p>
</div>
<div class="col-6 col-md-4">
<h5>Live stats</h5>
SERVERSTATE
</div>
</div>
</div>
</body>
</html>

View File

@ -1,58 +1,4 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Game server</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/serverstats.css">
<link rel="stylesheet" href="css/help.css">
<link rel="icon" href="icon.svg" sizes="any" type="image/svg+xml">
<script src="https://d3js.org/d3.v7.min.js"></script>
<script src="js/serverstats.js"></script>
</head>
<body>
<nav class="container">
<header class="d-flex flex-wrap justify-content-center py-3 mb-4 border-bottom">
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none">
<img class="bi me-2" width="40" height="32" src="img/blackmage.svg" alt="Site icon">
<span class="fs-4">onFOSS-LAN hosted by HOSTEDBYNAME</span>
</a>
<ul class="nav nav-pills">
<li class="nav-item"><a href="index.html" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="tournament.html" class="nav-link">Tournament</a></li>
<li class="nav-item"><a href="schedule.html" class="nav-link">Schedule</a></li>
<li class="nav-item"><a href="help.html" class="nav-link active">Help</a></li>
<li class="nav-item"><a href="admin.html" class="nav-link">Admin</a></li>
</ul>
</header>
</nav>
<div class="container">
<div class="row">
<div class="col-md-8">
<h1>Super Tux Party</h1>
<p>Turn-based party game where you challenge other player in real-time mini games.</p>
<img src="img/supertuxparty.png" alt="Screenshot of Super Tux Party">
<h2>Getting the game</h2>
<div class="download"><a href="https://supertux.party/download/latest/">DOWNLOAD</a></div>
<h2>Tips</h2>
<ul>
<li>Use the right mouse button to use your jetpack.</li>
<li>Press Q to switch to your secondary weapon and E to throw grenades.</li>
</ul>
<h2>Connecting</h2>
<p>SClick on "Play online".</p>
<p>Click on the + and type DOMAINNAME and press &lt;Enter&gt;.</p>
<p>Click on DOMAINNAME to connect.</p>
<p>At the bottom of the screen there is a small text field and a Join Lobby button. This is a randomly generated string that needs to be provided by whoever created the lobby. This will be shared over Matrix or Mumble.</p>
</div>
<div class="col-6 col-md-4">
<h5>Live stats</h5>
SERVERSTATE
</div>
</div>
</div>
</body>
</html>
---
layout: help
game: supertuxparty
---

View File

@ -1,41 +1,7 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Game server</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/serverstats.css">
<link rel="stylesheet" href="css/help.css">
<link rel="icon" href="icon.svg" sizes="any" type="image/svg+xml">
<script src="https://d3js.org/d3.v7.min.js"></script>
<script src="js/serverstats.js"></script>
</head>
<body>
<nav class="container">
<header class="d-flex flex-wrap justify-content-center py-3 mb-4 border-bottom">
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none">
<img class="bi me-2" width="40" height="32" src="img/blackmage.svg" alt="Site icon">
<span class="fs-4">onFOSS-LAN hosted by HOSTEDBYNAME</span>
</a>
<ul class="nav nav-pills">
<li class="nav-item"><a href="index.html" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="tournament.html" class="nav-link">Tournament</a></li>
<li class="nav-item"><a href="schedule.html" class="nav-link">Schedule</a></li>
<li class="nav-item"><a href="help.html" class="nav-link active">Help</a></li>
<li class="nav-item"><a href="admin.html" class="nav-link">Admin</a></li>
</ul>
</header>
</nav>
<div class="container">
<div class="row">
<div class="col-md-8">
<h1>Teeworlds</h1>
<p>Fast-paced 2D side-scrolling shooter game where you have a big gun and a grappling hook.</p>
<img src="img/teeworlds.png" alt="Screenshot of Teeworlds">
<h2>Getting the game</h2>
<div class="download"><a href="https://www.teeworlds.com/?page=downloads">DOWNLOAD</a></div>
---
layout: help
game: teeworlds
---
<p>Click the name of your OS on the left of the most recent version. Extract the file wherever you like and start playing.</p>
<h2>Tips</h2>
<ul>
@ -44,18 +10,8 @@
</ul>
<h2>Connecting</h2>
<p>Click on Settings and choose the Player tab. You can fill in your name so we can recognize you when you join the server. The Tee tab will also let you customize your appearance.</p>
<img src="img/help_teeworlds_name.png" alt="Teeworlds setting for player name" class="img-fluid">
<img src="assets/img/help_teeworlds_name.png" alt="Teeworlds setting for player name" class="img-fluid">
<p>To connect to the server, got back to the main menu and click Play.</p>
<p>At the bottom of the screen you can fill in the name of the server in the Host address field. Type DOMAINNAME and press &lt;Enter&gt; or click Connect.</p>
<img src="img/help_teeworlds_server.png" alt="Joining the Teeworlds server" class="img-fluid">
<p>At the bottom of the screen you can fill in the name of the server in the Host address field. Type {{ site.content.domain_name }} and press &lt;Enter&gt; or click Connect.</p>
<img src="assets/img/help_teeworlds_server.png" alt="Joining the Teeworlds server" class="img-fluid">
<p>You should now be connected.</p>
</div>
<div class="col-6 col-md-4">
<h5>Live stats</h5>
SERVERSTATE
</div>
</div>
</div>
</body>
</html>

View File

@ -1,44 +1,10 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Game server</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/serverstats.css">
<link rel="stylesheet" href="css/help.css">
<link rel="icon" href="icon.svg" sizes="any" type="image/svg+xml">
<script src="https://d3js.org/d3.v7.min.js"></script>
<script src="js/serverstats.js"></script>
</head>
<body>
<nav class="container">
<header class="d-flex flex-wrap justify-content-center py-3 mb-4 border-bottom">
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none">
<img class="bi me-2" width="40" height="32" src="img/blackmage.svg" alt="Site icon">
<span class="fs-4">onFOSS-LAN hosted by HOSTEDBYNAME</span>
</a>
<ul class="nav nav-pills">
<li class="nav-item"><a href="index.html" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="tournament.html" class="nav-link">Tournament</a></li>
<li class="nav-item"><a href="schedule.html" class="nav-link">Schedule</a></li>
<li class="nav-item"><a href="help.html" class="nav-link active">Help</a></li>
<li class="nav-item"><a href="admin.html" class="nav-link">Admin</a></li>
</ul>
</header>
</nav>
<div class="container">
<div class="row">
<div class="col-md-8">
<h1>UFO: Alien Invasion</h1>
<p>Squad-based turn-based tactical strategy game in the tradition of the old X-COM PC games</p>
<img src="img/ufoai.png" alt="UFO: Alien Invasion">
<h2>Getting the game</h2>
<div class="download"><a href="https://ufoai.org/wiki/Download">DOWNLOAD</a></div>
<p>The download page only has binaries for Linux and Windows. We compiled the macOS version ourselves. To download, open the Terminal and type the following:</p>
---
layout: help
game: ufoai
---
<p>The download page only has binaries for Linux and Windows. We compiled the macOS version ourselves. Download: <a href="https://www.jottacloud.com/s/2277232ff2022034678bafb62b3c9b7ef3a">ufoai-macos.tar.bz2</a></p>
<p>Then open the Terminal and type the following:</p>
<pre>
curl -O https://play.jarno.ca/ufoai-macos.tar.bz2
tar xf ufoai-macos.tar.bz2
cd dist
./ufo
@ -52,18 +18,8 @@ cd dist
</ul>
<h2>Connecting</h2>
<p>Click on Multiplayer. You'll need to create a team before you can do anything, so click on Team and then Generate New Team and choose the type you want.</p>
<img src="img/help_ufoai.png" alt="Generating a new team" class="img-fluid">
<img src="assets/img/help_ufoai.png" alt="Generating a new team" class="img-fluid">
<p>Click no the done button at the very bottom right if you are happy with it. You'll return to the multiplayer menu</p>
<p>Click on Join and type DOMAINNAME in the field for Connect to IP and click Connect.</p>
<img src="img/help_ufoai_connect.png" alt="Joining the UFO:AI server" class="img-fluid">
<p>Click on Join and type {{ site.content.domain_name }} in the field for Connect to IP and click Connect.</p>
<img src="assets/img/help_ufoai_connect.png" alt="Joining the UFO:AI server" class="img-fluid">
<p>You'll see a summary of the server. Click on Connect to connect.</p>
</div>
<div class="col-6 col-md-4">
<h5>Live stats</h5>
SERVERSTATE
</div>
</div>
</div>
</body>
</html>

View File

@ -1,41 +1,7 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Game server</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/serverstats.css">
<link rel="stylesheet" href="css/help.css">
<link rel="icon" href="icon.svg" sizes="any" type="image/svg+xml">
<script src="https://d3js.org/d3.v7.min.js"></script>
<script src="js/serverstats.js"></script>
</head>
<body>
<nav class="container">
<header class="d-flex flex-wrap justify-content-center py-3 mb-4 border-bottom">
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none">
<img class="bi me-2" width="40" height="32" src="img/blackmage.svg" alt="Site icon">
<span class="fs-4">onFOSS-LAN hosted by HOSTEDBYNAME</span>
</a>
<ul class="nav nav-pills">
<li class="nav-item"><a href="index.html" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="tournament.html" class="nav-link">Tournament</a></li>
<li class="nav-item"><a href="schedule.html" class="nav-link">Schedule</a></li>
<li class="nav-item"><a href="help.html" class="nav-link active">Help</a></li>
<li class="nav-item"><a href="admin.html" class="nav-link">Admin</a></li>
</ul>
</header>
</nav>
<div class="container">
<div class="row">
<div class="col-md-8">
<h1>Unvanquished</h1>
<p>First-person shooter of aliens vs humans. There are several classes and it's possible to build structures.</p>
<img src="img/unvanquished.png" alt="Screenshot of Unvanquished">
<h2>Getting the game</h2>
<div class="download"><a href="https://unvanquished.net/download/">DOWNLOAD</a></div>
---
layout: help
game: unvanquished
---
<h2>Tips</h2>
<ul>
<li>
@ -50,15 +16,5 @@
</ul>
<h2>Connecting</h2>
<p>Set your in-game name by clicking on &quot;Player&quot; under &quot;Options&quot;.</p>
<p>To connect to the server, press ~ to open the console and type &quot;connect DOMAINNAME&quot;</p>
<img src="img/help_unvanquished.png" alt="In-game terminal connecting to the game server" class="img-fluid">
</div>
<div class="col-6 col-md-4">
<h5>Live stats</h5>
SERVERSTATE
</div>
</div>
</div>
</body>
</html>
<p>To connect to the server, press ~ to open the console and type &quot;connect {{ site.content.domain_name }}&quot;</p>
<img src="assets/img/help_unvanquished.png" alt="In-game terminal connecting to the game server" class="img-fluid">

View File

@ -1,41 +1,7 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Game server</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/serverstats.css">
<link rel="stylesheet" href="css/help.css">
<link rel="icon" href="icon.svg" sizes="any" type="image/svg+xml">
<script src="https://d3js.org/d3.v7.min.js"></script>
<script src="js/serverstats.js"></script>
</head>
<body>
<nav class="container">
<header class="d-flex flex-wrap justify-content-center py-3 mb-4 border-bottom">
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none">
<img class="bi me-2" width="40" height="32" src="img/blackmage.svg" alt="Site icon">
<span class="fs-4">onFOSS-LAN hosted by HOSTEDBYNAME</span>
</a>
<ul class="nav nav-pills">
<li class="nav-item"><a href="index.html" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="tournament.html" class="nav-link">Tournament</a></li>
<li class="nav-item"><a href="schedule.html" class="nav-link">Schedule</a></li>
<li class="nav-item"><a href="help.html" class="nav-link active">Help</a></li>
<li class="nav-item"><a href="admin.html" class="nav-link">Admin</a></li>
</ul>
</header>
</nav>
<div class="container">
<div class="row">
<div class="col-md-8">
<h1>Xonotic</h1>
<p>First-person shooter where players compete in a 3D world. It features Battle Royale mode.</p>
<img src="img/xonotic.png" alt="Screenshot of Xonotic">
<h2>Getting the game</h2>
<div class="download"><a href="https://xonotic.org/download/">DOWNLOAD</a></div>
---
layout: help
game: xonotic
---
<p>Note that the download has the executable for all OS inside of it.</p>
<h2>Tips</h2>
<ul>
@ -56,17 +22,7 @@
</p>
<p>
To connect to the game server, click on the &quot;Servers&quot;
button. At the bottom of the screen you can fill in DOMAINNAME in
button. At the bottom of the screen you can fill in {{ site.content.domain_name }} in
the Address field. Then press Join.
</p>
<img src="img/help_xonotic.png" alt="Server name input in Xonotic" class="img-fluid">
</div>
<div class="col-6 col-md-4">
<h5>Live stats</h5>
SERVERSTATE
</div>
</div>
</div>
</body>
</html>
<img src="assets/img/help_xonotic.png" alt="Server name input in Xonotic" class="img-fluid">

View File

@ -1,39 +1,11 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>onFOSS-LAN</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/serverstats.css">
<link rel="icon" href="icon.svg" sizes="any" type="image/svg+xml">
<script src="https://d3js.org/d3.v7.min.js"></script>
<script src="js/serverstats.js"></script>
</head>
<body>
<nav class="container">
<header class="d-flex flex-wrap justify-content-center py-3 mb-4 border-bottom">
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none">
<img class="bi me-2" width="40" height="32" src="img/blackmage.svg" alt="Site icon">
<span class="fs-4">onFOSS-LAN hosted by HOSTEDBYNAME</span>
</a>
<ul class="nav nav-pills">
<li class="nav-item"><a href="index.html" class="nav-link active" aria-current="page">Home</a></li>
<li class="nav-item"><a href="tournament.html" class="nav-link">Tournament</a></li>
<li class="nav-item"><a href="schedule.html" class="nav-link">Schedule</a></li>
<li class="nav-item"><a href="help.html" class="nav-link">Help</a></li>
<li class="nav-item"><a href="admin.html" class="nav-link">Admin</a></li>
</ul>
</header>
</nav>
<div class="container">
<div class="row">
<div class="col-md-8">
---
layout: default
nav_pill: home
---
<h1>About onFOSS-LAN</h1>
<p>
onFOSS-LAN is a online, "Free (as Freedom) and Open Source" LAN-Party
hosted by HOSTEDBYNAME. The goal is to get people together, enjoying the
hosted by {{ site.content.hosted_by_name }}. The goal is to get people together, enjoying the
art of computer games and having a great time in these days. The FOSS
community is a place of being open minded and acceptance to all
different kinds of people with the focus of fully transparent systems
@ -43,119 +15,44 @@
</p>
<p>This concept was originally started at <a href="https://onfoss.hribhrib.at/">hribhrib.at</a></p>
<h1>Next event</h1>
<p>Coming soon!</p>
<h1>Communication</h1>
{% assign sitetime = site.time | date: "%FT%T" %}
{% assign upcoming = site.data.events | where_exp: "item", "item.date >= sitetime" | last %}
{% if upcoming %}
<h4>{{ upcoming.date | date: "%A %e %B %Y, %R" }} UTC</h4>
<script>var zone = new Date().toLocaleTimeString('en-ca',{timeZoneName:'short'}).split(' ')[2];d=new Date("{{ upcoming.date | date_to_rfc822 }}");document.writeln("<p>(Local time: "+d.toTimeString()+")</p>")</script>
<p>See <a href="schedule.html">schedule</a> for more information.</p>
{% else %}
<p>No next event has been scheduled yet.</p>
{% endif %}
<h1 id="communication">Communication</h1>
<p>We use Mumble voice chat on <a href="mumble://hribhrib.at">mumble://hribhrib.at</a>. It is the main mode of cummunication during the event.</p>
<p>Matrix chat on <a href="https://matrix.to/&#35;/&#35;xmpp_onfoss_conference.hribhrib.at:matrix.org">#xmpp_onfoss_conference.hribhrib.at:matrix.org</a></p>
<p>XMPP chat on <a href="xmpp:onfoss@conference.hribhrib.at?join">onfoss@conference.hribhrib.at</a></p>
<p>We also have regular text chat for any time use. You can choose the protocol you like and the program you like, they all point to the same thing in the end</p>
<ul>
<li>Matrix chat on <a href="https://matrix.to/#/#irc_#onfoss:matrix.f-hub.org">#irc_#onfoss:matrix.f-hub.org</a></li>
<li>XMPP chat on <a href="https://xmpp.f-hub.org/##onfoss@irc.f-hub.org?join">#onfoss@irc.freegamedev.net</a></li>
<li>IRC chat on <a href="ircs://irc.freegamedev.net:6697/#onfoss">#onfoss@irc.freegamedev.net</a></li>
</ul>
<p>See the <a href="help.html">help page</a> for more information on how to connect to these services.</p>
<h1>Games</h1>
<p>There are a few game servers running. To connect, simply start the game and connect to this domain. See also the <a href="help.html">Help</a> section for more information.</p>
<table class="table">
<tbody>
{% assign sorted_games = site.data.games | sort: "title" %}
{% for game in sorted_games %}
<tr>
<td><a href="help_armagetron.html"><img src="img/armagetron.png" height="64" alt="Tiny screenshot of Armagetron Advanced"></a></td>
<td>Armagetron Advanced</td>
<td>Drive your lightcycle and leave a lightwall behind you. Survive as
long as you can and try to make other run into walls.</td>
<td><a href="help_armagetron.html">More info</a></td>
</tr>
<tr>
<td><a href="help_bzflag.html"><img src="img/bzflag.png" height="64" alt="Tiny screenshot of Bzflag"></a></td>
<td>Bzflag</td>
<td>Drive around in a tank that can jump, trying to shoot your opponents while dodging their bullets.</td>
<td><a href="help_bzflag.html">More info</a></td>
</tr>
<tr>
<td><a href="help_hedgewars.html"><img src="img/hedgewars.png" height="64" alt="Tiny screenshot of Hedgewars"></a></td>
<td>Hedgewars</td>
<td>Worms-like game where your team of hedgehogs needs to destroy the other teams using the ludicrous arsenal at their disposal.</td>
<td><a href="help_hedgewars.html">More info</a></td>
</tr>
<tr>
<td><a href="help_lix.html"><img src="img/lix.png" height="64" alt="Tiny screenshot of Lix"></a></td>
<td>Lix</td>
<td>Lemmings-like game where you need to guide your little people to safety despite their best efforts of wandering into things that will kill them.</td>
<td><a href="help_lix.html">More info</a></td>
</tr>
<tr>
<td><a href="help_mindustry.html"><img src="img/mindustry.png" height="64" alt="Tiny screenshot of Mindustry"></a></td>
<td>Mindustry</td>
<td>A building and tower defence game where you build up an industry and defences against ever larger waves of enemies.</td>
<td><a href="help_mindustry.html">More info</a></td>
</tr>
<tr>
<td><a href="help_openhv.html"><img src="img/openhv.png" height="64" alt="Tiny screenshot of OpenHV"></a></td>
<td>OpenHV</td>
<td>Real-time strategy game where you mine resources and build units to attack and defend.</td>
<td><a href="help_openhv.html">More info</a></td>
</tr>
<tr>
<td><a href="help_openspades.html"><img src="img/openspades.png" height="64" alt="Tiny screenshot of OpenSpades"></a></td>
<td>OpenSpades</td>
<td>Mix between a first person shooter and Minecraft. Build defence structures, dig many tunnels or go on the offensive.<br><mark>Warning:</mark> uses potentially non-open assets.</td>
<td><a href="help_openspades.html">More info</a></td>
</tr>
<tr>
<td><a href="help_shatteredparadise.html"><img src="img/shatteredparadise.png" height="64" alt="Tiny screenshot of Shattered Paradise"></a></td>
<td>Shattered Paradise</td>
<td>Real-time strategy game where you mine resources and build units to attack and defend.</td>
<td><a href="help_shatteredparadise.html">More info</a></td>
</tr>
<tr>
<td><a href="help_soldat.html"><img src="img/soldat.png" height="64" alt="Tiny screenshot of Soldat"></a></td>
<td>Soldat</td>
<td>Fast-paced 2D side-scrolling shooter game where you have a big gun and a jetpack.</td>
<td><a href="help_soldat.html">More info</a></td>
</tr>
<tr>
<td><a href="help_supertuxkart.html"><img src="img/supertuxkart.png" height="64" alt="Tiny screenshot of SuperTuxKart"></a></td>
<td>SuperTuxKart</td>
<td>Kart racing game where you can use the various power-ups to give yourself a boost of hinder your opponents.</td>
<td><a href="help_supertuxkart.html">More info</a></td>
</tr>
<tr>
<td><a href="help_supertuxparty.html"><img src="img/supertuxparty.png" height="64" alt="Tiny screenshot of Super Tux Party"></a></td>
<td>Super Tux Party</td>
<td>Turn-based party game where you challenge other player in real-time mini games.</td>
<td><a href="help_supertuxparty.html">More info</a></td>
</tr>
<tr>
<td><a href="help_teeworlds.html"><img src="img/teeworlds.png" height="64" alt="Tiny screenshot of Teeworlds"></a></td>
<td>Teeworlds</td>
<td>Fast-paced 2D side-scrolling shooter game where you have a big gun and a grappling hook.</td>
<td><a href="help_teeworlds.html">More info</a></td>
</tr>
<tr>
<td><a href="help_ufoai.html"><img src="img/ufoai.png" height="64" alt="Tiny screenshot of UFO: Alien Invasion"></a></td>
<td>UFO: Alien Invasion</td>
<td>Squad-based turn-based tactical strategy game in the tradition of the old X-COM PC games</td>
<td><a href="help_ufoai.html">More info</a></td>
</tr>
<tr>
<td><a href="help_unvanquished.html"><img src="img/unvanquished.png" height="64" alt="Tiny screenshot of Unvanquished"></a></td>
<td>Unvanquished</td>
<td>First-person shooter of aliens vs humans. There are several classes and it's possible to build structures.</td>
<td><a href="help_unvanquished.html">More info</a></td>
</tr>
<tr>
<td><a href="help_xonotic.html"><img src="img/xonotic.png" height="64" alt="Tiny screenshot of Xonotic"></a></td>
<td>Xonotic</td>
<td>First-person shooter where players compete in a 3D world. It features Battle Royale mode.</td>
<td><a href="help_xonotic.html">More info</a></td>
<td><a href="help_{{ game.name }}.html"><img src="assets/img/{{ game.name }}.png" height="64" alt="Tiny screenshot of {{ game.title }}"></a></td>
<td>{{ game.title }}</td>
<td>
{{ game.description }}
{% if game.warning %}
<br><mark>Warning:</mark> {{ game.warning }}
{% endif %}
</td>
<td><a href="help_{{ game.name }}.html">More info</a></td>
</tr>
{% endfor %}
</tbody>
</table>
<p>Enjoy!</p>
<h1>Code</h1>
<p>Code for setting up server is on <a href="https://git.libregaming.org/DeathByDenim/gameserver">git.libregaming.org</a> and is licensed under the AGPLv3 or later.</p>
</div>
<div class="col-6 col-md-4">
<h5>Live stats</h5>
SERVERSTATE
</div>
</div>
</div>
</body>
</html>

View File

@ -1,3 +1,5 @@
---
---
// Collection of scripts to deploy a server hosting several open-source games
// Copyright (C) 2022 Jarno van der Kolk
//
@ -14,7 +16,7 @@
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
function createConsole(root, game_name, text_colour_function, initial_command, help_url, tooltip) {
function createConsole(root, game_name, game_title, text_colour_function, initial_command, help_url, tooltip) {
const div_card = document.createElement('div');
const div_card_header = document.createElement('div');
const h5 = document.createElement('h5');
@ -33,7 +35,7 @@ function createConsole(root, game_name, text_colour_function, initial_command, h
div_card_header.className = "card-header";
h5.className = "mb-0";
card_button.className = "btn btn-link";
card_button.innerText = game_name[0].toUpperCase() + game_name.substr(1);
card_button.innerText = game_title;
div_collapse.className = "collapse";
div_card_body.className = "card-body";
@ -88,7 +90,7 @@ function createConsole(root, game_name, text_colour_function, initial_command, h
});
// Create WebSocket connection.
const socket = new WebSocket("wss://DOMAINNAME/" + game_name)
const socket = new WebSocket("ws{% if site.content.ssl %}s{% endif %}://{{ site.content.domain_name }}/" + game_name)
// Connection opened
socket.addEventListener('open', function (event) {
@ -109,64 +111,20 @@ function createConsole(root, game_name, text_colour_function, initial_command, h
}
function consoles_init() {
document.cookie = 'token=MD5GAMEPASSWORD; SameSite=Strict';
document.cookie = 'token={{ site.content.md5password }}; SameSite=Strict';
const root = document.getElementById('console-div');
{% assign games_with_consoles = site.data.games | where_exp: "item", "item.has_console" | sort: "name" %}
{% for game in games_with_consoles %}
createConsole(
root,
'armagetronad',
convertTerminalCodeToHtml,
'players',
'http://wiki.armagetronad.org/index.php?title=Console_Commands',
"Helpful commands:\n• players\tShow current players\n• kick <name>\tKick the player\n• num_ais <num>\tSet the number of AIs for games with more than one player.\n• limit_rounds\tEnd the match after this number of rounds"
);
createConsole(
root,
'bzflag',
convertTerminalCodeToHtml,
'/playerlist',
'https://wiki.bzflag.org/Slash_Commands',
"Helpful commands:\n• /playerlist\tDisplay list of players\n• /kick <name>\tKick the player\n• /gameover\tend the current game"
);
createConsole(
root,
'mindustry',
convertTerminalCodeToHtml,
'status',
'https://mindustrygame.github.io/wiki/servers/#dedicated-server-commands',
"Helpful commands:\n• status\tDisplay server status\n• runwave\tTrigger the next wave\n• kick <name>\tKick a person by name"
);
createConsole(
root,
'opensoldat',
convertTerminalCodeToHtml,
'',
'https://static.soldat.pl/man/manual-en.html#KOMENDY',
"Helpful commands:\n• /nextmap\tSwitch to next map\n• kick /<name>\tKick a person"
);
createConsole(
root,
'teeworlds',
convertTerminalCodeToHtml,
'status',
'https://www.teeworlds.com/?page=docs&wiki=server_commands',
"Helpful commands:\n• status\tDisplay server status\n• change_map <mapname>\tSwitch to <mapname>\n• kick <id>\tKick a person by id"
);
createConsole(
root,
'unvanquished',
convertDaemonedCodeToHtml,
'/status',
'https://wiki.unvanquished.net/wiki/Server/Running#Commands',
"Helpful commands:\n• /listplayers\tList current players in-game\n• /kick <name>\tKick the player\n• /nextmap\tGo to the next map in the rotation"
);
createConsole(
root,
'xonotic',
convertTerminalCodeToHtml,
'who',
'https://gitlab.com/xonotic/xonotic/-/wikis/Basic-server-configuration',
"Helpful commands:\n• who\tList current players in-game\n• kick <name>\tKick the player\n• gotomap <name>\tGo to the specified map"
'{{ game.name }}',
'{{ game.title }}',
convert{{ game.console_output_coloring }}CodeToHtml,
'{{ game.console_initial_command }}',
'{{ game.console_help_link }}',
"Helpful commands:\n{% for command in game.console_example_commands %}• {{ command[0] }}\t{{ command[1] }}\n{% endfor %}"
);
{% endfor %}
collapse_init();
}

View File

@ -1,3 +1,5 @@
---
---
// Collection of scripts to deploy a server hosting several open-source games
// Copyright (C) 2022 Jarno van der Kolk
//
@ -12,7 +14,7 @@
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
// along with this program. If not, see <http://www.gnu.org/licenses/>.
let heightScale = d3.scaleLinear()
.domain([0,100])
@ -51,7 +53,7 @@ function updateGraph(data, svgid, property_class, property) {
}
function update() {
d3.json('https://DOMAINNAME/monitoring/all').then(function(data){
d3.json('http{% if site.content.ssl %}s{% endif %}://{{ site.content.domain_name }}/monitoring/all').then(function(data){
updateGraph(data, '#memgraph', 'mem', 'm');
updateGraph(data, '#cpugraph', 'cpu', 'c');
});

96
website/js/xonscore.js Normal file
View File

@ -0,0 +1,96 @@
async function xonoticGetScores() {
const data = await fetch("xonscore.txt");
const text = await data.text();
let stats = [];
let map_name = "[unknown]";
let duration_in_seconds = 0;
let labels = [];
let round_stats = [];
text.split("\n").forEach((row) => {
const fields = row.split(":");
if(fields.length > 1) {
const verb = fields[1]
switch(verb) {
case "scores":
map_name = fields[2];
duration_in_seconds = fields[3];
break;
case "labels":
if(fields[2] === "player") {
labels = fields[3].split(",");
}
break;
case "player":
if(fields[2] === "see-labels") {
let split_fields = fields[3].split(",");
let player_stats = {name: fields[6]};
for(let i = 0; i < labels.length; i++) {
if(labels[i] != "") {
player_stats[labels[i]] = split_fields[i]
}
}
round_stats.push(player_stats);
}
break;
case "end":
if(round_stats.length > 0) {
stats.push({
map_name: map_name,
duration_in_seconds: duration_in_seconds,
stats: round_stats
})
}
round_stats = [];
labels = [];
duration_in_seconds = 0;
map_name = "";
break;
}
}
})
return stats;
}
function xonoticScoreUpdate() {
xonoticGetScores().then((data) => {
let tables = d3.select("#xonotic-results")
.selectAll("table")
.data(data)
.join(
(enter) => {
let table = enter.append("table");
let thead = table.append("thead");
thead.append("tr")
.append("th")
.attr("colspan", 5)
.text((d) => "Map name: " + d.map_name);
let headerrows = thead.append("tr");
["Name", "Score", "Kills", "Deaths", "Suicides"].forEach((col) => {
headerrows.append("th").text(col);
})
table.append("tbody");
return table;
},
(update) => {
let u = update;
u.select("th").text((d) => "Map name: " + d.map_name);
return u;
},
(exit) => exit.remove()
)
.classed("table", true);
let tbodies = tables.select('tbody');
tbodies.selectAll("tr")
.data((d) => d.stats)
.join("tr")
.selectAll("td")
.data((d) => ["name", "score!!", "kills", "deaths<", "suicides<"].map((col) => d[col]))
.join("td")
.text((d) => d);
});
}

View File

@ -1,65 +1,16 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Game server</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/serverstats.css">
<link rel="icon" href="icon.svg" sizes="any" type="image/svg+xml">
<script src="https://d3js.org/d3.v7.min.js"></script>
<script src="js/serverstats.js"></script>
</head>
<body>
<nav class="container">
<header class="d-flex flex-wrap justify-content-center py-3 mb-4 border-bottom">
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none">
<img class="bi me-2" width="40" height="32" src="img/blackmage.svg" alt="Site icon">
<span class="fs-4">onFOSS-LAN hosted by HOSTEDBYNAME</span>
</a>
<ul class="nav nav-pills">
<li class="nav-item"><a href="index.html" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="tournament.html" class="nav-link">Tournament</a></li>
<li class="nav-item"><a href="schedule.html" class="nav-link active">Schedule</a></li>
<li class="nav-item"><a href="help.html" class="nav-link">Help</a></li>
<li class="nav-item"><a href="admin.html" class="nav-link">Admin</a></li>
</ul>
</header>
</nav>
<div class="container">
<div class="row">
<div class="col-md-8">
---
layout: default
nav_pill: schedule
---
<h1>Schedule</h1>
{% assign sitetime = site.time | date: "%FT%T" %}
{% assign past = site.data.events | where_exp: "item", "item.date < sitetime" %}
{% assign upcoming = site.data.events | where_exp: "item", "item.date >= sitetime" %}
<h2>Upcoming</h2>
<h4>Saturday 1 October 2022, 12:00 UTC</h4>
<script>var zone = new Date().toLocaleTimeString('en-ca',{timeZoneName:'short'}).split(' ')[2];d=new Date("Sat, 01 Oct 2022 12:00:00 UTC");document.writeln("<p>(Local time: "+d.toTimeString()+")</p>")</script>
<p>onFOSS-LAN hosted by HOSTEDBYNAME</p>
<ul>
<li>12:00UTC Get and chill together<script>d=new Date("Sat, 01 Oct 2022 12:00:00 UTC");document.writeln(" ("+ Intl.DateTimeFormat(undefined, {hour: '2-digit', minute: '2-digit', timeZoneName: 'short'}).format(d) + ")")</script></li>
<li>13:00UTC New to onFOSS-LAN<script>d=new Date("Sat, 01 Oct 2022 13:00:00 UTC");document.writeln(" ("+ Intl.DateTimeFormat(undefined, {hour: '2-digit', minute: '2-digit', timeZoneName: 'short'}).format(d) + ")")</script></li>
<ul>
<li>UFO:AI</li>
<li>Soldat</li>
</ul>
<li>15:30UTC Break<script>d=new Date("Sat, 01 Oct 2022 15:30:00 UTC");document.writeln(" ("+ Intl.DateTimeFormat(undefined, {hour: '2-digit', minute: '2-digit', timeZoneName: 'short'}).format(d) + ")")</script></li>
<li>16:00UTC SuperTuxKart Tournament<script>d=new Date("Sat, 01 Oct 2022 16:00:00 UTC");document.writeln(" ("+ Intl.DateTimeFormat(undefined, {hour: '2-digit', minute: '2-digit', timeZoneName: 'short'}).format(d) + ")")</script></li>
<li>18:00UTC Break<script>d=new Date("Sat, 01 Oct 2022 18:00:00 UTC");document.writeln(" ("+ Intl.DateTimeFormat(undefined, {hour: '2-digit', minute: '2-digit', timeZoneName: 'short'}).format(d) + ")")</script></li>
<li>18:30UTC Good old classics<script>d=new Date("Sat, 01 Oct 2022 18:30:00 UTC");document.writeln(" ("+ Intl.DateTimeFormat(undefined, {hour: '2-digit', minute: '2-digit', timeZoneName: 'short'}).format(d) + ")")</script></li>
<ul>
<li>Lix</li>
<li>Hedgewars</li>
</ul>
<li>20:30UTC Late night gaming<script>d=new Date("Sat, 01 Oct 2022 20:30:00 UTC");document.writeln(" ("+ Intl.DateTimeFormat(undefined, {hour: '2-digit', minute: '2-digit', timeZoneName: 'short'}).format(d) + ")")</script></li>
</ul>
{% for event in upcoming %}
{% include event.html %}
{% endfor %}
<h2>Past</h2>
</div>
<div class="col-6 col-md-4">
<h5>Live stats</h5>
SERVERSTATE
</div>
</div>
</div>
</body>
</html>
{% for event in past %}
{% include event.html %}
{% endfor %}

View File

@ -1,47 +0,0 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>onFOSS-LAN</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/serverstats.css">
<link rel="icon" href="icon.svg" sizes="any" type="image/svg+xml">
<script src="https://d3js.org/d3.v7.min.js"></script>
<script src="js/serverstats.js"></script>
</head>
<body>
<nav class="container">
<header class="d-flex flex-wrap justify-content-center py-3 mb-4 border-bottom">
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none">
<img class="bi me-2" width="40" height="32" src="img/blackmage.svg" alt="Site icon">
<span class="fs-4">onFOSS-LAN hosted by HOSTEDBYNAME</span>
</a>
<ul class="nav nav-pills">
<li class="nav-item"><a href="index.html" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="tournament.html" class="nav-link">Tournament</a></li>
<li class="nav-item"><a href="schedule.html" class="nav-link">Schedule</a></li>
<li class="nav-item"><a href="help.html" class="nav-link">Help</a></li>
<li class="nav-item"><a href="admin.html" class="nav-link">Admin</a></li>
</ul>
</header>
</nav>
<div class="container">
<div class="row">
<div class="col-md-8">
<h1>Thanks!</h1>
<p>
The form has been successfully submitted. Your donation will not
appear right away since it's a bit of a manual process!
</p>
</div>
<div class="col-6 col-md-4">
<h5>Live stats</h5>
SERVERSTATE
</div>
</div>
</div>
</body>
</html>

View File

@ -1,45 +1,49 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Game server</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/serverstats.css">
<link rel="icon" href="icon.svg" sizes="any" type="image/svg+xml">
<script src="https://d3js.org/d3.v7.min.js"></script>
<script src="js/serverstats.js"></script>
</head>
<body>
<nav class="container">
<header class="d-flex flex-wrap justify-content-center py-3 mb-4 border-bottom">
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none">
<img class="bi me-2" width="40" height="32" src="img/blackmage.svg" alt="Site icon">
<span class="fs-4">onFOSS-LAN hosted by HOSTEDBYNAME</span>
</a>
<ul class="nav nav-pills">
<li class="nav-item"><a href="index.html" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="tournament.html" class="nav-link active">Tournament</a></li>
<li class="nav-item"><a href="schedule.html" class="nav-link">Schedule</a></li>
<li class="nav-item"><a href="help.html" class="nav-link">Help</a></li>
<li class="nav-item"><a href="admin.html" class="nav-link">Admin</a></li>
</ul>
</header>
</nav>
<div class="container">
<div class="row">
<div class="col-md-8">
---
layout: default
nav_pill: tournament
---
<script src="js/xonscore.js"></script>
<h1>Tournament</h1>
<h2>Upcoming 1 October 2022</h2>
<p>SuperTuxKart: Grand Prix</p>
</div>
<div class="col-6 col-md-4">
<h5>Live stats</h5>
SERVERSTATE
</div>
</div>
</div>
</body>
</html>
{% assign sitetime = site.time | date: "%FT%T" %}
{% assign nextevent = site.data.events | where_exp: "item", "item.date >= sitetime" | last %}
{% assign tournaments = nextevent.games | where_exp: "item", "item.tournament" %}
{% if tournaments and tournaments.size != 0 %}
<script>
var event_year = {{ nextevent.date | date: "%Y" }};
var event_month = {{ nextevent.date | date: "%M" }};
var event_day = {{ nextevent.date | date: "%M" }};
</script>
<p>There will be a tournament for the next event on {{ nextevent.date | date: "%a, %b %d, %Y" }}</p>
<ul>
{% for game in tournaments %}
{% assign time = game.time | split: ":"%}
{% if game.time %}
<li>{{ game.time }}UTC {{ game.title }}<script>d=new Date(Date.UTC(event_year, event_month, event_day, {{ time | slice: 0 }}, {{ time | slice: 1 }}));document.writeln(" ("+ Intl.DateTimeFormat(undefined, {hour: '2-digit', minute: '2-digit', timeZoneName: 'short'}).format(d) + ")")</script></li>
{% else %}
<li>{{ game.title }}</li>
{% endif %}
{% endfor %}
</ul>
<div id="xonotic-results"></div>
<script>
if(typeof d3 === 'undefined') {
document.write('<p><a href="xonscore.csv">Results</a> (allow access to d3js.org for dynamic updates)</p>');
}
else {
xonoticScoreUpdate();
setInterval(xonoticScoreUpdate, 10000);
}
</script>
<noscript><p><a href="xonscore.csv">Results</a> (Enable JavaScript for dynamic updates)</p></noscript>
{% else %}
<p>No tournaments have been planned for the next event.</p>
{% endif %}
<h2>Rules</h2>
<p>By joining the tournament you accept following rules:</p>
<h3>MOST IMPORTANT!</h3>
<p>The most important rule is: HAVE FUN! Surely, the tournament is competitive, however, don't forget why we are all here - to have fun playing games together!</p>
<h3>NO CHEATING!</h3>
<p>If you cheat you will get banned from this and all upcoming tournaments! Cheating is: manipulating the game for your advantage. So any third-party tool that helps you is not allowed! Due to the blessing that FOSS games can be modified, modifications that give you an advantage are also considered cheating! So use the official binaries to play the tournament! If no binaries are available and you have to compile it on your own you are not allowed to modify the source. If there is any confusion <a href="index.html#communication">contact us</a> in advance and we will find a solution.</p>
<h3>NO GRIEFING!</h3>
<p>Griefers are going to be kicked immediately and if it happens frequently you will get banned from upcoming tournaments. We are all human beings and hopefully capable of being nice to each other! So respect each other and there will not be any problems!</p>
<p>Leaving the tournament while it is still ongoing while you still have rounds to play is also not very nice.</p>