diff --git a/games-fps/darkplaces/Manifest b/games-fps/darkplaces/Manifest
index afa2595..7f289b4 100644
--- a/games-fps/darkplaces/Manifest
+++ b/games-fps/darkplaces/Manifest
@@ -1,4 +1,7 @@
-DIST darkplacesenginesource20170829beta1.tar.gz 2063047 BLAKE2B c3d4a49a6f11f7d6458c0f94da05547abfe9b975d2d2810e9d06d6077dae293da7e547482d92fa58612a59acce592abfe8e1ac3f55ba05bad43436e46737981b SHA512 618ddda15f80c04d3d46499504213326a2b82f591e8f633e62ac988b2e525e8c5f310f12ea91a48f8ea0c8f02375568acad28a5558311b802f6a0e45eaf592f3
+AUX 0020-make-sse-selectable.patch 3394 BLAKE2B 990a132a4181dd753a9db58a49d1b7223be513f6ee5d269b00c91cbe0194f121fb86957f83fa63981a258198442af68c14eb8a12dc3121d6a81feada16a78c35 SHA512 d2061012747445053e074399c440b4aca8ab38beb4497f748de5f74e4c1369bb7a016c7606d772d17a1d62bf18629e28bd7c4b56fa9107c90ff2a755a125312f
+AUX 0030-builddate-template.patch 478 BLAKE2B 41ada1253f2ecff2c10ef8db510e9cf362b529898c333bf68fbb01031bb44eb253b86845d6e0086937e5a5069dceb91fd7a60688206c1aa62c8f9d48988f15c0 SHA512 c90396c0cc29b78c386dc5eb5d766a81a9b9ccfe1ab852442af6ebf938cc0be6f5f32c8b19d83edeae1cf8b417ee88d112255401aad63c39a9576ecaa927d425
DIST darkplacesenginesource20240226_alpha1.tar.gz 4614280 BLAKE2B 933aa4dcbc262c8f62c12de8402f2b8e31063a89fde1901ba3378646be51b78b7f5f657ec26d52d1ecfd5f88b62677b912f82ce915e44a8d63819f16ab0235da SHA512 c5b8a1299c02e9eef59bbe36cbcb36005cedd9948f97597474cc05ce5ffdd33729825733877b9bac86cf7792d96cf80b6795281381c11eb84879b7823c5c5979
DIST fuhquake-lits.rar 8388829 BLAKE2B fb9c4db151deb43424de9331641154f412394ae6346864bc62a210c7d8d12c6ed6c8647cb4cd83fa853155c5f562f7e9b8d3c779fe74c1bb3f05bb6f627b1d5e SHA512 6e59f5e08a6c401b329b86b0cd677a04b1a5aee11f24973c77c9e7ea50cab9dedf4fc15c4f3d6b73bdc87bacdc9612a3c244d0a4ceceef943abb6e256ac23925
DIST id1.pk3 350470 BLAKE2B 76426667de5f42633f608b75286671344d439398aa9b819e9ba3979ca317a93930b1077de7efb4b1bad670a6341c7536d572cfc2590a5812c71dd0c4e8def784 SHA512 d4d7233bc1e5049e89d09448818219b0ce7941fecde5381cd95933e4c96ebc9b4e34ff7eae5eb5d0d1e3cc2ceb4f5254f4d600aded7dda373713149817621331
+EBUILD darkplaces-20240226_alpha1.ebuild 4998 BLAKE2B 179254eb04b8601693ba3474ccc8e61b62df1f4a79f9e40b95b490a6ddc0f740005b39b43be0301b0037febaf0e0f0fd5bcd6826b9d6f483a1eb4c468c48079d SHA512 00e43ee651f51ffb8705db8a415251a3d1cb9c88237b7d0f67481f4dc2699cf51aa9d0fcca5b43da32776e10eac2a83b454775e872360262fe0e3a890a8acb6c
+MISC metadata.xml 580 BLAKE2B 4415a644b98a15aa79d3b9ecf075444bf73cdf8f78d413b91eb4687722ff0d4411405f7d9ce1da6c3b4748340c456ae0bb8721c5b7025ee69fd0de288924bdf1 SHA512 f22ef40165ee9b84cfedcb475df467c89509153f6e4c593006f3314adb99057ea6587affd279ed432f57a0a7ac83f50d6dcaad07152b3c805266bb9475f1d16d
diff --git a/games-fps/darkplaces/darkplaces-20170829_beta1-r1.ebuild b/games-fps/darkplaces/darkplaces-20170829_beta1-r1.ebuild
deleted file mode 100644
index 703ca20..0000000
--- a/games-fps/darkplaces/darkplaces-20170829_beta1-r1.ebuild
+++ /dev/null
@@ -1,220 +0,0 @@
-# Copyright 1999-2021 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=7
-
-inherit flag-o-matic unpacker desktop wrapper
-
-# Latest versions are in http://icculus.org/twilight/darkplaces/files/
-MY_PV="${PV/_beta/beta}"
-MY_SOURCE="${PN}enginesource${MY_PV}.tar.gz"
-
-# Different Quake 1 engines expect the lights in different directories
-# http://www.fuhquake.net/download.html and http://www.kgbsyndicate.com/romi/
-MY_LIGHTS="fuhquake-lits.rar"
-
-DESCRIPTION="Enhanced engine for iD Software's Quake 1"
-HOMEPAGE="http://icculus.org/twilight/darkplaces/"
-GIT_COMMIT="175af02fa8e6bc5c14ebac952c6925f9328c2348"
-SRC_URI="https://github.com/DarkPlacesEngine/darkplaces/archive/${GIT_COMMIT}.tar.gz -> "${MY_SOURCE}"
- lights? (
- http://www.fuhquake.net/files/extras/${MY_LIGHTS}
- http://www.kgbsyndicate.com/romi/id1.pk3 )"
-
-LICENSE="GPL-2"
-SLOT="0"
-KEYWORDS="~amd64 ~x86 ~ppc64 ~arm64"
-IUSE="alsa capture cdinstall cdsound debug dedicated demo ipv6 lights opengl oss sdl textures"
-
-REQUIRED_USE="
- alsa? ( !oss )
- oss? ( !alsa )
- || ( alsa oss sdl )
- ^^ ( opengl sdl )
-"
-GLX_RDEPEND="
- x11-libs/libX11
- x11-libs/libXpm
- x11-libs/libXext
- x11-libs/libXxf86vm
- virtual/opengl
- alsa? ( media-libs/alsa-lib )
- capture? (
- media-libs/libogg
- media-libs/libtheora
- media-libs/libvorbis
- )
-"
-SDL_RDEPEND="
- media-libs/libsdl2[udev]
- x11-libs/libX11
- alsa? ( media-libs/alsa-lib )
- capture? (
- media-libs/libogg
- media-libs/libtheora
- media-libs/libvorbis
- )
-"
-RDEPEND="
- dev-libs/d0_blind_id
- dev-games/ode
- net-misc/curl
- virtual/jpeg:0
- sys-libs/zlib
- media-libs/libpng
- cdinstall? ( games-fps/quake1-data )
- demo? ( games-fps/quake1-demodata )
- textures? ( >=games-fps/quake1-textures-20050820 )
- opengl? ( ${GLX_RDEPEND} )
- sdl? ( ${SDL_RDEPEND} )
-"
-BDEPEND="lights? (
- app-arch/unrar
- app-arch/unzip
- )
- app-alternatives/tar
- app-alternatives/gzip
- sys-apps/coreutils
- sys-devel/patch
- sys-apps/sed
- virtual/pkgconfig
-"
-
-S="${WORKDIR}"
-dir="/usr/share/quake1"
-
-src_unpack() {
- if use lights; then
- elog "FuhQuake lights: enabled"
- unpack "${MY_LIGHTS}"
- unpack_zip "${DISTDIR}"/id1.pk3
- mv *.lit maps/ || die
- mv ReadMe.txt rtlights.txt
- else
- elog "FuhQuake lights: disabled"
- fi
- tar --strip-components 1 -xf "${DISTDIR}/${MY_SOURCE}"
-}
-
-src_prepare() {
- default
- cd "${S}"
- rm mingw_note.txt
- strip-flags
- elog "Applying GCC 11 patch for software renderer."
- patch -p1 -i "${FILESDIR}/0010-fix-dpsoftras-alignment.patch"
- # Only additional CFLAGS optimization is the -march flag
- local march=$(get-flag -march)
- sed -i \
- -e "s:-lasound:$(pkg-config --libs alsa):" \
- -e "/^CPUOPTIMIZATIONS/d" \
- -e '/^OPTIM_RELEASE/s/=.*/=$(CFLAGS)/' \
- -e '/^OPTIM_DEBUG/s/=.*/=$(CFLAGS)/' \
- -e '/^LDFLAGS_DEBUG/s/$/ $(LDFLAGS)/' \
- -e '/^LDFLAGS_RELEASE/s/$/ $(LDFLAGS)/' \
- -e "s:strip:true:" \
- makefile.inc || die
- if ! use cdsound; then
- elog "CD support: disabled"
- sed -i \
- -e "s:/dev/cdrom:/dev/null:" \
- cd_linux.c || die
- sed -i \
- -e 's:COM_CheckParm("-nocdaudio"):1:' \
- cd_shared.c || die
- else
- elog "CD support: enabled"
- fi
- if ! use ipv6; then
- elog "IPv6 support: disabled"
- sed -i 's/^#\(CFLAGS_NET+=-DNOSUPPORTIPV6\)$/\1/' makefile || die
- else
- elog "IPv6 support: enabled"
- fi
-}
-
-src_compile() {
- local video_capture="disabled"
- if use capture; then
- elog "Video capture: enabled"
- video_capture="enabled"
- else
- elog "Video capture: disabled"
- fi
- local opts="DP_FS_BASEDIR=\"${dir}\" \
- DP_LINK_JPEG=shared \
- DP_LINK_CRYPTO=shared \
- DP_LINK_CRYPTO_RIJNDAEL=shared \
- DP_LINK_ZLIB=shared \
- DP_LINK_ODE=shared \
- DP_VIDEO_CAPTURE=${video_capture} \
- DP_PRELOAD_DEPENDENCIES=1"
- # If neither OSS or ALSA are selected, then SDL must be selected.
- # However, SDL is a backend for both graphics and sound - so not having ALSA or OSS is only an option, if OpenGL is not.
- local sound_api="NULL"
- if use oss; then
- sound_api="OSS"
- elif use alsa; then
- sound_api="ALSA"
- elif ! use sdl; then
- die "No sound API has been selected."
- fi
- opts+=" DP_SOUND_API=${sound_api}"
- local type="release"
- if use debug; then
- type="debug"
- fi
- # Only compile a maximum of 1 client
- if use sdl; then
- emake ${opts} "sdl-${type}"
- elif use opengl; then
- emake ${opts} "cl-${type}"
- fi
- if use dedicated; then
- emake ${opts} "sv-${type}"
- fi
-}
-
-src_install() {
- if use opengl || use sdl ; then
- local type=glx
- use sdl && type=sdl
- # darkplaces executable is needed, even just for demo
- newbin "${PN}-${type}" ${PN}
- newicon darkplaces72x72.png ${PN}.png
- if use demo; then
- # Install command-line for demo, even if not desktop entry
- make_wrapper ${PN}-demo "${PN} -game demo"
- fi
- if use demo && ! use cdinstall; then
- make_desktop_entry ${PN}-demo "Dark Places (Demo)"
- else
- # Full version takes precedence over demo
- make_desktop_entry ${PN} "Dark Places"
- fi
- fi
- if use dedicated ; then
- newbin ${PN}-dedicated ${PN}-ded
- fi
- dodoc *.txt todo "${WORKDIR}"/*.txt
- if use lights ; then
- insinto "${dir}"/id1
- doins -r "${WORKDIR}"/{cubemaps,maps}
- if use demo ; then
- # Set up symlinks, for the demo levels to include the lights
- local d
- for d in cubemaps maps ; do
- dosym "${dir}/id1/${d}" "${dir}/demo/${d}"
- done
- fi
- fi
-}
-
-pkg_postinst() {
- if ! use cdinstall && ! use demo; then
- elog "Place pak0.pak and pak1.pak in ${dir}/id1"
- fi
- if use sdl && ! use alsa; then
- ewarn "Select opengl with alsa, instead of sdl USE flag, for better audio latency."
- fi
-}
diff --git a/games-fps/darkplaces/darkplaces-20240226_alpha1.ebuild b/games-fps/darkplaces/darkplaces-20240226_alpha1.ebuild
index ad274f8..60f770c 100644
--- a/games-fps/darkplaces/darkplaces-20240226_alpha1.ebuild
+++ b/games-fps/darkplaces/darkplaces-20240226_alpha1.ebuild
@@ -1,7 +1,7 @@
# Copyright 1999-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
-EAPI=7
+EAPI=8
inherit flag-o-matic unpacker desktop wrapper
@@ -24,16 +24,19 @@ SRC_URI="https://github.com/DarkPlacesEngine/darkplaces/archive/${GIT_COMMIT}.ta
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~x86"
-IUSE="capture cdinstall debug dedicated demo ipv6 lights sdl textures"
+IUSE="capture cdinstall cpu_flags_x86_sse debug dedicated demo ipv6 lights sdl textures"
+
+REQUIRED_USE="
+ amd64? ( cpu_flags_x86_sse )
+"
SDL_RDEPEND="
media-libs/libsdl2[udev]
x11-libs/libX11
- capture? (
- media-libs/libogg
- media-libs/libtheora
- media-libs/libvorbis
- )
+ media-libs/libogg
+ media-libs/libtheora
+ media-libs/libvorbis
+ media-libs/libxmp
"
RDEPEND="
dev-libs/d0_blind_id
@@ -79,6 +82,9 @@ src_prepare() {
cd "${S}"
rm mingw_note.txt
strip-flags
+ patch -p1 -i "${FILESDIR}/0020-make-sse-selectable.patch"
+ patch -p1 -i "${FILESDIR}/0030-builddate-template.patch" || die
+ sed -i "s/%{PVR}/${PVR}/" builddate.c || die
# Only additional CFLAGS optimization is the -march flag
local march=$(get-flag -march)
sed -i \
@@ -106,6 +112,18 @@ src_compile() {
else
elog "Video capture: disabled"
fi
+ local sse_enabled=0
+ if use cpu_flags_x86_sse; then
+ elog "Skeletal animations: uses SSE"
+ sse_enabled=1
+ else
+ if use amd64; then
+ elog "Skeletal animations: uses SSE, not disabling on AMD64"
+ sse_enabled=1
+ else
+ elog "Skeletal animations: uses generic code"
+ fi
+ fi
local opts="DP_FS_BASEDIR=\"${dir}\" \
DP_LINK_JPEG=shared \
DP_LINK_CRYPTO=shared \
@@ -113,7 +131,9 @@ src_compile() {
DP_LINK_ZLIB=shared \
DP_LINK_ODE=shared \
DP_VIDEO_CAPTURE=${video_capture} \
- DP_PRELOAD_DEPENDENCIES=1"
+ DP_PRELOAD_DEPENDENCIES=1 \
+ GENTOO_BUILD=1 \
+ DP_SSE=${sse_enabled}"
local type="release"
if use debug; then
type="debug"
@@ -162,6 +182,9 @@ src_install() {
pkg_postinst() {
if ! use cdinstall && ! use demo ; then
- elog "Place pak0.pak and pak1.pak in ${dir}/id1"
+ elog "Remember to place pak0.pak and pak1.pak in ${dir}/id1"
+ if use cdda; then
+ elog "If you wish to have the original soundtrack available without playing from an optical drive, please make sure that the path ${dir}/id1/sound/cdtracks exists, and that it contains the original soundtrack. The expected filename schema is track%i.%s with a double-digit count, either in WAV RIFF or OGG Vorbis format."
+ fi
fi
}
diff --git a/games-fps/darkplaces/files/0020-make-sse-selectable.patch b/games-fps/darkplaces/files/0020-make-sse-selectable.patch
new file mode 100644
index 0000000..6df384a
--- /dev/null
+++ b/games-fps/darkplaces/files/0020-make-sse-selectable.patch
@@ -0,0 +1,149 @@
+--- a/makefile.inc 2024-03-18 14:28:17.506666539 +0100
++++ b/makefile.inc 2024-03-18 14:34:25.586666536 +0100
+@@ -157,9 +157,12 @@
+
+ ifeq ($(DP_SSE),1)
+ CFLAGS_SSE=-msse
+- CFLAGS_SSE2=-msse2
+ else
+ CFLAGS_SSE=
++endif # ifeq ($(DP_SSE),1)
++ifeq ($(DP_SSE2),1)
++ CFLAGS_SSE2=-msse2
++else
+ CFLAGS_SSE2=
+ endif # ifeq ($(DP_SSE),1)
+
+--- a/makefile 2024-03-31 16:39:13.059767771 +0200
++++ b/makefile 2024-03-31 16:28:43.563130538 +0200
+@@ -26,29 +26,32 @@
+ endif # ifdef windir
+ endif # ifndef DP_MAKE_TARGET
+
++# If we are Gentoo, then we know what we're doing and we can move along
++ifndef GENTOO_BUILD
+ # If we're targeting an x86 CPU we want to enable DP_SSE (CFLAGS_SSE and SSE2)
+-ifeq ($(DP_MAKE_TARGET), mingw)
+- DP_SSE:=1
+-else ifeq ($(OS),Windows_NT)
+- ifeq ($(PROCESSOR_ARCHITECTURE),AMD64)
+- DP_SSE:=1
+- else ifeq ($(PROCESSOR_ARCHITEW6432),AMD64)
+- DP_SSE:=1
+- else ifeq ($(PROCESSOR_ARCHITECTURE),x86)
+- DP_SSE:=1
+- else
+- DP_SSE:=0
+- endif
+-else
+- DP_MACHINE:=$(shell uname -m)
+- ifeq ($(DP_MACHINE),x86_64)
+- DP_SSE:=1
+- else ifeq ($(DP_MACHINE),i686)
+- DP_SSE:=1
+- else ifeq ($(DP_MACHINE),i386)
++ ifeq ($(DP_MAKE_TARGET), mingw)
+ DP_SSE:=1
++ else ifeq ($(OS),Windows_NT)
++ ifeq ($(PROCESSOR_ARCHITECTURE),AMD64)
++ DP_SSE:=1
++ else ifeq ($(PROCESSOR_ARCHITEW6432),AMD64)
++ DP_SSE:=1
++ else ifeq ($(PROCESSOR_ARCHITECTURE),x86)
++ DP_SSE:=1
++ else
++ DP_SSE:=0
++ endif
+ else
+- DP_SSE:=0
++ DP_MACHINE:=$(shell uname -m)
++ ifeq ($(DP_MACHINE),x86_64)
++ DP_SSE:=1
++ else ifeq ($(DP_MACHINE),i686)
++ DP_SSE:=1
++ else ifeq ($(DP_MACHINE),i386)
++ DP_SSE:=1
++ else
++ DP_SSE:=0
++ endif
+ endif
+ endif
+
+--- a/sys.h 2024-03-31 16:37:29.066439260 +0200
++++ b/sys.h 2024-03-31 16:37:02.229773838 +0200
+@@ -93,39 +93,47 @@
+ #endif
+
+ #if defined(__GNUC__) || (__clang__)
+-# if defined(__i386__)
+-# define DP_ARCH_STR "686"
+-# define SSE_POSSIBLE
+-# ifdef __SSE__
+-# define SSE_PRESENT
+-# endif
+-# ifdef __SSE2__
+-# define SSE2_PRESENT
+-# endif
+-# elif defined(__x86_64__)
+-# define DP_ARCH_STR "x86_64"
+-# define SSE_PRESENT
+-# define SSE2_PRESENT
+-# elif defined(__powerpc__)
+-# define DP_ARCH_STR "ppc"
+-# endif
+-#elif defined(_WIN64)
+-# define DP_ARCH_STR "x86_64"
+-# define SSE_PRESENT
+-# define SSE2_PRESENT
+-#elif defined(WIN32)
+-# define DP_ARCH_STR "x86"
+-# define SSE_POSSIBLE
++# if defined(__i386__) || defined(WIN32)
++# ifdef __SSE__
++# define SSE_POSSIBLE
++# endif
++# ifdef __SSE2__
++# define SSE2_POSSIBLE
++# endif
++# if defined(__i686__)
++# define DP_ARCH_STR "i686"
++# elif defined(__i586__)
++# define DP_ARCH_STR "i586"
++# elif defined(__i486__)
++# define DP_ARCH_STR "i486"
++# else
++# define DP_ARCH_STR "i386"
++# endif
++# elif defined(__amd64__) || defined(_WIN64)
++# define SSE_POSSIBLE
++# define SSE2_POSSIBLE
++# define DP_ARCH_STR "amd64"
++# elif defined(__powerpc64__)
++# define DP_ARCH_STR "ppc64"
++# elif defined(__powerpc__)
++# define DP_ARCH_STR "ppc"
++# elif defined(__arm64__)
++# define DP_ARCH_STR "arm64"
++# endif
+ #endif
+
+-#ifdef SSE_PRESENT
+-# define SSE_POSSIBLE
++#ifdef SSE_POSSIBLE
++# define SSE_PRESENT
++#endif
++#ifdef SSE2_POSSIBLE
++# define SSE2_PRESENT
+ #endif
+
+ #ifdef NO_SSE
+-# undef SSE_PRESENT
+-# undef SSE_POSSIBLE
+-# undef SSE2_PRESENT
++# undef SSE_PRESENT
++# undef SSE_POSSIBLE
++# undef SSE2_PRESENT
++# undef SSE2_POSSIBLE
+ #endif
+
+ #ifdef SSE_POSSIBLE
diff --git a/games-fps/darkplaces/files/0030-builddate-template.patch b/games-fps/darkplaces/files/0030-builddate-template.patch
new file mode 100644
index 0000000..0df588d
--- /dev/null
+++ b/games-fps/darkplaces/files/0030-builddate-template.patch
@@ -0,0 +1,22 @@
+--- a/builddate.c 2024-02-26 19:53:26.000000000 +0100
++++ b/builddate.c 2024-03-31 16:45:28.549750267 +0200
+@@ -1,18 +1,2 @@
+-#define STRINGIFY2(arg) #arg
+-#define STRINGIFY(arg) STRINGIFY2(arg)
+-
+ extern const char *buildstring;
+-const char *buildstring =
+-#ifdef VCREVISION
+-STRINGIFY(VCREVISION)
+-#else
+-"-"
+-#endif
+-#ifndef NO_BUILD_TIMESTAMPS
+-//" " __TIME__
+-" " __DATE__
+-#endif
+-#ifdef BUILDTYPE
+-" " STRINGIFY(BUILDTYPE)
+-#endif
+-;
++const char *buildstring = "%{PVR}";
diff --git a/games-fps/darkplaces/metadata.xml b/games-fps/darkplaces/metadata.xml
index 1f8c98e..61890b7 100644
--- a/games-fps/darkplaces/metadata.xml
+++ b/games-fps/darkplaces/metadata.xml
@@ -1,11 +1,14 @@
-
+
-
+
+ moog621@gmail.com
+ Michał Dec
+
+
diff --git a/games-fps/quake15/Manifest b/games-fps/quake15/Manifest
index 9b14f34..86e9806 100644
--- a/games-fps/quake15/Manifest
+++ b/games-fps/quake15/Manifest
@@ -1,2 +1,9 @@
+AUX 0010-fix-dpsoftras-alignment.patch 2277 BLAKE2B faf0e732c70163a36a9b7ba8636487d2427844243bea8112b25433ee6480f9116ca50e346f9b6c442f4267539b7b5d21a926340a38d3aa122f304e234585d53c SHA512 bbb91271d50a619ad1569e560c0bcc3ef92c812c80fe2855fbcf29fa555511f880b50ede5ebf25faa031706dbd9634a3da0fd8b9738db7b8f6b28686ebc81d97
+AUX 0020-do-not-assume-sse2-is-available-just-because-sse-is-available.patch 13189 BLAKE2B 591f381b3207c607146aeeba9361fe4514a065dfe0ab6989b6e78634009b25068e0da7cf4a94f8f40764ca3c056ee9550d33907f466e2f405ce3c4cabeb2e5a9 SHA512 b548b613a3cf2795821308a9c6ca0d56bcd2b3ea64ac9c9678ee183196d67c37bfc68212e461b6f30b366cdf26e2240b6aa31429ad27b395010cb52a74686f60
+AUX 0030-builddate-template.patch 477 BLAKE2B 7b427ab38d9113602e19a8b6b64b4bf0de35bf88118d15bdf3058d3c6d320b0ca26be8272152f90f4324da6eb5f6135707d17d9df1119d896383da4a03c33db9 SHA512 3e94bc7ae346fe908b85fe67982aae1f987312cb91bc560f742cb336a459ad6ac5245e257d303ae3ead3f90eb9280a799ba40ea630e771fb94752b670ded7989
+AUX 0040-enforce-quake15.patch 1314 BLAKE2B 2232061e0b722c00dc12bf9ec3704fad20f8221eae176a311372ea1fd9f9ca263c264f23e7657d839d2cbe865d77ece4f98ab34a98cccd7ca84446cc38ef6119 SHA512 f043dd2450252b1ef54a53794dcf32c2c1ecc3dc5a1ac0f7d171173ba851265a86441053469378f8f901819928c0762941dd19b3cfc21b5cb012fe4318a638a3
DIST Q15_PublicBeta1.7z 412650697 BLAKE2B f9f6ce082ec42d67e0d001b363b25ea53d05d433863e74454420f3f98f64cff7188a700343685ef6d2f3649de703ce52c18144ce982fdf34c8b7aca9bc18bfd2 SHA512 2ae9f2dc3a95331985621bde1d27187c009b66aa807e44125c2a0f019c4e3eada5578ea4cc1ef7aed2844390a4a7eda20c8eedde7d9c084635bf65dbf4908c27
DIST Q15_patch2.7z 4045889 BLAKE2B f5bf7d7dc02758da7dd1969bd748c5861e8d47c102d5d4a823dda979e1404a7264147b477f751d649681fbb015f2d0777a13c09903458b7f92fdd742072b8279 SHA512 07f9a59202c2195af067a789b6075cdcdf2070953faae7460820ddb112a6d5aaec9015ce181ec4e9731280d36d8f13c7c8af63450d66eb7b287b8ed6261b8ba1
+DIST darkplacesenginesource20170829_beta1.tar.gz 2063047 BLAKE2B c3d4a49a6f11f7d6458c0f94da05547abfe9b975d2d2810e9d06d6077dae293da7e547482d92fa58612a59acce592abfe8e1ac3f55ba05bad43436e46737981b SHA512 618ddda15f80c04d3d46499504213326a2b82f591e8f633e62ac988b2e525e8c5f310f12ea91a48f8ea0c8f02375568acad28a5558311b802f6a0e45eaf592f3
+DIST lmp2tga.c 7006 BLAKE2B bb88766db283a5effa44ddd439da63d6966b3b76e806b0c907fcc5461a00f9c9f780f30aa4bd59d5688c3a267427a737f078961d00f7ff796d0fb28dfcf756dd SHA512 3c7d596de4d191876d9b336be83e1b28edf1e0e6bc79e1dcfad3c071a9c504af789b5f82c225fd546d94253a34da4dde7807fb8775d7052bac7b820a21d22cb2
+EBUILD quake15-0_beta2-r1.ebuild 6882 BLAKE2B 9b8c5f713ce9925aadd0b26294ca421cfbf7716dd9b4a1c64bded4497c8e5642bd10d7c4f8960dabd11eb011f369076737d215992ad3f7e103282e9a89cdf5ac SHA512 681f3b686b8f295556a719ed62a70ffafef9b5e2920a59c91168d48c4b7d0b3f9cb47761b20a9e105f1bad9000e2f0cd3376e51d33b7d5e3dcbee5b89a4fae65
diff --git a/games-fps/darkplaces/files/0010-fix-dpsoftras-alignment.patch b/games-fps/quake15/files/0010-fix-dpsoftras-alignment.patch
similarity index 100%
rename from games-fps/darkplaces/files/0010-fix-dpsoftras-alignment.patch
rename to games-fps/quake15/files/0010-fix-dpsoftras-alignment.patch
diff --git a/games-fps/quake15/files/0020-do-not-assume-sse2-is-available-just-because-sse-is-available.patch b/games-fps/quake15/files/0020-do-not-assume-sse2-is-available-just-because-sse-is-available.patch
new file mode 100644
index 0000000..f02c012
--- /dev/null
+++ b/games-fps/quake15/files/0020-do-not-assume-sse2-is-available-just-because-sse-is-available.patch
@@ -0,0 +1,381 @@
+--- a/makefile.inc 2024-03-18 14:28:17.506666539 +0100
++++ b/makefile.inc 2024-03-18 14:34:25.586666536 +0100
+@@ -181,9 +181,12 @@
+
+ ifeq ($(DP_SSE),1)
+ CFLAGS_SSE=-msse
+- CFLAGS_SSE2=-msse2
+ else
+ CFLAGS_SSE=
++endif # ifeq ($(DP_SSE),1)
++ifeq ($(DP_SSE2),1)
++ CFLAGS_SSE2=-msse2
++else
+ CFLAGS_SSE2=
+ endif # ifeq ($(DP_SSE),1)
+
+--- a/makefile 2017-08-30 06:29:14.000000000 +0200
++++ b/makefile 2024-03-18 14:41:57.396666527 +0100
+@@ -26,24 +26,29 @@
+ endif # ifdef windir
+ endif # ifndef DP_MAKE_TARGET
+
++# If we are Gentoo, then we know what we're doing and we can move along
++ifndef GENTOO_BUILD
+ # If we're targeting an x86 CPU we want to enable DP_SSE (CFLAGS_SSE and SSE2)
+-ifeq ($(DP_MAKE_TARGET), mingw)
+- DP_SSE:=1
+-else
+- DP_MACHINE:=$(shell uname -m)
+- ifeq ($(DP_MACHINE),x86_64)
++ ifeq ($(DP_MAKE_TARGET), mingw)
+ DP_SSE:=1
++ DP_SSE2:=1
+ else
+- ifeq ($(DP_MACHINE),i686)
+- DP_SSE:=1
+- else
+- ifeq ($(DP_MACHINE),i386)
+- DP_SSE:=1
+- else
+- DP_SSE:=0
+- endif # ifeq ($(DP_MACHINE),i386)
+- endif # ifeq ($(DP_MACHINE),i686)
+- endif # ifeq ($(DP_MACHINE),x86_64)
++ DP_MACHINE:=$(shell uname -m)
++ ifeq ($(DP_MACHINE),x86_64)
++ DP_SSE:=1
++ DP_SSE2:=1
++ else
++ ifeq ($(DP_MACHINE),i686)
++ DP_SSE:=1
++ else
++ ifeq ($(DP_MACHINE),i386)
++ DP_SSE:=1
++ else
++ DP_SSE:=0
++ endif # ifeq ($(DP_MACHINE),i386)
++ endif # ifeq ($(DP_MACHINE),i686)
++ endif # ifeq ($(DP_MACHINE),x86_64)
++ endif
+ endif
+
+ # Makefile name
+--- a/quakedef.h 2017-08-30 06:29:14.000000000 +0200
++++ b/quakedef.h 2024-03-18 15:22:43.836666480 +0100
+@@ -470,39 +470,44 @@
+ #endif
+
+ #if defined(__GNUC__)
+-# if defined(__i386__)
+-# define DP_ARCH_STR "686"
+-# define SSE_POSSIBLE
+-# ifdef __SSE__
+-# define SSE_PRESENT
+-# endif
+-# ifdef __SSE2__
+-# define SSE2_PRESENT
+-# endif
+-# elif defined(__x86_64__)
+-# define DP_ARCH_STR "x86_64"
+-# define SSE_PRESENT
+-# define SSE2_PRESENT
+-# elif defined(__powerpc__)
+-# define DP_ARCH_STR "ppc"
+-# endif
+-#elif defined(_WIN64)
+-# define DP_ARCH_STR "x86_64"
+-# define SSE_PRESENT
+-# define SSE2_PRESENT
+-#elif defined(WIN32)
+-# define DP_ARCH_STR "x86"
+-# define SSE_POSSIBLE
++# if defined(__i386__) || defined(WIN32)
++# ifdef __SSE__
++# define SSE_POSSIBLE
++# endif
++# ifdef __SSE2__
++# define SSE2_POSSIBLE
++# endif
++# if defined(__i686__)
++# define DP_ARCH_STR "i686"
++# elif defined(__i586__)
++# define DP_ARCH_STR "i586"
++# elif defined(__i486__)
++# define DP_ARCH_STR "i486"
++# else
++# define DP_ARCH_STR "i386"
++# endif
++# elif defined(__amd64__) || defined(_WIN64)
++# define SSE_POSSIBLE
++# define SSE2_POSSIBLE
++# define DP_ARCH_STR "amd64"
++# elif defined(__powerpc64__)
++# define DP_ARCH_STR "ppc64"
++# elif defined(__arm64__)
++# define DP_ARCH_STR "arm64"
++# endif
+ #endif
+-
+-#ifdef SSE_PRESENT
+-# define SSE_POSSIBLE
++#ifdef SSE_POSSIBLE
++# define SSE_PRESENT
++#endif
++#ifdef SSE2_POSSIBLE
++# define SSE2_PRESENT
+ #endif
+
+ #ifdef NO_SSE
+-# undef SSE_PRESENT
+-# undef SSE_POSSIBLE
+-# undef SSE2_PRESENT
++# undef SSE_PRESENT
++# undef SSE_POSSIBLE
++# undef SSE2_PRESENT
++# undef SSE2_POSSIBLE
+ #endif
+
+ #ifdef SSE_POSSIBLE
+--- a/dpsoftrast.c 2017-08-30 06:29:14.000000000 +0200
++++ b/dpsoftrast.c 2024-03-18 18:51:30.696666431 +0100
+@@ -17,7 +17,7 @@
+ #define ALIGN_SIZE 16
+ #define ATOMIC_SIZE 4
+
+-#ifdef SSE_POSSIBLE
++#ifdef SSE2_POSSIBLE
+ #if defined(__APPLE__)
+ #include
+ #define ALIGN(var) var __attribute__((__aligned__(16)))
+@@ -84,7 +84,7 @@
+ #define ATOMIC_ADD(counter, val) ((void)((counter) += (val)))
+ #endif
+
+-#ifdef SSE_POSSIBLE
++#ifdef SSE2_POSSIBLE
+ #include
+
+ #if defined(__GNUC__) && (__GNUC < 4 || __GNUC_MINOR__ < 6) && !defined(__clang__)
+@@ -1393,7 +1393,7 @@
+ }
+ void DPSOFTRAST_UniformMatrix4fv(DPSOFTRAST_UNIFORM uniform, int arraysize, int transpose, const float *v)
+ {
+-#ifdef SSE_POSSIBLE
++#ifdef SSE2_POSSIBLE
+ int i, index;
+ for (i = 0, index = (int)uniform;i < arraysize;i++, index += 4, v += 16)
+ {
+@@ -1467,7 +1467,7 @@
+ command->clipplane[3] = w;
+ }
+
+-#ifdef SSE_POSSIBLE
++#ifdef SSE2_POSSIBLE
+ static void DPSOFTRAST_Load4fTo4f(float *dst, const unsigned char *src, int size, int stride)
+ {
+ float *end = dst + size*4;
+@@ -1663,7 +1663,7 @@
+
+ static void DPSOFTRAST_Vertex_Transform(float *out4f, const float *in4f, int numitems, const float *inmatrix16f)
+ {
+-#ifdef SSE_POSSIBLE
++#ifdef SSE2_POSSIBLE
+ static const float identitymatrix16f[4][4] = {{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}};
+ __m128 m0, m1, m2, m3;
+ float *end;
+@@ -1716,7 +1716,7 @@
+ }
+ #endif
+
+-#ifdef SSE_POSSIBLE
++#ifdef SSE2_POSSIBLE
+ #define DPSOFTRAST_PROJECTVERTEX(out, in, viewportcenter, viewportscale) \
+ { \
+ __m128 p = (in), w = _mm_shuffle_ps(p, p, _MM_SHUFFLE(3, 3, 3, 3)); \
+@@ -1919,7 +1919,7 @@
+
+ static float *DPSOFTRAST_Array_Load(int outarray, int inarray)
+ {
+-#ifdef SSE_POSSIBLE
++#ifdef SSE2_POSSIBLE
+ float *outf = dpsoftrast.post_array4f[outarray];
+ const unsigned char *inb;
+ int firstvertex = dpsoftrast.firstvertex;
+@@ -1986,7 +1986,7 @@
+ #if 0
+ static float *DPSOFTRAST_Array_Project(int outarray, int inarray)
+ {
+-#ifdef SSE_POSSIBLE
++#ifdef SSE2_POSSIBLE
+ float *data = inarray >= 0 ? DPSOFTRAST_Array_Load(outarray, inarray) : dpsoftrast.post_array4f[outarray];
+ dpsoftrast.drawclipped = DPSOFTRAST_Vertex_Project(data, dpsoftrast.screencoord4f, &dpsoftrast.drawstarty, &dpsoftrast.drawendy, data, dpsoftrast.numvertices);
+ return data;
+@@ -1998,7 +1998,7 @@
+
+ static float *DPSOFTRAST_Array_TransformProject(int outarray, int inarray, const float *inmatrix16f)
+ {
+-#ifdef SSE_POSSIBLE
++#ifdef SSE2_POSSIBLE
+ float *data = inarray >= 0 ? DPSOFTRAST_Array_Load(outarray, inarray) : dpsoftrast.post_array4f[outarray];
+ dpsoftrast.drawclipped = DPSOFTRAST_Vertex_TransformProject(data, dpsoftrast.screencoord4f, &dpsoftrast.drawstarty, &dpsoftrast.drawendy, data, dpsoftrast.numvertices, inmatrix16f);
+ return data;
+@@ -2036,7 +2036,7 @@
+
+ static void DPSOFTRAST_Draw_Span_FinishBGRA8(DPSOFTRAST_State_Thread *thread, const DPSOFTRAST_State_Triangle * RESTRICT triangle, const DPSOFTRAST_State_Span * RESTRICT span, const unsigned char* RESTRICT in4ub)
+ {
+-#ifdef SSE_POSSIBLE
++#ifdef SSE2_POSSIBLE
+ int x;
+ int startx = span->startx;
+ int endx = span->endx;
+@@ -2545,7 +2545,7 @@
+
+ static void DPSOFTRAST_Draw_Span_Texture2DVaryingBGRA8(DPSOFTRAST_State_Thread *thread, const DPSOFTRAST_State_Triangle * RESTRICT triangle, const DPSOFTRAST_State_Span * RESTRICT span, unsigned char * RESTRICT out4ub, int texunitindex, int arrayindex, const float * RESTRICT zf)
+ {
+-#ifdef SSE_POSSIBLE
++#ifdef SSE2_POSSIBLE
+ int x;
+ int startx = span->startx;
+ int endx = span->endx;
+@@ -2981,7 +2981,7 @@
+
+ static void DPSOFTRAST_Draw_Span_MultiplyVaryingBGRA8(const DPSOFTRAST_State_Triangle * RESTRICT triangle, const DPSOFTRAST_State_Span * RESTRICT span, unsigned char *out4ub, const unsigned char *in4ub, int arrayindex, const float *zf)
+ {
+-#ifdef SSE_POSSIBLE
++#ifdef SSE2_POSSIBLE
+ int x;
+ int startx = span->startx;
+ int endx = span->endx;
+@@ -3028,7 +3028,7 @@
+
+ static void DPSOFTRAST_Draw_Span_VaryingBGRA8(const DPSOFTRAST_State_Triangle * RESTRICT triangle, const DPSOFTRAST_State_Span * RESTRICT span, unsigned char *out4ub, int arrayindex, const float *zf)
+ {
+-#ifdef SSE_POSSIBLE
++#ifdef SSE2_POSSIBLE
+ int x;
+ int startx = span->startx;
+ int endx = span->endx;
+@@ -3073,7 +3073,7 @@
+
+ static void DPSOFTRAST_Draw_Span_AddBloomBGRA8(const DPSOFTRAST_State_Triangle * RESTRICT triangle, const DPSOFTRAST_State_Span * RESTRICT span, unsigned char *out4ub, const unsigned char *ina4ub, const unsigned char *inb4ub, const float *subcolor)
+ {
+-#ifdef SSE_POSSIBLE
++#ifdef SSE2_POSSIBLE
+ int x, startx = span->startx, endx = span->endx;
+ __m128i localcolor = _mm_shuffle_epi32(_mm_cvtps_epi32(_mm_mul_ps(_mm_loadu_ps(subcolor), _mm_set1_ps(255.0f))), _MM_SHUFFLE(3, 0, 1, 2));
+ localcolor = _mm_packs_epi32(localcolor, localcolor);
+@@ -3096,7 +3096,7 @@
+
+ static void DPSOFTRAST_Draw_Span_MultiplyBuffersBGRA8(const DPSOFTRAST_State_Triangle * RESTRICT triangle, const DPSOFTRAST_State_Span * RESTRICT span, unsigned char *out4ub, const unsigned char *ina4ub, const unsigned char *inb4ub)
+ {
+-#ifdef SSE_POSSIBLE
++#ifdef SSE2_POSSIBLE
+ int x, startx = span->startx, endx = span->endx;
+ for (x = startx;x+2 <= endx;x+=2)
+ {
+@@ -3117,7 +3117,7 @@
+
+ static void DPSOFTRAST_Draw_Span_AddBuffersBGRA8(const DPSOFTRAST_State_Triangle * RESTRICT triangle, const DPSOFTRAST_State_Span * RESTRICT span, unsigned char *out4ub, const unsigned char *ina4ub, const unsigned char *inb4ub)
+ {
+-#ifdef SSE_POSSIBLE
++#ifdef SSE2_POSSIBLE
+ int x, startx = span->startx, endx = span->endx;
+ for (x = startx;x+2 <= endx;x+=2)
+ {
+@@ -3139,7 +3139,7 @@
+ #if 0
+ static void DPSOFTRAST_Draw_Span_TintedAddBuffersBGRA8(const DPSOFTRAST_State_Triangle * RESTRICT triangle, const DPSOFTRAST_State_Span * RESTRICT span, unsigned char *out4ub, const unsigned char *ina4ub, const unsigned char *inb4ub, const float *inbtintbgra)
+ {
+-#ifdef SSE_POSSIBLE
++#ifdef SSE2_POSSIBLE
+ int x, startx = span->startx, endx = span->endx;
+ __m128i tint = _mm_cvtps_epi32(_mm_mul_ps(_mm_loadu_ps(inbtintbgra), _mm_set1_ps(256.0f)));
+ tint = _mm_packs_epi32(tint, tint);
+@@ -3163,7 +3163,7 @@
+
+ static void DPSOFTRAST_Draw_Span_MixBuffersBGRA8(const DPSOFTRAST_State_Triangle * RESTRICT triangle, const DPSOFTRAST_State_Span * RESTRICT span, unsigned char *out4ub, const unsigned char *ina4ub, const unsigned char *inb4ub)
+ {
+-#ifdef SSE_POSSIBLE
++#ifdef SSE2_POSSIBLE
+ int x, startx = span->startx, endx = span->endx;
+ for (x = startx;x+2 <= endx;x+=2)
+ {
+@@ -3186,7 +3186,7 @@
+
+ static void DPSOFTRAST_Draw_Span_MixUniformColorBGRA8(const DPSOFTRAST_State_Triangle * RESTRICT triangle, const DPSOFTRAST_State_Span * RESTRICT span, unsigned char *out4ub, const unsigned char *in4ub, const float *color)
+ {
+-#ifdef SSE_POSSIBLE
++#ifdef SSE2_POSSIBLE
+ int x, startx = span->startx, endx = span->endx;
+ __m128i localcolor = _mm_shuffle_epi32(_mm_cvtps_epi32(_mm_mul_ps(_mm_loadu_ps(color), _mm_set1_ps(255.0f))), _MM_SHUFFLE(3, 0, 1, 2)), blend;
+ localcolor = _mm_packs_epi32(localcolor, localcolor);
+@@ -3320,7 +3320,7 @@
+
+ static void DPSOFTRAST_PixelShader_FlatColor(DPSOFTRAST_State_Thread *thread, const DPSOFTRAST_State_Triangle * RESTRICT triangle, const DPSOFTRAST_State_Span * RESTRICT span)
+ {
+-#ifdef SSE_POSSIBLE
++#ifdef SSE2_POSSIBLE
+ unsigned char * RESTRICT pixelmask = span->pixelmask;
+ unsigned char * RESTRICT pixel = (unsigned char *)dpsoftrast.fb_colorpixels[0] + (span->y * dpsoftrast.fb_width + span->x) * 4;
+ int x, startx = span->startx, endx = span->endx;
+@@ -3371,7 +3371,7 @@
+
+ static void DPSOFTRAST_PixelShader_VertexColor(DPSOFTRAST_State_Thread *thread, const DPSOFTRAST_State_Triangle * RESTRICT triangle, const DPSOFTRAST_State_Span * RESTRICT span)
+ {
+-#ifdef SSE_POSSIBLE
++#ifdef SSE2_POSSIBLE
+ unsigned char * RESTRICT pixelmask = span->pixelmask;
+ unsigned char * RESTRICT pixel = (unsigned char *)dpsoftrast.fb_colorpixels[0] + (span->y * dpsoftrast.fb_width + span->x) * 4;
+ int x, startx = span->startx, endx = span->endx;
+@@ -3445,7 +3445,7 @@
+
+ static void DPSOFTRAST_PixelShader_Lightmap(DPSOFTRAST_State_Thread *thread, const DPSOFTRAST_State_Triangle * RESTRICT triangle, const DPSOFTRAST_State_Span * RESTRICT span)
+ {
+-#ifdef SSE_POSSIBLE
++#ifdef SSE2_POSSIBLE
+ unsigned char * RESTRICT pixelmask = span->pixelmask;
+ unsigned char * RESTRICT pixel = (unsigned char *)dpsoftrast.fb_colorpixels[0] + (span->y * dpsoftrast.fb_width + span->x) * 4;
+ int x, startx = span->startx, endx = span->endx;
+@@ -4139,7 +4139,7 @@
+
+ static void DPSOFTRAST_PixelShader_LightSource(DPSOFTRAST_State_Thread *thread, const DPSOFTRAST_State_Triangle * RESTRICT triangle, const DPSOFTRAST_State_Span * RESTRICT span)
+ {
+-#ifdef SSE_POSSIBLE
++#ifdef SSE2_POSSIBLE
+ float buffer_z[DPSOFTRAST_DRAW_MAXSPANLENGTH];
+ unsigned char buffer_texture_colorbgra8[DPSOFTRAST_DRAW_MAXSPANLENGTH*4];
+ unsigned char buffer_texture_normalbgra8[DPSOFTRAST_DRAW_MAXSPANLENGTH*4];
+@@ -4847,7 +4847,7 @@
+
+ static void DPSOFTRAST_Interpret_Draw(DPSOFTRAST_State_Thread *thread, DPSOFTRAST_Command_Draw *command)
+ {
+-#ifdef SSE_POSSIBLE
++#ifdef SSE2_POSSIBLE
+ int cullface = thread->cullface;
+ int minx, maxx, miny, maxy;
+ int miny1, maxy1, miny2, maxy2;
+--- a/vid_shared.c 2017-08-30 06:29:14.000000000 +0200
++++ b/vid_shared.c 2024-03-18 19:11:31.063333077 +0100
+@@ -1729,16 +1729,11 @@
+
+ void VID_Shared_Init(void)
+ {
+-#ifdef SSE_POSSIBLE
+- if (Sys_HaveSSE2())
+- {
+- Con_Printf("DPSOFTRAST available (SSE2 instructions detected)\n");
+- Cvar_RegisterVariable(&vid_soft);
+- Cvar_RegisterVariable(&vid_soft_threads);
+- Cvar_RegisterVariable(&vid_soft_interlace);
+- }
+- else
+- Con_Printf("DPSOFTRAST not available (SSE2 disabled or not detected)\n");
++#ifdef SSE2_POSSIBLE
++ Con_Printf("DPSOFTRAST available (SSE2 instructions compiled in)\n");
++ Cvar_RegisterVariable(&vid_soft);
++ Cvar_RegisterVariable(&vid_soft_threads);
++ Cvar_RegisterVariable(&vid_soft_interlace);
+ #else
+ Con_Printf("DPSOFTRAST not available (SSE2 not compiled in)\n");
+ #endif
diff --git a/games-fps/quake15/files/0030-builddate-template.patch b/games-fps/quake15/files/0030-builddate-template.patch
new file mode 100644
index 0000000..c30a726
--- /dev/null
+++ b/games-fps/quake15/files/0030-builddate-template.patch
@@ -0,0 +1,21 @@
+--- a/builddate.c 2017-08-30 06:29:14.000000000 +0200
++++ b/builddate.c 2024-03-18 20:00:09.076666379 +0100
+@@ -1,17 +1,2 @@
+-#define STRINGIFY2(arg) #arg
+-#define STRINGIFY(arg) STRINGIFY2(arg)
+-
+ extern const char *buildstring;
+-const char *buildstring =
+-#ifndef NO_BUILD_TIMESTAMPS
+-__TIME__ " " __DATE__ " "
+-#endif
+-#ifdef SVNREVISION
+-STRINGIFY(SVNREVISION)
+-#else
+-"-"
+-#endif
+-#ifdef BUILDTYPE
+-" " STRINGIFY(BUILDTYPE)
+-#endif
+-;
++const char *buildstring = "%{PVR}";
diff --git a/games-fps/quake15/files/0040-enforce-quake15.patch b/games-fps/quake15/files/0040-enforce-quake15.patch
new file mode 100644
index 0000000..bccdec6
--- /dev/null
+++ b/games-fps/quake15/files/0040-enforce-quake15.patch
@@ -0,0 +1,20 @@
+--- a/common.c 2017-08-30 06:29:14.000000000 +0200
++++ b/common.c 2024-03-31 14:46:25.586415464 +0200
+@@ -1480,6 +1480,7 @@
+ { GAME_STRAPBOMB, GAME_STRAPBOMB, "strapbomb", "-strapbomb", "Strap-on-bomb Car", "Strap-on-bomb_Car", "id1", NULL, "strap", "strapbomb" }, // COMMANDLINEOPTION: Game: -strapbomb runs the game Strap-on-bomb Car
+ { GAME_MOONHELM, GAME_MOONHELM, "moonhelm", "-moonhelm", "MoonHelm", "MoonHelm", "data", NULL, "mh", "moonhelm" }, // COMMANDLINEOPTION: Game: -moonhelm runs the game MoonHelm
+ { GAME_VORETOURNAMENT, GAME_VORETOURNAMENT, "voretournament", "-voretournament", "Vore Tournament", "Vore_Tournament", "data", NULL, "voretournament", "voretournament" }, // COMMANDLINEOPTION: Game: -voretournament runs the multiplayer game Vore Tournament
++{ GAME_QUAKE15, GAME_NORMAL, "quake15", "-quake15", "Quake 1.5", "Quake 1.5", "id1", "quake15", "q15", "quake15"}, // COMMANDLINEOPTION: Game: -quake15 runs the game Quake 1.5
+ };
+
+ static void COM_SetGameType(int index);
+--- a/common.h 2017-08-30 06:29:14.000000000 +0200
++++ b/common.h 2024-03-31 14:46:50.596414296 +0200
+@@ -298,6 +298,7 @@
+ GAME_STRAPBOMB, // added by motorsep for Urre
+ GAME_MOONHELM,
+ GAME_VORETOURNAMENT,
++ GAME_QUAKE15,
+ GAME_COUNT
+ }
+ gamemode_t;
diff --git a/games-fps/quake15/metadata.xml b/games-fps/quake15/metadata.xml
index 097975e..6070ae2 100644
--- a/games-fps/quake15/metadata.xml
+++ b/games-fps/quake15/metadata.xml
@@ -1,4 +1,12 @@
-
+
+
+ moog621@gmail.com
+ Michał Dec
+
+
diff --git a/games-fps/quake15/quake15-0_beta2-r1.ebuild b/games-fps/quake15/quake15-0_beta2-r1.ebuild
index bef9a48..3c60be1 100644
--- a/games-fps/quake15/quake15-0_beta2-r1.ebuild
+++ b/games-fps/quake15/quake15-0_beta2-r1.ebuild
@@ -1,36 +1,252 @@
# Copyright 1999-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
-EAPI=7
+EAPI=8
+
+inherit flag-o-matic unpacker desktop wrapper
+
+# This is the only known version of the engine to work with this mod
+ENGINE_PV="20170829_beta1"
+ENGINE_SOURCE="darkplacesenginesource${ENGINE_PV}.tar.gz"
DESCRIPTION="A mod that makes Quake faster paced, harder, gorier and more violent."
-HOMEPAGE="https://www.moddb.com/mods/quake-15"
+HOMEPAGE="https://www.moddb.com/mods/quake-15 https://icculus.org/twilight/darkplaces"
+GIT_COMMIT="175af02fa8e6bc5c14ebac952c6925f9328c2348"
SRC_URI="
- https://www.moddb.com/downloads/mirror/173517/114/5090a373c5249e55e509808983481a04 -> Q15_PublicBeta1.7z
- https://www.moddb.com/downloads/mirror/173707/114/f7627345043efdfcd9e27d4906a382ac -> Q15_patch2.7z
+ https://github.com/DarkPlacesEngine/darkplaces/archive/${GIT_COMMIT}.tar.gz -> "${ENGINE_SOURCE}"
+ https://archive.org/download/quake15-mirror/Q15_PublicBeta1.7z
+ https://archive.org/download/quake15-mirror/patch2.7z -> Q15_patch2.7z
+ https://icculus.org/%7Emarco/sources/lmp2tga.c
"
-LICENSE="HPND"
+LICENSE="GPL-2 UNKNOWN"
SLOT="0"
-KEYWORDS="~amd64 ~x86 ~ppc64 ~arm64"
+# DarkPlaces' PNG is broken on big endian and this mod unfortunately uses PNG a lot. Sorry :(
+KEYWORDS="~amd64 ~arm64 ~x86"
+IUSE="alsa capture cdda cdinstall cpu_flags_x86_sse cpu_flags_x86_sse2 debug dedicated ipv6 opengl oss sdl textures"
-RDEPEND="=games-fps/darkplaces-20170829_beta1-r1"
-BDEPEND="app-arch/p7zip"
+REQUIRED_USE="
+ alsa? ( !oss )
+ oss? ( !alsa )
+ || ( alsa oss sdl )
+ ^^ ( opengl sdl )
+ amd64? (
+ cpu_flags_x86_sse
+ cpu_flags_x86_sse2
+ )
+"
+GLX_RDEPEND="
+ x11-libs/libX11
+ x11-libs/libXpm
+ x11-libs/libXext
+ x11-libs/libXxf86vm
+ virtual/opengl
+ alsa? ( media-libs/alsa-lib )
+ media-libs/libogg
+ media-libs/libvorbis
+ capture? ( media-libs/libtheora[encode] )
+ !capture? ( media-libs/libtheora )
+"
+SDL_RDEPEND="
+ media-libs/libsdl2[udev]
+ x11-libs/libX11
+ alsa? ( media-libs/alsa-lib )
+ media-libs/libogg
+ media-libs/libvorbis
+ capture? ( media-libs/libtheora[encode] )
+ !capture? ( media-libs/libtheora )
+"
+RDEPEND="
+ dev-libs/d0_blind_id
+ dev-games/ode
+ net-misc/curl
+ virtual/jpeg:0
+ sys-libs/zlib
+ media-libs/libpng
+ cdinstall? ( games-fps/quake1-data )
+ textures? ( >=games-fps/quake1-textures-20050820 )
+ opengl? ( ${GLX_RDEPEND} )
+ sdl? ( ${SDL_RDEPEND} )
+"
+BDEPEND="
+ opengl? (
+ sys-devel/gcc
+ media-gfx/imagemagick
+ app-arch/unzip
+ )
+ sdl? (
+ sys-devel/gcc
+ media-gfx/imagemagick
+ app-arch/unzip
+ )
+ app-arch/p7zip
+ app-alternatives/tar
+ app-alternatives/gzip
+ sys-apps/coreutils
+ sys-devel/patch
+ sys-apps/sed
+ virtual/pkgconfig
+"
S="${WORKDIR}"
+WAD_DIR="/usr/share/quake15"
+
+src_unpack() {
+ mkdir engine
+ tar -C engine --strip-components 1 -xf "${DISTDIR}/${ENGINE_SOURCE}"
+ 7z x "${DISTDIR}/Q15_PublicBeta1.7z" quake15
+ 7z x -y "${DISTDIR}/Q15_patch2.7z" quake15
+ ln -s /usr/share/quake1/id1/sound quake15/sound
+}
+
+src_prepare() {
+ default
+ cd "${S}/engine"
+ rm mingw_note.txt
+ strip-flags
+ patch -p1 -i "${FILESDIR}/0010-fix-dpsoftras-alignment.patch"
+ patch -p1 -i "${FILESDIR}/0020-do-not-assume-sse2-is-available-just-because-sse-is-available.patch"
+ # Only additional CFLAGS optimization is the -march flag
+ local march=$(get-flag -march)
+ sed -i \
+ -e "s:-lasound:$(pkg-config --libs alsa):" \
+ -e "/^CPUOPTIMIZATIONS/d" \
+ -e '/^OPTIM_RELEASE/s/=.*/=$(CFLAGS)/' \
+ -e '/^OPTIM_DEBUG/s/=.*/=$(CFLAGS)/' \
+ -e '/^LDFLAGS_DEBUG/s/$/ $(LDFLAGS)/' \
+ -e '/^LDFLAGS_RELEASE/s/$/ $(LDFLAGS)/' \
+ -e "s:strip:true:" \
+ makefile.inc || die
+ if ! use cdda; then
+ elog "CD support: disabled"
+ sed -i \
+ -e "s:/dev/cdrom:/dev/null:" \
+ cd_linux.c || die
+ sed -i \
+ -e 's:COM_CheckParm("-nocdaudio"):1:' \
+ cd_shared.c || die
+ else
+ elog "CD support: enabled"
+ fi
+ if ! use ipv6; then
+ elog "IPv6 support: disabled"
+ sed -i 's/^#\(CFLAGS_NET+=-DNOSUPPORTIPV6\)$/\1/' makefile || die
+ else
+ elog "IPv6 support: enabled"
+ fi
+ patch -p1 -i "${FILESDIR}/0030-builddate-template.patch"
+ sed -i "s/%{PVR}/${ENGINE_PV}/" builddate.c || die
+ patch -p1 -i "${FILESDIR}/0040-enforce-quake15.patch"
+}
+
+src_compile() {
+ local video_capture="disabled"
+ if use capture; then
+ elog "Video capture: enabled"
+ video_capture="enabled"
+ else
+ elog "Video capture: disabled"
+ fi
+ local sse_enabled=0
+ local sse2_enabled=0
+ if use cpu_flags_x86_sse; then
+ elog "Skeletal animations: uses SSE"
+ sse_enabled=1
+ else
+ if use amd64; then
+ elog "Skeletal animations: uses SSE, not disabling on AMD64"
+ sse_enabled=1
+ else
+ elog "Skeletal animations: uses generic code"
+ fi
+ fi
+ if use cpu_flags_x86_sse2; then
+ elog "Softrender: uses SSE2"
+ sse2_enabled=1
+ else
+ if use amd64; then
+ elog "Softrender: uses SSE2, not disabling on AMD64"
+ sse2_enabled=1
+ else
+ elog "Softrender: disabled"
+ fi
+ fi
+ local opts="DP_FS_BASEDIR=\"${WAD_DIR}\" \
+ DP_LINK_JPEG=shared \
+ DP_LINK_CRYPTO=shared \
+ DP_LINK_CRYPTO_RIJNDAEL=shared \
+ DP_LINK_ZLIB=shared \
+ DP_LINK_ODE=shared \
+ DP_VIDEO_CAPTURE=${video_capture} \
+ DP_PRELOAD_DEPENDENCIES=1 \
+ GENTOO_BUILD=1 \
+ DP_SSE=${sse_enabled} \
+ DP_SSE2=${sse2_enabled} \
+ FORCEGAME=quake15"
+ # If neither OSS or ALSA are selected, then SDL must be selected.
+ # However, SDL is a backend for both graphics and sound - so not having ALSA or OSS is only an option, if OpenGL is not.
+ local sound_api="NULL"
+ if use oss; then
+ sound_api="OSS"
+ elif use alsa; then
+ sound_api="ALSA"
+ elif ! use sdl; then
+ die "No sound API has been selected."
+ fi
+ opts+=" DP_SOUND_API=${sound_api}"
+ local type="release"
+ if use debug; then
+ type="debug"
+ fi
+ ln -s /usr/share/quake1/id1 id1
+ # Only compile a maximum of 1 client
+ cd ${WORKDIR}/engine
+ local compile_client=false
+ if use sdl; then
+ compile_client=true
+ emake ${opts} "sdl-${type}"
+ elif use opengl; then
+ compile_client=true
+ emake ${opts} "cl-${type}"
+ fi
+ if use dedicated; then
+ emake ${opts} "sv-${type}"
+ fi
+ if ${compile_client}; then
+ cd ${WORKDIR}
+ unzip -j quake15/q15.pk3 gfx/qplaque.lmp
+ gcc ${DISTDIR}/lmp2tga.c -o lmp2tga
+ ./lmp2tga qplaque.lmp
+ convert qplaque.tga -gravity North -chop 0x112 ${WORKDIR}/engine/${PN}.png
+ fi
+}
src_install() {
- insinto "/usr/share/quake1"
+ pushd "${WORKDIR}/engine"
+ if use opengl || use sdl ; then
+ local type=$(use sdl && echo "sdl" || echo "glx")
+ newbin "darkplaces-${type}" ${PN}
+ newicon ${PN}.png ${PN}.png
+ make_desktop_entry ${PN} "Quake 1.5"
+ fi
+ if use dedicated; then
+ newbin darkplaces-dedicated ${PN}-ded
+ fi
+ dodoc *.txt todo "${WORKDIR}"/engine/*.txt
+ popd
+ insinto "${WAD_DIR}"
+ doins id1
doins -r quake15
}
pkg_postinst() {
- echo
- elog "In order to play this mod run Quake with -game option:"
- elog " darkplaces -game quake15"
- elog "However, this mod can only be played with =games-fps/darkplaces-20170829_beta1-r1"
- elog "If you update the engine, you should not attempt to start this mod."
- elog "See the relevant GitHub issue for more info:"
- elog " https://github.com/DarkPlacesEngine/darkplaces/issues/133"
- echo
+ if ! use cdinstall; then
+ elog "Please make sure that the path /usr/share/quake1/id1 exists and place pak0.pak and pak1.pak in /usr/share/quake1/id1"
+ if use cdda; then
+ elog "If you wish to have the original soundtrack available without playing from an optical drive, please make sure that the path /usr/share/quake1/id1/sound/cdtracks exists, and that it contains the original soundtrack. The expected filename schema is track%i.%s with a double-digit count, either in WAV RIFF or OGG Vorbis format."
+ fi
+ fi
+ if use sdl && ! use alsa; then
+ einfo "If audio latency is an issue, consider choosing OpenGL and ALSA USE flags instead of SDL."
+ fi
}