summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--games/iortcw/README53
-rw-r--r--games/iortcw/doinst.sh3
-rw-r--r--games/iortcw/iortcw-mp.desktop9
-rw-r--r--games/iortcw/iortcw.SlackBuild303
-rw-r--r--games/iortcw/iortcw.desktop9
-rw-r--r--games/iortcw/iortcw.info20
-rw-r--r--games/iortcw/iortcw.pngbin0 -> 6406 bytes
-rw-r--r--games/iortcw/launcher.iortcw3
-rw-r--r--games/iortcw/launcher.iortcw-mp3
-rw-r--r--games/iortcw/patches/Makefile-MP-1.5a-remove-ref-to-git-index-file.patch15
-rw-r--r--games/iortcw/patches/Makefile-SP-1.5a-remove-ref-to-git-index-file.patch15
-rw-r--r--games/iortcw/slack-desc19
12 files changed, 452 insertions, 0 deletions
diff --git a/games/iortcw/README b/games/iortcw/README
new file mode 100644
index 0000000000..95aa4e64f0
--- /dev/null
+++ b/games/iortcw/README
@@ -0,0 +1,53 @@
+iortcw (Game engine for Return To Castle Wolfenstein)
+
+iortcw is an updated game engine for Return To Caste Wolfenstein
+based on the open source ioquake3 engine.
+
+Some of the features currently implemented are :
+
+ * SDL backend
+ * OpenAL sound API support (multiple speaker support and better sound)
+ * Full x86_64 support
+ * VoIP support, both in-game and external support through Mumble
+ * AVI video capture of demos
+ * Much improved console autocompletion
+ * Persistent console history
+ * Colorized terminal output
+ * Optional Ogg Vorbis support
+ * Much improved QVM tools
+ * PNG support
+
+You can enable/disable features by passing variables to the
+script (ie. VAR=yes/no ./iortcw.SlackBuild) :
+
+ INSTALL_COMMON_DATA=yes|no (default=yes)
+ Enable/disable installation of RTCW 1.41 patch data.
+
+ LANG=no|de|fr|es|it (default=no)
+ When INSTALL_COMMON_DATA=yes, define which language-specific
+ patches (for single player) must be installed :
+
+ no : do not install any language-specific patches
+ de : install german language-specific patches
+ fr : install french language-specific patches
+ es : install spanish language-specific patches
+ it : install italian language-specific patches
+
+ _USE_INTERNAL_LIBS=yes|no (default=no)
+ Define whether iortcw must be or not build and linked against
+ internal libraries (zlib, jpeg, ogg, opus).
+
+To play Return To Castle Wolfenstein, you need to copy the original
+game files (ie *.pk3) from CD/windows install/steamCDM in directory
+/usr/share/games/rtcw/main.
+
+Note that, when RTCW 1.41 patch data are included into iortcw
+package (see INCLUDE_COMMON_DATA), you only need to copy the
+following orignal game files in /usr/share/games/rtcw/main :
+
+ mp_pak0.pk3
+ mp_pak1.pk3
+ mp_pak2.pk3
+ pak0.pk3
+ sp_pak1.pk3
+ sp_pak2.pk3
diff --git a/games/iortcw/doinst.sh b/games/iortcw/doinst.sh
new file mode 100644
index 0000000000..140e332222
--- /dev/null
+++ b/games/iortcw/doinst.sh
@@ -0,0 +1,3 @@
+if [ -x /usr/bin/update-desktop-database ]; then
+ /usr/bin/update-desktop-database -q usr/share/applications
+fi
diff --git a/games/iortcw/iortcw-mp.desktop b/games/iortcw/iortcw-mp.desktop
new file mode 100644
index 0000000000..f9867e8ca5
--- /dev/null
+++ b/games/iortcw/iortcw-mp.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Name=Return To Castle Wolfentstein (Multiplayer)
+GenericName=iortcw port of Idsoftware's Return To Castle Wolfenstein
+Exec=iortcw-mp
+Terminal=false
+Type=Application
+Categories=Game;Emulator;
+Icon=iortcw
+StartupNotify=false
diff --git a/games/iortcw/iortcw.SlackBuild b/games/iortcw/iortcw.SlackBuild
new file mode 100644
index 0000000000..55226a3213
--- /dev/null
+++ b/games/iortcw/iortcw.SlackBuild
@@ -0,0 +1,303 @@
+#!/bin/sh
+
+# Slackware build script for iortcw
+
+# Copyright 2016 S. Ballet, France
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+PRGNAM=iortcw
+VERSION=${VERSION:-1.5a}
+BUILD=${BUILD:-1}
+TAG=${TAG:-_SBo}
+
+INSTALL_COMMON_DATA=${INSTALL_COMMON_DATA:-yes}
+
+ # When INSTALL_COMMON_DATA=yes, define which language-specific
+ # patches (for single player) must be installed. Can be :
+ # no (default) : do not install any language-specific patches
+ # de : install german language-specific patches
+ # fr : install french language-specific patches
+ # es : install spanish language-specific patches
+ # it : install italian language-specific patches
+ #
+LANG=${LANG:-no}
+
+ # Define whether iortcw must be build with internal libraries
+ # instead of dynamically linking against system libraries. Can
+ # be set to yes or no (default).
+ #
+ # Define whether iortcw must be or not build and linked against
+ # internal libraries (ie. zlib, jpeg, ogg, opus). Can be set
+ # to yes or no (default).
+ #
+_USE_INTERNAL_LIBS=${_USE_INTERNAL_LIBS:-no}
+
+
+if [ -z "$ARCH" ]; then
+ case "$( uname -m )" in
+ i?86) ARCH=i586 ;;
+ arm*) ARCH=arm ;;
+ *) ARCH=$( uname -m ) ;;
+ esac
+fi
+
+CWD=$(pwd)
+TMP=${TMP:-/tmp/SBo}
+PKG=$TMP/package-$PRGNAM
+OUTPUT=${OUTPUT:-/tmp}
+
+if [ "$ARCH" = "i586" ]; then
+ SLKCFLAGS="-O2 -march=i586 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "i686" ]; then
+ SLKCFLAGS="-O2 -march=i686 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "x86_64" ]; then
+ SLKCFLAGS="-O2 -fPIC"
+ LIBDIRSUFFIX="64"
+else
+ SLKCFLAGS="-O2"
+ LIBDIRSUFFIX=""
+fi
+
+set -e
+
+rm -rf $PKG
+mkdir -p $TMP $PKG $OUTPUT
+cd $TMP
+rm -rf $PRGNAM-$VERSION
+tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
+cd $PRGNAM-$VERSION
+
+if [ "$INSTALL_COMMON_DATA" = "yes" ] ; then
+
+ # Extract common game data file in ./common-game-data :
+ #
+ # * game data files to extract from $CWD/patch-data-141.zip archive :
+ # main/mp_bin.pk3
+ # main/mp_pak3.pk3
+ # main/mp_pak4.pk3
+ # main/mp_pak5.pk3
+ # main/mp_pakmaps0.pk3
+ # main/mp_pakmaps1.pk3
+ # main/mp_pakmaps2.pk3
+ # main/mp_pakmaps3.pk3
+ # main/mp_pakmaps4.pk3
+ # main/mp_pakmaps5.pk3
+ # main/mp_pakmaps6.pk3
+ # main/rotate.cfg
+ # main/scripts/translation.cfg
+ # main/sp_pak3.pk3
+ # main/sp_pak4.pk3
+ #
+ # * game data files to extract from $CWD/patch-data-SP_deutsch.zip when LANG=de :
+ # main/sp_pak3.pk3
+ # main/language.cfg
+ #
+ # * game data files to extract from $CWD/patch-data-SP_espanol.zip when LANG=es :
+ # main/sp_pak3.pk3
+ # main/Language.cfg
+ #
+ # * game data files to extract from $CWD/patch-data-SP_francais.zip when LANG=fr :
+ # main/sp_pak3.pk3
+ # main/language.cfg
+ #
+ # * game data files to extract from $CWD/patch-data-SP_italiano.zip when LANG=it :
+ # main/sp_pak3.pk3
+ # main/Language.cfg
+
+ unzip $CWD/patch-data-141.zip "main/*.pk3" "main/*.cfg" -d ./common-game-data
+
+ case $LANG in
+ de) unzip -o $CWD/patch-data-SP_deutsch.zip -d ./common-game-data
+ ;;
+
+ es) unzip -o $CWD/patch-data-SP_espanol.zip -d ./common-game-data
+ ;;
+
+ fr) unzip -o $CWD/patch-data-SP_francais.zip -d ./common-game-data
+ ;;
+
+ it) unzip -o $CWD/patch-data-SP_italiano.zip -d ./common-game-data
+ ;;
+ esac
+fi
+
+chown -R root:root .
+find -L . \
+ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
+ -o -perm 511 \) -exec chmod 755 {} \; -o \
+ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
+ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
+
+# The patches below are required to remove invalid references to ../.git/index
+# found in iortcw Makefiles from 1.5a source tarball.
+#
+# See https://github.com/iortcw/iortcw/issues/24
+#
+patch -p0 < $CWD/patches/Makefile-SP-1.5a-remove-ref-to-git-index-file.patch
+patch -p0 < $CWD/patches/Makefile-MP-1.5a-remove-ref-to-git-index-file.patch
+
+ # Reminder :
+ # * targets defined in SP/MP makefiles :
+ # debug, release, makedirs, clean-debug, clean-release
+ # clean2, toolsclean-debug, toolsclean-release, toolsclean2
+ # dist
+ #
+ # * Variables used by the SP/MP makefiles and their default values :
+ #
+ # Variables ! Default values
+ # ! single player ! multiplayer
+ # ----------------------------+------------------+-----------------
+ # BUILD_STANDALONE ! - ! -
+ # BUILD_CLIENT ! - ! -
+ # BUILD_SERVER ! 0 ! -
+ # BUILD_GAME_SO ! - ! -
+ # BUILD_GAME_QVM ! 0 ! -
+ # BUILD_BASEGAME ! - ! -
+ # BUILD_RENDERER_REND2 ! - ! -
+ # BUILD_ARCHIVE ! 0 ! 0
+ # CLIENTBIN ! iowolfsp ! iowolfmp
+ # SERVERBIN ! iowolfspded ! iowolfded
+ # BASEGAME ! main ! main
+ # BASEGAME_CFLAGS ! - ! -
+ # COPYDIR ! /usr/local/games/wolf
+ # TEMPDIR ! /tmp
+ # USE_OPENAL ! 1 ! 1
+ # USE_OPENAL_DLOPEN ! 1 ! 1
+ # USE_CURL ! 0 ! 0
+ # USE_CURL_DLOPEN ! 1 ! 1
+ # USE_CODEC_VORBIS ! 1 ! 1
+ # USE_CODEC_OPUS ! 1 ! 1
+ # USE_MUMBLE ! 1 ! 1
+ # USE_VOIP ! 1 ! 1
+ # USE_FREETYPE ! 1 ! 1
+ # USE_INTERNAL_LIBS ! 1 ! 1
+ # USE_INTERNAL_OGG ! ${USE_INTERNAL_LIBS}
+ # USE_INTERNAL_VORBIS ! ${USE_INTERNAL_LIBS}
+ # USE_INTERNAL_OPUS ! ${USE_INTERNAL_LIBS}
+ # USE_INTERNAL_ZLIB ! ${USE_INTERNAL_LIBS}
+ # USE_INTERNAL_JPEG ! ${USE_INTERNAL_LIBS}
+ # USE_INTERNAL_FREETYPE ! ${USE_INTERNAL_LIBS}
+ # USE_LOCAL_HEADERS ! ${USE_INTERNAL_LIBS}
+ # USE_RENDERER_DLOPEN ! 1 ! 1
+ # USE_XDG ! 0 ! 0
+ # USE_YACC ! 0 ! 0
+ # DEBUG_CFLAGS ! -g -O0 ! -g -O0
+ # USE_BLOOM ! 1 ! 1
+ # USE_OPENGLES ! 0 ! 0
+ # RASPBERRY_PI ! 0 ! 0
+ # USE_AUTHORIZE_SERVER ! 0 ! 0
+ # V (ie. verbose) ! 0 ! 0
+
+[ "$_USE_INTERNAL_LIBS" = "no" ] && _USE_INTERNAL_LIBS=0 || _USE_INTERNAL_LIBS=1
+
+ # define args that must be passed to make for better readability.
+ #
+ # Nota: even if BUILD_GAME_QVM is set to 1, qvm files are not
+ # generated on x86_64 systems.
+ #
+MAKE_ARGS="BUILD_CLIENT=1 \
+BUILD_SERVER=1 \
+BUILD_GAME_SO=1 \
+BUILD_GAME_QVM=1 \
+BUILD_BASEGAME=1 \
+BUILD_RENDERER_REND2=1 \
+USE_CURL=1 \
+USE_CURL_DLOPEN=0 \
+USE_OPENAL=1 \
+USE_OPENAL_DLOPEN=0 \
+USE_INTERNAL_LIBS=${_USE_INTERNAL_LIBS} \
+USE_CODEC_VORBIS=1 \
+USE_CODEC_OPUS=1 \
+USE_FREETYPE=1 \
+CFLAGS=\"$SLKFLAGS\" \
+COPYDIR=\"$PKG/usr/share/games/rtcw\""
+
+ # Build single player game binaries
+cd SP
+make $MAKE_ARGS release copyfiles
+
+ # Build multi player game binaries
+cd ../MP
+make $MAKE_ARGS release copyfiles
+
+find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
+ | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
+
+ # go back into rtcw source root directory, generate pk3
+ # files required by alternate renderer (ie. mp_rend2_shaders0.pk3
+ # and sp_rend2_shaders0.pk3), in $PKG/usr/share/games/rtcw/main
+ #
+cd ..
+
+(
+ cd SP/media/
+ zip -r $PKG/usr/share/games/rtcw/main/sp_rend2_shaders0.pk3 .
+)
+
+(
+ cd MP/media/
+ zip -r $PKG/usr/share/games/rtcw/main/mp_rend2_shaders0.pk3 .
+)
+
+
+if [ "$INSTALL_COMMON_DATA" = "yes" ] ; then
+ # Copy content of ./common-game-data into $PKG/usr/share/games/rtcw
+ #
+ cp -a ./common-game-data/* $PKG/usr/share/games/rtcw
+fi
+
+mkdir -p $PKG/usr/share/{applications,pixmaps}
+cat $CWD/iortcw.desktop > $PKG/usr/share/applications/iortcw.desktop
+cat $CWD/iortcw-mp.desktop > $PKG/usr/share/applications/iortcw-mp.desktop
+install -m 644 $CWD/iortcw.png $PKG/usr/share/pixmaps/iortcw.png
+
+# Add launchers
+mkdir $PKG/usr/games
+cat $CWD/launcher.iortcw > $PKG/usr/games/iortcw
+cat $CWD/launcher.iortcw-mp > $PKG/usr/games/iortcw-mp
+chmod 0755 $PKG/usr/games/iortcw
+chmod 0755 $PKG/usr/games/iortcw-mp
+
+
+mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION/{SP,MP}
+
+cp -a README.md iortcw-command-changes.txt \
+ iortcw-cvars-new.txt iortcw-cvars-removed.txt rend2-cvars.txt \
+ $PKG/usr/doc/$PRGNAM-$VERSION
+
+cp -a SP/COPYING.txt SP/HOWTO-Build.txt SP/NOTTODO SP/README \
+ SP/README.txt SP/TODO SP/rend2-readme.md SP/voip-readme.txt \
+ $PKG/usr/doc/$PRGNAM-$VERSION/SP
+
+cp -a MP/COPYING.txt MP/HOWTO-Build.txt MP/NOTTODO MP/README \
+ MP/README.txt MP/TODO MP/rend2-readme.md MP/voip-readme.txt \
+ $PKG/usr/doc/$PRGNAM-$VERSION/MP
+
+cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
+
+
+mkdir -p $PKG/install
+cat $CWD/slack-desc > $PKG/install/slack-desc
+cat $CWD/doinst.sh > $PKG/install/doinst.sh
+
+cd $PKG
+/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}
diff --git a/games/iortcw/iortcw.desktop b/games/iortcw/iortcw.desktop
new file mode 100644
index 0000000000..740a6824a6
--- /dev/null
+++ b/games/iortcw/iortcw.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Name=Return To Castle Wolfentstein (Single Player)
+GenericName=iortcw port of Idsoftware's Return To Castle Wolfenstein
+Exec=iortcw
+Terminal=false
+Type=Application
+Categories=Game;Emulator;
+Icon=iortcw
+StartupNotify=false
diff --git a/games/iortcw/iortcw.info b/games/iortcw/iortcw.info
new file mode 100644
index 0000000000..987ff907f2
--- /dev/null
+++ b/games/iortcw/iortcw.info
@@ -0,0 +1,20 @@
+PRGNAM="iortcw"
+VERSION="1.5a"
+HOMEPAGE="https://github.com/iortcw/iortcw"
+DOWNLOAD="https://github.com/iortcw/iortcw/archive/1.5a/iortcw-1.5a.tar.gz \
+ https://github.com/iortcw/iortcw/releases/download/1.5a/patch-data-141.zip \
+ https://github.com/iortcw/iortcw/releases/download/1.5a/patch-data-SP_deutsch.zip \
+ https://github.com/iortcw/iortcw/releases/download/1.5a/patch-data-SP_espanol.zip \
+ https://github.com/iortcw/iortcw/releases/download/1.5a/patch-data-SP_francais.zip \
+ https://github.com/iortcw/iortcw/releases/download/1.5a/patch-data-SP_italiano.zip"
+MD5SUM="f7c1a383746c71357a9a663faa8d10dc \
+ 291a37caa9d65d0b81f767918b76fa56 \
+ c377642e833307c34d7c995c8bf0c35d \
+ 0d9705612393f0bc1875d15870811574 \
+ e177e33865b907d1bd4f59586c9001e0 \
+ 23d82460f778b1aa47ee26f60b11f404"
+DOWNLOAD_x86_64=""
+MD5SUM_x86_64=""
+REQUIRES="OpenAL SDL2 opusfile"
+MAINTAINER="Sébastien Ballet"
+EMAIL="slacker6896@gmail.com"
diff --git a/games/iortcw/iortcw.png b/games/iortcw/iortcw.png
new file mode 100644
index 0000000000..2ff3f704c3
--- /dev/null
+++ b/games/iortcw/iortcw.png
Binary files differ
diff --git a/games/iortcw/launcher.iortcw b/games/iortcw/launcher.iortcw
new file mode 100644
index 0000000000..7962f2eff2
--- /dev/null
+++ b/games/iortcw/launcher.iortcw
@@ -0,0 +1,3 @@
+#!/bin/sh
+cd /usr/share/games/rtcw
+exec ./iowolfsp.*
diff --git a/games/iortcw/launcher.iortcw-mp b/games/iortcw/launcher.iortcw-mp
new file mode 100644
index 0000000000..15037c197f
--- /dev/null
+++ b/games/iortcw/launcher.iortcw-mp
@@ -0,0 +1,3 @@
+#!/bin/sh
+cd /usr/share/games/rtcw
+exec ./iowolfmp.*
diff --git a/games/iortcw/patches/Makefile-MP-1.5a-remove-ref-to-git-index-file.patch b/games/iortcw/patches/Makefile-MP-1.5a-remove-ref-to-git-index-file.patch
new file mode 100644
index 0000000000..10edd4a7c9
--- /dev/null
+++ b/games/iortcw/patches/Makefile-MP-1.5a-remove-ref-to-git-index-file.patch
@@ -0,0 +1,15 @@
+--- MP/Makefile.orig 2016-12-20 16:59:48.565402393 +0100
++++ MP/Makefile 2016-12-20 17:00:04.089401418 +0100
+@@ -2692,9 +2692,9 @@
+ $(DO_DED_CC)
+
+ # Extra dependencies to ensure the git version is incorporated
+- $(B)/client/cl_console.o : ../.git/index
+- $(B)/client/common.o : ../.git/index
+- $(B)/ded/common.o : ../.git/index
++# $(B)/client/cl_console.o : ../.git/index
++# $(B)/client/common.o : ../.git/index
++# $(B)/ded/common.o : ../.git/index
+
+
+ #############################################################################
diff --git a/games/iortcw/patches/Makefile-SP-1.5a-remove-ref-to-git-index-file.patch b/games/iortcw/patches/Makefile-SP-1.5a-remove-ref-to-git-index-file.patch
new file mode 100644
index 0000000000..5ed201e737
--- /dev/null
+++ b/games/iortcw/patches/Makefile-SP-1.5a-remove-ref-to-git-index-file.patch
@@ -0,0 +1,15 @@
+--- SP/Makefile.orig 2016-12-20 17:00:31.739399680 +0100
++++ SP/Makefile 2016-12-20 17:01:21.544396550 +0100
+@@ -2658,9 +2658,9 @@
+ $(DO_DED_CC)
+
+ # Extra dependencies to ensure the git version is incorporated
+- $(B)/client/cl_console.o : ../.git/index
+- $(B)/client/common.o : ../.git/index
+- $(B)/ded/common.o : ../.git/index
++# $(B)/client/cl_console.o : ../.git/index
++# $(B)/client/common.o : ../.git/index
++# $(B)/ded/common.o : ../.git/index
+
+
+ #############################################################################
diff --git a/games/iortcw/slack-desc b/games/iortcw/slack-desc
new file mode 100644
index 0000000000..e0a0e46c04
--- /dev/null
+++ b/games/iortcw/slack-desc
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description.
+# Line up the first '|' above the ':' following the base package name, and
+# the '|' on the right side marks the last column you can put a character in.
+# You must make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':' except on otherwise blank lines.
+
+ |-----handy-ruler------------------------------------------------------|
+iortcw: iortcw (Game engine for Return To Castle Wolfenstein)
+iortcw:
+iortcw: iortcw is an updated game engine for Return To Caste Wolfenstein
+iortcw: based on the open source ioquake3 engine.
+iortcw:
+iortcw:
+iortcw: Home: https://github.com/iortcw/iortcw
+iortcw:
+iortcw:
+iortcw:
+iortcw: