summaryrefslogtreecommitdiff
path: root/games-roguelike
diff options
context:
space:
mode:
authorroot <root@alpha.trunkmasters.com>2026-06-12 19:09:37 -0500
committerroot <root@alpha.trunkmasters.com>2026-06-12 19:09:37 -0500
commitb590c8d7572b727d565cc0b8ff660d43569845de (patch)
tree06f7a4102ea4e845df8b66660f252920d52952f9 /games-roguelike
parent24f9cbfc4c34fdb6a6e03311674414e881ceab47 (diff)
downloadbaldeagleos-repo-b590c8d7572b727d565cc0b8ff660d43569845de.tar.gz
baldeagleos-repo-b590c8d7572b727d565cc0b8ff660d43569845de.tar.xz
baldeagleos-repo-b590c8d7572b727d565cc0b8ff660d43569845de.zip
Adding metadata
Diffstat (limited to 'games-roguelike')
-rw-r--r--games-roguelike/FTL-gog/FTL-gog-1.6.12.2.35269.ebuild64
-rw-r--r--games-roguelike/FTL-gog/Manifest1
-rw-r--r--games-roguelike/FTL-gog/metadata.xml17
-rw-r--r--games-roguelike/FTL/FTL-1.5.13-r1.ebuild70
-rw-r--r--games-roguelike/FTL/Manifest1
-rw-r--r--games-roguelike/FTL/metadata.xml12
-rw-r--r--games-roguelike/angband/Manifest2
-rw-r--r--games-roguelike/angband/angband-4.2.6.ebuild108
-rw-r--r--games-roguelike/angband/metadata.xml16
-rw-r--r--games-roguelike/crossfire-client/Manifest1
-rw-r--r--games-roguelike/crossfire-client/crossfire-client-1.75.3.ebuild61
-rw-r--r--games-roguelike/crossfire-client/files/crossfire-client-1.75.3-cmake4.patch11
-rw-r--r--games-roguelike/crossfire-client/files/crossfire-client-1.75.3-fix_overflow.patch32
-rw-r--r--games-roguelike/crossfire-client/files/crossfire-client-1.75.3-sdl.patch26
-rw-r--r--games-roguelike/crossfire-client/files/crossfire-client-1.75.3-staticlib.patch15
-rw-r--r--games-roguelike/crossfire-client/metadata.xml9
-rw-r--r--games-roguelike/dwarf-fortress/Manifest2
-rw-r--r--games-roguelike/dwarf-fortress/dwarf-fortress-51.13.ebuild62
-rw-r--r--games-roguelike/dwarf-fortress/files/dwarf-fortress9
-rw-r--r--games-roguelike/dwarf-fortress/metadata.xml9
-rw-r--r--games-roguelike/hengband/Manifest1
-rw-r--r--games-roguelike/hengband/files/hengband-2.1.2-autoconf-ncurses.patch28
-rw-r--r--games-roguelike/hengband/hengband-2.2.1.ebuild65
-rw-r--r--games-roguelike/hengband/metadata.xml9
-rw-r--r--games-roguelike/moria/Manifest1
-rw-r--r--games-roguelike/moria/files/moria-5.7.12-gentoo-paths.patch33
-rw-r--r--games-roguelike/moria/files/moria.6108
-rw-r--r--games-roguelike/moria/metadata.xml9
-rw-r--r--games-roguelike/moria/moria-5.7.15.ebuild50
-rw-r--r--games-roguelike/neon-chrome/Manifest1
-rw-r--r--games-roguelike/neon-chrome/metadata.xml9
-rw-r--r--games-roguelike/neon-chrome/neon-chrome-1.1.12.ebuild49
-rw-r--r--games-roguelike/nethack/Manifest2
-rw-r--r--games-roguelike/nethack/files/nethack-3.6.0-nethackrc103
-rw-r--r--games-roguelike/nethack/files/nethack-3.6.3-hint-tty19
-rw-r--r--games-roguelike/nethack/files/nethack-3.6.3-hint-x1123
-rw-r--r--games-roguelike/nethack/files/nethack-3.6.3-recover.patch132
-rw-r--r--games-roguelike/nethack/files/nethack-3.6.6-clang16.patch10
-rw-r--r--games-roguelike/nethack/files/nethack-3.6.7-hurd-tparm.patch15
-rw-r--r--games-roguelike/nethack/files/nethack-3.6.7-no-define-warn-unused-result.patch17
-rw-r--r--games-roguelike/nethack/files/nethack-3.6.7-path-max.patch15
-rw-r--r--games-roguelike/nethack/files/nethack-5.0.0-fix_make.patch12
-rw-r--r--games-roguelike/nethack/files/nethack-5.0.0-fix_musl_gcc.patch17
-rw-r--r--games-roguelike/nethack/files/nethack-5.0.0-help.patch12
-rw-r--r--games-roguelike/nethack/files/nethack-5.0.0-hint-qt622
-rw-r--r--games-roguelike/nethack/files/nethack-5.0.0-hint-qt6-x1124
-rw-r--r--games-roguelike/nethack/files/nethack-5.0.0-hint-x1123
-rw-r--r--games-roguelike/nethack/files/nethack-5.0.0-hurd-tparm.patch13
-rw-r--r--games-roguelike/nethack/files/nethack-5.0.0-no-define-warn-unused-result.patch13
-rw-r--r--games-roguelike/nethack/files/nethack-5.0.0-recover.patch122
-rw-r--r--games-roguelike/nethack/files/nethack-5.0.0-system-lua.patch82
-rw-r--r--games-roguelike/nethack/metadata.xml12
-rw-r--r--games-roguelike/nethack/nethack-3.6.7-r1.ebuild159
-rw-r--r--games-roguelike/nethack/nethack-3.6.7.ebuild153
-rw-r--r--games-roguelike/nethack/nethack-5.0.0-r1.ebuild233
-rw-r--r--games-roguelike/nethack/nethack-5.0.0.ebuild201
-rw-r--r--games-roguelike/powder/Manifest1
-rw-r--r--games-roguelike/powder/files/powder-117-gcc6.patch20
-rw-r--r--games-roguelike/powder/metadata.xml9
-rw-r--r--games-roguelike/powder/powder-118.ebuild39
-rw-r--r--games-roguelike/scourge/Manifest2
-rw-r--r--games-roguelike/scourge/files/scourge-0.21.1-Wc++11-narrowing.patch18
-rw-r--r--games-roguelike/scourge/files/scourge-0.21.1-automake-1.13.patch11
-rw-r--r--games-roguelike/scourge/files/scourge-0.21.1-freetype_pkgconfig.patch32
-rw-r--r--games-roguelike/scourge/files/scourge-0.21.1-gcc-11.patch62
-rw-r--r--games-roguelike/scourge/files/scourge-0.21.1-gcc47.patch12
-rw-r--r--games-roguelike/scourge/files/scourge-0.21.1-gcc6.patch34
-rw-r--r--games-roguelike/scourge/files/scourge-0.21.1-respect-AR.patch11
-rw-r--r--games-roguelike/scourge/metadata.xml9
-rw-r--r--games-roguelike/scourge/scourge-0.21.1-r2.ebuild82
-rw-r--r--games-roguelike/stone-soup/Manifest31
-rw-r--r--games-roguelike/stone-soup/files/avoid-musl-execinfo.patch12
-rw-r--r--games-roguelike/stone-soup/files/make-advpng.patch21
-rw-r--r--games-roguelike/stone-soup/files/make-v3.patch114
-rw-r--r--games-roguelike/stone-soup/files/make.patch119
-rw-r--r--games-roguelike/stone-soup/files/rltiles-make.patch58
-rw-r--r--games-roguelike/stone-soup/metadata.xml46
-rw-r--r--games-roguelike/stone-soup/stone-soup-0.25.1-r104.ebuild220
-rw-r--r--games-roguelike/stone-soup/stone-soup-0.26.1-r3.ebuild224
-rw-r--r--games-roguelike/stone-soup/stone-soup-0.27.1-r2.ebuild220
-rw-r--r--games-roguelike/stone-soup/stone-soup-0.28.0-r2.ebuild239
-rw-r--r--games-roguelike/stone-soup/stone-soup-0.29.1-r1.ebuild241
-rw-r--r--games-roguelike/stone-soup/stone-soup-0.30.1-r1.ebuild241
-rw-r--r--games-roguelike/stone-soup/stone-soup-0.31.0-r1.ebuild241
-rw-r--r--games-roguelike/stone-soup/stone-soup-0.32.1-r1.ebuild241
-rw-r--r--games-roguelike/stone-soup/stone-soup-0.33.1-r1.ebuild241
-rw-r--r--games-roguelike/stone-soup/stone-soup-0.34.0-r1.ebuild241
-rw-r--r--games-roguelike/stone-soup/stone-soup-0.34.1.ebuild241
-rw-r--r--games-roguelike/tome/Manifest1
-rw-r--r--games-roguelike/tome/metadata.xml9
-rw-r--r--games-roguelike/tome/tome-2.4.0_p20251212.ebuild49
-rw-r--r--games-roguelike/tomenet/Manifest1
-rw-r--r--games-roguelike/tomenet/files/tomenet-4.9.1-disable-experimental.patch12
-rw-r--r--games-roguelike/tomenet/files/tomenet-4.9.2-makefile.patch48
-rw-r--r--games-roguelike/tomenet/files/tomenet-server-wrapper6
-rw-r--r--games-roguelike/tomenet/files/tomenet-wrapper18
-rw-r--r--games-roguelike/tomenet/metadata.xml23
-rw-r--r--games-roguelike/tomenet/tomenet-4.9.2.ebuild98
-rw-r--r--games-roguelike/zangband/Manifest1
-rw-r--r--games-roguelike/zangband/files/zangband-2.7.4c-configure.patch51
-rw-r--r--games-roguelike/zangband/files/zangband-2.7.4c-makefile.patch29
-rw-r--r--games-roguelike/zangband/files/zangband-2.7.4c-rng.patch11
-rw-r--r--games-roguelike/zangband/files/zangband-2.7.4c-tinfo.patch12
-rw-r--r--games-roguelike/zangband/files/zangband-2.7.4c-tk85.patch19
-rw-r--r--games-roguelike/zangband/metadata.xml9
-rw-r--r--games-roguelike/zangband/zangband-2.7.4c-r1.ebuild82
106 files changed, 6137 insertions, 0 deletions
diff --git a/games-roguelike/FTL-gog/FTL-gog-1.6.12.2.35269.ebuild b/games-roguelike/FTL-gog/FTL-gog-1.6.12.2.35269.ebuild
new file mode 100644
index 000000000000..fe20f5e8e0c2
--- /dev/null
+++ b/games-roguelike/FTL-gog/FTL-gog-1.6.12.2.35269.ebuild
@@ -0,0 +1,64 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit desktop unpacker
+
+DESCRIPTION="Top-down roguelike space ship simulator"
+HOMEPAGE="https://www.gog.com/game/faster_than_light"
+SRC_URI="ftl_advanced_edition_${PV//./_}.sh"
+RESTRICT="bindist fetch mirror strip test"
+
+LICENSE="GOG-EULA"
+SLOT="0"
+KEYWORDS="-* ~amd64 ~x86"
+IUSE=""
+
+BDEPEND="app-arch/unzip"
+RDEPEND="media-libs/freetype
+ media-libs/libsdl[X,sound,opengl,video]
+ media-libs/libpng
+ virtual/zlib:=
+ virtual/opengl"
+
+S="${WORKDIR}/data/noarch"
+
+pkg_nofetch() {
+ einfo "Please buy and download ${SRC_URI} from"
+ einfo "https://www.gog.com/game/faster_than_light"
+ einfo "and place it in your DISTDIR directory."
+}
+
+src_unpack() {
+ unpack_zip "${DISTDIR}/${A}"
+}
+
+src_prepare() {
+ default
+ rm -r support/{xdg*,*.{sh,txt}} || die
+ if ! use x86; then
+ rm game/data/FTL.x86 || die
+ fi
+ if ! use amd64; then
+ rm game/data/FTL.amd64 || die
+ fi
+
+ sed -i start.sh -e '/chmod/d' || die
+}
+
+src_install() {
+ insinto /opt/FTL
+ doins -r .
+ fperms +x /opt/FTL/{start.sh,game/FTL,game/data/FTL}
+
+ if use x86; then
+ fperms +x /opt/FTL/game/data/FTL.x86
+ fi
+ if use amd64; then
+ fperms +x /opt/FTL/game/data/FTL.amd64
+ fi
+
+ make_desktop_entry "/opt/FTL/start.sh" "FTL: Advanced Edition" FTL
+ newicon support/icon.png FTL.png
+}
diff --git a/games-roguelike/FTL-gog/Manifest b/games-roguelike/FTL-gog/Manifest
new file mode 100644
index 000000000000..eb8cfb556ab7
--- /dev/null
+++ b/games-roguelike/FTL-gog/Manifest
@@ -0,0 +1 @@
+DIST ftl_advanced_edition_1_6_12_2_35269.sh 246732960 BLAKE2B a26cafabc43b7e80d31d105fb909d867319c4bd900f7558277f17399bb4998b27c3b9f1d18f670ae1092ae872840b0181c3bea81790edd097240d1ee78abc924 SHA512 d3e061605069e874ed3e55440e5aae24ab6690977ce477728a46f7e7f487595a09ab4a56ec22c784e454286b0bfe2a3a791d78645fd7dc0feab9649cf282afd2
diff --git a/games-roguelike/FTL-gog/metadata.xml b/games-roguelike/FTL-gog/metadata.xml
new file mode 100644
index 000000000000..b93adb8f4a6c
--- /dev/null
+++ b/games-roguelike/FTL-gog/metadata.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>kitsunenokenja@protonmail.ch</email>
+ <name>Rob Levitsky</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>games@gentoo.org</email>
+ <name>Gentoo Games Project</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/games-roguelike/FTL/FTL-1.5.13-r1.ebuild b/games-roguelike/FTL/FTL-1.5.13-r1.ebuild
new file mode 100644
index 000000000000..793e9524c3e1
--- /dev/null
+++ b/games-roguelike/FTL/FTL-1.5.13-r1.ebuild
@@ -0,0 +1,70 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit desktop wrapper
+
+DESCRIPTION="Faster Than Light: A spaceship simulation real-time roguelike-like game"
+HOMEPAGE="https://subsetgames.com/ftl.html"
+SRC_URI="FTL.${PV}.tar.gz"
+S="${WORKDIR}"/${PN}
+
+LICENSE="all-rights-reserved Boost-1.0 free-noncomm MIT bundled-libs? ( FTL LGPL-2.1 ZLIB libpng )"
+SLOT="0"
+KEYWORDS="-* ~amd64 ~x86"
+IUSE="bundled-libs"
+
+RESTRICT="fetch bindist splitdebug"
+
+RDEPEND="
+ sys-devel/gcc[cxx]
+ virtual/opengl
+ !bundled-libs? (
+ media-libs/devil[png]
+ media-libs/freetype:2
+ media-libs/libsdl[X,sound,joystick,opengl,video]
+ virtual/zlib:=
+ )
+"
+
+QA_PREBUILT="
+ opt/${PN}/bin/${PN}
+ opt/${PN}/lib/*
+"
+
+pkg_nofetch() {
+ einfo "Please buy & download ${SRC_URI} from:"
+ einfo " ${HOMEPAGE}"
+ einfo "and move it to your DISTDIR directory."
+ einfo
+}
+
+src_prepare() {
+ default
+
+ if ! use bundled-libs ; then
+ # no system lib for libbass available
+ find data/${ARCH}/lib -type f \! -name "libbass*" -delete || die
+ fi
+}
+
+src_install() {
+ local dir=/opt/${PN}
+
+ insinto ${dir}
+ doins -r data/resources
+
+ exeinto ${dir}/bin
+ doexe data/${ARCH}/bin/${PN}
+ exeinto ${dir}/lib
+ doexe data/${ARCH}/lib/*.so*
+
+ make_wrapper ${PN} "${dir}/bin/${PN}" "${dir}" "${dir}/lib"
+ make_desktop_entry ${PN} "Faster Than Light" "/usr/share/pixmaps/FTL.bmp"
+
+ newicon data/resources/exe_icon.bmp FTL.bmp
+
+ docinto html
+ dodoc ${PN}_README.html
+}
diff --git a/games-roguelike/FTL/Manifest b/games-roguelike/FTL/Manifest
new file mode 100644
index 000000000000..3090af5b6a49
--- /dev/null
+++ b/games-roguelike/FTL/Manifest
@@ -0,0 +1 @@
+DIST FTL.1.5.13.tar.gz 197569383 BLAKE2B 29b61c92dc242c6239e236761a89c464efc3889e1d28bbcd3466548090f4ba23450597ef9cd0a7130d0caea1d45a9cfdd87a56a65998dd4da146f1ade5d9a68d SHA512 129aa9ea13b6889520cb637bcbda0452f3dc2e8d93fb0e4d1c7938436d776b39a0a33b4e9d943e058ab5c80dcbb6e7bb874d0a78bd8a2a5a3a7e34159e1faac9
diff --git a/games-roguelike/FTL/metadata.xml b/games-roguelike/FTL/metadata.xml
new file mode 100644
index 000000000000..c66b3a3c8bb5
--- /dev/null
+++ b/games-roguelike/FTL/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>games@gentoo.org</email>
+ <name>Gentoo Games Project</name>
+ </maintainer>
+ <use>
+ <flag name="bundled-libs">Use bundled libraries.</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/games-roguelike/angband/Manifest b/games-roguelike/angband/Manifest
new file mode 100644
index 000000000000..530f865fa5f5
--- /dev/null
+++ b/games-roguelike/angband/Manifest
@@ -0,0 +1,2 @@
+DIST angband-4.2.6-man.tar.gz 137143 BLAKE2B f8896d18b4e6e7ec9e68fa6b1a24e923fde50660215f9e16877e0bae90d588af85681466fb48ada0caab12be99b6f12f01de8f4b4650dbc8db51a0e4ff2ff225 SHA512 c40c567f96e39cba52db2339397dc68a17d9dbf6c01d224040349a005e619cd7b740e98b351417f3f5028b0188040b581b1ee80ae79943725d0a953fbe718035
+DIST angband-4.2.6.tar.gz 25964779 BLAKE2B a60470cf110fee8c363fc0f55b56d3078e273f0b7096bea3a1c9750f6d450ca8eb2a686df78443fec8881700268ba7afdfec3ed59bbf5c3365f5686c4892d6ca SHA512 1682206eb4005295e5f2034921eec6cd56f1dc70be7792b5c7048d439143e2da9fb2f0c92b3703ea26ea1c80ec6223882c64deb2b91294310d594dec029a31cb
diff --git a/games-roguelike/angband/angband-4.2.6.ebuild b/games-roguelike/angband/angband-4.2.6.ebuild
new file mode 100644
index 000000000000..4c662bd7d2ed
--- /dev/null
+++ b/games-roguelike/angband/angband-4.2.6.ebuild
@@ -0,0 +1,108 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Generate the man page from the source tree with:
+# sudo emerge -u dev-python/sphinx
+# DOC_HTML_THEME=classic sphinx-build -b man docs .
+
+inherit autotools desktop xdg-utils
+
+DESCRIPTION="Roguelike dungeon exploration game based on the books of J.R.R. Tolkien"
+HOMEPAGE="https://rephial.org/"
+SRC_URI="https://github.com/angband/angband/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz
+ https://dev.gentoo.org/~steils/distfiles/${P}-man.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~riscv ~x86"
+IUSE="+ncurses sdl sound +X"
+
+REQUIRED_USE="sound? ( sdl )
+ || ( X ncurses )"
+
+RDEPEND="X? (
+ media-fonts/font-misc-misc
+ x11-libs/libX11
+ )
+ ncurses? ( sys-libs/ncurses:=[unicode(+)] )
+ sdl? (
+ media-libs/libsdl2[video,X]
+ media-libs/sdl2-image[png]
+ media-libs/sdl2-ttf
+ sound? (
+ media-libs/libsdl2[sound]
+ media-libs/sdl2-mixer[mp3]
+ )
+ )"
+DEPEND="${RDEPEND}"
+BDEPEND="virtual/pkgconfig"
+
+src_prepare() {
+ default
+
+ sed -i -e '/libpath/s#datarootdir#datadir#' configure.ac || die
+ sed -i -e "/^.SILENT/d" mk/buildsys.mk.in || die
+
+ if use !sound ; then
+ sed -i -e 's/sounds//' lib/Makefile || die
+ fi
+
+ # Game constant files are now system config files in Angband, but
+ # users will be hidden from applying updates by default
+ {
+ echo "CONFIG_PROTECT_MASK=\"/etc/${PN}/customize/\""
+ echo "CONFIG_PROTECT_MASK=\"/etc/${PN}/gamedata/\""
+ } > "${T}"/99${PN} || die
+
+ eautoreconf
+}
+
+src_configure() {
+ local myconf=(
+ --bindir="${EPREFIX}"/usr/bin
+ --with-private-dirs
+ $(use_enable X x11)
+ $(use_enable ncurses curses)
+ )
+ if use sdl; then
+ myconf+=(
+ --enable-sdl2
+ $(use_enable sound sdl2-mixer)
+ )
+ fi
+
+ econf "${myconf[@]}"
+}
+
+src_install() {
+ default
+
+ dodoc changes.txt README.md
+ doman "${WORKDIR}"/${PN}.1
+ doenvd "${T}"/99${PN}
+
+ if use X || use sdl; then
+ use X && make_desktop_entry "angband -mx11" "Angband (X11)" "${PN}"
+ use sdl && make_desktop_entry "angband -msdl2" "Angband (SDL2)" "${PN}"
+
+ local s
+ for s in 16 32 128 256 512; do
+ newicon -s ${s} lib/icons/att-${s}.png "${PN}.png"
+ done
+ newicon -s scalable lib/icons/att.svg "${PN}.svg"
+ fi
+}
+
+pkg_postinst() {
+ if use X || use sdl; then
+ xdg_icon_cache_update
+ fi
+}
+
+pkg_postrm() {
+ if use X || use sdl; then
+ xdg_icon_cache_update
+ fi
+}
diff --git a/games-roguelike/angband/metadata.xml b/games-roguelike/angband/metadata.xml
new file mode 100644
index 000000000000..d1e031208478
--- /dev/null
+++ b/games-roguelike/angband/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>games@gentoo.org</email>
+ <name>Gentoo Games Project</name>
+ </maintainer>
+ <maintainer type="person">
+ <email>steils@gentoo.org</email>
+ <name>Stefan Strogin</name>
+ </maintainer>
+ <use>
+ <flag name="sound">Enable and install sounds</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/games-roguelike/crossfire-client/Manifest b/games-roguelike/crossfire-client/Manifest
new file mode 100644
index 000000000000..745bf85123c9
--- /dev/null
+++ b/games-roguelike/crossfire-client/Manifest
@@ -0,0 +1 @@
+DIST crossfire-client-1.75.3.tar.gz 1052116 BLAKE2B a093cba8bc5cf6719454ce80b6f55a918ca283c80fbf063b74fe74e751d95a8f22bab3e276b10f8d657456c8081d4d973515335c99a564db978b23480537ea4a SHA512 e838b3484f9637ccc01678559c7e7a1a7e29cdb37a850fa19b62dc64e2164345cfe3279c073c7b640ccb3ead54e5e6c0f16787d69257c36534730e72b7165a3e
diff --git a/games-roguelike/crossfire-client/crossfire-client-1.75.3.ebuild b/games-roguelike/crossfire-client/crossfire-client-1.75.3.ebuild
new file mode 100644
index 000000000000..0be3edff018b
--- /dev/null
+++ b/games-roguelike/crossfire-client/crossfire-client-1.75.3.ebuild
@@ -0,0 +1,61 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+LUA_COMPAT=( lua5-{1,3,4} luajit )
+
+inherit cmake lua-single vala xdg
+
+DESCRIPTION="Client for the nethack-style but more in the line of UO"
+HOMEPAGE="https://crossfire.real-time.com/"
+SRC_URI="https://downloads.sourceforge.net/project/crossfire/${PN}/${PV}/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="lua"
+REQUIRED_USE="lua? ( ${LUA_REQUIRED_USE} )"
+
+RDEPEND="
+ dev-libs/glib:2
+ media-libs/libpng:=
+ media-libs/libsdl2
+ media-libs/sdl2-mixer[vorbis,wav]
+ net-misc/curl
+ x11-libs/cairo
+ x11-libs/gdk-pixbuf:2
+ x11-libs/gtk+:2
+ x11-libs/pango
+ lua? ( ${LUA_DEPS} )
+"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ $(vala_depend)
+ dev-lang/perl
+ virtual/pkgconfig
+"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-sdl.patch
+ "${FILESDIR}"/${P}-staticlib.patch
+ "${FILESDIR}"/${P}-fix_overflow.patch
+ "${FILESDIR}"/${P}-cmake4.patch
+)
+
+pkg_setup() {
+ use lua && lua-single_pkg_setup
+ vala_setup
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DLUA=$(usex lua)
+ -DMETASERVER2=ON
+ # libsdl2 and sdl2-mixer are required anyway
+ -DSOUND=ON
+ -DVALA_EXECUTABLE="${VALAC}"
+ )
+
+ cmake_src_configure
+}
diff --git a/games-roguelike/crossfire-client/files/crossfire-client-1.75.3-cmake4.patch b/games-roguelike/crossfire-client/files/crossfire-client-1.75.3-cmake4.patch
new file mode 100644
index 000000000000..76240d33d1ad
--- /dev/null
+++ b/games-roguelike/crossfire-client/files/crossfire-client-1.75.3-cmake4.patch
@@ -0,0 +1,11 @@
+Bump for cmake4 compat, patch from upstream
+https://sourceforge.net/p/crossfire/crossfire-client/ci/672ad8a6f5f499b7ac36b1fb8938267c5ff57e3d/
+
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 3.1)
++cmake_minimum_required(VERSION 3.5)
+ project(crossfire-client C)
+ set(VERSION 1.75.3)
+
diff --git a/games-roguelike/crossfire-client/files/crossfire-client-1.75.3-fix_overflow.patch b/games-roguelike/crossfire-client/files/crossfire-client-1.75.3-fix_overflow.patch
new file mode 100644
index 000000000000..08612fbcf5ed
--- /dev/null
+++ b/games-roguelike/crossfire-client/files/crossfire-client-1.75.3-fix_overflow.patch
@@ -0,0 +1,32 @@
+Fix overflow, from upstream
+https://sourceforge.net/p/crossfire/crossfire-client/ci/4c98710209e39e379fccd6aa9db96978df21fe4b/
+
+> inlined from ‘cs_print_string’ at common/newsocket.c:260:15:
+> /usr/include/bits/stdio2.h:100:10:
+> warning: ‘__builtin___vsnprintf_chk’ specified bound 256 exceeds destination size 254 [-Wstringop-overflow=]
+
+--- a/common/newsocket.c
++++ b/common/newsocket.c
+@@ -20,6 +20,7 @@
+
+ #include "client.h"
+
++#include <assert.h>
+ #include <errno.h>
+
+ #include "script.h"
+@@ -257,12 +258,9 @@
+
+ SockList_Init(&sl, buf);
+ va_start(args, str);
+- sl.len += vsnprintf((char*)sl.buf + sl.len, MAX_BUF-sl.len, str, args);
++ sl.len += vsnprintf((char*)sl.buf + sl.len, MAX_BUF-sl.len-3, str, args); // need 2 bytes for length, 1 for null termination
+ va_end(args);
+- // Adjust sl.len to account for when we overflow the buffer.
+- if (sl.len > MAX_BUF - 3) {
+- sl.len = MAX_BUF - 3;
+- }
++ assert(sl.len <= MAX_BUF - 3);
+
+ script_monitor_str((char*)sl.buf);
+
diff --git a/games-roguelike/crossfire-client/files/crossfire-client-1.75.3-sdl.patch b/games-roguelike/crossfire-client/files/crossfire-client-1.75.3-sdl.patch
new file mode 100644
index 000000000000..02dd4cbcd8f6
--- /dev/null
+++ b/games-roguelike/crossfire-client/files/crossfire-client-1.75.3-sdl.patch
@@ -0,0 +1,26 @@
+Fix finding and including for SDL2
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index e346c49..0461e8a 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -26,6 +26,7 @@ set(CMAKE_INSTALL_DATADIR ${CMAKE_INSTALL_DATAROOTDIR}/crossfire-client)
+ find_program(GLIB_COMPILE_RESOURCES NAMES glib-compile-resources)
+ find_package(PkgConfig REQUIRED)
+ pkg_check_modules(GTK gtk+-2.0 gio-2.0 REQUIRED)
++pkg_check_modules(SDL sdl2 REQUIRED)
+ find_package(PNG REQUIRED)
+ find_package(Perl REQUIRED)
+ find_package(Vala REQUIRED)
+diff --git a/gtk-v2/src/CMakeLists.txt b/gtk-v2/src/CMakeLists.txt
+index f9d3b30..a8ae5f2 100644
+--- a/gtk-v2/src/CMakeLists.txt
++++ b/gtk-v2/src/CMakeLists.txt
+@@ -45,7 +45,7 @@ target_include_directories(crossfire-client-gtk2
+ ${GTK_INCLUDE_DIRS}
+ ${PNG_INCLUDE_DIRS}
+ ${SDLMIXER_INCLUDE_DIRS}
+- ${SDL_INCLUDE_DIR}
++ ${SDL_INCLUDE_DIRS}
+ )
+
+ target_link_libraries(crossfire-client-gtk2 cfclient
diff --git a/games-roguelike/crossfire-client/files/crossfire-client-1.75.3-staticlib.patch b/games-roguelike/crossfire-client/files/crossfire-client-1.75.3-staticlib.patch
new file mode 100644
index 000000000000..20ddbf7c0f46
--- /dev/null
+++ b/games-roguelike/crossfire-client/files/crossfire-client-1.75.3-staticlib.patch
@@ -0,0 +1,15 @@
+This library is not installed otherwise.
+Make it shared has no interest.
+diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt
+index 1110890..081a245 100644
+--- a/common/CMakeLists.txt
++++ b/common/CMakeLists.txt
+@@ -13,7 +13,7 @@ add_custom_command(
+ # DEPENDS item-types
+ #)
+
+-add_library(cfclient
++add_library(cfclient STATIC
+ client.c
+ client.h
+ commands.c
diff --git a/games-roguelike/crossfire-client/metadata.xml b/games-roguelike/crossfire-client/metadata.xml
new file mode 100644
index 000000000000..183ecc5ceeeb
--- /dev/null
+++ b/games-roguelike/crossfire-client/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>games@gentoo.org</email>
+ <name>Gentoo Games Project</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/games-roguelike/dwarf-fortress/Manifest b/games-roguelike/dwarf-fortress/Manifest
new file mode 100644
index 000000000000..13affb1d8f0d
--- /dev/null
+++ b/games-roguelike/dwarf-fortress/Manifest
@@ -0,0 +1,2 @@
+DIST df_51_13_linux.tar.bz2 17651148 BLAKE2B 002dfccfa18cc7d2304d9862821b7f1cdb38c0b936fb14c4b05d6b08f4b2f27c81b33934daa0ba4c61dbcd4b36c2d835373042cd6ccdad21a6813040b2b63f5b SHA512 e198fe28e009db9e65c99e7c14c15ec3c36620c7ddd6a6ed10c6baec72f5f52b55f275668a2aad976a3085aba7ea668f3b463ae687cd1a9a6343a85cf757b2ef
+DIST dwarf-fortress.png 271 BLAKE2B cbc14917de1556b25d3817298215beedc4cb01075b8454e38b2d314bdf22f8c20c4bf2332f0d731c7e4c6d6a60056361565221ce3db2c7a15fdf934bff01df54 SHA512 08bdc0e084f861b6e6a8b12e3bc93b9703f2a4cbc133d62d1c2931daf81ccd70b728853d5c05bed19a1ef477cf4ad10fce263bbab7d9cad3b60658f17063acf6
diff --git a/games-roguelike/dwarf-fortress/dwarf-fortress-51.13.ebuild b/games-roguelike/dwarf-fortress/dwarf-fortress-51.13.ebuild
new file mode 100644
index 000000000000..f7a70e5c0eb1
--- /dev/null
+++ b/games-roguelike/dwarf-fortress/dwarf-fortress-51.13.ebuild
@@ -0,0 +1,62 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit desktop prefix xdg
+
+MY_P="df_${PV//./_}"
+
+DESCRIPTION="Single-player fantasy game"
+HOMEPAGE="https://www.bay12games.com/dwarves/"
+SRC_URI="https://www.bay12games.com/dwarves/${MY_P}_linux.tar.bz2
+ https://distfiles.gentoo.org/pub/dev/ionen@gentoo.org/${PN}.png"
+S="${WORKDIR}"
+
+LICENSE="free-noncomm BSD BitstreamVera"
+SLOT="0"
+KEYWORDS="-* ~amd64"
+
+RDEPEND="
+ media-libs/libsdl2[joystick,opengl,video]
+ media-libs/sdl2-image[png]
+ sys-apps/bubblewrap
+"
+
+BDEPEND="
+ dev-util/patchelf
+"
+
+DIR="/opt/${PN}"
+QA_PREBUILT="${DIR#/}/*"
+
+src_compile() {
+ patchelf --set-rpath "${EPREFIX}${DIR}" dwarfort *.so* || die
+}
+
+src_install() {
+ insinto "${DIR}"
+ exeinto "${DIR}"
+
+ doins -r data/
+ # libsdl_mixer_plugin.so seems unused. It is referenced in
+ # music_and_sound.cpp but not in any binaries.
+ doexe dwarfort libfmod_plugin.so libfmod.so.* libg_src_lib.so
+
+ dobin "$(prefixify_ro "${FILESDIR}"/dwarf-fortress)"
+
+ doicon -s 128 "${DISTDIR}"/${PN}.png
+ make_desktop_entry dwarf-fortress "Dwarf Fortress"
+
+ dodoc *.txt
+}
+
+pkg_postinst() {
+ xdg_pkg_postinst
+
+ local pv
+ for pv in ${REPLACING_VERSIONS}; do
+ # Check https://dwarffortresswiki.org/Release_information when bumping.
+ ver_test ${pv%%.*} -lt 50.01 && ewarn "Save data from ${pv} is not compatible with this new major version."
+ done
+}
diff --git a/games-roguelike/dwarf-fortress/files/dwarf-fortress b/games-roguelike/dwarf-fortress/files/dwarf-fortress
new file mode 100644
index 000000000000..d81d4475ea15
--- /dev/null
+++ b/games-roguelike/dwarf-fortress/files/dwarf-fortress
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+set -eu
+
+srcdir="/opt/dwarf-fortress"
+dstdir="${XDG_DATA_HOME:-${HOME}/.local/share}/dwarf-fortress"
+
+mkdir -p "${dstdir}/upperdir" "${dstdir}/workdir"
+exec bwrap --bind / / --dev-bind /dev /dev --overlay-src "${srcdir}" --overlay "${dstdir}/upperdir" "${dstdir}/workdir" "${dstdir}/upperdir" --chdir "${dstdir}/upperdir" -- ./dwarfort "${@}"
diff --git a/games-roguelike/dwarf-fortress/metadata.xml b/games-roguelike/dwarf-fortress/metadata.xml
new file mode 100644
index 000000000000..183ecc5ceeeb
--- /dev/null
+++ b/games-roguelike/dwarf-fortress/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>games@gentoo.org</email>
+ <name>Gentoo Games Project</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/games-roguelike/hengband/Manifest b/games-roguelike/hengband/Manifest
new file mode 100644
index 000000000000..e76ae5a8302d
--- /dev/null
+++ b/games-roguelike/hengband/Manifest
@@ -0,0 +1 @@
+DIST hengband-2.2.1.tar.gz 2977622 BLAKE2B 229dbae112e733c0f8de0210fb311a0f8a0306f0b84866386fd00fedc75e72721dc5d3f79b271e90b848d01165746b8d5fa21e4ec50d4b50a824151749595095 SHA512 a84aa9a01efd787f2a459b70ac8cf6db3eb8f17d10276bc38c026276f446ada8ff6db3902ae970c2ef263187e9cd7f51b9a59c8bd6fa2d96161ba6bfe0914cab
diff --git a/games-roguelike/hengband/files/hengband-2.1.2-autoconf-ncurses.patch b/games-roguelike/hengband/files/hengband-2.1.2-autoconf-ncurses.patch
new file mode 100644
index 000000000000..4f695310d7b5
--- /dev/null
+++ b/games-roguelike/hengband/files/hengband-2.1.2-autoconf-ncurses.patch
@@ -0,0 +1,28 @@
+diff -Naur a/configure.ac b/configure.ac
+--- a/configure.ac 2018-03-19 11:04:42.000000000 +0000
++++ b/configure.ac 2022-05-31 22:18:52.959822579 +0100
+@@ -51,16 +51,14 @@
+
+ dnl Checks for libraries.
+ dnl Replace `main' with a function in -lncurses:
+-AC_CHECK_LIB(ncursesw, initscr, [AC_DEFINE(USE_GCU, 1, [Allow -mGCU environment]) AC_DEFINE(USE_NCURSES, 1, [Use ncurses]) LIBS="$LIBS -lncursesw"])
+-if test "$ac_cv_lib_ncursesw_initscr" != yes; then
+- AC_CHECK_LIB(ncurses, initscr, [AC_DEFINE(USE_GCU, 1, [Allow -mGCU environment]) AC_DEFINE(USE_NCURSES, 1, [Use ncurses]) LIBS="$LIBS -lncurses"])
+- if test "$ac_cv_lib_ncurses_initscr" != yes; then
+- AC_CHECK_LIB(curses, initscr, [AC_DEFINE(USE_GCU, 1, [Allow -mGCU environment]) LIBS="$LIBS -lcurses"])
+- if test "$ac_cv_lib_curses_initscr" != yes; then
+- AC_CHECK_LIB(termcap, tgetent, [AC_DEFINE(USE_CAP, 1, [Allow -mCAP environment]) LIBS="$LIBS -ltermcap"])
+- fi
+- fi
+-fi
++PKG_CHECK_MODULES(
++ [NCURSES],
++ [ncurses],
++ [AC_DEFINE(USE_GCU, 1, [Allow -mGCU environment])
++ AC_DEFINE(USE_NCURSES, 1, [Use ncurses])
++ [LIBS="${LIBS} ${NCURSES_LIBS}"]
++ ]
++)
+
+ AC_CHECK_LIB(iconv, iconv_open)
+
diff --git a/games-roguelike/hengband/hengband-2.2.1.ebuild b/games-roguelike/hengband/hengband-2.2.1.ebuild
new file mode 100644
index 000000000000..adcef5288ffb
--- /dev/null
+++ b/games-roguelike/hengband/hengband-2.2.1.ebuild
@@ -0,0 +1,65 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools
+
+DESCRIPTION="An Angband variant, with a Japanese/fantasy theme"
+HOMEPAGE="https://hengband.github.io/"
+SRC_URI="https://github.com/hengband/hengband/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="Moria"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="X l10n_ja"
+
+RDEPEND="
+ >=sys-libs/ncurses-5:0=
+ X? ( x11-libs/libX11 )
+"
+DEPEND="
+ ${RDEPEND}
+ X? ( x11-libs/libXt )
+"
+BDEPEND="
+ virtual/pkgconfig
+ l10n_ja? ( app-i18n/nkf )
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-2.1.2-autoconf-ncurses.patch"
+)
+
+src_prepare() {
+ # Fix syntax for chown.
+ sed -i '/chown/s/\./:/' lib/*/Makefile.am || die
+ # Don't use the games sub-dir since we're not using games.eclass any more.
+ sed -i 's:/games/:/:g' configure.ac || die
+
+ default
+ eautoreconf
+}
+
+src_configure() {
+ local myconf=(
+ --bindir="${EPREFIX}"/usr/bin
+ --with-setgid="nobody"
+ $(use_with X x)
+ )
+ use l10n_ja || myconf+=( --disable-japanese )
+
+ econf "${myconf[@]}"
+}
+
+src_install() {
+ default
+ dodoc lib/help/faq.txt
+
+ if use l10n_ja ; then
+ dodoc readme.txt autopick.txt readme_eng.txt autopick_eng.txt
+ else
+ newdoc readme_eng.txt readme.txt
+ newdoc autopick_eng.txt autopick.txt
+ fi
+}
diff --git a/games-roguelike/hengband/metadata.xml b/games-roguelike/hengband/metadata.xml
new file mode 100644
index 000000000000..183ecc5ceeeb
--- /dev/null
+++ b/games-roguelike/hengband/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>games@gentoo.org</email>
+ <name>Gentoo Games Project</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/games-roguelike/moria/Manifest b/games-roguelike/moria/Manifest
new file mode 100644
index 000000000000..12acb1ca47fa
--- /dev/null
+++ b/games-roguelike/moria/Manifest
@@ -0,0 +1 @@
+DIST moria-5.7.15.tar.gz 400424 BLAKE2B 779eaeb50eb2c0310beb1a02ebae355dadecfa29d519f8614e602172d3969d939abf9b86e0809f813b944eb72abaecb28e730ef9259a648c1dad179a6e8e4f96 SHA512 9ef9723eb120e5180640d8aa52073df638e506e0c842dac7173643bebfd84c51ec1fe6e2b1fa84ad1dcef29dc6607639e6a19ac4fd47000c6ba241691c1c720c
diff --git a/games-roguelike/moria/files/moria-5.7.12-gentoo-paths.patch b/games-roguelike/moria/files/moria-5.7.12-gentoo-paths.patch
new file mode 100644
index 000000000000..a5ae834413d7
--- /dev/null
+++ b/games-roguelike/moria/files/moria-5.7.12-gentoo-paths.patch
@@ -0,0 +1,33 @@
+diff --git a/src/config.cpp b/src/config.cpp
+index 36f565b..bfe1b18 100644
+--- a/src/config.cpp
++++ b/src/config.cpp
+@@ -13,17 +13,17 @@ namespace config {
+ // Data files used by Umoria
+ // NOTE: use relative paths to the executable binary.
+ namespace files {
+- const std::string splash_screen = "data/splash.txt";
+- const std::string welcome_screen = "data/welcome.txt";
+- const std::string license = "LICENSE";
+- const std::string versions_history = "data/versions.txt";
+- const std::string help = "data/help.txt";
+- const std::string help_wizard = "data/help_wizard.txt";
+- const std::string help_roguelike = "data/rl_help.txt";
+- const std::string help_roguelike_wizard = "data/rl_help_wizard.txt";
+- const std::string death_tomb = "data/death_tomb.txt";
+- const std::string death_royal = "data/death_royal.txt";
+- const std::string scores = "scores.dat";
++ const std::string splash_screen = "/usr/share/moria/splash.txt";
++ const std::string welcome_screen = "/usr/share/moria/welcome.txt";
++ const std::string license = "/usr/portage/licenses/GPL-2";
++ const std::string versions_history = "/usr/share/moria/versions.txt";
++ const std::string help = "/usr/share/moria/help.txt";
++ const std::string help_wizard = "/usr/share/moria/help_wizard.txt";
++ const std::string help_roguelike = "/usr/share/moria/rl_help.txt";
++ const std::string help_roguelike_wizard = "/usr/share/moria/rl_help_wizard.txt";
++ const std::string death_tomb = "/usr/share/moria/death_tomb.txt";
++ const std::string death_royal = "/usr/share/moria/death_royal.txt";
++ const std::string scores = "/var/lib/moria/scores.dat";
+ std::string save_game = "game.sav";
+ } // namespace files
+
diff --git a/games-roguelike/moria/files/moria.6 b/games-roguelike/moria/files/moria.6
new file mode 100644
index 000000000000..be1fc7cc353b
--- /dev/null
+++ b/games-roguelike/moria/files/moria.6
@@ -0,0 +1,108 @@
+.TH MORIA 6 ""
+.SH NAME
+moria \- a dungeon game
+.SH SYNOPSIS
+.B
+moria
+[
+.B \-o
+] [
+.B \-r
+] [
+.B \-s
+] [
+.B \-S
+] [
+.B \-n
+] [
+.B \-w
+] [ savefile ]
+.SH DESCRIPTION
+.I Moria\^
+plays a dungeon game with you.
+It lets you generate a character,
+lets you buy equipment,
+and lets you wander in a fathomless dungeon
+while finding treasure and being attacked by monsters
+and fellow adventurers.
+Typing
+.B ?
+gives you a list of commands.
+.PP
+The ultimate object of
+.I moria
+is to kill the Balrog,
+which dwells on the 50th level of the
+dungeon, 2,500 feet underground.
+Most players never even reach the Balrog,
+and those that do seldom live to tell about it.
+.PP
+For a more complete description of the game,
+read the document
+.I The Dungeons of Moria.
+.PP
+By default,
+.I moria
+will save and restore games from a file
+called moria.save in your home directory. If the environment
+variable MORIA_SAV is defined, then
+.I moria
+will use that
+file name instead of the default. If MORIA_SAV is not a complete
+path name, then the savefile will be created or restored from the
+current directory. You can also explicitly specify a savefile
+on the command line.
+.PP
+If you use the \fB\-n\fP option,
+.I moria
+will create a new game,
+ignoring any savefile which may already exist.
+This works best when a savefile name is specified on the
+command line, as this will prevent
+.I moria
+from trying to overwrite the default savefile
+(if it exists) when you try to save your game.
+.PP
+You move in various directions
+by pressing the numeric keypad keys, VMS-style.
+If you specify
+\fB\-r\fP, you move the same way you do in \fIrogue\fP(6).
+You can also specify
+\fB\-o\fP to force the VMS-style command set.
+These options will override defaults stored in the savefile. If these
+options are given multiple times, only the last one will take effect.
+.PP
+If you specify
+.BR \-s ,
+.I moria
+prints all of the scores in the score file and exits.
+On a multiuser system, if you specify
+.BR \-S ,
+.I moria
+prints prints only those scores belonging to you and then exits.
+.PP
+If you specify \fB\-w\fP,
+.I moria
+will start up in wizard mode.
+You can resurrect a dead character by using this option when starting
+the game. Resurrected characters are teleported to the town level
+and given zero hitpoints.
+Wizard mode is intended for debugging the game, and for experimenting
+with new features. Any other use is considered cheating.
+Games played with wizard mode are not scored.
+.SH AUTHORS
+The original version of Moria was written in VMS/Pascal by Robert
+Alan Koeneke, Jimmey Wayne Todd,
+Gary McAdoo, and others at the University of Oklahoma.
+This version was written by Jim Wilson at the University of California,
+Berkeley, and released with minor revisions by David Grabiner at Harvard
+University.
+.SH BUGS
+.PP
+A suspended game that gets a hangup signal will die without creating a
+save file.
+
+Rerolling with a % at the class prompt not implemented.
+
+For a more comprehensive list, see the ERRORS file in the source
+distribution.
diff --git a/games-roguelike/moria/metadata.xml b/games-roguelike/moria/metadata.xml
new file mode 100644
index 000000000000..183ecc5ceeeb
--- /dev/null
+++ b/games-roguelike/moria/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>games@gentoo.org</email>
+ <name>Gentoo Games Project</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/games-roguelike/moria/moria-5.7.15.ebuild b/games-roguelike/moria/moria-5.7.15.ebuild
new file mode 100644
index 000000000000..9b36761da632
--- /dev/null
+++ b/games-roguelike/moria/moria-5.7.15.ebuild
@@ -0,0 +1,50 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CMAKE_IN_SOURCE_BUILD="yes"
+inherit cmake prefix
+
+DESCRIPTION="The Dungeons of Moria, a single player roguelike game, also known as Umoria"
+HOMEPAGE="https://umoria.org/"
+SRC_URI="https://github.com/dungeons-of-moria/umoria/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+S="${WORKDIR}/umoria-${PV}"
+
+LICENSE="GPL-3+"
+SLOT="0"
+KEYWORDS="~amd64 ~m68k ~x86"
+
+RDEPEND="acct-group/gamestat
+ >=sys-libs/ncurses-6.0:0="
+DEPEND="${RDEPEND}"
+BDEPEND="virtual/pkgconfig"
+
+PATCHES=( "${FILESDIR}/${PN}-5.7.12-gentoo-paths.patch" )
+
+src_prepare() {
+ cmake_src_prepare
+ hprefixify src/config.cpp
+}
+
+src_install() {
+ newbin umoria/umoria moria
+
+ insinto /usr/share/moria
+ doins umoria/data/*.txt
+
+ insinto /var/lib/moria
+ doins umoria/scores.dat
+ fowners root:gamestat /var/lib/moria/scores.dat /usr/bin/${PN}
+ fperms g+w /var/lib/moria/scores.dat
+
+ doman "${FILESDIR}"/${PN}.6
+ dodoc -r AUTHORS CHANGELOG.md CONTRIBUTING.md README.md historical
+}
+
+pkg_postinst() {
+ elog
+ elog "Please add users to the 'gamestat' group, so they can run Moria:"
+ elog " usermod -aG gamestat <user>"
+ elog
+}
diff --git a/games-roguelike/neon-chrome/Manifest b/games-roguelike/neon-chrome/Manifest
new file mode 100644
index 000000000000..0969ba2263e8
--- /dev/null
+++ b/games-roguelike/neon-chrome/Manifest
@@ -0,0 +1 @@
+DIST NeonChrome-Linux-1.1.12.tar 64140772 BLAKE2B cadda4c659b96b96c4b9b2a1dfc78152a89e53a2662f5e2dc70a0d4c98a813822d8c977deb0d6d6aeca0a2d2608cb04274c0ad33554ce27ab2ddf318499c9750 SHA512 f659bbe87f3b2933346bc17a4ccdcdc37ff8bb2db7a94dc5334db7109d64cd9f5a28b14845f767aaf1e103be826d3cd0fefc528a02df2079123094436e94f2cd
diff --git a/games-roguelike/neon-chrome/metadata.xml b/games-roguelike/neon-chrome/metadata.xml
new file mode 100644
index 000000000000..183ecc5ceeeb
--- /dev/null
+++ b/games-roguelike/neon-chrome/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>games@gentoo.org</email>
+ <name>Gentoo Games Project</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/games-roguelike/neon-chrome/neon-chrome-1.1.12.ebuild b/games-roguelike/neon-chrome/neon-chrome-1.1.12.ebuild
new file mode 100644
index 000000000000..c0053f081358
--- /dev/null
+++ b/games-roguelike/neon-chrome/neon-chrome-1.1.12.ebuild
@@ -0,0 +1,49 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit desktop wrapper xdg-utils
+
+MY_PN="NeonChrome"
+DESCRIPTION="A ruthless top-down cyberpunk shooter with rogue-like elements"
+HOMEPAGE="https://neonchromegame.com/"
+SRC_URI="${MY_PN}-Linux-${PV}.tar"
+# https://dev.gentoo.org/~chewi/distfiles/${PN}.png"
+S="${WORKDIR}"
+
+LICENSE="all-rights-reserved"
+SLOT="0"
+KEYWORDS="-* ~amd64"
+RESTRICT="bindist fetch splitdebug"
+
+RDEPEND="
+ media-libs/libsdl2[opengl,video]
+ media-libs/openal
+"
+
+DIR="/opt/${PN}"
+QA_PREBUILT="${DIR#/}/*"
+
+pkg_nofetch() {
+ einfo "Please buy and download ${SRC_URI} from:"
+ einfo " https://www.humblebundle.com/store/${PN}"
+ einfo "and move it to your distfiles directory."
+}
+
+src_install() {
+ exeinto "${DIR}"
+ doexe ${MY_PN}
+ make_wrapper ${PN} ./${MY_PN} "${DIR}"
+
+ insinto "${DIR}"
+ doins *.pak *.xml
+
+ dodoc README.txt
+
+# doicon -s 64 "${DISTDIR}"/${PN}.png
+ make_desktop_entry ${PN} "Neon Chrome" applications-games
+}
+
+pkg_postinst() { xdg_icon_cache_update; }
+pkg_postrm() { xdg_icon_cache_update; }
diff --git a/games-roguelike/nethack/Manifest b/games-roguelike/nethack/Manifest
new file mode 100644
index 000000000000..04bb461222e5
--- /dev/null
+++ b/games-roguelike/nethack/Manifest
@@ -0,0 +1,2 @@
+DIST nethack-3.6.7.tar.gz 5577415 BLAKE2B a03cfe973b0470efe052eee49c312818755e33cf5148a2c39beecf052e44dfe951c6c63a3ff58ce826fa656647ad5bbe558b4854a50fcf987d80014ef4707505 SHA512 7890d17e087f4344d30e9a908fa1f24d7c72bc714c4a6415ed59800902cc0aa6b3ce94c5d73857b0222349b96b1fdc8bf3f93b3ac1153477ad1419af7b0d3fb5
+DIST nethack-5.0.0.tar.gz 10793920 BLAKE2B c964b030c0b9a94696f1eaaaf7ff4f1d4b76ba76b327eaef69665ebfe1d5d3d43fe9510ffe9bc0ad3f30869deb386beea6e05d52e36f11fb2476801331a99b95 SHA512 a668525d9030055a4b7a504ff6a6b028d4a6d6db5b79a1f1e716d60d40346c0e6d4ac281f393a6ae8aa0453103850bafc67882a75f0518fecc6225af5efda1db
diff --git a/games-roguelike/nethack/files/nethack-3.6.0-nethackrc b/games-roguelike/nethack/files/nethack-3.6.0-nethackrc
new file mode 100644
index 000000000000..33c98064341f
--- /dev/null
+++ b/games-roguelike/nethack/files/nethack-3.6.0-nethackrc
@@ -0,0 +1,103 @@
+## This is an example nethackrc file (courtesy of nethack.alt.org).
+##
+## You should edit it to suit your needs.
+## Please read the Guidebook in /usr/share/doc/nethack or at www.nethack.org.
+##
+## Options which are enabled by default (like autoopen) can be disabled
+## by prefixing them with a !
+
+## If USE=X is enabled, this can be changed to x11
+#OPTIONS=windowtype:tty
+
+## Custom fruit and pet names
+#OPTIONS=fruit:mango
+#OPTIONS=dogname:Izchak
+#OPTIONS=catname:Chun-Li
+#OPTIONS=horsename:Marlon
+
+## Colored output
+#OPTIONS=color
+
+## Automatically dig if you are wielding a digging tool and moving
+## into a place that can be dug
+#OPTIONS=autodig
+
+## Walking into a door attempts to open it
+#OPTIONS=autoopen
+
+## Automatically pick up stuff
+#OPTIONS=autopickup
+
+## Only use autopickup for these item types
+#OPTIONS=pickup_types:$!?/"=
+
+## Allow saving and loading bones files.
+#OPTIONS=bones
+
+## Show out-of-sight areas of lit rooms
+#OPTIONS=dark_room
+
+## Use inverse for pets
+#OPTIONS=hilite_pet
+
+## Use inverse for piles of items
+#OPTIONS=hilite_pile
+
+## Show experience
+#OPTIONS=showexp
+
+## Show elapsed game time (in turns)
+#OPTIONS=time
+
+## How recalled messages (ctrl-p) are displayed.
+#OPTIONS=msg_window:reversed
+
+## use IBMgraphics or DECgraphics
+#OPTIONS=symset:DECgraphics
+#OPTIONS=symset:IBMgraphics
+
+## If you don't like some default glyphs, these can be changed
+#SYMBOLS=S_boulder:0
+#SYMBOLS=S_lava:~
+#SYMBOLS=S_pool:~
+#SYMBOLS=S_water:~
+#SYMBOLS=S_ghost:8
+#SYMBOLS=S_golem:7
+
+## Sort items by name. One of "none", "loot", or "full"
+#OPTIONS=sortloot:full
+
+## Require explicit yes for some prompts
+#OPTIONS=paranoid_confirmation:Confirm quit attack pray wand Remove
+
+## Conducts
+#OPTIONS=nudist
+#OPTIONS=blind
+
+
+## Colored menus. Regular expressions allowed.
+#OPTIONS=menucolors
+#MENUCOLOR=" blessed "=green
+#MENUCOLOR=" holy "=green
+#MENUCOLOR=" cursed "=red
+#MENUCOLOR=" unholy "=red
+#MENUCOLOR=" cursed .* (being worn)"=orange&underline
+
+
+## Messagetypes
+
+## displacing pets. hide the message.
+#MSGTYPE=hide "You swap places with your .*"
+
+## items on floor. don't repeat the message.
+#MSGTYPE=norep "You see here a .*"
+#MSGTYPE=norep "You see here an .*"
+
+## delayed instadeaths. always prompt for -more-
+#MSGTYPE=stop "You are slowing down."
+#MSGTYPE=stop "You find it hard to breathe."
+#MSGTYPE=stop "You are turning a little .*"
+
+## moving up or down stairs
+#MSGTYPE=hide "You descend .*"
+#MSGTYPE=hide "You (climb|fly) (up|down) .*"
diff --git a/games-roguelike/nethack/files/nethack-3.6.3-hint-tty b/games-roguelike/nethack/files/nethack-3.6.3-hint-tty
new file mode 100644
index 000000000000..626db3f1f7e0
--- /dev/null
+++ b/games-roguelike/nethack/files/nethack-3.6.3-hint-tty
@@ -0,0 +1,19 @@
+#-PRE
+
+LINK=$(CC)
+
+WINSRC = $(WINTTYSRC)
+WINOBJ = $(WINTTYOBJ)
+WINLIB = $(WINTTYLIB)
+
+GAMEPERM = 02755
+VARDIRPERM = 0770
+VARFILEPERM = 0660
+CHOWN = true
+CHGRP = true
+
+
+#-POST
+
+# needed for external pager, bug #57410
+DATNODLB = $(VARDATND) license symbols $(DATHELP)
diff --git a/games-roguelike/nethack/files/nethack-3.6.3-hint-x11 b/games-roguelike/nethack/files/nethack-3.6.3-hint-x11
new file mode 100644
index 000000000000..b026cea976cc
--- /dev/null
+++ b/games-roguelike/nethack/files/nethack-3.6.3-hint-x11
@@ -0,0 +1,23 @@
+#-PRE
+
+LINK=$(CC)
+
+VARDATND = x11tiles NetHack.ad pet_mark.xbm pilemark.xbm rip.xpm
+
+WINSRC = $(WINTTYSRC) $(WINX11SRC)
+WINOBJ = $(WINTTYOBJ) $(WINX11OBJ)
+WINLIB = $(WINTTYLIB) $(WINX11LIB)
+
+GAMEPERM = 02755
+VARDIRPERM = 0770
+VARFILEPERM = 0660
+CHOWN = true
+CHGRP = true
+
+
+#-POST
+
+# needed for external pager, bug #57410
+DATNODLB = $(VARDATND) license symbols $(DATHELP)
+
+WINX11LIB = -lXaw -lXmu -lXext -lXt -lX11 -lXpm
diff --git a/games-roguelike/nethack/files/nethack-3.6.3-recover.patch b/games-roguelike/nethack/files/nethack-3.6.3-recover.patch
new file mode 100644
index 000000000000..e496f3918fed
--- /dev/null
+++ b/games-roguelike/nethack/files/nethack-3.6.3-recover.patch
@@ -0,0 +1,132 @@
+From d8878eddd04cb986d57cc721d719670dc7f4d156 Mon Sep 17 00:00:00 2001
+From: Stefan Strogin <steils@gentoo.org>
+Date: Tue, 17 Dec 2019 20:20:52 +0200
+Subject: [PATCH] Rename manpage from recover to recover-nethack
+
+Based on the patch from https://bugs.gentoo.org/203556
+
+Upstream-Status: Inappropriate [Gentoo-specific]
+Signed-off-by: Stefan Strogin <steils@gentoo.org>
+---
+ doc/nethack.6 | 2 +-
+ doc/recover.6 | 28 ++++++++++++++--------------
+ 2 files changed, 15 insertions(+), 15 deletions(-)
+
+diff --git a/doc/nethack.6 b/doc/nethack.6
+index dda4c89f4..b26a2b493 100644
+--- a/doc/nethack.6
++++ b/doc/nethack.6
+@@ -393,7 +393,7 @@ SHOPTYPE and SPLEVTYPE can be used in debugging (wizard) mode.
+ DEBUGFILES can be used if the program was built with 'DEBUG' enabled.
+ .SH "SEE ALSO"
+ .PP
+-dgn_comp(6), lev_comp(6), recover(6)
++dgn_comp(6), lev_comp(6), recover-nethack(6)
+ .SH BUGS
+ .PP
+ Probably infinite.
+diff --git a/doc/recover.6 b/doc/recover.6
+index 1209d31d3..eee5bbc61 100644
+--- a/doc/recover.6
++++ b/doc/recover.6
+@@ -1,4 +1,4 @@
+-.TH RECOVER 6 "14 December 2015" NETHACK
++.TH RECOVER-NETHACK 6 "14 December 2015" NETHACK
+ .de ND
+ .ds Nd \\$3
+ ..
+@@ -13,9 +13,9 @@
+ .NR $NHDT-Revision: 1.9 $
+ .ds Na Kenneth Lorber
+ .SH NAME
+-recover \- recover a NetHack game interrupted by disaster
++recover-nethack \- recover a NetHack game interrupted by disaster
+ .SH SYNOPSIS
+-.B recover
++.B recover-nethack
+ [
+ .B \-d
+ .I directory
+@@ -33,7 +33,7 @@ so such games can be recovered at the point of the last level change.
+ The
+ .I base
+ options tell
+-.I recover
++.I recover-nethack
+ which files to process.
+ Each base option specifies recovery of a separate game.
+ .PP
+@@ -83,24 +83,24 @@ by a user number to avoid conflicts,
+ or "xlock" if the number of concurrent players is being limited.
+ It may be necessary to look in the playground to find the correct
+ base name of the interrupted game.
+-.I recover
++.I recover-nethack
+ will transform these level files into a save file of the same name as
+ .I nethack
+ would have used.
+ .PP
+ Since
+-.I recover
++.I recover-nethack
+ must be able to read and delete files from the playground
+ and create files in the save directory,
+ it has interesting interactions with game security.
+ Giving ordinary players access to
+-.I recover
++.I recover-nethack
+ through setuid or setgid is tantamount to leaving the playground
+ world-writable,
+ with respect to both cheating and messing up other players.
+ For a single-user system, this of course does not change anything,
+ so some of the microcomputer ports install
+-.I recover
++.I recover-nethack
+ by default.
+ .PP
+ For a multi-user system,
+@@ -108,22 +108,22 @@ the game administrator may want to arrange for all .0 files in the
+ playground to be fed to recover when the host machine boots,
+ and handle game crashes individually.
+ If the user population is sufficiently trustworthy,
+-.I recover
++.I recover-nethack
+ can be installed with the same permissions the
+ .I nethack
+ executable has.
+ In either case,
+-.I recover
++.I recover-nethack
+ is easily compiled from the distribution utility directory.
+ .SH NOTES
+ .PP
+ Like
+ .I nethack
+ itself,
+-.I recover
++.I recover-nethack
+ will overwrite existing savefiles of the same name.
+ Savefiles created by
+-.I recover
++.I recover-nethack
+ are uncompressed;
+ they may be compressed afterwards if desired,
+ but even a compression-using
+@@ -133,12 +133,12 @@ will find them in the uncompressed form.
+ nethack(6)
+ .SH BUGS
+ .PP
+-.I recover
++.I recover-nethack
+ makes no attempt to find out if a base name specifies a game in progress.
+ If multiple machines share a playground, this would be impossible to
+ determine.
+ .PP
+-.I recover
++.I recover-nethack
+ should be taught to use the nethack playground locking mechanism to
+ avoid conflicts.
+ .SH COPYRIGHT
+--
+2.24.1
+
diff --git a/games-roguelike/nethack/files/nethack-3.6.6-clang16.patch b/games-roguelike/nethack/files/nethack-3.6.6-clang16.patch
new file mode 100644
index 000000000000..b8a67644b80e
--- /dev/null
+++ b/games-roguelike/nethack/files/nethack-3.6.6-clang16.patch
@@ -0,0 +1,10 @@
+https://bugs.gentoo.org/874462
+--- a/win/tty/wintty.c
++++ b/win/tty/wintty.c
+@@ -26,2 +26,6 @@
+
++#ifdef DEF_PAGER
++#include <fcntl.h>
++#endif
++
+ #ifndef NO_TERMS
diff --git a/games-roguelike/nethack/files/nethack-3.6.7-hurd-tparm.patch b/games-roguelike/nethack/files/nethack-3.6.7-hurd-tparm.patch
new file mode 100644
index 000000000000..08766e30eaf6
--- /dev/null
+++ b/games-roguelike/nethack/files/nethack-3.6.7-hurd-tparm.patch
@@ -0,0 +1,15 @@
+Not a favorable solution, since this is probably some outdated quirk to begin
+with. But in life, shall we leave the unknown to itself...
+
+diff '--color=auto' -ru NetHack-3.6.7/win/tty/termcap.c NetHack-3.6.7-fix/win/tty/termcap.c
+--- NetHack-3.6.7/win/tty/termcap.c 2026-03-29 17:22:57.252478012 -0400
++++ NetHack-3.6.7-fix/win/tty/termcap.c 2026-03-29 18:36:03.070723420 -0400
+@@ -838,7 +838,7 @@
+
+ #include <curses.h>
+
+-#if !defined(LINUX) && !defined(__FreeBSD__) && !defined(NOTPARMDECL)
++#if !defined(__gnu_hurd__) && !defined(LINUX) && !defined(__FreeBSD__) && !defined(NOTPARMDECL)
+ extern char *tparm();
+ #endif
+
diff --git a/games-roguelike/nethack/files/nethack-3.6.7-no-define-warn-unused-result.patch b/games-roguelike/nethack/files/nethack-3.6.7-no-define-warn-unused-result.patch
new file mode 100644
index 000000000000..378c55687c74
--- /dev/null
+++ b/games-roguelike/nethack/files/nethack-3.6.7-no-define-warn-unused-result.patch
@@ -0,0 +1,17 @@
+GCC (as of 15.2.1_p20260214) seems to fail, specifically for GNU Hurd (as seen
+by the !defined (__linux__) bit), as gcc's __attribute__ expects an argument
+there. It seems rather old (and quite undesirable), so for now, we will just
+disable the snippet of code.
+
+diff '--color=auto' -ru NetHack-3.6.7/include/tradstdc.h NetHack-3.6.7-fix/include/tradstdc.h
+--- NetHack-3.6.7/include/tradstdc.h 2023-02-15 16:52:57.000000000 -0500
++++ NetHack-3.6.7-fix/include/tradstdc.h 2026-03-24 00:48:35.740547092 -0400
+@@ -429,7 +429,7 @@
+ #if __GNUC__ >= 3
+ #define UNUSED __attribute__((unused))
+ #define NORETURN __attribute__((noreturn))
+-#if !defined(__linux__) || defined(GCC_URWARN)
++#if 0
+ /* disable gcc's __attribute__((__warn_unused_result__)) since explicitly
+ discarding the result by casting to (void) is not accepted as a 'use' */
+ #define __warn_unused_result__ /*empty*/
diff --git a/games-roguelike/nethack/files/nethack-3.6.7-path-max.patch b/games-roguelike/nethack/files/nethack-3.6.7-path-max.patch
new file mode 100644
index 000000000000..3d1f6bfb618a
--- /dev/null
+++ b/games-roguelike/nethack/files/nethack-3.6.7-path-max.patch
@@ -0,0 +1,15 @@
+diff '--color=auto' -ru NetHack-3.6.7/src/files.c NetHack-3.6.7-fix/src/files.c
+--- NetHack-3.6.7/src/files.c 2023-02-15 16:52:57.000000000 -0500
++++ NetHack-3.6.7-fix/src/files.c 2026-03-29 17:25:31.135961712 -0400
+@@ -4020,6 +4020,11 @@
+ #ifndef PATH_MAX
+ #include <limits.h>
+ #endif
++
++/* the Hurd still doesn't define PATH_MAX */
++#ifndef PATH_MAX
++#define PATH_MAX 2048
++#endif
+ #endif
+
+ void
diff --git a/games-roguelike/nethack/files/nethack-5.0.0-fix_make.patch b/games-roguelike/nethack/files/nethack-5.0.0-fix_make.patch
new file mode 100644
index 000000000000..2d9d38655de6
--- /dev/null
+++ b/games-roguelike/nethack/files/nethack-5.0.0-fix_make.patch
@@ -0,0 +1,12 @@
+minimal fix to build with --shuffle and -j1
+--- a/sys/unix/Makefile.top
++++ b/sys/unix/Makefile.top
+@@ -273,7 +273,7 @@ title.img:
+ check-dlb: options
+ @if egrep -s librarian dat/options ; then $(MAKE) dlb ; else true ; fi
+
+-dlb:
++dlb: $(VARDATD) spec_levs
+ ( cd util ; $(MAKE) dlb )
+ ( cd dat ; LC_ALL=C ; ../util/dlb cf nhdat $(DATDLB) )
+
diff --git a/games-roguelike/nethack/files/nethack-5.0.0-fix_musl_gcc.patch b/games-roguelike/nethack/files/nethack-5.0.0-fix_musl_gcc.patch
new file mode 100644
index 000000000000..9fac634a7a92
--- /dev/null
+++ b/games-roguelike/nethack/files/nethack-5.0.0-fix_musl_gcc.patch
@@ -0,0 +1,17 @@
+patch from upstream https://github.com/NetHack/NetHack/commit/2445b97
+fix with musl/gcc
+https://github.com/NetHack/NetHack/issues/1530
+https://bugs.gentoo.org/975067
+--- a/sys/unix/hints/linux.500
++++ b/sys/unix/hints/linux.500
+@@ -197,7 +197,10 @@ ifeq "$(CCISCLANG)" "1"
+ # clang-specific ends
+ else
+ # gcc-specific starts
++ifndef MUSL
++# __sighandler_t does not exist in musl
+ LIBCFLAGS+=-DSIG_RET_TYPE=__sighandler_t
++endif
+ # gcc-specific ends
+ endif
+
diff --git a/games-roguelike/nethack/files/nethack-5.0.0-help.patch b/games-roguelike/nethack/files/nethack-5.0.0-help.patch
new file mode 100644
index 000000000000..9e3c18600876
--- /dev/null
+++ b/games-roguelike/nethack/files/nethack-5.0.0-help.patch
@@ -0,0 +1,12 @@
+# needed for external pager, bug #57410
+--- a/sys/unix/Makefile.top
++++ b/sys/unix/Makefile.top
+@@ -100,7 +100,7 @@ SPEC_LEVS = asmodeus.lua baalz.lua bigrm-*.lua castle.lua fakewiz?.lua \
+ astral.lua air.lua earth.lua fire.lua water.lua hellfill.lua tut-?.lua
+ QUEST_LEVS = ???-goal.lua ???-fil?.lua ???-loca.lua ???-strt.lua
+
+-DATNODLB = $(VARDATND) license symbols
++DATNODLB = $(VARDATND) license symbols $(DATHELP)
+ DATDLB = $(DATHELP) dungeon.lua tribute $(SPEC_LEVS) $(QUEST_LEVS) $(VARDATD)
+ DAT = $(DATNODLB) $(DATDLB)
+
diff --git a/games-roguelike/nethack/files/nethack-5.0.0-hint-qt6 b/games-roguelike/nethack/files/nethack-5.0.0-hint-qt6
new file mode 100644
index 000000000000..6b3e60e5656e
--- /dev/null
+++ b/games-roguelike/nethack/files/nethack-5.0.0-hint-qt6
@@ -0,0 +1,22 @@
+#-PRE
+
+LINK=$(CXX)
+QTn_H =
+
+VARDATND = nhtiles.bmp rip.xpm nhsplash.xpm
+
+WINSRC = $(WINTTYSRC) $(WINQTSRC)
+WINOBJ = $(WINTTYOBJ) $(WINQTOBJ) $(TARGETPFX)tile.o
+WINLIB = $(WINTTYLIB) $(QTLIBS)
+
+GAMEPERM = 02755
+VARDIRPERM = 0770
+VARFILEPERM = 0660
+CHOWN = true
+CHGRP = true
+
+
+#-POST
+
+# needed for external pager, bug #57410
+DATNODLB = $(VARDATND) license symbols $(DATHELP)
diff --git a/games-roguelike/nethack/files/nethack-5.0.0-hint-qt6-x11 b/games-roguelike/nethack/files/nethack-5.0.0-hint-qt6-x11
new file mode 100644
index 000000000000..18149d18f327
--- /dev/null
+++ b/games-roguelike/nethack/files/nethack-5.0.0-hint-qt6-x11
@@ -0,0 +1,24 @@
+#-PRE
+
+LINK=$(CXX)
+QTn_H =
+
+VARDATND = x11tiles NetHack.ad pet_mark.xbm pilemark.xbm nhtiles.bmp rip.xpm nhsplash.xpm
+
+WINSRC = $(WINTTYSRC) $(WINX11SRC) $(WINQTSRC)
+WINOBJ = $(WINTTYOBJ) $(WINX11OBJ) $(WINQTOBJ) $(TARGETPFX)tile.o
+WINLIB = $(WINTTYLIB) $(WINX11LIB) $(QTLIBS)
+
+GAMEPERM = 02755
+VARDIRPERM = 0770
+VARFILEPERM = 0660
+CHOWN = true
+CHGRP = true
+
+
+#-POST
+
+# needed for external pager, bug #57410
+DATNODLB = $(VARDATND) license symbols $(DATHELP)
+
+WINX11LIB = -lXaw -lXmu -lXext -lXt -lX11 -lXpm
diff --git a/games-roguelike/nethack/files/nethack-5.0.0-hint-x11 b/games-roguelike/nethack/files/nethack-5.0.0-hint-x11
new file mode 100644
index 000000000000..1130a39675cb
--- /dev/null
+++ b/games-roguelike/nethack/files/nethack-5.0.0-hint-x11
@@ -0,0 +1,23 @@
+#-PRE
+
+LINK=$(CC)
+
+VARDATND = x11tiles NetHack.ad pet_mark.xbm pilemark.xbm rip.xpm
+
+WINSRC = $(WINTTYSRC) $(WINX11SRC)
+WINOBJ = $(WINTTYOBJ) $(WINX11OBJ) $(TARGETPFX)tile.o
+WINLIB = $(WINTTYLIB) $(WINX11LIB)
+
+GAMEPERM = 02755
+VARDIRPERM = 0770
+VARFILEPERM = 0660
+CHOWN = true
+CHGRP = true
+
+
+#-POST
+
+# needed for external pager, bug #57410
+DATNODLB = $(VARDATND) license symbols $(DATHELP)
+
+WINX11LIB = -lXaw -lXmu -lXext -lXt -lX11 -lXpm
diff --git a/games-roguelike/nethack/files/nethack-5.0.0-hurd-tparm.patch b/games-roguelike/nethack/files/nethack-5.0.0-hurd-tparm.patch
new file mode 100644
index 000000000000..3d70db58da57
--- /dev/null
+++ b/games-roguelike/nethack/files/nethack-5.0.0-hurd-tparm.patch
@@ -0,0 +1,13 @@
+diff --git a/win/tty/termcap.c b/win/tty/termcap.c
+index b5ffcef4e..9adbacdb4 100644
+--- a/win/tty/termcap.c
++++ b/win/tty/termcap.c
+@@ -890,7 +890,7 @@ cl_eos(void) /* free after Robert Viduya */
+
+ #include <curses.h>
+
+-#if !defined(LINUX) && !defined(__FreeBSD__) && !defined(NOTPARMDECL)
++#if !defined(__gnu_hurd__) && !defined(LINUX) && !defined(__FreeBSD__) && !defined(NOTPARMDECL)
+ extern char *tparm();
+ #endif
+
diff --git a/games-roguelike/nethack/files/nethack-5.0.0-no-define-warn-unused-result.patch b/games-roguelike/nethack/files/nethack-5.0.0-no-define-warn-unused-result.patch
new file mode 100644
index 000000000000..78d5520d4562
--- /dev/null
+++ b/games-roguelike/nethack/files/nethack-5.0.0-no-define-warn-unused-result.patch
@@ -0,0 +1,13 @@
+diff --git a/include/tradstdc.h b/include/tradstdc.h
+index a202c0c7b..d4b3f9b3f 100644
+--- a/include/tradstdc.h
++++ b/include/tradstdc.h
+@@ -441,7 +441,7 @@ typedef genericptr genericptr_t; /* (void *) or (char *) */
+ /* #pragma message is available */
+ #define NH_PRAGMA_MESSAGE 1
+ #endif /* __GNUC__ greater than or equal to 5 */
+-#if (!defined(__linux__) && !defined(MACOS)) || defined(GCC_URWARN)
++#if 0
+ /* disable gcc's __attribute__((__warn_unused_result__)) since explicitly
+ discarding the result by casting to (void) is not accepted as a 'use' */
+ #define __warn_unused_result__ /*empty*/
diff --git a/games-roguelike/nethack/files/nethack-5.0.0-recover.patch b/games-roguelike/nethack/files/nethack-5.0.0-recover.patch
new file mode 100644
index 000000000000..0742bcbe5277
--- /dev/null
+++ b/games-roguelike/nethack/files/nethack-5.0.0-recover.patch
@@ -0,0 +1,122 @@
+From 34f3ec2ba49f33c03471ab99376d40ef65ab4ed8 Mon Sep 17 00:00:00 2001
+From: Stefan Strogin <stefan@steils.org>
+Date: Tue, 5 May 2026 01:20:01 +0000
+Subject: [PATCH] Rename manpage from recover to recover-nethack
+
+---
+ doc/nethack.6 | 2 +-
+ doc/recover.6 | 26 +++++++++++++-------------
+ 2 files changed, 14 insertions(+), 14 deletions(-)
+
+diff --git a/doc/nethack.6 b/doc/nethack.6
+index 85b99c389..fe15be123 100644
+--- a/doc/nethack.6
++++ b/doc/nethack.6
+@@ -575,7 +575,7 @@ SHOPTYPE and SPLEVTYPE can be used in debugging (wizard) mode.
+ DEBUGFILES can be used if the program was built with 'DEBUG' enabled.
+ .SH "SEE ALSO"
+ .PP
+-recover(6)
++recover-nethack(6)
+ .SH BUGS
+ .PP
+ Probably infinite.
+diff --git a/doc/recover.6 b/doc/recover.6
+index 90d56c8c9..83f1eb157 100644
+--- a/doc/recover.6
++++ b/doc/recover.6
+@@ -17,9 +17,9 @@
+ .el .hy 14
+ .ds Na Kenneth Lorber
+ .SH NAME
+-recover \- recover a NetHack game interrupted by disaster
++recover-nethack \- recover a NetHack game interrupted by disaster
+ .SH SYNOPSIS
+-.B recover
++.B recover-nethack
+ [
+ .B \-d
+ .I directory
+@@ -37,7 +37,7 @@ so such games can be recovered at the point of the last level change.
+ The
+ .I base
+ options tell
+-.I recover
++.I recover-nethack
+ which files to process.
+ Each base option specifies recovery of a separate game.
+ .PP
+@@ -89,24 +89,24 @@ by a user number to avoid conflicts,
+ or "xlock" if the number of concurrent players is being limited.
+ It may be necessary to look in the playground to find the correct
+ base name of the interrupted game.
+-.I recover
++.I recover-nethack
+ will transform these level files into a save file of the same name as
+ .I nethack
+ would have used.
+ .PP
+ Since
+-.I recover
++.I recover-nethack
+ must be able to read and delete files from the playground
+ and create files in the save directory,
+ it has interesting interactions with game security.
+ Giving ordinary players access to
+-.I recover
++.I recover-nethack
+ through setuid or setgid is tantamount to leaving the playground
+ world-writable,
+ with respect to both cheating and messing up other players.
+ For a single-user system, this of course does not change anything,
+ so some of the microcomputer ports install
+-.I recover
++.I recover-nethack
+ by default.
+ .PP
+ For a multi-user system,
+@@ -114,22 +114,22 @@ the game administrator may want to arrange for all .0 files in the
+ playground to be fed to recover when the host machine boots,
+ and handle game crashes individually.
+ If the user population is sufficiently trustworthy,
+-.I recover
++.I recover-nethack
+ can be installed with the same permissions the
+ .I nethack
+ executable has.
+ In either case,
+-.I recover
++.I recover-nethack
+ is easily compiled from the distribution utility directory.
+ .SH NOTES
+ .PP
+ Like
+ .I nethack
+ itself,
+-.I recover
++.I recover-nethack
+ will overwrite existing savefiles of the same name.
+ Savefiles created by
+-.I recover
++.I recover-nethack
+ are uncompressed;
+ they may be compressed afterwards if desired,
+ but even a compression-using
+@@ -139,12 +139,12 @@ will find them in the uncompressed form.
+ nethack(6)
+ .SH BUGS
+ .PP
+-.I recover
++.I recover-nethack
+ makes no attempt to find out if a base name specifies a game in progress.
+ If multiple machines share a playground, this would be impossible to
+ determine.
+ .PP
+-.I recover
++.I recover-nethack
+ should be taught to use the nethack playground locking mechanism to
+ avoid conflicts.
+ .SH COPYRIGHT
+--
+2.54.0
+
diff --git a/games-roguelike/nethack/files/nethack-5.0.0-system-lua.patch b/games-roguelike/nethack/files/nethack-5.0.0-system-lua.patch
new file mode 100644
index 000000000000..39a012348ffc
--- /dev/null
+++ b/games-roguelike/nethack/files/nethack-5.0.0-system-lua.patch
@@ -0,0 +1,82 @@
+From 82f26ab102f327c021d89d4917e60d13063dcd23 Mon Sep 17 00:00:00 2001
+From: Stefan Strogin <stefan@steils.org>
+Date: Tue, 5 May 2026 04:53:20 +0000
+Subject: [PATCH] Allow building against system Lua
+
+---
+ sys/unix/Makefile.src | 6 ++++++
+ sys/unix/Makefile.top | 17 +++++++++++++++++
+ 2 files changed, 23 insertions(+)
+
+diff --git a/sys/unix/Makefile.src b/sys/unix/Makefile.src
+index 863fa096c..c5004de5a 100644
+--- a/sys/unix/Makefile.src
++++ b/sys/unix/Makefile.src
+@@ -503,10 +503,16 @@ MAKEDEFS = ../util/makedefs
+
+ # -lm required by lua
+ LUA_VERSION ?=5.4.8
++SYSTEM_LUA ?=0
++LUA_LIBS ?=
+ LUABASE = liblua-$(LUA_VERSION).a
+ LUALIB = ../lib/lua/$(LUABASE)
+ LUALIBS = $(LUALIB) -lm $(DLLIB)
+ LUAHEADERS = lib/lua-$(LUA_VERSION)/src
++ifeq ($(SYSTEM_LUA),1)
++LUALIB =
++LUALIBS = $(LUA_LIBS)
++endif
+
+ # timestamp files to reduce `make' overhead and shorten .o dependency lists
+ CONFIG_H = ../src/config.h-t
+diff --git a/sys/unix/Makefile.top b/sys/unix/Makefile.top
+index 5ecca3232..47e455a3e 100644
+--- a/sys/unix/Makefile.top
++++ b/sys/unix/Makefile.top
+@@ -122,12 +122,17 @@ RECOVERBIN = recover
+
+ # Lua
+ LUAHEADERS = lib/lua-$(LUA_VERSION)/src
++SYSTEM_LUA ?=0
++LUA_HEADER_DIR ?=/usr/include
+ LUATESTTARGET = $(LUAHEADERS)/lua.h
+ LUATOP = $(LUAHEADERS)
+ LUAMAKEFLAGS = CC='$(CC)' SYSCFLAGS='$(SYSCFLAGS)'
+ LUA2NHTOP = ../../..
+ LUABASELIB = liblua-$(LUA_VERSION).a
+ TOPLUALIB = lib/lua/$(LUABASELIB)
++ifeq ($(SYSTEM_LUA),1)
++TOPLUALIB =
++endif
+
+ ALLDEP = $(PRECHECK) $(GAME) recover Guidebook $(VARDAT) spec_levs check-dlb
+
+@@ -141,6 +146,17 @@ $(GAME): lua_support
+
+ lua_support: include/nhlua.h
+ @true
++ifeq ($(SYSTEM_LUA),1)
++include/nhlua.h:
++ echo '/* nhlua.h - generated by top Makefile */' > $@
++ @echo '#include <lua.h>' >> $@
++ @sed -e '/(lua_error)/!d' \
++ -e '/(lua_error)/s/LUA_API/ATTRNORETURN LUA_API/1' \
++ -e '/(lua_error)/s/;/ NORETURN;/1' < $(LUA_HEADER_DIR)/lua.h >> $@
++ @echo '#include <lualib.h>' >> $@
++ @echo '#include <lauxlib.h>' >> $@
++ @echo '/*nhlua.h*/' >> $@
++else
+ $(LUATOP)/liblua.a: $(LUAHEADERS)/lua.h
+ ( cd $(LUATOP) && make $(LUAMAKEFLAGS) a )
+ $(TOPLUALIB): $(LUATOP)/liblua.a
+@@ -160,6 +176,7 @@ include/nhlua.h: $(TOPLUALIB)
+ lib/lua-$(LUA_VERSION)/src/lua.h:
+ @echo "Please do 'make fetch-lua' in the top directory to obtain lua-$(LUA_VERSION)"
+ @false
++endif
+ luabin:
+ ( cd $(LUATOP) \
+ && make $(LUAMAKEFILES) all && cd $(LUA2NHTOP) )
+--
+2.54.0
+
diff --git a/games-roguelike/nethack/metadata.xml b/games-roguelike/nethack/metadata.xml
new file mode 100644
index 000000000000..1fbd6bc26a1b
--- /dev/null
+++ b/games-roguelike/nethack/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>games@gentoo.org</email>
+ <name>Gentoo Games Project</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:nethack:nethack</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/games-roguelike/nethack/nethack-3.6.7-r1.ebuild b/games-roguelike/nethack/nethack-3.6.7-r1.ebuild
new file mode 100644
index 000000000000..1822cf31cf10
--- /dev/null
+++ b/games-roguelike/nethack/nethack-3.6.7-r1.ebuild
@@ -0,0 +1,159 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit desktop flag-o-matic toolchain-funcs
+
+DESCRIPTION="The ultimate old-school single player dungeon exploration game"
+HOMEPAGE="https://www.nethack.org/"
+SRC_URI="https://nethack.org/download/${PV}/nethack-${PV//.}-src.tgz -> ${P}.tar.gz"
+S="${WORKDIR}/NetHack-${PV}"
+
+LICENSE="nethack"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~ppc ~ppc64 ~riscv ~x86"
+IUSE="X"
+
+RDEPEND="
+ acct-group/gamestat
+ sys-libs/ncurses:0=
+ X? (
+ x11-libs/libX11
+ x11-libs/libXaw
+ x11-libs/libXpm
+ x11-libs/libXt
+ )
+"
+DEPEND="
+ ${RDEPEND}
+ X? ( x11-base/xorg-proto )
+"
+BDEPEND="
+ virtual/pkgconfig
+ app-alternatives/lex
+ app-alternatives/yacc
+ X? (
+ x11-apps/bdftopcf
+ x11-apps/mkfontscale
+ )
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-3.6.3-recover.patch"
+ "${FILESDIR}/${PN}-3.6.6-clang16.patch"
+ "${FILESDIR}/${PN}-3.6.7-no-define-warn-unused-result.patch"
+ "${FILESDIR}/${PN}-3.6.7-path-max.patch"
+ "${FILESDIR}/${PN}-3.6.7-hurd-tparm.patch"
+)
+
+src_prepare() {
+ default
+
+ cp "${FILESDIR}/${PN}-3.6.3-hint-$(usex X x11 tty)" hint || die "Failed to copy hint file"
+ sys/unix/setup.sh hint || die "Failed to run setup.sh"
+}
+
+src_compile() {
+ append-cflags -std=gnu89 # old codebase, incompatible with c2x
+ append-cflags -I../include -DDLB -DSECURE -DTIMED_DELAY -DVISION_TABLES -DDUMPLOG -DSCORE_ON_BOTL
+ append-cflags '-DCOMPRESS=\"${EPREFIX}/bin/gzip\"' '-DCOMPRESS_EXTENSION=\".gz\"'
+ append-cflags "-DHACKDIR=\\\"${EPREFIX}/usr/$(get_libdir)/nethack\\\""
+ append-cflags "-DVAR_PLAYGROUND=\\\"${EPREFIX}/var/games/nethack\\\""
+ append-cflags "-DDEF_PAGER=\\\"${PAGER}\\\""
+ append-cflags -DSYSCF "-DSYSCF_FILE=\\\"${EPREFIX}/etc/nethack.sysconf\\\""
+
+ if use X; then
+ append-cflags -DX11_GRAPHICS -DUSE_XPM
+
+ # XtErrorHandler usage seems right, but headers "may" add ((noreturn))
+ # giving an incompatible type error with clang-16 (could alternatively
+ # use private _X_NORETURN but this may be fragile)
+ append-cflags -Wno-error=incompatible-pointer-types #874462
+ fi
+
+ LOCAL_MAKEOPTS=(
+ CC="$(tc-getCC)" CFLAGS="${CFLAGS}" LFLAGS="${LDFLAGS}"
+ WINTTYLIB="$($(tc-getPKG_CONFIG) --libs ncurses)"
+ HACKDIR="${EPREFIX}/usr/$(get_libdir)/nethack"
+ )
+
+ emake "${LOCAL_MAKEOPTS[@]}" nethack recover spec_levs
+ # XXX: Lots of troff errors on Hurd, so don't build the Guidebook there for now.
+ ! use kernel_Hurd && emake "${LOCAL_MAKEOPTS[@]}" Guidebook
+
+ # Upstream still has some parallel compilation bugs
+ emake -j1 "${LOCAL_MAKEOPTS[@]}" all
+}
+
+src_install() {
+ emake \
+ "${LOCAL_MAKEOPTS[@]}" \
+ INSTDIR="${ED}/usr/$(get_libdir)/nethack" \
+ SHELLDIR="${ED}/usr/bin" \
+ VARDIR="${ED}/var/games/nethack" \
+ install
+
+ mv "${ED}/usr/$(get_libdir)/nethack/recover" "${ED}/usr/bin/recover-nethack" || die "Failed to move recover-nethack"
+
+ doman doc/nethack.6
+ newman doc/recover.6 recover-nethack.6
+ dodoc doc/Guidebook.txt
+
+ insinto /etc
+ newins sys/unix/sysconf nethack.sysconf
+
+ insinto /etc/skel
+ newins "${FILESDIR}/${PN}-3.6.0-nethackrc" .nethackrc
+
+ if use X ; then
+ cd "${S}/win/X11" || die "Failed to enter win/X11 directory"
+
+ mkdir -p "${ED}/etc/X11/app-defaults/" || die "Failed to make app-defaults directory"
+ mv "${ED}/usr/$(get_libdir)/nethack/NetHack.ad" "${ED}/etc/X11/app-defaults/" || die "Failed to move NetHack.ad"
+
+ newicon nh_icon.xpm nethack.xpm
+ make_desktop_entry ${PN} Nethack
+
+ # install nethack fonts
+ bdftopcf -o nh10.pcf nh10.bdf || die "Converting fonts failed"
+ bdftopcf -o ibm.pcf ibm.bdf || die "Converting fonts failed"
+ insinto "/usr/$(get_libdir)/nethack/fonts"
+ doins *.pcf
+ mkfontdir "${ED}/usr/$(get_libdir)/nethack/fonts" || die "mkfontdir failed"
+ fi
+
+ rm -r "${ED}/var/games/nethack" || die "Failed to clean var/games/nethack"
+ keepdir /var/games/nethack/save
+}
+
+pkg_preinst() {
+ fowners root:gamestat /var/games/nethack /var/games/nethack/save
+ fperms 2770 /var/games/nethack /var/games/nethack/save
+
+ fowners root:gamestat "/usr/$(get_libdir)/nethack/nethack"
+ fperms g+s "/usr/$(get_libdir)/nethack/nethack"
+}
+
+pkg_postinst() {
+ cd "${EROOT}/var/games/nethack" || die "Failed to enter ${EROOT}/var/games/nethack directory"
+
+ # Transition mechanism for <nethack-3.6.1 ebuilds. It's perfectly safe, so we'll just run it unconditionally.
+ chmod 2770 . save || die "Failed to chmod statedir"
+
+ # Those files can't be created earlier because we don't want portage to wipe them during upgrades
+ ( umask 007 && touch logfile perm record xlogfile ) || die "Failed to create log files"
+
+ # Instead of using a proper version header in its save files, nethack checks for incompatibilities
+ # by comparing the mtimes of save files and its own binary. This would require admin interaction even
+ # during upgrades which don't change the file format, so we'll just touch the files and warn the admin
+ # manually in case of compatibility issues.
+ (
+ shopt -s nullglob
+ local saves=( bones* save/* )
+ [[ -n "${saves[*]}" ]] && touch -c "${saves[@]}"
+ ) # non-fatal
+
+ elog "A minimal default .nethackrc has been placed in /etc/skel/"
+ elog "The sysconf file is at /etc/nethack.sysconf"
+}
diff --git a/games-roguelike/nethack/nethack-3.6.7.ebuild b/games-roguelike/nethack/nethack-3.6.7.ebuild
new file mode 100644
index 000000000000..08b526369699
--- /dev/null
+++ b/games-roguelike/nethack/nethack-3.6.7.ebuild
@@ -0,0 +1,153 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit desktop flag-o-matic toolchain-funcs
+
+DESCRIPTION="The ultimate old-school single player dungeon exploration game"
+HOMEPAGE="https://www.nethack.org/"
+SRC_URI="https://nethack.org/download/${PV}/nethack-${PV//.}-src.tgz -> ${P}.tar.gz"
+S="${WORKDIR}/NetHack-${PV}"
+
+LICENSE="nethack"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~ppc ~ppc64 ~riscv ~x86"
+IUSE="X"
+
+RDEPEND="
+ acct-group/gamestat
+ sys-libs/ncurses:0=
+ X? (
+ x11-libs/libX11
+ x11-libs/libXaw
+ x11-libs/libXpm
+ x11-libs/libXt
+ )
+"
+DEPEND="
+ ${RDEPEND}
+ X? ( x11-base/xorg-proto )
+"
+BDEPEND="
+ virtual/pkgconfig
+ app-alternatives/yacc
+ X? (
+ x11-apps/bdftopcf
+ x11-apps/mkfontscale
+ )
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-3.6.3-recover.patch"
+ "${FILESDIR}/${PN}-3.6.6-clang16.patch"
+)
+
+src_prepare() {
+ default
+
+ cp "${FILESDIR}/${PN}-3.6.3-hint-$(usex X x11 tty)" hint || die "Failed to copy hint file"
+ sys/unix/setup.sh hint || die "Failed to run setup.sh"
+}
+
+src_compile() {
+ append-cflags -std=gnu89 # old codebase, incompatible with c2x
+ append-cflags -I../include -DDLB -DSECURE -DTIMED_DELAY -DVISION_TABLES -DDUMPLOG -DSCORE_ON_BOTL
+ append-cflags '-DCOMPRESS=\"${EPREFIX}/bin/gzip\"' '-DCOMPRESS_EXTENSION=\".gz\"'
+ append-cflags "-DHACKDIR=\\\"${EPREFIX}/usr/$(get_libdir)/nethack\\\""
+ append-cflags "-DVAR_PLAYGROUND=\\\"${EPREFIX}/var/games/nethack\\\""
+ append-cflags "-DDEF_PAGER=\\\"${PAGER}\\\""
+ append-cflags -DSYSCF "-DSYSCF_FILE=\\\"${EPREFIX}/etc/nethack.sysconf\\\""
+
+ if use X; then
+ append-cflags -DX11_GRAPHICS -DUSE_XPM
+
+ # XtErrorHandler usage seems right, but headers "may" add ((noreturn))
+ # giving an incompatible type error with clang-16 (could alternatively
+ # use private _X_NORETURN but this may be fragile)
+ append-cflags -Wno-error=incompatible-pointer-types #874462
+ fi
+
+ LOCAL_MAKEOPTS=(
+ CC="$(tc-getCC)" CFLAGS="${CFLAGS}" LFLAGS="${LDFLAGS}"
+ WINTTYLIB="$($(tc-getPKG_CONFIG) --libs ncurses)"
+ HACKDIR="${EPREFIX}/usr/$(get_libdir)/nethack"
+ )
+
+ emake "${LOCAL_MAKEOPTS[@]}" nethack recover Guidebook spec_levs
+
+ # Upstream still has some parallel compilation bugs
+ emake -j1 "${LOCAL_MAKEOPTS[@]}" all
+}
+
+src_install() {
+ emake \
+ "${LOCAL_MAKEOPTS[@]}" \
+ INSTDIR="${ED}/usr/$(get_libdir)/nethack" \
+ SHELLDIR="${ED}/usr/bin" \
+ VARDIR="${ED}/var/games/nethack" \
+ install
+
+ mv "${ED}/usr/$(get_libdir)/nethack/recover" "${ED}/usr/bin/recover-nethack" || die "Failed to move recover-nethack"
+
+ doman doc/nethack.6
+ newman doc/recover.6 recover-nethack.6
+ dodoc doc/Guidebook.txt
+
+ insinto /etc
+ newins sys/unix/sysconf nethack.sysconf
+
+ insinto /etc/skel
+ newins "${FILESDIR}/${PN}-3.6.0-nethackrc" .nethackrc
+
+ if use X ; then
+ cd "${S}/win/X11" || die "Failed to enter win/X11 directory"
+
+ mkdir -p "${ED}/etc/X11/app-defaults/" || die "Failed to make app-defaults directory"
+ mv "${ED}/usr/$(get_libdir)/nethack/NetHack.ad" "${ED}/etc/X11/app-defaults/" || die "Failed to move NetHack.ad"
+
+ newicon nh_icon.xpm nethack.xpm
+ make_desktop_entry ${PN} Nethack
+
+ # install nethack fonts
+ bdftopcf -o nh10.pcf nh10.bdf || die "Converting fonts failed"
+ bdftopcf -o ibm.pcf ibm.bdf || die "Converting fonts failed"
+ insinto "/usr/$(get_libdir)/nethack/fonts"
+ doins *.pcf
+ mkfontdir "${ED}/usr/$(get_libdir)/nethack/fonts" || die "mkfontdir failed"
+ fi
+
+ rm -r "${ED}/var/games/nethack" || die "Failed to clean var/games/nethack"
+ keepdir /var/games/nethack/save
+}
+
+pkg_preinst() {
+ fowners root:gamestat /var/games/nethack /var/games/nethack/save
+ fperms 2770 /var/games/nethack /var/games/nethack/save
+
+ fowners root:gamestat "/usr/$(get_libdir)/nethack/nethack"
+ fperms g+s "/usr/$(get_libdir)/nethack/nethack"
+}
+
+pkg_postinst() {
+ cd "${EROOT}/var/games/nethack" || die "Failed to enter ${EROOT}/var/games/nethack directory"
+
+ # Transition mechanism for <nethack-3.6.1 ebuilds. It's perfectly safe, so we'll just run it unconditionally.
+ chmod 2770 . save || die "Failed to chmod statedir"
+
+ # Those files can't be created earlier because we don't want portage to wipe them during upgrades
+ ( umask 007 && touch logfile perm record xlogfile ) || die "Failed to create log files"
+
+ # Instead of using a proper version header in its save files, nethack checks for incompatibilities
+ # by comparing the mtimes of save files and its own binary. This would require admin interaction even
+ # during upgrades which don't change the file format, so we'll just touch the files and warn the admin
+ # manually in case of compatibility issues.
+ (
+ shopt -s nullglob
+ local saves=( bones* save/* )
+ [[ -n "${saves[*]}" ]] && touch -c "${saves[@]}"
+ ) # non-fatal
+
+ elog "A minimal default .nethackrc has been placed in /etc/skel/"
+ elog "The sysconf file is at /etc/nethack.sysconf"
+}
diff --git a/games-roguelike/nethack/nethack-5.0.0-r1.ebuild b/games-roguelike/nethack/nethack-5.0.0-r1.ebuild
new file mode 100644
index 000000000000..7cc5a7e04df8
--- /dev/null
+++ b/games-roguelike/nethack/nethack-5.0.0-r1.ebuild
@@ -0,0 +1,233 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+LUA_COMPAT=( lua5-{1,3,4} luajit )
+
+inherit desktop flag-o-matic lua-single toolchain-funcs
+
+DESCRIPTION="The ultimate old-school single player dungeon exploration game"
+HOMEPAGE="https://www.nethack.org/"
+SRC_URI="https://nethack.org/download/${PV}/nethack-${PV//.}-src.tgz -> ${P}.tar.gz"
+S="${WORKDIR}/NetHack-${PV}"
+
+LICENSE="nethack"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~ppc ~ppc64 ~riscv ~x86"
+IUSE="X qt6"
+REQUIRED_USE="
+ ${LUA_REQUIRED_USE}
+"
+
+RDEPEND="
+ ${LUA_DEPS}
+ acct-group/gamestat
+ sys-apps/util-linux
+ sys-libs/ncurses:0=
+ X? (
+ x11-libs/libX11
+ x11-libs/libXaw
+ x11-libs/libXpm
+ x11-libs/libXt
+ )
+ qt6? (
+ dev-qt/qtbase:6[gui,widgets]
+ dev-qt/qtmultimedia:6
+ )
+"
+DEPEND="
+ ${RDEPEND}
+ X? ( x11-base/xorg-proto )
+"
+BDEPEND="
+ virtual/pkgconfig
+ app-alternatives/lex
+ app-alternatives/yacc
+ X? (
+ x11-apps/bdftopcf
+ x11-apps/mkfontscale
+ )
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-5.0.0-system-lua.patch"
+ "${FILESDIR}/${PN}-5.0.0-recover.patch"
+ "${FILESDIR}/${PN}-3.6.6-clang16.patch"
+ "${FILESDIR}/${PN}-5.0.0-no-define-warn-unused-result.patch"
+ "${FILESDIR}/${PN}-3.6.7-path-max.patch"
+ "${FILESDIR}/${PN}-5.0.0-hurd-tparm.patch"
+ "${FILESDIR}/${PN}-5.0.0-fix_make.patch"
+ "${FILESDIR}/${PN}-5.0.0-help.patch"
+
+ # see https://bugs.gentoo.org/975067, backport
+ "${FILESDIR}/${P}-fix_musl_gcc.patch"
+)
+
+pkg_setup() {
+ lua-single_pkg_setup
+}
+
+src_prepare() {
+ default
+
+ pushd sys/unix >/dev/null || die
+ sed -i \
+ -e "s:pkg-config:$(tc-getPKG_CONFIG):g" \
+ -e 's:-DCOMPRESS=[^ ]*::' \
+ -e 's:-DSYSCF_FILE=[^ ]*::' \
+ -e '/^GIT_.* :=/d' \
+ hints/linux.${PV//./} || die
+
+ # the absence of lua_get_CFLAGS will warn if the sed does nothing
+ sed -i \
+ -e 's:^CCFLAGS = -g:CCFLAGS = $(MYCFLAGS):' \
+ -e 's:^CCXXFLAGS = -g:CCXXFLAGS = $(MYCXXFLAGS):' \
+ hints/include/compiler.${PV//./} || die
+
+ sed -i \
+ -e "s/^GDBPATH=/#GDBPATH=/" \
+ sysconf || die
+
+ # use precompiled Guidebook.txt, lots of troff errors on Hurd
+ sed -i \
+ -e '/^ALLDEP = .*/s/Guidebook//' \
+ Makefile.top || die
+
+ ./setup.sh hints/linux.${PV//./} || die "Failed to run setup.sh"
+ popd >/dev/null || die
+}
+
+src_compile() {
+ # custom options
+ append-cppflags -DVISION_TABLES -DSCORE_ON_BOTL
+
+ # fix paths
+ append-cppflags '-DCOMPRESS=\"${EPREFIX}/bin/gzip\"'
+ append-cppflags '-DDEF_PAGER=\"${PAGER}\"'
+ append-cppflags '-DSYSCF_FILE=\"${EPREFIX}/etc/nethack.sysconf\"'
+ append-cppflags '-DVAR_PLAYGROUND=\"${EPREFIX}/var/games/nethack\"'
+
+ # -Wlto-type-mismatch, bug #973698
+ use qt6 && filter-lto
+
+ LOCAL_MAKEOPTS=(
+ AR="$(tc-getAR)"
+ CC="$(tc-getCC)"
+ CXX="$(tc-getCXX)"
+ MYCFLAGS="${CFLAGS} ${CPPFLAGS} $(lua_get_CFLAGS)"
+ LFLAGS="${LDFLAGS}"
+
+ # musl
+ $(usev elibc_musl musl=1)
+ UUID_LIB_CHECK="1" # checked with ldconfig -p
+
+ # use system lua
+ SYSTEM_LUA=1
+ LUA_VERSION="$(lua_get_version)"
+ LUA_HEADER_DIR="${ESYSROOT}/$(lua_get_include_dir)"
+ LUA_LIBS="$(lua_get_LIBS)"
+
+ # custom path
+ HACKDIR="${EPREFIX}/usr/$(get_libdir)/nethack"
+
+ # graphic backends
+ WANT_WIN_ALL=
+ WANT_WIN_TTY=1
+ WANT_WIN_CURSES=1
+ WANT_WIN_X11=$(usev X)
+ WANT_WIN_QT=$(usev qt6)
+ WANT_WIN_QT6=$(usev qt6)
+ )
+
+ if use qt6; then
+ LOCAL_MAKEOPTS+=(
+ MYCXXFLAGS="${CXXFLAGS} ${CPPFLAGS} $(lua_get_CFLAGS)"
+ QTDIR="${ESYSROOT}/usr"
+ )
+ fi
+
+ # already in MYC{,XX)FLAGS, unset to allow CFLAGS ?= with useful flags then
+ unset CFLAGS CXXFLAGS
+
+ # Upstream still has some parallel compilation bugs.
+ emake -j1 "${LOCAL_MAKEOPTS[@]}" all
+}
+
+# do nothing but warnings
+src_test() { :; }
+
+src_install() {
+ LOCAL_MAKEOPTS+=(
+ GAMEPERM=02755
+ CHOWN=true
+ CHGRP=true
+
+ POSTINSTALL=
+ INSTDIR="${ED}/usr/$(get_libdir)/nethack"
+ SHELLDIR="${ED}/usr/bin"
+ VARDIR="${ED}/var/games/nethack"
+ )
+
+ emake -j1 "${LOCAL_MAKEOPTS[@]}" install
+
+ mv "${ED}/usr/$(get_libdir)/nethack/recover" "${ED}/usr/bin/recover-nethack" || die "Failed to move recover-nethack"
+
+ doman doc/nethack.6
+ newman doc/recover.6 recover-nethack.6
+ dodoc doc/Guidebook.txt
+
+ insinto /etc
+ newins sys/unix/sysconf nethack.sysconf
+
+ if use X; then
+ mkdir -p "${ED}/etc/X11/app-defaults/" || die "Failed to make app-defaults directory"
+ mv "${ED}/usr/$(get_libdir)/nethack/NetHack.ad" "${ED}/etc/X11/app-defaults/" || die "Failed to move NetHack.ad"
+
+ make_desktop_entry --eapi9 ${PN} -n Nethack
+
+ pushd "${S}"/win/X11 >/dev/null || die
+ newicon nh_icon.xpm nethack.xpm
+
+ # install nethack fonts
+ bdftopcf -o nh10.pcf nh10.bdf || die "Converting fonts failed"
+ bdftopcf -o ibm.pcf ibm.bdf || die "Converting fonts failed"
+ local fontdir="/usr/$(get_libdir)/nethack/fonts"
+ insinto "${fontdir}"
+ doins *.pcf
+ mkfontdir "${ED}/${fontdir}" || die "mkfontdir failed"
+ popd >/dev/null || die
+ fi
+
+ rm -r "${ED}/var/games/nethack" || die "Failed to clean var/games/nethack"
+ keepdir /var/games/nethack/save
+}
+
+pkg_preinst() {
+ fowners root:gamestat /var/games/nethack /var/games/nethack/save
+ fperms 2770 /var/games/nethack /var/games/nethack/save
+
+ fowners root:gamestat "/usr/$(get_libdir)/nethack/nethack"
+ fperms g+s "/usr/$(get_libdir)/nethack/nethack"
+}
+
+pkg_postinst() {
+ pushd "${EROOT}/var/games/nethack" >/dev/null || die "Failed to enter ${EROOT}/var/games/nethack directory"
+
+ # Transition mechanism for <nethack-3.6.1 ebuilds. It's perfectly safe, so we'll just run it unconditionally.
+ chmod 2770 . save || die "Failed to chmod statedir"
+
+ # Those files can't be created earlier because we don't want portage to wipe them during upgrades
+ ( umask 007 && touch logfile perm record xlogfile ) || die "Failed to create log files"
+
+ # Instead of using a proper version header in its save files, nethack checks for incompatibilities
+ # by comparing the mtimes of save files and its own binary. This would require admin interaction even
+ # during upgrades which don't change the file format, so we'll just touch the files and warn the admin
+ # manually in case of compatibility issues.
+ (
+ shopt -s nullglob
+ local saves=( bones* save/* )
+ [[ -n "${saves[*]}" ]] && touch -c "${saves[@]}"
+ ) # non-fatal
+ popd >/dev/null || die
+}
diff --git a/games-roguelike/nethack/nethack-5.0.0.ebuild b/games-roguelike/nethack/nethack-5.0.0.ebuild
new file mode 100644
index 000000000000..e4877514d6b6
--- /dev/null
+++ b/games-roguelike/nethack/nethack-5.0.0.ebuild
@@ -0,0 +1,201 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+LUA_COMPAT=( lua5-{1,3,4} luajit )
+
+inherit desktop flag-o-matic lua-single toolchain-funcs
+
+DESCRIPTION="The ultimate old-school single player dungeon exploration game"
+HOMEPAGE="https://www.nethack.org/"
+SRC_URI="https://nethack.org/download/${PV}/nethack-${PV//.}-src.tgz -> ${P}.tar.gz"
+S="${WORKDIR}/NetHack-${PV}"
+
+LICENSE="nethack"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~ppc ~ppc64 ~riscv ~x86"
+IUSE="X qt6"
+REQUIRED_USE="
+ ${LUA_REQUIRED_USE}
+"
+
+RDEPEND="
+ ${LUA_DEPS}
+ acct-group/gamestat
+ sys-libs/ncurses:0=
+ X? (
+ x11-libs/libX11
+ x11-libs/libXaw
+ x11-libs/libXpm
+ x11-libs/libXt
+ )
+ qt6? (
+ dev-qt/qtbase:6[gui,widgets]
+ dev-qt/qtmultimedia:6
+ )
+"
+DEPEND="
+ ${RDEPEND}
+ X? ( x11-base/xorg-proto )
+"
+BDEPEND="
+ virtual/pkgconfig
+ app-alternatives/lex
+ app-alternatives/yacc
+ X? (
+ x11-apps/bdftopcf
+ x11-apps/mkfontscale
+ )
+ qt6? ( dev-qt/qtbase:6 )
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-5.0.0-system-lua.patch"
+ "${FILESDIR}/${PN}-5.0.0-recover.patch"
+ "${FILESDIR}/${PN}-3.6.6-clang16.patch"
+ "${FILESDIR}/${PN}-5.0.0-no-define-warn-unused-result.patch"
+ "${FILESDIR}/${PN}-3.6.7-path-max.patch"
+ "${FILESDIR}/${PN}-5.0.0-hurd-tparm.patch"
+)
+
+pkg_setup() {
+ lua-single_pkg_setup
+}
+
+src_prepare() {
+ default
+
+ local hint="${FILESDIR}/${PN}-3.6.3-hint-tty"
+ use X && hint="${FILESDIR}/${PN}-5.0.0-hint-x11"
+ use qt6 && hint="${FILESDIR}/${PN}-5.0.0-hint-qt6"
+ use X && use qt6 && hint="${FILESDIR}/${PN}-5.0.0-hint-qt6-x11"
+
+ cp "${hint}" hint || die "Failed to copy hint file"
+ sys/unix/setup.sh hint || die "Failed to run setup.sh"
+}
+
+src_compile() {
+ local qt_cflags qt_libs
+
+ append-cflags -std=gnu99 # NetHack 5.0 contains C99 code, but still incompatible with c2x
+ append-cflags -I../include -DDLB -DSECURE -DTIMED_DELAY -DVISION_TABLES -DDUMPLOG -DSCORE_ON_BOTL
+ append-cflags '-DCOMPRESS=\"${EPREFIX}/bin/gzip\"' '-DCOMPRESS_EXTENSION=\".gz\"'
+ append-cflags "-DHACKDIR=\\\"${EPREFIX}/usr/$(get_libdir)/nethack\\\""
+ append-cflags "-DVAR_PLAYGROUND=\\\"${EPREFIX}/var/games/nethack\\\""
+ append-cflags "-DDEF_PAGER=\\\"${PAGER}\\\""
+ append-cflags -DSYSCF "-DSYSCF_FILE=\\\"${EPREFIX}/etc/nethack.sysconf\\\""
+ append-cflags "$(lua_get_CFLAGS)"
+
+ if use X; then
+ append-cflags -DX11_GRAPHICS -DUSE_XPM
+
+ # XtErrorHandler usage seems right, but headers "may" add ((noreturn))
+ # giving an incompatible type error with clang-16 (could alternatively
+ # use private _X_NORETURN but this may be fragile)
+ append-cflags -Wno-error=incompatible-pointer-types #874462
+ fi
+
+ use qt6 && append-cflags -DQT_GRAPHICS -DUSE_XPM -DSND_LIB_QTSOUND -DUSER_SOUNDS
+
+ if use qt6; then
+ qt_cflags="$($(tc-getPKG_CONFIG) --cflags Qt6Gui Qt6Widgets Qt6Multimedia)"
+ qt_libs="$($(tc-getPKG_CONFIG) --libs Qt6Gui Qt6Widgets Qt6Multimedia)"
+ append-cxxflags -std=gnu++20 -I. -I../include $(lua_get_CFLAGS)
+ append-cxxflags -DQT_GRAPHICS -DUSE_XPM -DSND_LIB_QTSOUND -DUSER_SOUNDS ${qt_cflags} -fPIC
+ append-cxxflags "-DHACKDIR=\\\"${EPREFIX}/usr/$(get_libdir)/nethack\\\""
+ use X && append-cxxflags -DX11_GRAPHICS
+ fi
+
+ LOCAL_MAKEOPTS=(
+ CC="$(tc-getCC)" CXX="$(tc-getCXX)" CFLAGS="${CFLAGS}" LFLAGS="${LDFLAGS}"
+ SYSTEM_LUA=1
+ LUA_VERSION="$(lua_get_version)"
+ LUA_HEADER_DIR="$(lua_get_include_dir)"
+ LUA_LIBS="$(lua_get_LIBS)"
+ WINTTYLIB="$($(tc-getPKG_CONFIG) --libs ncurses)"
+ HACKDIR="${EPREFIX}/usr/$(get_libdir)/nethack"
+ )
+
+ if use qt6; then
+ LOCAL_MAKEOPTS+=(
+ CXXFLAGS="${CXXFLAGS}"
+ QTLIBS="${qt_libs}"
+ MOCPATH="$($(tc-getPKG_CONFIG) Qt6Gui --variable=libexecdir)/moc"
+ QTDIR="${EPREFIX}/usr"
+ )
+ fi
+
+ # Upstream still has some parallel compilation bugs.
+ emake -j1 "${LOCAL_MAKEOPTS[@]}" nethack recover spec_levs
+ # XXX: Lots of troff errors on Hurd, so don't build the Guidebook there for now.
+ ! use kernel_Hurd && emake -j1 "${LOCAL_MAKEOPTS[@]}" Guidebook
+
+ emake -j1 "${LOCAL_MAKEOPTS[@]}" all
+}
+
+src_install() {
+ emake \
+ "${LOCAL_MAKEOPTS[@]}" \
+ INSTDIR="${ED}/usr/$(get_libdir)/nethack" \
+ SHELLDIR="${ED}/usr/bin" \
+ VARDIR="${ED}/var/games/nethack" \
+ install
+
+ mv "${ED}/usr/$(get_libdir)/nethack/recover" "${ED}/usr/bin/recover-nethack" || die "Failed to move recover-nethack"
+
+ doman doc/nethack.6
+ newman doc/recover.6 recover-nethack.6
+ dodoc doc/Guidebook.txt
+
+ insinto /etc
+ newins sys/unix/sysconf nethack.sysconf
+
+ if use X ; then
+ cd "${S}/win/X11" || die "Failed to enter win/X11 directory"
+
+ mkdir -p "${ED}/etc/X11/app-defaults/" || die "Failed to make app-defaults directory"
+ mv "${ED}/usr/$(get_libdir)/nethack/NetHack.ad" "${ED}/etc/X11/app-defaults/" || die "Failed to move NetHack.ad"
+
+ newicon nh_icon.xpm nethack.xpm
+ make_desktop_entry ${PN} Nethack
+
+ # install nethack fonts
+ bdftopcf -o nh10.pcf nh10.bdf || die "Converting fonts failed"
+ bdftopcf -o ibm.pcf ibm.bdf || die "Converting fonts failed"
+ insinto "/usr/$(get_libdir)/nethack/fonts"
+ doins *.pcf
+ mkfontdir "${ED}/usr/$(get_libdir)/nethack/fonts" || die "mkfontdir failed"
+ fi
+
+ rm -r "${ED}/var/games/nethack" || die "Failed to clean var/games/nethack"
+ keepdir /var/games/nethack/save
+}
+
+pkg_preinst() {
+ fowners root:gamestat /var/games/nethack /var/games/nethack/save
+ fperms 2770 /var/games/nethack /var/games/nethack/save
+
+ fowners root:gamestat "/usr/$(get_libdir)/nethack/nethack"
+ fperms g+s "/usr/$(get_libdir)/nethack/nethack"
+}
+
+pkg_postinst() {
+ cd "${EROOT}/var/games/nethack" || die "Failed to enter ${EROOT}/var/games/nethack directory"
+
+ # Transition mechanism for <nethack-3.6.1 ebuilds. It's perfectly safe, so we'll just run it unconditionally.
+ chmod 2770 . save || die "Failed to chmod statedir"
+
+ # Those files can't be created earlier because we don't want portage to wipe them during upgrades
+ ( umask 007 && touch logfile perm record xlogfile ) || die "Failed to create log files"
+
+ # Instead of using a proper version header in its save files, nethack checks for incompatibilities
+ # by comparing the mtimes of save files and its own binary. This would require admin interaction even
+ # during upgrades which don't change the file format, so we'll just touch the files and warn the admin
+ # manually in case of compatibility issues.
+ (
+ shopt -s nullglob
+ local saves=( bones* save/* )
+ [[ -n "${saves[*]}" ]] && touch -c "${saves[@]}"
+ ) # non-fatal
+}
diff --git a/games-roguelike/powder/Manifest b/games-roguelike/powder/Manifest
new file mode 100644
index 000000000000..9e29201cdbf2
--- /dev/null
+++ b/games-roguelike/powder/Manifest
@@ -0,0 +1 @@
+DIST powder118_src.tar.gz 1941412 BLAKE2B 7c798a56e7d03dde41502982ee96077e6d2ebc17dd42694b6fa567d52f52bf1d44ddb5fa7e284d65f1d09fa2047f5322a572e901662fb58612ba208f9d24f64f SHA512 df2b6abd7453e7636588d13cf02a830ce1ebb8820bdb369afb3374ffd273fe5ef58e97ec35d8463cdb3d8b67e86f2b4afe0bcff7ee8ab5e2b7805a1b6209944c
diff --git a/games-roguelike/powder/files/powder-117-gcc6.patch b/games-roguelike/powder/files/powder-117-gcc6.patch
new file mode 100644
index 000000000000..3a9b7f2af541
--- /dev/null
+++ b/games-roguelike/powder/files/powder-117-gcc6.patch
@@ -0,0 +1,20 @@
+Bug: https://bugs.gentoo.org/598928
+
+--- a/source.txt
++++ b/source.txt
+@@ -13400,13 +13400,13 @@
+
+ BRANCH MAIN
+ {
+- symbol '\\207'
++ symbol static_cast<u8>('\\207')
+ welcome "%U <return> to the main dungeon."
+ }
+
+ BRANCH TRIDUDE
+ {
+- symbol '\\211'
++ symbol static_cast<u8>('\\211')
+ welcome "%U <enter> a cave made of metal."
+ }
+
diff --git a/games-roguelike/powder/metadata.xml b/games-roguelike/powder/metadata.xml
new file mode 100644
index 000000000000..183ecc5ceeeb
--- /dev/null
+++ b/games-roguelike/powder/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>games@gentoo.org</email>
+ <name>Gentoo Games Project</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/games-roguelike/powder/powder-118.ebuild b/games-roguelike/powder/powder-118.ebuild
new file mode 100644
index 000000000000..e1bee3e2f572
--- /dev/null
+++ b/games-roguelike/powder/powder-118.ebuild
@@ -0,0 +1,39 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit flag-o-matic
+
+MY_P=${P/-/}_src
+
+DESCRIPTION="A game in the genre of Rogue, Nethack, and Diablo with emphasis on tactical play"
+HOMEPAGE="http://www.zincland.com/powder/"
+SRC_URI="http://www.zincland.com/powder/release/${MY_P}.tar.gz"
+S="${WORKDIR}/${MY_P}"
+LICENSE="CC-Sampling-Plus-1.0"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+DEPEND="media-libs/libsdl[video]"
+RDEPEND="${DEPEND}"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-117-gcc6.patch
+)
+
+src_compile() {
+ append-cxxflags -DCHANGE_WORK_DIRECTORY
+ emake -C port/linux premake
+ emake -C port/linux powder
+}
+
+src_install() {
+ dobin port/linux/${PN}
+ dodoc README.TXT CREDITS.TXT
+}
+
+pkg_postinst() {
+ elog "While the highscore is kept, save games are never preserved between"
+ elog "versions. Please wait until your current character dies before upgrading."
+}
diff --git a/games-roguelike/scourge/Manifest b/games-roguelike/scourge/Manifest
new file mode 100644
index 000000000000..6c421e3873ff
--- /dev/null
+++ b/games-roguelike/scourge/Manifest
@@ -0,0 +1,2 @@
+DIST scourge-0.21.1.data.tar.gz 142093436 BLAKE2B 68e4cc0bfb40e9a92bc38b3db75f36df665974595ba4978cc34e077901522ece9ec5e15203ad9ab5044a61484d6850367306eb60a0da5d168a33e03130fe5774 SHA512 3701aba0f70d71aeb0e185e808e34cea62a637809a9b4c14fd19bdfbf91d36cf8dafa2a4cfddc3ee493827b40eea657fcdddc8277c57a635bc8ca8e3286376be
+DIST scourge-0.21.1.src.tar.gz 8146157 BLAKE2B ed48b29a54df1b8c7444ac2985ad069f82568b1e7a5aa98e922fb4fcf10c48840c2c38361a4bf15044c71547cd41d06fdd270b379ae0827b9b5f8063b92c1d18 SHA512 e530a8f7bddc1969a02a8b9a8b272f6f60d2c4830d23d96fc671cb79a2c4097fb9c5c0c262004a8157448b601bf58f9bbff95dd6d98275a28d3d404c339ce2ad
diff --git a/games-roguelike/scourge/files/scourge-0.21.1-Wc++11-narrowing.patch b/games-roguelike/scourge/files/scourge-0.21.1-Wc++11-narrowing.patch
new file mode 100644
index 000000000000..a852248c9fc2
--- /dev/null
+++ b/games-roguelike/scourge/files/scourge-0.21.1-Wc++11-narrowing.patch
@@ -0,0 +1,18 @@
+Allow compiling with Clang
+https://bugs.gentoo.org/739330
+
+--- a/src/sdlhandler.cpp
++++ b/src/sdlhandler.cpp
+@@ -1034,10 +1034,10 @@
+ bool SDLHandler::intersects( int x, int y, int w, int h,
+ int x2, int y2, int w2, int h2 ) {
+ SDL_Rect ra = {
+- x, y, w, h
++ static_cast<Sint16>(x), static_cast<Sint16>(y), static_cast<Uint16>(w), static_cast<Uint16>(h)
+ };
+ SDL_Rect rb = {
+- x2, y2, w2, h2
++ static_cast<Sint16>(x2), static_cast<Sint16>(y2), static_cast<Uint16>(w2), static_cast<Uint16>(h2)
+ };
+ return intersects( &ra, &rb );
+ }
diff --git a/games-roguelike/scourge/files/scourge-0.21.1-automake-1.13.patch b/games-roguelike/scourge/files/scourge-0.21.1-automake-1.13.patch
new file mode 100644
index 000000000000..5c2bc202f384
--- /dev/null
+++ b/games-roguelike/scourge/files/scourge-0.21.1-automake-1.13.patch
@@ -0,0 +1,11 @@
+--- a/configure.in
++++ b/configure.in
+@@ -4,7 +4,7 @@
+ dnl Process this file with autoconf to produce a configure script.
+ AC_INIT(src/scourge.h)
+ AM_INIT_AUTOMAKE(scourge, "0.21")
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+
+ dnl internationalization macros
+ AC_GNU_SOURCE
diff --git a/games-roguelike/scourge/files/scourge-0.21.1-freetype_pkgconfig.patch b/games-roguelike/scourge/files/scourge-0.21.1-freetype_pkgconfig.patch
new file mode 100644
index 000000000000..6a5a28d1c7ab
--- /dev/null
+++ b/games-roguelike/scourge/files/scourge-0.21.1-freetype_pkgconfig.patch
@@ -0,0 +1,32 @@
+--- a/configure.in
++++ b/configure.in
+@@ -56,6 +56,7 @@
+ # Set up binreloc (for a relocatable autopackage file)
+ AM_BINRELOC
+
++PKG_PROG_PKG_CONFIG
+ dnl --------------------------------------------------------------------------
+ dnl General options
+ dnl --------------------------------------------------------------------------
+@@ -413,19 +414,9 @@
+ FREETYPE_LIBS=`/sw/lib/freetype2/bin/freetype-config --libs`
+ have_FREETYPE=yes
+ else
+-AC_MSG_CHECKING([for freetype-config library])
+-
+-AC_PATH_PROG(FREETYPE, freetype-config, no)
+-
+-if test "$FREETYPE" = "no"; then
+- AC_MSG_ERROR(Cannot find freetype2: Is freetype-config in path?)
+- have_FREETYPE=no
+-else
+- FREETYPE_CFLAGS=`freetype-config --cflags`
+- FREETYPE_LIBS=`freetype-config --libs`
+- have_FREETYPE=yes
++ PKG_CHECK_MODULES(FREETYPE, freetype2, have_FREETYPE=yes,
++ AC_MSG_ERROR(Cannot find freetype2))
+ fi
+-fi
+
+ LIBS="$saved_LIBS"
+ TR_LIBS="$TR_LIBS $FREETYPE_LIBS"
diff --git a/games-roguelike/scourge/files/scourge-0.21.1-gcc-11.patch b/games-roguelike/scourge/files/scourge-0.21.1-gcc-11.patch
new file mode 100644
index 000000000000..7e5dc45199c4
--- /dev/null
+++ b/games-roguelike/scourge/files/scourge-0.21.1-gcc-11.patch
@@ -0,0 +1,62 @@
+https://bugs.gentoo.org/787845
+--- a/src/common/constants.h
++++ b/src/common/constants.h
+@@ -970,7 +970,7 @@ struct t3DModel {
+
+ char *getAn( const char *name );
+
+-typedef unsigned char byte;
++typedef unsigned char scourge_byte;
+
+ extern void ComputeNormals( t3DModel *pModel );
+ extern void CreateTexture( GLuint textureArray[], char *strFileName, int textureID );
+--- a/src/render/Md2.h
++++ b/src/render/Md2.h
+@@ -52,8 +52,8 @@ struct tMd2Header {
+
+ /// This is used to store the vertices that are read in for the current frame.
+ struct tMd2AliasTriangle {
+- byte vertex[3];
+- byte lightNormalIndex;
++ scourge_byte vertex[3];
++ scourge_byte lightNormalIndex;
+ };
+
+ /// This stores the animation scale, translation and name information for a frame, plus verts.
+--- a/src/render/glshape.cpp
++++ b/src/render/glshape.cpp
+@@ -35,7 +35,7 @@ class Map;
+ // poor man's dynamic lightmaps: shaded sides
+ static GLuint lightmap_tex_num = 0;
+ static GLuint lightmap_tex_num2 = 0;
+-static unsigned char data[LIGHTMAP_SIZE * LIGHTMAP_SIZE * 3];
++static unsigned char data1[LIGHTMAP_SIZE * LIGHTMAP_SIZE * 3];
+ static unsigned char data2[LIGHTMAP_SIZE * LIGHTMAP_SIZE * 3];
+
+ GLShape::GLShape( Texture tex[], int width, int depth, int height, char const* name, int descriptionGroup,
+@@ -514,11 +514,11 @@ void GLShape::createDarkTexture( WallTheme *theme ) {
+ if ( !theme || !theme->getMultiTexSmooth( 0 ) ) d = Util::roll( 127.0f, 255.0f );
+
+ // purple
+- data[i * LIGHTMAP_SIZE * 3 + j * 3 + 0] =
++ data1[i * LIGHTMAP_SIZE * 3 + j * 3 + 0] =
+ ( unsigned char )( d * tmp * ( theme ? theme->getMultiTexRed( 0 ) : 0.8f ) );
+- data[i * LIGHTMAP_SIZE * 3 + j * 3 + 1] =
++ data1[i * LIGHTMAP_SIZE * 3 + j * 3 + 1] =
+ ( unsigned char )( d * tmp * ( theme ? theme->getMultiTexGreen( 0 ) : 0.4f ) );
+- data[i * LIGHTMAP_SIZE * 3 + j * 3 + 2] =
++ data1[i * LIGHTMAP_SIZE * 3 + j * 3 + 2] =
+ ( unsigned char )( d * tmp * ( theme ? theme->getMultiTexBlue( 0 ) : 1.0f ) );
+
+ d = 255.0f;
+@@ -542,8 +542,8 @@ void GLShape::createDarkTexture( WallTheme *theme ) {
+ glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
+ glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR );
+ glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
+- glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, LIGHTMAP_SIZE, LIGHTMAP_SIZE, 0, GL_RGB, GL_UNSIGNED_BYTE, data );
+- gluBuild2DMipmaps( GL_TEXTURE_2D, GL_RGB, LIGHTMAP_SIZE, LIGHTMAP_SIZE, GL_RGB, GL_UNSIGNED_BYTE, data );
++ glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, LIGHTMAP_SIZE, LIGHTMAP_SIZE, 0, GL_RGB, GL_UNSIGNED_BYTE, data1 );
++ gluBuild2DMipmaps( GL_TEXTURE_2D, GL_RGB, LIGHTMAP_SIZE, LIGHTMAP_SIZE, GL_RGB, GL_UNSIGNED_BYTE, data1 );
+
+ glBindTexture( GL_TEXTURE_2D, lightmap_tex_num2 );
+ glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
diff --git a/games-roguelike/scourge/files/scourge-0.21.1-gcc47.patch b/games-roguelike/scourge/files/scourge-0.21.1-gcc47.patch
new file mode 100644
index 000000000000..c018d24ee383
--- /dev/null
+++ b/games-roguelike/scourge/files/scourge-0.21.1-gcc47.patch
@@ -0,0 +1,12 @@
+--- a/src/squirrel/squtils.h
++++ b/src/squirrel/squtils.h
+@@ -8,6 +8,9 @@
+ #define SQ_FREE(__ptr,__size) sq_vm_free(__ptr,__size);
+ #define SQ_REALLOC(__ptr,__oldsize,__size) sq_vm_realloc(__ptr,__oldsize,__size);
+
++void *sq_vm_realloc(void *p,SQUnsignedInteger oldsize,SQUnsignedInteger size);
++void sq_vm_free(void *p,SQUnsignedInteger size);
++
+ //sqvector mini vector class, supports objects by value
+ template<typename T> class sqvector
+ {
diff --git a/games-roguelike/scourge/files/scourge-0.21.1-gcc6.patch b/games-roguelike/scourge/files/scourge-0.21.1-gcc6.patch
new file mode 100644
index 000000000000..fed15f45ed7e
--- /dev/null
+++ b/games-roguelike/scourge/files/scourge-0.21.1-gcc6.patch
@@ -0,0 +1,34 @@
+Bug: https://bugs.gentoo.org/610492
+Upstream ticket: https://sourceforge.net/p/scourge/patches/3/
+
+--- a/src/equip.cpp
++++ b/src/equip.cpp
+@@ -595,7 +595,7 @@
+ }
+ }
+ if ( !found ) {
+- specialSkill = false;
++ specialSkill = NULL;
+ canvas->setTooltip( "" );
+ }
+ glDisable( GL_BLEND );
+--- a/src/render/map.cpp
++++ b/src/render/map.cpp
+@@ -3154,7 +3154,7 @@
+ if ( shape )
+ return shape;
+ }
+- return false;
++ return NULL;
+ }
+ if ( y1 == y2 ) {
+ if ( x1 > x2 ) SWAP( x1, x2 );
+@@ -3163,7 +3163,7 @@
+ if ( shape )
+ return shape;
+ }
+- return false;
++ return NULL;
+ }
+
+
diff --git a/games-roguelike/scourge/files/scourge-0.21.1-respect-AR.patch b/games-roguelike/scourge/files/scourge-0.21.1-respect-AR.patch
new file mode 100644
index 000000000000..e4fea442af22
--- /dev/null
+++ b/games-roguelike/scourge/files/scourge-0.21.1-respect-AR.patch
@@ -0,0 +1,11 @@
+https://bugs.gentoo.org/780450
+--- a/configure.in
++++ b/configure.in
+@@ -28,6 +28,7 @@ if test "x${CXXFLAGS-notset}" = "xnotset" ; then
+ fi
+ AC_PROG_CXX
+
++AM_PROG_AR
+ dnl Check for ranlib
+ AC_PROG_RANLIB
+
diff --git a/games-roguelike/scourge/metadata.xml b/games-roguelike/scourge/metadata.xml
new file mode 100644
index 000000000000..183ecc5ceeeb
--- /dev/null
+++ b/games-roguelike/scourge/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>games@gentoo.org</email>
+ <name>Gentoo Games Project</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/games-roguelike/scourge/scourge-0.21.1-r2.ebuild b/games-roguelike/scourge/scourge-0.21.1-r2.ebuild
new file mode 100644
index 000000000000..0fb2cf5b068e
--- /dev/null
+++ b/games-roguelike/scourge/scourge-0.21.1-r2.ebuild
@@ -0,0 +1,82 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools desktop flag-o-matic
+
+DESCRIPTION="A graphical rogue-like adventure game"
+HOMEPAGE="https://sourceforge.net/projects/scourge/"
+SRC_URI="
+ https://downloads.sourceforge.net/${PN}/${P}.src.tar.gz
+ https://downloads.sourceforge.net/${PN}/${P}.data.tar.gz"
+S="${WORKDIR}/${PN}"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+RDEPEND="
+ media-libs/freetype:2
+ media-libs/libsdl[joystick,video]
+ media-libs/sdl-image[png]
+ media-libs/sdl-mixer[vorbis]
+ media-libs/sdl-net
+ media-libs/sdl-ttf
+ virtual/libintl
+ virtual/opengl
+ virtual/glu"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ sys-devel/gettext
+ virtual/pkgconfig"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-gcc47.patch
+ "${FILESDIR}"/${P}-gcc6.patch
+ "${FILESDIR}"/${P}-automake-1.13.patch
+ "${FILESDIR}"/${P}-freetype_pkgconfig.patch
+ "${FILESDIR}"/${P}-Wc++11-narrowing.patch
+ "${FILESDIR}"/${PN}-0.21.1-respect-AR.patch
+ "${FILESDIR}"/${P}-gcc-11.patch
+)
+
+src_prepare() {
+ default
+
+ # bug #257601
+ sed -i \
+ -e '/AC_CHECK_HEADERS.*glext/ s:):, [#include <GL/gl.h>] ):' \
+ configure.in || die
+ sed -i \
+ -e '/snprintf/s/tmp, 256/tmp, sizeof(tmp)/' \
+ src/scourgehandler.cpp || die
+
+ mv configure.{in,ac} || die
+ eautoreconf
+}
+
+src_configure() {
+ # -Werror=strict-aliasing
+ # https://bugs.gentoo.org/859211
+ # Upstream sourceforge last updated in 2015, and that appears to have
+ # been uploading existing files. svn last updated 2011. No bug filed. ;)
+ #
+ # Do not trust it for LTO either.
+ append-flags -fno-strict-aliasing
+ filter-lto
+
+ econf \
+ --disable-rpath \
+ --with-data-dir="${EPREFIX}"/usr/share/${PN}
+}
+
+src_install() {
+ default
+
+ insinto /usr/share/scourge
+ doins -r ../scourge_data/.
+
+ doicon assets/scourge.png
+ make_desktop_entry scourge S.C.O.U.R.G.E.
+}
diff --git a/games-roguelike/stone-soup/Manifest b/games-roguelike/stone-soup/Manifest
new file mode 100644
index 000000000000..931dd8175c37
--- /dev/null
+++ b/games-roguelike/stone-soup/Manifest
@@ -0,0 +1,31 @@
+DIST stone-soup-0.25.png 1351 BLAKE2B cc31abd59701aa6f0fb0bdcd90630ceebf7b3cb8b60f0e2817f8800c5bc4b3a5b9fef63c90a97b6248f306e7e3da0df3863a2195b8771863344d2443e7956d59 SHA512 4695204c8b936f7aac1ba15b02a6115a955fb2c56aa9a0b968ff007bc9a1a59b608110d60cce5625a9b92cd2c869bbea7e15433a53c1a338622809477a5846bc
+DIST stone-soup-0.25.svg 68546 BLAKE2B 7c66286c9e8a3516e8483b3edb628a59fce29d8d248c3fd5b06e308782bbc651814f21ec958b30c36074a2576ced4bb10f291b5236da6f6e865ce1d7cefdf96d SHA512 dca555271faf704eb8ecdf5ee8a763df42cdeba94e9c163608c438cfc73c6fbf53416547050cad57f477ade191842e701785b65b7a9f18e27ceab05df8f2f75f
+DIST stone-soup-0.26.png 1351 BLAKE2B cc31abd59701aa6f0fb0bdcd90630ceebf7b3cb8b60f0e2817f8800c5bc4b3a5b9fef63c90a97b6248f306e7e3da0df3863a2195b8771863344d2443e7956d59 SHA512 4695204c8b936f7aac1ba15b02a6115a955fb2c56aa9a0b968ff007bc9a1a59b608110d60cce5625a9b92cd2c869bbea7e15433a53c1a338622809477a5846bc
+DIST stone-soup-0.26.svg 68546 BLAKE2B 7c66286c9e8a3516e8483b3edb628a59fce29d8d248c3fd5b06e308782bbc651814f21ec958b30c36074a2576ced4bb10f291b5236da6f6e865ce1d7cefdf96d SHA512 dca555271faf704eb8ecdf5ee8a763df42cdeba94e9c163608c438cfc73c6fbf53416547050cad57f477ade191842e701785b65b7a9f18e27ceab05df8f2f75f
+DIST stone-soup-0.27.png 1351 BLAKE2B cc31abd59701aa6f0fb0bdcd90630ceebf7b3cb8b60f0e2817f8800c5bc4b3a5b9fef63c90a97b6248f306e7e3da0df3863a2195b8771863344d2443e7956d59 SHA512 4695204c8b936f7aac1ba15b02a6115a955fb2c56aa9a0b968ff007bc9a1a59b608110d60cce5625a9b92cd2c869bbea7e15433a53c1a338622809477a5846bc
+DIST stone-soup-0.27.svg 68546 BLAKE2B 7c66286c9e8a3516e8483b3edb628a59fce29d8d248c3fd5b06e308782bbc651814f21ec958b30c36074a2576ced4bb10f291b5236da6f6e865ce1d7cefdf96d SHA512 dca555271faf704eb8ecdf5ee8a763df42cdeba94e9c163608c438cfc73c6fbf53416547050cad57f477ade191842e701785b65b7a9f18e27ceab05df8f2f75f
+DIST stone-soup-0.28.png 1351 BLAKE2B cc31abd59701aa6f0fb0bdcd90630ceebf7b3cb8b60f0e2817f8800c5bc4b3a5b9fef63c90a97b6248f306e7e3da0df3863a2195b8771863344d2443e7956d59 SHA512 4695204c8b936f7aac1ba15b02a6115a955fb2c56aa9a0b968ff007bc9a1a59b608110d60cce5625a9b92cd2c869bbea7e15433a53c1a338622809477a5846bc
+DIST stone-soup-0.28.svg 68546 BLAKE2B 7c66286c9e8a3516e8483b3edb628a59fce29d8d248c3fd5b06e308782bbc651814f21ec958b30c36074a2576ced4bb10f291b5236da6f6e865ce1d7cefdf96d SHA512 dca555271faf704eb8ecdf5ee8a763df42cdeba94e9c163608c438cfc73c6fbf53416547050cad57f477ade191842e701785b65b7a9f18e27ceab05df8f2f75f
+DIST stone-soup-0.29.1.tar.gz 17510846 BLAKE2B 65b84797c8d8a268a3ce95de9d928e131bf6e21a1ea6ac3e72263c75f9d6288e9d95f9df6401528c06aefbda9bb642c79bf78065a65224297d33c050abf37056 SHA512 2ca49c4cd228526d47e4ad7e9556b6c26566595458423cd8e6b762298f229eb7ba273770ae1e12939ba66574a5b55e44812d06c4809d4327ed9bfd738501af04
+DIST stone-soup-0.29.png 1351 BLAKE2B cc31abd59701aa6f0fb0bdcd90630ceebf7b3cb8b60f0e2817f8800c5bc4b3a5b9fef63c90a97b6248f306e7e3da0df3863a2195b8771863344d2443e7956d59 SHA512 4695204c8b936f7aac1ba15b02a6115a955fb2c56aa9a0b968ff007bc9a1a59b608110d60cce5625a9b92cd2c869bbea7e15433a53c1a338622809477a5846bc
+DIST stone-soup-0.29.svg 68546 BLAKE2B 7c66286c9e8a3516e8483b3edb628a59fce29d8d248c3fd5b06e308782bbc651814f21ec958b30c36074a2576ced4bb10f291b5236da6f6e865ce1d7cefdf96d SHA512 dca555271faf704eb8ecdf5ee8a763df42cdeba94e9c163608c438cfc73c6fbf53416547050cad57f477ade191842e701785b65b7a9f18e27ceab05df8f2f75f
+DIST stone-soup-0.30.1.tar.gz 21502317 BLAKE2B 5fc39bb83c5d6b96a00d55c4bf18ee0e6051dd8513ee397dda7b2a55c730c31a4582860c2077e78fed3fda24b5e51c52ae037c603c7dec3376deb93402e2aa72 SHA512 069c9f9d8115f4865daa277a3621534839e3bd9bd5811ae2a9d1486d25abd66461b8e49f6ef4a4265b261be73c6c66c118c49b97c3f6e05087abde7064bf0d5f
+DIST stone-soup-0.30.png 1351 BLAKE2B cc31abd59701aa6f0fb0bdcd90630ceebf7b3cb8b60f0e2817f8800c5bc4b3a5b9fef63c90a97b6248f306e7e3da0df3863a2195b8771863344d2443e7956d59 SHA512 4695204c8b936f7aac1ba15b02a6115a955fb2c56aa9a0b968ff007bc9a1a59b608110d60cce5625a9b92cd2c869bbea7e15433a53c1a338622809477a5846bc
+DIST stone-soup-0.30.svg 68546 BLAKE2B 7c66286c9e8a3516e8483b3edb628a59fce29d8d248c3fd5b06e308782bbc651814f21ec958b30c36074a2576ced4bb10f291b5236da6f6e865ce1d7cefdf96d SHA512 dca555271faf704eb8ecdf5ee8a763df42cdeba94e9c163608c438cfc73c6fbf53416547050cad57f477ade191842e701785b65b7a9f18e27ceab05df8f2f75f
+DIST stone-soup-0.31.0.tar.gz 22432560 BLAKE2B f3e696915458674e3f7ce2a47d19c740c53de897ab40227efc9c127be42dcfbb4b3ee93258ea4094fb1a18aceb37c4341aac86c1174c42ab1ce300bca3281fc6 SHA512 ad354d57a39d07ad8a1a89a7fd20b33a4cd88fcbf1f2276cdefe8890c223272b7a34969a373f6b1f39cff72499c1e2773592ce368e887307908acd59ca00ca4b
+DIST stone-soup-0.31.png 1351 BLAKE2B cc31abd59701aa6f0fb0bdcd90630ceebf7b3cb8b60f0e2817f8800c5bc4b3a5b9fef63c90a97b6248f306e7e3da0df3863a2195b8771863344d2443e7956d59 SHA512 4695204c8b936f7aac1ba15b02a6115a955fb2c56aa9a0b968ff007bc9a1a59b608110d60cce5625a9b92cd2c869bbea7e15433a53c1a338622809477a5846bc
+DIST stone-soup-0.31.svg 68546 BLAKE2B 7c66286c9e8a3516e8483b3edb628a59fce29d8d248c3fd5b06e308782bbc651814f21ec958b30c36074a2576ced4bb10f291b5236da6f6e865ce1d7cefdf96d SHA512 dca555271faf704eb8ecdf5ee8a763df42cdeba94e9c163608c438cfc73c6fbf53416547050cad57f477ade191842e701785b65b7a9f18e27ceab05df8f2f75f
+DIST stone-soup-0.32.1.tar.gz 24409881 BLAKE2B 29bf6b36c858a7426b6dfc8d75aebe575540cf89a934ce9150134c68e55b23e1e2a2da0cc53db3c3f59eff2810ed68b5577d709e8515d2e51bf46206b8c0710b SHA512 0640b3af9be104963f635b61b71ee59d18f478d3266e6c3319db13584c92b19e6bea3789e6d90bb520424b6995efba4d9e8a56216a0d1a1158a2c01f00799894
+DIST stone-soup-0.32.png 1351 BLAKE2B cc31abd59701aa6f0fb0bdcd90630ceebf7b3cb8b60f0e2817f8800c5bc4b3a5b9fef63c90a97b6248f306e7e3da0df3863a2195b8771863344d2443e7956d59 SHA512 4695204c8b936f7aac1ba15b02a6115a955fb2c56aa9a0b968ff007bc9a1a59b608110d60cce5625a9b92cd2c869bbea7e15433a53c1a338622809477a5846bc
+DIST stone-soup-0.32.svg 68546 BLAKE2B 7c66286c9e8a3516e8483b3edb628a59fce29d8d248c3fd5b06e308782bbc651814f21ec958b30c36074a2576ced4bb10f291b5236da6f6e865ce1d7cefdf96d SHA512 dca555271faf704eb8ecdf5ee8a763df42cdeba94e9c163608c438cfc73c6fbf53416547050cad57f477ade191842e701785b65b7a9f18e27ceab05df8f2f75f
+DIST stone-soup-0.33.1.tar.gz 27261387 BLAKE2B eb43e3b3f82563b9ab0dc103dd7cc315dbbeca382ac751d59fffc3d50b6755b9da57424444e3772a73a7b1b2ceece4cbc44da030c526e63d30944085e20daaf0 SHA512 ae4476a912477be01e38c3f1294db3bb508a4cf15cdf79a4d5a40581c819893001a39efd0f987781de6f6bc023ae2952f5115a62517f0cb47a76726d2115f957
+DIST stone-soup-0.33.png 1351 BLAKE2B cc31abd59701aa6f0fb0bdcd90630ceebf7b3cb8b60f0e2817f8800c5bc4b3a5b9fef63c90a97b6248f306e7e3da0df3863a2195b8771863344d2443e7956d59 SHA512 4695204c8b936f7aac1ba15b02a6115a955fb2c56aa9a0b968ff007bc9a1a59b608110d60cce5625a9b92cd2c869bbea7e15433a53c1a338622809477a5846bc
+DIST stone-soup-0.33.svg 68546 BLAKE2B 7c66286c9e8a3516e8483b3edb628a59fce29d8d248c3fd5b06e308782bbc651814f21ec958b30c36074a2576ced4bb10f291b5236da6f6e865ce1d7cefdf96d SHA512 dca555271faf704eb8ecdf5ee8a763df42cdeba94e9c163608c438cfc73c6fbf53416547050cad57f477ade191842e701785b65b7a9f18e27ceab05df8f2f75f
+DIST stone-soup-0.34.0.tar.gz 30036616 BLAKE2B f12554f57cc060b1891e749ca41650f366b2735760b66ad661539b8e25ab4c771b2eb96dfe715d999fa0505e3f01e8388f03f478c73ad4d915d2d53990cb9518 SHA512 371faf1aa67bdfcc27ca97264783a450508bda00f5eff80fa7623147dd2c226894223dcda9812bf71a63555a09354118ee475597446daa32f423a379afab3213
+DIST stone-soup-0.34.1.tar.gz 30041776 BLAKE2B 8b056ceb8e23766b567437effa43696ddacf811e5bd7143588618b124a0c50f02733bc44034c2393794bdc3d69abacd50bc0427cf367a26a2e61b826e210b7fa SHA512 81b51af147487db9735d2f8e7f956c691bd0fcaba04bdc05aff3078fea7a093f0c25b2f39683dbb76b024b37b56cf52d1de20de012e8c344c2690f21f7fc6a6c
+DIST stone-soup-0.34.png 1351 BLAKE2B cc31abd59701aa6f0fb0bdcd90630ceebf7b3cb8b60f0e2817f8800c5bc4b3a5b9fef63c90a97b6248f306e7e3da0df3863a2195b8771863344d2443e7956d59 SHA512 4695204c8b936f7aac1ba15b02a6115a955fb2c56aa9a0b968ff007bc9a1a59b608110d60cce5625a9b92cd2c869bbea7e15433a53c1a338622809477a5846bc
+DIST stone-soup-0.34.svg 68546 BLAKE2B 7c66286c9e8a3516e8483b3edb628a59fce29d8d248c3fd5b06e308782bbc651814f21ec958b30c36074a2576ced4bb10f291b5236da6f6e865ce1d7cefdf96d SHA512 dca555271faf704eb8ecdf5ee8a763df42cdeba94e9c163608c438cfc73c6fbf53416547050cad57f477ade191842e701785b65b7a9f18e27ceab05df8f2f75f
+DIST stone_soup-0.25.1.zip 95477710 BLAKE2B 0b38a6c7cb7c4c87acccb861b5aae665cd2b6b532f6e86d4a9fa594e0d363b86b4af1ea47275f7fd026ea69d85215be8cdf46258bd620e738b4850e5eceed006 SHA512 fa7e8be582c5c6615531884ade4c113542c06c164b6912095c1adf2f16a31cb2ecce057d74132b11b1b1c256a77433037948d4e54819739b7e222cc896cd5220
+DIST stone_soup-0.26.1.zip 95585384 BLAKE2B 6d1cb99fc44e918cad4144608f259e67a26df444b93c8501590ff209e8856fd08c514d4c8c78cb0848d8e6127cdf4360b47d21ced5d919da982421934b46102d SHA512 637f1a07e9f35e18eda10c17dc28449364c56aee8456497e30552acb55608a9433cff8b64af877049c21cb2a42eb2fcad28f58a7e57a1d835eb8c252e580205d
+DIST stone_soup-0.27.1.zip 96934633 BLAKE2B 8821920a4faad9474f08a34ae3c272cb9dcd3ddeb9029e033c22eb8e6650ef20bbc30e0c0ca1556d08c1b7b898fdbdd3667a3ac9a8527e0c322cd8c78ab391bb SHA512 845dafc9895ada3712903de63b95cca9eeb66160e4a04ba21193d916447fca8e7248b851f1e938f43b8d3937cf4f4437443bdc4fe2da893fe3918fed4e0b5204
+DIST stone_soup-0.28.0.zip 98876317 BLAKE2B 10f554ea004778b6a2537caa2f994c8e7b12e190ddaaf55f9fb5d2499b91ee6d15d63a9d50167528c1625058bc262c5cba8ba08235fc377e83329ba5f80158be SHA512 7316175ccf6efea376a8a9157f9c4d1786f59c544af39e5ff28a9fcd889e23ef58c2a3680df46807c84b2ce0feb347e661c929195e8affb3d3f98c24832b17e0
diff --git a/games-roguelike/stone-soup/files/avoid-musl-execinfo.patch b/games-roguelike/stone-soup/files/avoid-musl-execinfo.patch
new file mode 100644
index 000000000000..923f940c3f57
--- /dev/null
+++ b/games-roguelike/stone-soup/files/avoid-musl-execinfo.patch
@@ -0,0 +1,12 @@
+--- a/crash.cc 2023-08-14 02:39:46.638062516 +0000
++++ b/crash.cc 2023-08-14 02:41:28.020698537 +0000
+@@ -27,7 +27,8 @@
+ #endif
+
+ #ifdef BACKTRACE_SUPPORTED
+-#if defined(TARGET_CPU_MIPS) || \
++#if !defined(__GLIBC__) || \
++ defined(TARGET_CPU_MIPS) || \
+ defined(TARGET_OS_FREEBSD) || \
+ defined(TARGET_OS_NETBSD) || \
+ defined(TARGET_OS_OPENBSD) || \
diff --git a/games-roguelike/stone-soup/files/make-advpng.patch b/games-roguelike/stone-soup/files/make-advpng.patch
new file mode 100644
index 000000000000..683e478212b4
--- /dev/null
+++ b/games-roguelike/stone-soup/files/make-advpng.patch
@@ -0,0 +1,21 @@
+--- a/Makefile 2022-05-22 11:54:15.819138403 -0500
++++ b/Makefile 2022-05-22 11:56:24.475145274 -0500
+@@ -1080,8 +1080,7 @@
+
+ ifdef TILES_ANY
+ ifndef NO_OPTIMIZE
+- PNGCRUSH = pngcrush -q -m 113
+- PNGCRUSH_LABEL = PNGCRUSH
++ USE_ADVPNG = y
+ endif
+ endif
+
+@@ -1727,7 +1726,8 @@
+ $(TILEDEFSRCS) $(TILEDEFHDRS) $(ORIGTILEFILES): build-rltiles
+
+ dat/tiles/%.png: $(RLTILES)/%.png
+ $(QUIET_PNGCRUSH)$(PNGCRUSH) $< $@
++ $(QUIET_ADVPNG)$(ADVPNG) $@
+
+ clean-rltiles:
+ $(RM) $(DESTTILEFILES)
diff --git a/games-roguelike/stone-soup/files/make-v3.patch b/games-roguelike/stone-soup/files/make-v3.patch
new file mode 100644
index 000000000000..19a308336cc3
--- /dev/null
+++ b/games-roguelike/stone-soup/files/make-v3.patch
@@ -0,0 +1,114 @@
+--- a/Makefile 2024-05-27 19:43:53.339479403 -0500
++++ b/Makefile 2024-05-27 19:45:08.737841222 -0500
+@@ -206,7 +206,7 @@
+ uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
+ uname_M := $(shell sh -c 'uname -m 2>/dev/null || echo not')
+
+-HOST := $(shell sh -c 'cc -dumpmachine || echo unknown')
++HOST :=
+ ARCH := $(HOST)
+
+ ifdef CROSSHOST
+@@ -509,15 +509,7 @@
+ GCC_VER_SUFFIX:=-$(GCC_VER)
+ endif
+
+-# Attempt to use a full compiler name, to make
+-# distcc builds work nicely.
+-LMACH := $(shell gcc -dumpmachine)-
+-ifeq ($(LMACH),-)
+ LMACH :=
+-endif
+-ifeq ($(shell which $(LMACH)gcc$(GCC_VER_SUFFIX) > /dev/null 2> /dev/null && echo "Yes"),)
+-LMACH :=
+-endif
+
+ ifneq ($(FORCE_CC),)
+ GCC := $(FORCE_CC)
+@@ -862,10 +854,11 @@
+ COVERAGE=YesPlease
+ # current catch2 doesn't support c++11
+ STDFLAG = -std=c++14
++ # tests require this
++ LIBS += -lgcov
+ endif
+
+ ifdef HURRY
+- NO_OPTIMIZE=YesPlease
+ endif
+
+ ifdef COVERAGE
+@@ -1017,7 +1010,7 @@
+ INSTALL_FONTS += "$(PROPORTIONAL_FONT)"
+ endif
+ else
+- SYS_PROPORTIONAL_FONT = $(shell util/find_font "$(OUR_PROPORTIONAL_FONT)")
++ SYS_PROPORTIONAL_FONT = /usr/share/fonts/dejavu/DejaVuSans.ttf
+ ifneq (,$(SYS_PROPORTIONAL_FONT))
+ ifeq (,$(COPY_FONTS))
+ DEFINES += -DPROPORTIONAL_FONT=\"$(SYS_PROPORTIONAL_FONT)\"
+@@ -1037,7 +1030,7 @@
+ INSTALL_FONTS += "$(MONOSPACED_FONT)"
+ endif
+ else
+- SYS_MONOSPACED_FONT = $(shell util/find_font "$(OUR_MONOSPACED_FONT)")
++ SYS_MONOSPACED_FONT = /usr/share/fonts/dejavu/DejaVuSansMono.ttf
+ ifneq (,$(SYS_MONOSPACED_FONT))
+ ifeq (,$(COPY_FONTS))
+ DEFINES += -DMONOSPACED_FONT=\"$(SYS_MONOSPACED_FONT)\"
+@@ -1177,14 +1170,8 @@
+
+ ifdef TILES_ANY
+ ifndef NO_OPTIMIZE
+- ifneq (,$(shell which advpng))
+- USE_ADVPNG = y
+- else
+- ifneq (,$(shell which pngcrush))
+ PNGCRUSH = pngcrush -q -m 113
+ PNGCRUSH_LABEL = PNGCRUSH
+- endif
+- endif
+ endif
+ endif
+
+@@ -1280,9 +1267,8 @@
+
+ LANGUAGES = $(filter-out en, $(notdir $(wildcard dat/descript/??)))
+ SRC_PKG_BASE := stone_soup
+-SRC_VERSION := $(shell git describe $(MERGE_BASE) 2>/dev/null || cat util/release_ver)
++SRC_VERSION := $(shell cat util/release_ver)
+ MAJOR_VERSION = $(shell echo "$(SRC_VERSION)"|$(SED) -r 's/-.*//;s/^([^.]+\.[^.]+).*/\1/')
+-RECENT_TAG := $(shell git describe --abbrev=0 $(MERGE_BASE))
+ WINARCH := $(shell $(GXX) -dumpmachine | grep -q x64_64 && echo win64 || echo win32)
+
+ export SRC_VERSION
+@@ -1645,13 +1631,13 @@
+ $(COPY) dat/tiles/stone_soup_icon-512x512.png $(prefix_fp)/share/icons/hicolor/512x512/apps/$(XDG_NAME).png
+ $(COPY) dat/tiles/stone_soup_icon.svg $(prefix_fp)/share/icons/hicolor/scalable/apps/$(XDG_NAME).svg
+
+-install: all install-data
+- [ -d $(prefix_fp)/$(bin_prefix) ] || mkdir -p $(prefix_fp)/$(bin_prefix)
+- $(COPY) $(GAME) $(prefix_fp)/$(bin_prefix)/
+- $(STRIP) $(prefix_fp)/$(bin_prefix)/$(GAME)
++install: install-data
++ [ -d $(prefix_fp)$(bin_prefix) ] || mkdir -p $(prefix_fp)$(bin_prefix)
++ $(COPY) $(GAME) $(prefix_fp)$(bin_prefix)/
++ $(STRIP) $(prefix_fp)$(bin_prefix)/$(GAME)
+ ifeq ($(USE_DGAMELAUNCH),)
+- $(CHOWN) $(INSTALL_UGRP) $(prefix_fp)/$(bin_prefix)/$(GAME) || true
+- $(CHMOD) $(MCHMOD) $(prefix_fp)/$(bin_prefix)/$(GAME) || true
++ $(CHOWN) $(INSTALL_UGRP) $(prefix_fp)$(bin_prefix)/$(GAME) || true
++ $(CHMOD) $(MCHMOD) $(prefix_fp)$(bin_prefix)/$(GAME) || true
+ endif
+
+ clean: clean-rltiles clean-webserver clean-android clean-monster clean-catch2 \
+@@ -1905,9 +1891,6 @@
+
+ dat/tiles/%.png: $(RLTILES)/%.png
+ $(QUIET_PNGCRUSH)$(PNGCRUSH) $< $@
+-ifdef USE_ADVPNG
+- $(QUIET_ADVPNG)$(ADVPNG) $@
+-endif
+
+ clean-rltiles:
+ $(RM) $(DESTTILEFILES)
diff --git a/games-roguelike/stone-soup/files/make.patch b/games-roguelike/stone-soup/files/make.patch
new file mode 100644
index 000000000000..e0d086520099
--- /dev/null
+++ b/games-roguelike/stone-soup/files/make.patch
@@ -0,0 +1,119 @@
+--- a/Makefile 2022-05-22 11:25:51.733047395 -0500
++++ b/Makefile 2022-05-22 11:42:54.240102003 -0500
+@@ -186,7 +186,7 @@
+ uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
+ uname_M := $(shell sh -c 'uname -m 2>/dev/null || echo not')
+
+-HOST := $(shell sh -c 'cc -dumpmachine || echo unknown')
++HOST :=
+ ARCH := $(HOST)
+
+ ifdef CROSSHOST
+@@ -451,15 +451,7 @@
+ GCC_VER_SUFFIX:=-$(GCC_VER)
+ endif
+
+-# Attempt to use a full compiler name, to make
+-# distcc builds work nicely.
+-LMACH := $(shell gcc -dumpmachine)-
+-ifeq ($(LMACH),-)
+ LMACH :=
+-endif
+-ifeq ($(shell which $(LMACH)gcc$(GCC_VER_SUFFIX) > /dev/null 2> /dev/null && echo "Yes"),)
+-LMACH :=
+-endif
+
+ ifneq ($(FORCE_CC),)
+ GCC := $(FORCE_CC)
+@@ -759,7 +751,6 @@
+ FULLDEBUG=YesPlease
+ DEBUG=YesPlease
+ NO_OPTIMIZE=YesPlease
+- COVERAGE=YesPlease
+ endif
+
+ # Debug-Lite
+@@ -767,7 +758,6 @@
+ ifneq (,$(filter debug-lite,$(MAKECMDGOALS)))
+ DEBUG=YesPlease
+ NO_OPTIMIZE=YesPlease
+- COVERAGE=YesPlease
+ endif
+
+ # Profile
+@@ -775,12 +765,10 @@
+ ifneq (,$(filter profile,$(MAKECMDGOALS)))
+ FULLDEBUG=YesPlease
+ DEBUG=YesPlease
+- COVERAGE=YesPlease
+ endif
+
+ # Unit tests
+ ifneq (,$(filter catch2-tests,$(MAKECMDGOALS)))
+- COVERAGE=YesPlease
+ endif
+
+ ifdef HURRY
+@@ -932,7 +920,7 @@
+ INSTALL_FONTS += "$(PROPORTIONAL_FONT)"
+ endif
+ else
+- SYS_PROPORTIONAL_FONT = $(shell util/find_font "$(OUR_PROPORTIONAL_FONT)")
++ SYS_PROPORTIONAL_FONT = /usr/share/fonts/dejavu/DejaVuSans.ttf
+ ifneq (,$(SYS_PROPORTIONAL_FONT))
+ ifeq (,$(COPY_FONTS))
+ DEFINES += -DPROPORTIONAL_FONT=\"$(SYS_PROPORTIONAL_FONT)\"
+@@ -952,7 +940,7 @@
+ INSTALL_FONTS += "$(MONOSPACED_FONT)"
+ endif
+ else
+- SYS_MONOSPACED_FONT = $(shell util/find_font "$(OUR_MONOSPACED_FONT)")
++ SYS_MONOSPACED_FONT = /usr/share/fonts/dejavu/DejaVuSansMono.ttf
+ ifneq (,$(SYS_MONOSPACED_FONT))
+ ifeq (,$(COPY_FONTS))
+ DEFINES += -DMONOSPACED_FONT=\"$(SYS_MONOSPACED_FONT)\"
+@@ -1092,14 +1080,8 @@
+
+ ifdef TILES_ANY
+ ifndef NO_OPTIMIZE
+- ifneq (,$(shell which advpng))
+- USE_ADVPNG = y
+- else
+- ifneq (,$(shell which pngcrush))
+ PNGCRUSH = pngcrush -q -m 113
+ PNGCRUSH_LABEL = PNGCRUSH
+- endif
+- endif
+ endif
+ endif
+
+@@ -1181,9 +1163,8 @@
+
+ LANGUAGES = $(filter-out en, $(notdir $(wildcard dat/descript/??)))
+ SRC_PKG_BASE := stone_soup
+-SRC_VERSION := $(shell git describe --tags $(MERGE_BASE) 2>/dev/null || cat util/release_ver)
++SRC_VERSION := $(shell cat util/release_ver)
+ MAJOR_VERSION = $(shell echo "$(SRC_VERSION)"|$(SED) -r 's/-.*//;s/^([^.]+\.[^.]+).*/\1/')
+-RECENT_TAG := $(shell git describe --abbrev=0 --tags $(MERGE_BASE))
+ WINARCH := $(shell $(GXX) -dumpmachine | grep -q x64_64 && echo win64 || echo win32)
+
+ export SRC_VERSION
+@@ -1511,7 +1492,7 @@
+ endif
+ endif
+
+-install: all install-data
++install: install-data
+ [ -d $(prefix_fp)/$(bin_prefix) ] || mkdir -p $(prefix_fp)/$(bin_prefix)
+ $(COPY) $(GAME) $(prefix_fp)/$(bin_prefix)/
+ $(STRIP) $(prefix_fp)/$(bin_prefix)/$(GAME)
+@@ -1747,9 +1728,6 @@
+
+ dat/tiles/%.png: $(RLTILES)/%.png
+ $(QUIET_PNGCRUSH)$(PNGCRUSH) $< $@
+-ifdef USE_ADVPNG
+- $(QUIET_ADVPNG)$(ADVPNG) $@
+-endif
+
+ clean-rltiles:
+ $(RM) $(DESTTILEFILES)
diff --git a/games-roguelike/stone-soup/files/rltiles-make.patch b/games-roguelike/stone-soup/files/rltiles-make.patch
new file mode 100644
index 000000000000..9a43932c5989
--- /dev/null
+++ b/games-roguelike/stone-soup/files/rltiles-make.patch
@@ -0,0 +1,58 @@
+--- a/rltiles/Makefile 2021-08-02 14:03:40.106930544 -0500
++++ b/rltiles/Makefile 2021-08-02 14:03:51.145931133 -0500
+@@ -1,7 +1,7 @@
+ uname_S := $(shell uname -s)
+
+ ifneq (,$(findstring MINGW,$(uname_S)))
+-LDFLAGS += -lmingw32
++LIBS += -lmingw32
+ endif
+
+ # Note: since generation of tiles is done on the host, we don't care about
+@@ -29,7 +29,7 @@
+ endif
+
+ CFLAGS += $(PNG_INCLUDE)
+- LDFLAGS += $(PNG_LIB)
++ LIBS += $(PNG_LIB)
+
+ CFLAGS += -DUSE_TILE
+ endif
+@@ -39,26 +39,15 @@
+ endif
+
+ ifneq (,$(findstring MINGW,$(uname_S)))
+-LDFLAGS += -lgdi32 -lwinmm -lole32 -loleaut32 -limm32 -lshell32 -lversion -luuid
++LIBS += -lgdi32 -lwinmm -lole32 -loleaut32 -limm32 -lshell32 -lversion -luuid
+ endif
+ ifeq ($(uname_S),Darwin)
+-LDFLAGS += -framework AppKit -framework AudioUnit -framework CoreAudio -framework ForceFeedback -framework Carbon -framework IOKit -framework OpenGL
++LIBS += -framework AppKit -framework AudioUnit -framework CoreAudio -framework ForceFeedback -framework Carbon -framework IOKit -framework OpenGL
+ endif
+ ifeq ($(uname_S),Linux)
+-LDFLAGS += -ldl -lpthread
++LIBS += -ldl -lpthread
+ endif
+
+-# Attempt to use a full compiler name, to make
+-# distcc builds work nicely.
+-LMACH := $(shell gcc -dumpmachine)-
+-ifeq ($(LMACH),-)
+-LMACH :=
+-endif
+-ifeq ($(shell which $(LMACH)gcc > /dev/null 2> /dev/null && echo "Yes"),)
+-LMACH :=
+-endif
+-HOSTCXX ?= $(LMACH)g++
+-
+ DELETE = rm -f
+
+ TOOLDIR := tool
+@@ -134,6 +123,6 @@
+ $(QUIET_HOSTCXX)$(HOSTCXX) $(CFLAGS) -MMD -c $< -o $@
+
+ $(TILEGEN): $(OBJECTS)
+- $(QUIET_HOSTLINK)$(HOSTCXX) $(CFLAGS) $(OBJECTS) -o $@ $(LDFLAGS)
++ $(QUIET_HOSTLINK)$(HOSTCXX) $(CFLAGS) $(OBJECTS) -o $@ $(LDFLAGS) $(LIBS)
+
+ .PHONY: all clean distclean
diff --git a/games-roguelike/stone-soup/metadata.xml b/games-roguelike/stone-soup/metadata.xml
new file mode 100644
index 000000000000..8011d76ca8c6
--- /dev/null
+++ b/games-roguelike/stone-soup/metadata.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>stasibear@gentoo.org</email>
+ <name>Erik Mackdanz</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>games@gentoo.org</email>
+ <name>Gentoo Games Project</name>
+ </maintainer>
+ <upstream>
+ <doc lang="en">https://crawl.develz.org</doc>
+ <bugs-to>https://crawl.develz.org/mantis</bugs-to>
+ <remote-id type="cpe">cpe:/a:dungeon_crawl_stone_soup_project:dungeon_crawl_stone_soup</remote-id>
+ </upstream>
+ <use>
+ <flag name="advpng">Use alternate png optimization.
+ </flag>
+ <flag name="ncurses">Enable for console (uses ncurses) based build.
+ (can be enabled on top of tiles)
+ </flag>
+ <flag name="tiles">Enable for graphical (tiled) build.
+ (can be enabled on top of ncurses)
+ </flag>
+ </use>
+ <longdescription lang="en">
+ Dungeon Crawl Stone Soup is a free roguelike game of exploration
+ and treasure-hunting in dungeons filled with dangerous and
+ unfriendly monsters in a quest for the mystifyingly fabulous Orb
+ of Zot.
+
+ Dungeon Crawl Stone Soup has diverse species and many different
+ character backgrounds to choose from, deep tactical game-play,
+ sophisticated magic, religion and skill systems, and a grand
+ variety of monsters to fight and run from, making each game
+ unique and challenging.
+
+ Dungeon Crawl Stone Soup can be played offline, or online on a
+ public telnet/ssh server thanks to the good folks at
+ crawl.akrasiac.org (CAO) and crawl.develz.org (CDO). These public
+ servers allow you to meet other players’ ghosts, watch other people
+ playing, and, in general, have a blast!
+ </longdescription>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/games-roguelike/stone-soup/stone-soup-0.25.1-r104.ebuild b/games-roguelike/stone-soup/stone-soup-0.25.1-r104.ebuild
new file mode 100644
index 000000000000..1d0890f2ce34
--- /dev/null
+++ b/games-roguelike/stone-soup/stone-soup-0.25.1-r104.ebuild
@@ -0,0 +1,220 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# There are many slots for this package because people in the community
+# like to play old versions. Every release includes content changes
+# where species/spells/monsters are added or removed. The public
+# servers (e.g. http://crawl.akrasiac.org:8080) usually support playing
+# versions back to 0.11.
+
+# It's not necessary for Gentoo to support these old version but it's
+# something nice that our distro can offer that others don't. If the
+# maintenance burden becomes excessive than we can revisit that
+# position.
+
+EAPI=8
+
+LUA_COMPAT=( lua5-{1,3,4} luajit )
+LUA_REQ_USE="deprecated"
+PYTHON_COMPAT=( python3_{13..14} )
+VIRTUALX_REQUIRED="manual"
+inherit desktop python-any-r1 lua-single xdg-utils toolchain-funcs
+
+MY_P="stone_soup-${PV}"
+DESCRIPTION="Role-playing roguelike game of exploration and treasure-hunting in dungeons"
+HOMEPAGE="https://crawl.develz.org"
+# MY_SLOT to satisfy pkgcheck variable order checking
+MY_SLOT="0.25"
+SRC_URI="
+ https://github.com/crawl/crawl/releases/download/${PV}/${PN/-/_}-${PV}.zip
+ https://dev.gentoo.org/~stasibear/distfiles/${PN}.png -> ${PN}-${MY_SLOT}.png
+ https://dev.gentoo.org/~stasibear/distfiles/${PN}.svg -> ${PN}-${MY_SLOT}.svg
+"
+
+S=${WORKDIR}/${MY_P}/source
+# 3-clause BSD: mt19937ar.cc, MSVC/stdint.h
+# 2-clause BSD: all contributions by Steve Noonan and Jesse Luehrs
+# Public Domain|CC0: most of tiles
+# MIT: json.cc/json.h, some .js files in webserver/static/scripts/contrib/
+LICENSE="GPL-2 BSD BSD-2 public-domain CC0-1.0 MIT"
+SLOT="${MY_SLOT}"
+KEYWORDS="amd64 x86"
+IUSE="advpng debug ncurses sound test +tiles"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="${LUA_REQUIRED_USE}"
+
+RDEPEND="
+ ${LUA_DEPS}
+ dev-db/sqlite:3
+ virtual/zlib:=
+ !ncurses? ( !tiles? ( sys-libs/ncurses:0 ) )
+ ncurses? ( sys-libs/ncurses:0 )
+ tiles? (
+ media-fonts/dejavu
+ media-libs/freetype:2
+ media-libs/libpng:0
+ sound? (
+ media-libs/libsdl2[X,opengl,sound,video]
+ media-libs/sdl2-mixer
+ )
+ !sound? ( media-libs/libsdl2[X,opengl,video] )
+ media-libs/sdl2-image[png]
+ virtual/glu
+ virtual/opengl
+ )"
+DEPEND="${RDEPEND}
+ test? ( <dev-cpp/catch-3.0.0:0 )
+ tiles? (
+ sys-libs/ncurses:0
+ )
+ "
+BDEPEND="
+ app-arch/unzip
+ dev-lang/perl
+ ${PYTHON_DEPS}
+ $(python_gen_any_dep 'dev-python/pyyaml[${PYTHON_USEDEP}]')
+ app-alternatives/lex
+ tiles? (
+ advpng? (
+ app-arch/advancecomp
+ )
+ !advpng? (
+ media-gfx/pngcrush
+ )
+ )
+ virtual/pkgconfig
+ app-alternatives/yacc
+ "
+
+PATCHES=(
+ "${FILESDIR}"/make.patch
+ "${FILESDIR}"/rltiles-make.patch
+ "${FILESDIR}"/avoid-musl-execinfo.patch
+)
+
+python_check_deps() {
+ python_has_version "dev-python/pyyaml[${PYTHON_USEDEP}]"
+}
+
+pkg_setup() {
+ python-any-r1_pkg_setup
+
+ if use !ncurses && use !tiles ; then
+ ewarn "Neither ncurses nor tiles frontend"
+ ewarn "selected, choosing ncurses only."
+ ewarn "Note that you can also enable both."
+ fi
+
+ if use sound && use !tiles ; then
+ ewarn "Sound support is only available with tiles."
+ fi
+}
+
+src_prepare() {
+ default
+ python_fix_shebang "${S}/util/species-gen.py"
+
+ if use advpng; then
+ eapply "${FILESDIR}/make-advpng.patch"
+ fi
+
+ sed -i -e "s/GAME = crawl$/GAME = crawl-${SLOT}/" "${S}/Makefile" \
+ || die "Couldn't append slot to executable name"
+
+ # Replace bundled catch2 package with system implementation
+ # https://bugs.gentoo.org/829950
+ if use test; then
+ cp /usr/include/catch2/catch.hpp "${S}/catch2-tests" || die "Couldn't substitute system catch2"
+ fi
+}
+
+src_compile() {
+
+ # Insurance that we're not using bundled lib sources
+ rm -rf contrib || die "Couldn't delete contrib directory"
+
+ myemakeargs=(
+ $(usex debug "FULLDEBUG=y DEBUG=y" "")
+ BUILD_LUA=
+ AR="$(tc-getAR)"
+ CFOPTIMIZE=''
+ # -DLUA_COMPAT_OPENLIB=1 is required to enable the
+ # deprecated (in 5.1) luaL_openlib API (#869671)
+ CFOTHERS="${CXXFLAGS} -DLUA_COMPAT_OPENLIB=1"
+ CONTRIBS=
+ DATADIR="/usr/share/${PN}-${SLOT}"
+ FORCE_CC="$(tc-getCC)"
+ FORCE_CXX="$(tc-getCXX)"
+ LDFLAGS="${LDFLAGS}"
+ MAKEOPTS="${MAKEOPTS}"
+ PKGCONFIG="$(tc-getPKG_CONFIG)"
+ RANLIB="$(tc-getRANLIB)"
+ SAVEDIR="~/.crawl-${SLOT}"
+ SOUND=$(usex sound "y" "")
+ STRIP=touch
+ USE_LUAJIT=
+ V=1
+ prefix="/usr"
+ )
+
+ if use ncurses || (use !ncurses && use !tiles) ; then
+ emake "${myemakeargs[@]}"
+ # move it in case we build both variants
+ use tiles && { mv "crawl-${SLOT}" "${WORKDIR}"/crawl-ncurses-${SLOT} || die ;}
+ fi
+
+ if use tiles ; then
+ emake "${myemakeargs[@]}" clean
+ emake "${myemakeargs[@]}" "TILES=y"
+ fi
+}
+
+src_test() {
+ emake "${myemakeargs[@]}" \
+ $(usex tiles "TILES=y" "") \
+ catch2-tests
+}
+
+src_install() {
+ emake "${myemakeargs[@]}" \
+ $(usex tiles "TILES=y" "") \
+ DESTDIR="${D}" \
+ prefix_fp="" \
+ bin_prefix="${D}/usr/bin" \
+ install
+
+ [[ -e "${WORKDIR}/crawl-ncurses-${SLOT}" ]] && dobin "${WORKDIR}/crawl-ncurses-${SLOT}"
+
+ # don't relocate docs, needed at runtime
+ rm -rf "${D}/usr/share/${PN}-${SLOT}"/docs/license
+
+ mv "${WORKDIR}/${MY_P}"/docs/crawl.6 "${WORKDIR}/${MY_P}/docs/crawl-${SLOT}.6" \
+ || die "Couldn't append slot to man page name"
+ doman "${WORKDIR}/${MY_P}/docs/crawl-${SLOT}.6"
+
+ # icons and menu for graphical build
+ if use tiles ; then
+ doicon -s 48 "${DISTDIR}"/${PN}-${SLOT}.png
+ doicon -s scalable "${DISTDIR}"/${PN}-${SLOT}.svg
+ make_desktop_entry "crawl-${SLOT}" "Dungeon Crawl Stone Soup (DCSS) ${SLOT}" "${PN}-${SLOT}"
+ fi
+}
+
+pkg_postinst() {
+ xdg_icon_cache_update
+
+ elog "crawl is a slotted install that supports having"
+ elog "multiple versions installed. The binary has the"
+ elog "slot appended, e.g. 'crawl-"${SLOT}"'."
+
+ if use tiles && use ncurses ; then
+ elog
+ elog "Since you have enabled both tiles and ncurses frontends"
+ elog "the ncurses binary is called 'crawl-ncurses-"${SLOT}"' and the"
+ elog "tiles binary is called 'crawl-"${SLOT}"'."
+ fi
+}
+
+pkg_postrm() {
+ xdg_icon_cache_update
+}
diff --git a/games-roguelike/stone-soup/stone-soup-0.26.1-r3.ebuild b/games-roguelike/stone-soup/stone-soup-0.26.1-r3.ebuild
new file mode 100644
index 000000000000..df5fed18a7f0
--- /dev/null
+++ b/games-roguelike/stone-soup/stone-soup-0.26.1-r3.ebuild
@@ -0,0 +1,224 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# There are many slots for this package because people in the community
+# like to play old versions. Every release includes content changes
+# where species/spells/monsters are added or removed. The public
+# servers (e.g. http://crawl.akrasiac.org:8080) usually support playing
+# versions back to 0.11.
+
+# It's not necessary for Gentoo to support these old version but it's
+# something nice that our distro can offer that others don't. If the
+# maintenance burden becomes excessive than we can revisit that
+# position.
+
+EAPI=8
+
+LUA_COMPAT=( lua5-{1,3,4} luajit )
+LUA_REQ_USE="deprecated"
+PYTHON_COMPAT=( python3_{13..14} )
+VIRTUALX_REQUIRED="manual"
+inherit desktop python-any-r1 lua-single xdg-utils toolchain-funcs
+
+MY_P="stone_soup-${PV}"
+DESCRIPTION="Role-playing roguelike game of exploration and treasure-hunting in dungeons"
+HOMEPAGE="https://crawl.develz.org"
+# MY_SLOT to satisfy pkgcheck variable order checking
+MY_SLOT="0.26"
+SRC_URI="
+ https://github.com/crawl/crawl/releases/download/${PV}/${PN/-/_}-${PV}.zip
+ https://dev.gentoo.org/~stasibear/distfiles/${PN}.png -> ${PN}-${MY_SLOT}.png
+ https://dev.gentoo.org/~stasibear/distfiles/${PN}.svg -> ${PN}-${MY_SLOT}.svg
+"
+
+S=${WORKDIR}/${MY_P}/source
+# 3-clause BSD: mt19937ar.cc, MSVC/stdint.h
+# 2-clause BSD: all contributions by Steve Noonan and Jesse Luehrs
+# Public Domain|CC0: most of tiles
+# MIT: json.cc/json.h, some .js files in webserver/static/scripts/contrib/
+LICENSE="GPL-2 BSD BSD-2 public-domain CC0-1.0 MIT"
+SLOT="${MY_SLOT}"
+KEYWORDS="amd64 x86"
+IUSE="advpng debug ncurses sound test +tiles"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="${LUA_REQUIRED_USE}"
+
+RDEPEND="
+ ${LUA_DEPS}
+ dev-db/sqlite:3
+ virtual/zlib:=
+ !ncurses? ( !tiles? ( sys-libs/ncurses:0 ) )
+ ncurses? ( sys-libs/ncurses:0 )
+ tiles? (
+ media-fonts/dejavu
+ media-libs/freetype:2
+ media-libs/libpng:0
+ sound? (
+ media-libs/libsdl2[X,opengl,sound,video]
+ media-libs/sdl2-mixer
+ )
+ !sound? ( media-libs/libsdl2[X,opengl,video] )
+ media-libs/sdl2-image[png]
+ virtual/glu
+ virtual/opengl
+ )"
+DEPEND="${RDEPEND}
+ test? ( <dev-cpp/catch-3.0.0:0 )
+ tiles? (
+ sys-libs/ncurses:0
+ )
+ "
+BDEPEND="
+ app-arch/unzip
+ dev-lang/perl
+ ${PYTHON_DEPS}
+ $(python_gen_any_dep 'dev-python/pyyaml[${PYTHON_USEDEP}]')
+ app-alternatives/lex
+ tiles? (
+ advpng? (
+ app-arch/advancecomp
+ )
+ !advpng? (
+ media-gfx/pngcrush
+ )
+ )
+ virtual/pkgconfig
+ app-alternatives/yacc
+ "
+
+PATCHES=(
+ "${FILESDIR}"/make.patch
+ "${FILESDIR}"/rltiles-make.patch
+ "${FILESDIR}"/avoid-musl-execinfo.patch
+)
+
+python_check_deps() {
+ python_has_version "dev-python/pyyaml[${PYTHON_USEDEP}]"
+}
+
+pkg_setup() {
+ python-any-r1_pkg_setup
+
+ if use !ncurses && use !tiles ; then
+ ewarn "Neither ncurses nor tiles frontend"
+ ewarn "selected, choosing ncurses only."
+ ewarn "Note that you can also enable both."
+ fi
+
+ if use sound && use !tiles ; then
+ ewarn "Sound support is only available with tiles."
+ fi
+}
+
+src_prepare() {
+ default
+ python_fix_shebang "${S}/util/species-gen.py"
+
+ if use advpng; then
+ eapply "${FILESDIR}/make-advpng.patch"
+ fi
+
+ sed -i -e "s/GAME = crawl$/GAME = crawl-${SLOT}/" "${S}/Makefile" \
+ || die "Couldn't append slot to executable name"
+
+ # Replace bundled catch2 package with system implementation
+ # https://bugs.gentoo.org/829950
+ if use test; then
+ cp /usr/include/catch2/catch.hpp "${S}/catch2-tests" || die "Couldn't substitute system catch2"
+ fi
+}
+
+src_compile() {
+
+ # Insurance that we're not using bundled lib sources
+ rm -rf contrib || die "Couldn't delete contrib directory"
+
+ myemakeargs=(
+ $(usex debug "FULLDEBUG=y DEBUG=y" "")
+ BUILD_LUA=
+ AR="$(tc-getAR)"
+ CFOPTIMIZE=''
+ # -DLUA_COMPAT_OPENLIB=1 is required to enable the
+ # deprecated (in 5.1) luaL_openlib API (#869671)
+ CFOTHERS="${CXXFLAGS} -DLUA_COMPAT_OPENLIB=1"
+ CONTRIBS=
+ DATADIR="/usr/share/${PN}-${SLOT}"
+ FORCE_CC="$(tc-getCC)"
+ FORCE_CXX="$(tc-getCXX)"
+ LDFLAGS="${LDFLAGS}"
+ MAKEOPTS="${MAKEOPTS}"
+ PKGCONFIG="$(tc-getPKG_CONFIG)"
+ RANLIB="$(tc-getRANLIB)"
+ SAVEDIR="~/.crawl-${SLOT}"
+ SOUND=$(usex sound "y" "")
+ STRIP=touch
+ USE_LUAJIT=
+ V=1
+ prefix="/usr"
+ )
+
+ if use ncurses || (use !ncurses && use !tiles) ; then
+ emake "${myemakeargs[@]}"
+ # move it in case we build both variants
+ use tiles && { mv "crawl-${SLOT}" "${WORKDIR}"/crawl-ncurses-${SLOT} || die ;}
+ fi
+
+ if use tiles ; then
+ emake "${myemakeargs[@]}" clean
+ emake "${myemakeargs[@]}" "TILES=y"
+ fi
+}
+
+src_test() {
+ emake "${myemakeargs[@]}" \
+ $(usex tiles "TILES=y" "") \
+ catch2-tests
+}
+
+src_install() {
+ emake "${myemakeargs[@]}" \
+ $(usex tiles "TILES=y" "") \
+ DESTDIR="${D}" \
+ prefix_fp="" \
+ bin_prefix="${D}/usr/bin" \
+ install
+
+ [[ -e "${WORKDIR}/crawl-ncurses-${SLOT}" ]] && dobin "${WORKDIR}/crawl-ncurses-${SLOT}"
+
+ # don't relocate docs, needed at runtime
+ rm -rf "${D}/usr/share/${PN}-${SLOT}"/docs/license
+
+ mv "${WORKDIR}/${MY_P}"/docs/crawl.6 "${WORKDIR}/${MY_P}/docs/crawl-${SLOT}.6" \
+ || die "Couldn't append slot to man page name"
+ doman "${WORKDIR}/${MY_P}/docs/crawl-${SLOT}.6"
+
+ # icons and menu for graphical build
+ if use tiles ; then
+ doicon -s 48 "${DISTDIR}"/${PN}-${SLOT}.png
+ doicon -s scalable "${DISTDIR}"/${PN}-${SLOT}.svg
+ make_desktop_entry "crawl-${SLOT}" "Dungeon Crawl Stone Soup (DCSS) ${SLOT}" "${PN}-${SLOT}"
+ fi
+}
+
+pkg_postinst() {
+ xdg_icon_cache_update
+
+ elog "Since version 0.25.1-r101, crawl is a slotted install"
+ elog "that supports having multiple versions installed. The"
+ elog "binary has the slot appended, e.g. 'crawl-"${SLOT}"'."
+ elog
+ elog "The local save directory also has the slot appended."
+ elog "If you have saved games from 0.25 but before 0.25.1-r101"
+ elog "you can 'mv ~/.crawl ~/.crawl-0.25' to fix it"
+
+ if use tiles && use ncurses ; then
+ elog
+ elog "Since you have enabled both tiles and ncurses frontends"
+ elog "the ncurses binary is called 'crawl-ncurses-"${SLOT}"' and the"
+ elog "tiles binary is called 'crawl-"${SLOT}"'."
+ fi
+}
+
+pkg_postrm() {
+ xdg_icon_cache_update
+}
diff --git a/games-roguelike/stone-soup/stone-soup-0.27.1-r2.ebuild b/games-roguelike/stone-soup/stone-soup-0.27.1-r2.ebuild
new file mode 100644
index 000000000000..dc2adc894930
--- /dev/null
+++ b/games-roguelike/stone-soup/stone-soup-0.27.1-r2.ebuild
@@ -0,0 +1,220 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# There are many slots for this package because people in the community
+# like to play old versions. Every release includes content changes
+# where species/spells/monsters are added or removed. The public
+# servers (e.g. http://crawl.akrasiac.org:8080) usually support playing
+# versions back to 0.11.
+
+# It's not necessary for Gentoo to support these old version but it's
+# something nice that our distro can offer that others don't. If the
+# maintenance burden becomes excessive than we can revisit that
+# position.
+
+EAPI=8
+
+LUA_COMPAT=( lua5-{1,3,4} luajit )
+LUA_REQ_USE="deprecated"
+PYTHON_COMPAT=( python3_{13..14} )
+VIRTUALX_REQUIRED="manual"
+inherit desktop python-any-r1 lua-single xdg-utils toolchain-funcs
+
+MY_P="stone_soup-${PV}"
+DESCRIPTION="Role-playing roguelike game of exploration and treasure-hunting in dungeons"
+HOMEPAGE="https://crawl.develz.org"
+# MY_SLOT to satisfy pkgcheck variable order checking
+MY_SLOT="0.27"
+SRC_URI="
+ https://github.com/crawl/crawl/releases/download/${PV}/${PN/-/_}-${PV}.zip
+ https://dev.gentoo.org/~stasibear/distfiles/${PN}.png -> ${PN}-${MY_SLOT}.png
+ https://dev.gentoo.org/~stasibear/distfiles/${PN}.svg -> ${PN}-${MY_SLOT}.svg
+"
+
+S=${WORKDIR}/${MY_P}/source
+# 3-clause BSD: mt19937ar.cc, MSVC/stdint.h
+# 2-clause BSD: all contributions by Steve Noonan and Jesse Luehrs
+# Public Domain|CC0: most of tiles
+# MIT: json.cc/json.h, some .js files in webserver/static/scripts/contrib/
+LICENSE="GPL-2 BSD BSD-2 public-domain CC0-1.0 MIT"
+SLOT="${MY_SLOT}"
+KEYWORDS="amd64 x86"
+IUSE="advpng debug ncurses sound test +tiles"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="${LUA_REQUIRED_USE}"
+
+RDEPEND="
+ ${LUA_DEPS}
+ dev-db/sqlite:3
+ virtual/zlib:=
+ !ncurses? ( !tiles? ( sys-libs/ncurses:0 ) )
+ ncurses? ( sys-libs/ncurses:0 )
+ tiles? (
+ media-fonts/dejavu
+ media-libs/freetype:2
+ media-libs/libpng:0
+ sound? (
+ media-libs/libsdl2[X,opengl,sound,video]
+ media-libs/sdl2-mixer
+ )
+ !sound? ( media-libs/libsdl2[X,opengl,video] )
+ media-libs/sdl2-image[png]
+ virtual/glu
+ virtual/opengl
+ )"
+DEPEND="${RDEPEND}
+ test? ( <dev-cpp/catch-3.0.0:0 )
+ tiles? (
+ sys-libs/ncurses:0
+ )
+ "
+BDEPEND="
+ app-arch/unzip
+ dev-lang/perl
+ ${PYTHON_DEPS}
+ $(python_gen_any_dep 'dev-python/pyyaml[${PYTHON_USEDEP}]')
+ app-alternatives/lex
+ tiles? (
+ advpng? (
+ app-arch/advancecomp
+ )
+ !advpng? (
+ media-gfx/pngcrush
+ )
+ )
+ virtual/pkgconfig
+ app-alternatives/yacc
+ "
+
+PATCHES=(
+ "${FILESDIR}"/make.patch
+ "${FILESDIR}"/rltiles-make.patch
+ "${FILESDIR}"/avoid-musl-execinfo.patch
+)
+
+python_check_deps() {
+ python_has_version "dev-python/pyyaml[${PYTHON_USEDEP}]"
+}
+
+pkg_setup() {
+ python-any-r1_pkg_setup
+
+ if use !ncurses && use !tiles ; then
+ ewarn "Neither ncurses nor tiles frontend"
+ ewarn "selected, choosing ncurses only."
+ ewarn "Note that you can also enable both."
+ fi
+
+ if use sound && use !tiles ; then
+ ewarn "Sound support is only available with tiles."
+ fi
+}
+
+src_prepare() {
+ default
+ python_fix_shebang "${S}/util/species-gen.py"
+
+ if use advpng; then
+ eapply "${FILESDIR}/make-advpng.patch"
+ fi
+
+ sed -i -e "s/GAME = crawl$/GAME = crawl-${SLOT}/" "${S}/Makefile" \
+ || die "Couldn't append slot to executable name"
+
+ # Replace bundled catch2 package with system implementation
+ # https://bugs.gentoo.org/829950
+ if use test; then
+ cp /usr/include/catch2/catch.hpp "${S}/catch2-tests" || die "Couldn't substitute system catch2"
+ fi
+}
+
+src_compile() {
+
+ # Insurance that we're not using bundled lib sources
+ rm -rf contrib || die "Couldn't delete contrib directory"
+
+ myemakeargs=(
+ $(usex debug "FULLDEBUG=y DEBUG=y" "")
+ BUILD_LUA=
+ AR="$(tc-getAR)"
+ CFOPTIMIZE=''
+ # -DLUA_COMPAT_OPENLIB=1 is required to enable the
+ # deprecated (in 5.1) luaL_openlib API (#869671)
+ CFOTHERS="${CXXFLAGS} -DLUA_COMPAT_OPENLIB=1"
+ CONTRIBS=
+ DATADIR="/usr/share/${PN}-${SLOT}"
+ FORCE_CC="$(tc-getCC)"
+ FORCE_CXX="$(tc-getCXX)"
+ LDFLAGS="${LDFLAGS}"
+ MAKEOPTS="${MAKEOPTS}"
+ PKGCONFIG="$(tc-getPKG_CONFIG)"
+ RANLIB="$(tc-getRANLIB)"
+ SAVEDIR="~/.crawl-${SLOT}"
+ SOUND=$(usex sound "y" "")
+ STRIP=touch
+ USE_LUAJIT=
+ V=1
+ prefix="/usr"
+ )
+
+ if use ncurses || (use !ncurses && use !tiles) ; then
+ emake "${myemakeargs[@]}"
+ # move it in case we build both variants
+ use tiles && { mv "crawl-${SLOT}" "${WORKDIR}"/crawl-ncurses-${SLOT} || die ;}
+ fi
+
+ if use tiles ; then
+ emake "${myemakeargs[@]}" clean
+ emake "${myemakeargs[@]}" "TILES=y"
+ fi
+}
+
+src_test() {
+ emake "${myemakeargs[@]}" \
+ $(usex tiles "TILES=y" "") \
+ catch2-tests
+}
+
+src_install() {
+ emake "${myemakeargs[@]}" \
+ $(usex tiles "TILES=y" "") \
+ DESTDIR="${D}" \
+ prefix_fp="" \
+ bin_prefix="${D}/usr/bin" \
+ install
+
+ [[ -e "${WORKDIR}/crawl-ncurses-${SLOT}" ]] && dobin "${WORKDIR}/crawl-ncurses-${SLOT}"
+
+ # don't relocate docs, needed at runtime
+ rm -rf "${D}/usr/share/${PN}-${SLOT}"/docs/license
+
+ mv "${WORKDIR}/${MY_P}"/docs/crawl.6 "${WORKDIR}/${MY_P}/docs/crawl-${SLOT}.6" \
+ || die "Couldn't append slot to man page name"
+ doman "${WORKDIR}/${MY_P}/docs/crawl-${SLOT}.6"
+
+ # icons and menu for graphical build
+ if use tiles ; then
+ doicon -s 48 "${DISTDIR}"/${PN}-${SLOT}.png
+ doicon -s scalable "${DISTDIR}"/${PN}-${SLOT}.svg
+ make_desktop_entry "crawl-${SLOT}" "Dungeon Crawl Stone Soup (DCSS) ${SLOT}" "${PN}-${SLOT}"
+ fi
+}
+
+pkg_postinst() {
+ xdg_icon_cache_update
+
+ elog "crawl is a slotted install that supports having"
+ elog "multiple versions installed. The binary has the"
+ elog "slot appended, e.g. 'crawl-"${SLOT}"'."
+
+ if use tiles && use ncurses ; then
+ elog
+ elog "Since you have enabled both tiles and ncurses frontends"
+ elog "the ncurses binary is called 'crawl-ncurses-"${SLOT}"' and the"
+ elog "tiles binary is called 'crawl-"${SLOT}"'."
+ fi
+}
+
+pkg_postrm() {
+ xdg_icon_cache_update
+}
diff --git a/games-roguelike/stone-soup/stone-soup-0.28.0-r2.ebuild b/games-roguelike/stone-soup/stone-soup-0.28.0-r2.ebuild
new file mode 100644
index 000000000000..175b04aed902
--- /dev/null
+++ b/games-roguelike/stone-soup/stone-soup-0.28.0-r2.ebuild
@@ -0,0 +1,239 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# There are many slots for this package because people in the community
+# like to play old versions. Every release includes content changes
+# where species/spells/monsters are added or removed. The public
+# servers (e.g. http://crawl.akrasiac.org:8080) usually support playing
+# versions back to 0.11.
+
+# It's not necessary for Gentoo to support these old version but it's
+# something nice that our distro can offer that others don't. If the
+# maintenance burden becomes excessive than we can revisit that
+# position.
+
+EAPI=8
+
+LUA_COMPAT=( lua5-{1,3,4} luajit )
+LUA_REQ_USE="deprecated"
+PYTHON_COMPAT=( python3_{13..14} )
+VIRTUALX_REQUIRED="manual"
+inherit desktop python-any-r1 lua-single xdg-utils toolchain-funcs
+
+DESCRIPTION="Role-playing roguelike game of exploration and treasure-hunting in dungeons"
+HOMEPAGE="https://crawl.develz.org"
+
+# Leave empty string if not a _pre release
+COMMITSHA=""
+# MY_SLOT to satisfy pkgcheck variable order checking
+MY_SLOT="0.28"
+if [ -z "${COMMITSHA}" ]; then
+ # This is a proper release
+ SRC_URI="
+ https://github.com/crawl/crawl/releases/download/${PV}/${PN/-/_}-${PV}.zip
+ https://dev.gentoo.org/~stasibear/distfiles/${PN}.png -> ${PN}-${MY_SLOT}.png
+ https://dev.gentoo.org/~stasibear/distfiles/${PN}.svg -> ${PN}-${MY_SLOT}.svg
+ "
+ MY_P="stone_soup-${PV}"
+else
+ # This is a _pre release
+ SRC_URI="
+ https://github.com/crawl/crawl/archive/${COMMITSHA}.tar.gz -> ${P}.tar.gz
+ https://dev.gentoo.org/~stasibear/distfiles/${PN}.png -> ${PN}-${MY_SLOT}.png
+ https://dev.gentoo.org/~stasibear/distfiles/${PN}.svg -> ${PN}-${MY_SLOT}.svg
+ "
+ MY_P="crawl-${COMMITSHA}/crawl-ref"
+fi
+
+S=${WORKDIR}/${MY_P}/source
+# 3-clause BSD: mt19937ar.cc, MSVC/stdint.h
+# 2-clause BSD: all contributions by Steve Noonan and Jesse Luehrs
+# Public Domain|CC0: most of tiles
+# MIT: json.cc/json.h, some .js files in webserver/static/scripts/contrib/
+LICENSE="GPL-2 BSD BSD-2 public-domain CC0-1.0 MIT"
+SLOT="${MY_SLOT}"
+KEYWORDS="amd64 x86"
+IUSE="advpng debug ncurses sound test +tiles"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="${LUA_REQUIRED_USE}"
+
+RDEPEND="
+ ${LUA_DEPS}
+ dev-db/sqlite:3
+ virtual/zlib:=
+ !ncurses? ( !tiles? ( sys-libs/ncurses:0 ) )
+ ncurses? ( sys-libs/ncurses:0 )
+ tiles? (
+ media-fonts/dejavu
+ media-libs/freetype:2
+ media-libs/libpng:0
+ sound? (
+ media-libs/libsdl2[X,opengl,sound,video]
+ media-libs/sdl2-mixer
+ )
+ !sound? ( media-libs/libsdl2[X,opengl,video] )
+ media-libs/sdl2-image[png]
+ virtual/glu
+ virtual/opengl
+ )"
+DEPEND="${RDEPEND}
+ test? ( <dev-cpp/catch-3.0.0:0 )
+ tiles? (
+ sys-libs/ncurses:0
+ )
+ "
+BDEPEND="
+ app-arch/unzip
+ dev-lang/perl
+ ${PYTHON_DEPS}
+ $(python_gen_any_dep 'dev-python/pyyaml[${PYTHON_USEDEP}]')
+ app-alternatives/lex
+ tiles? (
+ advpng? (
+ app-arch/advancecomp
+ )
+ !advpng? (
+ media-gfx/pngcrush
+ )
+ )
+ virtual/pkgconfig
+ app-alternatives/yacc
+ "
+
+PATCHES=(
+ "${FILESDIR}"/make.patch
+ "${FILESDIR}"/rltiles-make.patch
+ "${FILESDIR}"/avoid-musl-execinfo.patch
+)
+
+python_check_deps() {
+ python_has_version "dev-python/pyyaml[${PYTHON_USEDEP}]"
+}
+
+pkg_setup() {
+ python-any-r1_pkg_setup
+
+ if use !ncurses && use !tiles ; then
+ ewarn "Neither ncurses nor tiles frontend"
+ ewarn "selected, choosing ncurses only."
+ ewarn "Note that you can also enable both."
+ fi
+
+ if use sound && use !tiles ; then
+ ewarn "Sound support is only available with tiles."
+ fi
+}
+
+src_prepare() {
+ default
+ python_fix_shebang "${S}/util/species-gen.py"
+
+ if use advpng; then
+ eapply "${FILESDIR}/make-advpng.patch"
+ fi
+
+ sed -i -e "s/GAME = crawl$/GAME = crawl-${SLOT}/" "${S}/Makefile" \
+ || die "Couldn't append slot to executable name"
+
+ # File required for a _pre build
+ if ! [ -f "${S}/util/release_ver" ]; then
+ echo "${SLOT}" >"${S}/util/release_ver" || die "Couldn't write release_ver"
+ fi
+
+ # Replace bundled catch2 package with system implementation
+ # https://bugs.gentoo.org/829950
+ if use test; then
+ cp /usr/include/catch2/catch.hpp "${S}/catch2-tests" || die "Couldn't substitute system catch2"
+ fi
+}
+
+src_compile() {
+
+ # Insurance that we're not using bundled lib sources
+ rm -rf contrib || die "Couldn't delete contrib directory"
+
+ myemakeargs=(
+ $(usex debug "FULLDEBUG=y DEBUG=y" "")
+ BUILD_LUA=
+ AR="$(tc-getAR)"
+ CFOPTIMIZE=''
+ # -DLUA_COMPAT_OPENLIB=1 is required to enable the
+ # deprecated (in 5.1) luaL_openlib API (#869671)
+ CFOTHERS="${CXXFLAGS} -DLUA_COMPAT_OPENLIB=1"
+ CONTRIBS=
+ DATADIR="/usr/share/${PN}-${SLOT}"
+ FORCE_CC="$(tc-getCC)"
+ FORCE_CXX="$(tc-getCXX)"
+ LDFLAGS="${LDFLAGS}"
+ MAKEOPTS="${MAKEOPTS}"
+ PKGCONFIG="$(tc-getPKG_CONFIG)"
+ RANLIB="$(tc-getRANLIB)"
+ SAVEDIR="~/.crawl-${SLOT}"
+ SOUND=$(usex sound "y" "")
+ STRIP=touch
+ USE_LUAJIT=
+ V=1
+ prefix="/usr"
+ )
+
+ if use ncurses || (use !ncurses && use !tiles) ; then
+ emake "${myemakeargs[@]}"
+ # move it in case we build both variants
+ use tiles && { mv "crawl-${SLOT}" "${WORKDIR}"/crawl-ncurses-${SLOT} || die ;}
+ fi
+
+ if use tiles ; then
+ emake "${myemakeargs[@]}" clean
+ emake "${myemakeargs[@]}" "TILES=y"
+ fi
+}
+
+src_test() {
+ emake "${myemakeargs[@]}" \
+ $(usex tiles "TILES=y" "") \
+ catch2-tests
+}
+
+src_install() {
+ emake "${myemakeargs[@]}" \
+ $(usex tiles "TILES=y" "") \
+ DESTDIR="${D}" \
+ prefix_fp="" \
+ bin_prefix="${D}/usr/bin" \
+ install
+
+ [[ -e "${WORKDIR}/crawl-ncurses-${SLOT}" ]] && dobin "${WORKDIR}/crawl-ncurses-${SLOT}"
+
+ # don't relocate docs, needed at runtime
+ rm -rf "${D}/usr/share/${PN}-${SLOT}"/docs/license
+
+ mv "${WORKDIR}/${MY_P}"/docs/crawl.6 "${WORKDIR}/${MY_P}/docs/crawl-${SLOT}.6" \
+ || die "Couldn't append slot to man page name"
+ doman "${WORKDIR}/${MY_P}/docs/crawl-${SLOT}.6"
+
+ # icons and menu for graphical build
+ if use tiles ; then
+ doicon -s 48 "${DISTDIR}"/${PN}-${SLOT}.png
+ doicon -s scalable "${DISTDIR}"/${PN}-${SLOT}.svg
+ make_desktop_entry "crawl-${SLOT}" "Dungeon Crawl Stone Soup (DCSS) ${SLOT}" "${PN}-${SLOT}"
+ fi
+}
+
+pkg_postinst() {
+ xdg_icon_cache_update
+
+ elog "crawl is a slotted install that supports having"
+ elog "multiple versions installed. The binary has the"
+ elog "slot appended, e.g. 'crawl-"${SLOT}"'."
+
+ if use tiles && use ncurses ; then
+ elog
+ elog "Since you have enabled both tiles and ncurses frontends"
+ elog "the ncurses binary is called 'crawl-ncurses-"${SLOT}"' and the"
+ elog "tiles binary is called 'crawl-"${SLOT}"'."
+ fi
+}
+
+pkg_postrm() {
+ xdg_icon_cache_update
+}
diff --git a/games-roguelike/stone-soup/stone-soup-0.29.1-r1.ebuild b/games-roguelike/stone-soup/stone-soup-0.29.1-r1.ebuild
new file mode 100644
index 000000000000..3fdc20292784
--- /dev/null
+++ b/games-roguelike/stone-soup/stone-soup-0.29.1-r1.ebuild
@@ -0,0 +1,241 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# There are many slots for this package because people in the community
+# like to play old versions. Every release includes content changes
+# where species/spells/monsters are added or removed. The public
+# servers (e.g. http://crawl.akrasiac.org:8080) usually support playing
+# versions back to 0.11.
+
+# It's not necessary for Gentoo to support these old version but it's
+# something nice that our distro can offer that others don't. If the
+# maintenance burden becomes excessive than we can revisit that
+# position.
+
+EAPI=8
+
+LUA_COMPAT=( lua5-{1,3,4} luajit )
+LUA_REQ_USE="deprecated"
+PYTHON_COMPAT=( python3_{13..14} )
+VIRTUALX_REQUIRED="manual"
+inherit desktop python-any-r1 lua-single xdg-utils toolchain-funcs
+
+DESCRIPTION="Role-playing roguelike game of exploration and treasure-hunting in dungeons"
+HOMEPAGE="https://crawl.develz.org"
+
+# Leave empty string if not a _pre release
+COMMITSHA=""
+if [ -z "${COMMITSHA}" ]; then
+ # This is a tagged release
+ # Note the archive URI and file layout changed upstream between 0.29.0 and 0.29.1
+ SRC_URI="
+ https://github.com/crawl/crawl/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz
+ "
+ MY_P="crawl-${PV}/crawl-ref"
+else
+ # This is a _pre release
+ SRC_URI="
+ https://github.com/crawl/crawl/archive/${COMMITSHA}.tar.gz -> ${P}.tar.gz
+ "
+ MY_P="crawl-${COMMITSHA}/crawl-ref"
+fi
+# MY_SLOT to satisfy pkgcheck variable order checking
+MY_SLOT="0.29"
+SRC_URI="
+ ${SRC_URI}
+ https://dev.gentoo.org/~stasibear/distfiles/${PN}.png -> ${PN}-${MY_SLOT}.png
+ https://dev.gentoo.org/~stasibear/distfiles/${PN}.svg -> ${PN}-${MY_SLOT}.svg
+"
+
+S=${WORKDIR}/${MY_P}/source
+# 3-clause BSD: mt19937ar.cc, MSVC/stdint.h
+# 2-clause BSD: all contributions by Steve Noonan and Jesse Luehrs
+# Public Domain|CC0: most of tiles
+# MIT: json.cc/json.h, some .js files in webserver/static/scripts/contrib/
+LICENSE="GPL-2 BSD BSD-2 public-domain CC0-1.0 MIT"
+SLOT="${MY_SLOT}"
+KEYWORDS="amd64 x86"
+IUSE="advpng debug ncurses sound test +tiles"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="${LUA_REQUIRED_USE}"
+
+RDEPEND="
+ ${LUA_DEPS}
+ dev-db/sqlite:3
+ virtual/zlib:=
+ !ncurses? ( !tiles? ( sys-libs/ncurses:0 ) )
+ ncurses? ( sys-libs/ncurses:0 )
+ tiles? (
+ media-fonts/dejavu
+ media-libs/freetype:2
+ media-libs/libpng:0
+ sound? (
+ media-libs/libsdl2[X,opengl,sound,video]
+ media-libs/sdl2-mixer
+ )
+ !sound? ( media-libs/libsdl2[X,opengl,video] )
+ media-libs/sdl2-image[png]
+ virtual/glu
+ virtual/opengl
+ )"
+DEPEND="${RDEPEND}
+ test? ( <dev-cpp/catch-3.0.0:0 )
+ tiles? (
+ sys-libs/ncurses:0
+ )
+ "
+BDEPEND="
+ app-arch/unzip
+ dev-lang/perl
+ ${PYTHON_DEPS}
+ $(python_gen_any_dep 'dev-python/pyyaml[${PYTHON_USEDEP}]')
+ app-alternatives/lex
+ tiles? (
+ advpng? (
+ app-arch/advancecomp
+ )
+ !advpng? (
+ media-gfx/pngcrush
+ )
+ )
+ virtual/pkgconfig
+ app-alternatives/yacc
+ "
+
+PATCHES=(
+ "${FILESDIR}"/make.patch
+ "${FILESDIR}"/rltiles-make.patch
+ "${FILESDIR}"/avoid-musl-execinfo.patch
+)
+
+python_check_deps() {
+ python_has_version "dev-python/pyyaml[${PYTHON_USEDEP}]"
+}
+
+pkg_setup() {
+ python-any-r1_pkg_setup
+
+ if use !ncurses && use !tiles ; then
+ ewarn "Neither ncurses nor tiles frontend"
+ ewarn "selected, choosing ncurses only."
+ ewarn "Note that you can also enable both."
+ fi
+
+ if use sound && use !tiles ; then
+ ewarn "Sound support is only available with tiles."
+ fi
+}
+
+src_prepare() {
+ default
+ python_fix_shebang "${S}/util/species-gen.py"
+
+ if use advpng; then
+ eapply "${FILESDIR}/make-advpng.patch"
+ fi
+
+ sed -i -e "s/GAME = crawl$/GAME = crawl-${SLOT}/" "${S}/Makefile" \
+ || die "Couldn't append slot to executable name"
+
+ # File required for a _pre build
+ if ! [ -f "${S}/util/release_ver" ]; then
+ echo "${SLOT}" >"${S}/util/release_ver" || die "Couldn't write release_ver"
+ fi
+
+ # Replace bundled catch2 package with system implementation
+ # https://bugs.gentoo.org/829950
+ if use test; then
+ cp /usr/include/catch2/catch.hpp "${S}/catch2-tests" || die "Couldn't substitute system catch2"
+ fi
+}
+
+src_compile() {
+
+ # Insurance that we're not using bundled lib sources
+ rm -rf contrib || die "Couldn't delete contrib directory"
+
+ myemakeargs=(
+ $(usex debug "FULLDEBUG=y DEBUG=y" "")
+ BUILD_LUA=
+ AR="$(tc-getAR)"
+ CFOPTIMIZE=''
+ # -DLUA_COMPAT_OPENLIB=1 is required to enable the
+ # deprecated (in 5.1) luaL_openlib API (#869671)
+ CFOTHERS="${CXXFLAGS} -DLUA_COMPAT_OPENLIB=1"
+ CONTRIBS=
+ DATADIR="/usr/share/${PN}-${SLOT}"
+ FORCE_CC="$(tc-getCC)"
+ FORCE_CXX="$(tc-getCXX)"
+ LDFLAGS="${LDFLAGS}"
+ MAKEOPTS="${MAKEOPTS}"
+ PKGCONFIG="$(tc-getPKG_CONFIG)"
+ RANLIB="$(tc-getRANLIB)"
+ SAVEDIR="~/.crawl-${SLOT}"
+ SOUND=$(usex sound "y" "")
+ STRIP=touch
+ USE_LUAJIT=
+ V=1
+ prefix="/usr"
+ )
+
+ if use ncurses || (use !ncurses && use !tiles) ; then
+ emake "${myemakeargs[@]}"
+ # move it in case we build both variants
+ use tiles && { mv "crawl-${SLOT}" "${WORKDIR}"/crawl-ncurses-${SLOT} || die ;}
+ fi
+
+ if use tiles ; then
+ emake "${myemakeargs[@]}" clean
+ emake "${myemakeargs[@]}" "TILES=y"
+ fi
+}
+
+src_test() {
+ emake "${myemakeargs[@]}" \
+ $(usex tiles "TILES=y" "") \
+ catch2-tests
+}
+
+src_install() {
+ emake "${myemakeargs[@]}" \
+ $(usex tiles "TILES=y" "") \
+ DESTDIR="${D}" \
+ prefix_fp="" \
+ bin_prefix="${D}/usr/bin" \
+ install
+
+ [[ -e "${WORKDIR}/crawl-ncurses-${SLOT}" ]] && dobin "${WORKDIR}/crawl-ncurses-${SLOT}"
+
+ # don't relocate docs, needed at runtime
+ rm -rf "${D}/usr/share/${PN}-${SLOT}"/docs/license
+
+ mv "${WORKDIR}/${MY_P}"/docs/crawl.6 "${WORKDIR}/${MY_P}/docs/crawl-${SLOT}.6" \
+ || die "Couldn't append slot to man page name"
+ doman "${WORKDIR}/${MY_P}/docs/crawl-${SLOT}.6"
+
+ # icons and menu for graphical build
+ if use tiles ; then
+ doicon -s 48 "${DISTDIR}"/${PN}-${SLOT}.png
+ doicon -s scalable "${DISTDIR}"/${PN}-${SLOT}.svg
+ make_desktop_entry "crawl-${SLOT}" "Dungeon Crawl Stone Soup (DCSS) ${SLOT}" "${PN}-${SLOT}"
+ fi
+}
+
+pkg_postinst() {
+ xdg_icon_cache_update
+
+ elog "crawl is a slotted install that supports having"
+ elog "multiple versions installed. The binary has the"
+ elog "slot appended, e.g. 'crawl-"${SLOT}"'."
+
+ if use tiles && use ncurses ; then
+ elog
+ elog "Since you have enabled both tiles and ncurses frontends"
+ elog "the ncurses binary is called 'crawl-ncurses-"${SLOT}"' and the"
+ elog "tiles binary is called 'crawl-"${SLOT}"'."
+ fi
+}
+
+pkg_postrm() {
+ xdg_icon_cache_update
+}
diff --git a/games-roguelike/stone-soup/stone-soup-0.30.1-r1.ebuild b/games-roguelike/stone-soup/stone-soup-0.30.1-r1.ebuild
new file mode 100644
index 000000000000..192d93ff1e96
--- /dev/null
+++ b/games-roguelike/stone-soup/stone-soup-0.30.1-r1.ebuild
@@ -0,0 +1,241 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# There are many slots for this package because people in the community
+# like to play old versions. Every release includes content changes
+# where species/spells/monsters are added or removed. The public
+# servers (e.g. http://crawl.akrasiac.org:8080) usually support playing
+# versions back to 0.11.
+
+# It's not necessary for Gentoo to support these old version but it's
+# something nice that our distro can offer that others don't. If the
+# maintenance burden becomes excessive than we can revisit that
+# position.
+
+EAPI=8
+
+LUA_COMPAT=( lua5-{1,3,4} luajit )
+LUA_REQ_USE="deprecated"
+PYTHON_COMPAT=( python3_{13..14} )
+VIRTUALX_REQUIRED="manual"
+inherit desktop python-any-r1 lua-single xdg-utils toolchain-funcs
+
+DESCRIPTION="Role-playing roguelike game of exploration and treasure-hunting in dungeons"
+HOMEPAGE="https://crawl.develz.org"
+
+# Leave empty string if not a _pre release
+COMMITSHA=""
+if [ -z "${COMMITSHA}" ]; then
+ # This is a tagged release
+ # Note the archive URI and file layout changed upstream between 0.29.0 and 0.29.1
+ SRC_URI="
+ https://github.com/crawl/crawl/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz
+ "
+ MY_P="crawl-${PV}/crawl-ref"
+else
+ # This is a _pre release
+ SRC_URI="
+ https://github.com/crawl/crawl/archive/${COMMITSHA}.tar.gz -> ${P}.tar.gz
+ "
+ MY_P="crawl-${COMMITSHA}/crawl-ref"
+fi
+# MY_SLOT to satisfy pkgcheck variable order checking
+MY_SLOT="0.30"
+SRC_URI="
+ ${SRC_URI}
+ https://dev.gentoo.org/~stasibear/distfiles/${PN}.png -> ${PN}-${MY_SLOT}.png
+ https://dev.gentoo.org/~stasibear/distfiles/${PN}.svg -> ${PN}-${MY_SLOT}.svg
+"
+
+S=${WORKDIR}/${MY_P}/source
+# 3-clause BSD: mt19937ar.cc, MSVC/stdint.h
+# 2-clause BSD: all contributions by Steve Noonan and Jesse Luehrs
+# Public Domain|CC0: most of tiles
+# MIT: json.cc/json.h, some .js files in webserver/static/scripts/contrib/
+LICENSE="GPL-2 BSD BSD-2 public-domain CC0-1.0 MIT"
+SLOT="${MY_SLOT}"
+KEYWORDS="amd64 x86"
+IUSE="advpng debug ncurses sound test +tiles"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="${LUA_REQUIRED_USE}"
+
+RDEPEND="
+ ${LUA_DEPS}
+ dev-db/sqlite:3
+ virtual/zlib:=
+ !ncurses? ( !tiles? ( sys-libs/ncurses:0 ) )
+ ncurses? ( sys-libs/ncurses:0 )
+ tiles? (
+ media-fonts/dejavu
+ media-libs/freetype:2
+ media-libs/libpng:0
+ sound? (
+ media-libs/libsdl2[X,opengl,sound,video]
+ media-libs/sdl2-mixer
+ )
+ !sound? ( media-libs/libsdl2[X,opengl,video] )
+ media-libs/sdl2-image[png]
+ virtual/glu
+ virtual/opengl
+ )"
+DEPEND="${RDEPEND}
+ test? ( <dev-cpp/catch-3.0.0:0 )
+ tiles? (
+ sys-libs/ncurses:0
+ )
+ "
+BDEPEND="
+ app-arch/unzip
+ dev-lang/perl
+ ${PYTHON_DEPS}
+ $(python_gen_any_dep 'dev-python/pyyaml[${PYTHON_USEDEP}]')
+ app-alternatives/lex
+ tiles? (
+ advpng? (
+ app-arch/advancecomp
+ )
+ !advpng? (
+ media-gfx/pngcrush
+ )
+ )
+ virtual/pkgconfig
+ app-alternatives/yacc
+ "
+
+PATCHES=(
+ "${FILESDIR}"/make-v3.patch
+ "${FILESDIR}"/rltiles-make.patch
+ "${FILESDIR}"/avoid-musl-execinfo.patch
+)
+
+python_check_deps() {
+ python_has_version "dev-python/pyyaml[${PYTHON_USEDEP}]"
+}
+
+pkg_setup() {
+ python-any-r1_pkg_setup
+
+ if use !ncurses && use !tiles ; then
+ ewarn "Neither ncurses nor tiles frontend"
+ ewarn "selected, choosing ncurses only."
+ ewarn "Note that you can also enable both."
+ fi
+
+ if use sound && use !tiles ; then
+ ewarn "Sound support is only available with tiles."
+ fi
+}
+
+src_prepare() {
+ default
+ python_fix_shebang "${S}/util/species-gen.py"
+
+ if use advpng; then
+ eapply "${FILESDIR}/make-advpng.patch"
+ fi
+
+ sed -i -e "s/GAME = crawl$/GAME = crawl-${SLOT}/" "${S}/Makefile" \
+ || die "Couldn't append slot to executable name"
+
+ # File required for a _pre build
+ if ! [ -f "${S}/util/release_ver" ]; then
+ echo "${SLOT}" >"${S}/util/release_ver" || die "Couldn't write release_ver"
+ fi
+
+ # Replace bundled catch2 package with system implementation
+ # https://bugs.gentoo.org/829950
+ if use test; then
+ cp /usr/include/catch2/catch.hpp "${S}/catch2-tests" || die "Couldn't substitute system catch2"
+ fi
+}
+
+src_compile() {
+
+ # Insurance that we're not using bundled lib sources
+ rm -rf contrib || die "Couldn't delete contrib directory"
+
+ myemakeargs=(
+ $(usex debug "FULLDEBUG=y DEBUG=y" "")
+ BUILD_LUA=
+ AR="$(tc-getAR)"
+ CFOPTIMIZE=''
+ # -DLUA_COMPAT_OPENLIB=1 is required to enable the
+ # deprecated (in 5.1) luaL_openlib API (#869671)
+ CFOTHERS="${CXXFLAGS} -DLUA_COMPAT_OPENLIB=1"
+ CONTRIBS=
+ DATADIR="/usr/share/${PN}-${SLOT}"
+ FORCE_CC="$(tc-getCC)"
+ FORCE_CXX="$(tc-getCXX)"
+ LDFLAGS="${LDFLAGS}"
+ MAKEOPTS="${MAKEOPTS}"
+ PKGCONFIG="$(tc-getPKG_CONFIG)"
+ RANLIB="$(tc-getRANLIB)"
+ SAVEDIR="~/.crawl-${SLOT}"
+ SOUND=$(usex sound "y" "")
+ STRIP=touch
+ USE_LUAJIT=
+ V=1
+ prefix="/usr"
+ )
+
+ if use ncurses || (use !ncurses && use !tiles) ; then
+ emake "${myemakeargs[@]}"
+ # move it in case we build both variants
+ use tiles && { mv "crawl-${SLOT}" "${WORKDIR}"/crawl-ncurses-${SLOT} || die ;}
+ fi
+
+ if use tiles ; then
+ emake "${myemakeargs[@]}" clean
+ emake "${myemakeargs[@]}" "TILES=y"
+ fi
+}
+
+src_test() {
+ emake "${myemakeargs[@]}" \
+ $(usex tiles "TILES=y" "") \
+ catch2-tests
+}
+
+src_install() {
+ emake "${myemakeargs[@]}" \
+ $(usex tiles "TILES=y" "") \
+ DESTDIR="${D}" \
+ prefix_fp="" \
+ bin_prefix="${D}/usr/bin" \
+ install
+
+ [[ -e "${WORKDIR}/crawl-ncurses-${SLOT}" ]] && dobin "${WORKDIR}/crawl-ncurses-${SLOT}"
+
+ # don't relocate docs, needed at runtime
+ rm -rf "${D}/usr/share/${PN}-${SLOT}"/docs/license
+
+ mv "${WORKDIR}/${MY_P}"/docs/crawl.6 "${WORKDIR}/${MY_P}/docs/crawl-${SLOT}.6" \
+ || die "Couldn't append slot to man page name"
+ doman "${WORKDIR}/${MY_P}/docs/crawl-${SLOT}.6"
+
+ # icons and menu for graphical build
+ if use tiles ; then
+ doicon -s 48 "${DISTDIR}"/${PN}-${SLOT}.png
+ doicon -s scalable "${DISTDIR}"/${PN}-${SLOT}.svg
+ make_desktop_entry "crawl-${SLOT}" "Dungeon Crawl Stone Soup (DCSS) ${SLOT}" "${PN}-${SLOT}"
+ fi
+}
+
+pkg_postinst() {
+ xdg_icon_cache_update
+
+ elog "crawl is a slotted install that supports having"
+ elog "multiple versions installed. The binary has the"
+ elog "slot appended, e.g. 'crawl-"${SLOT}"'."
+
+ if use tiles && use ncurses ; then
+ elog
+ elog "Since you have enabled both tiles and ncurses frontends"
+ elog "the ncurses binary is called 'crawl-ncurses-"${SLOT}"' and the"
+ elog "tiles binary is called 'crawl-"${SLOT}"'."
+ fi
+}
+
+pkg_postrm() {
+ xdg_icon_cache_update
+}
diff --git a/games-roguelike/stone-soup/stone-soup-0.31.0-r1.ebuild b/games-roguelike/stone-soup/stone-soup-0.31.0-r1.ebuild
new file mode 100644
index 000000000000..83a81b74c2b6
--- /dev/null
+++ b/games-roguelike/stone-soup/stone-soup-0.31.0-r1.ebuild
@@ -0,0 +1,241 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# There are many slots for this package because people in the community
+# like to play old versions. Every release includes content changes
+# where species/spells/monsters are added or removed. The public
+# servers (e.g. http://crawl.akrasiac.org:8080) usually support playing
+# versions back to 0.11.
+
+# It's not necessary for Gentoo to support these old version but it's
+# something nice that our distro can offer that others don't. If the
+# maintenance burden becomes excessive than we can revisit that
+# position.
+
+EAPI=8
+
+LUA_COMPAT=( lua5-{1,3,4} luajit )
+LUA_REQ_USE="deprecated"
+PYTHON_COMPAT=( python3_{13..14} )
+VIRTUALX_REQUIRED="manual"
+inherit desktop python-any-r1 lua-single xdg-utils toolchain-funcs
+
+DESCRIPTION="Role-playing roguelike game of exploration and treasure-hunting in dungeons"
+HOMEPAGE="https://crawl.develz.org"
+
+# Leave empty string if not a _pre release
+COMMITSHA=""
+if [ -z "${COMMITSHA}" ]; then
+ # This is a tagged release
+ # Note the archive URI and file layout changed upstream between 0.29.0 and 0.29.1
+ SRC_URI="
+ https://github.com/crawl/crawl/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz
+ "
+ MY_P="crawl-${PV}/crawl-ref"
+else
+ # This is a _pre release
+ SRC_URI="
+ https://github.com/crawl/crawl/archive/${COMMITSHA}.tar.gz -> ${P}.tar.gz
+ "
+ MY_P="crawl-${COMMITSHA}/crawl-ref"
+fi
+# MY_SLOT to satisfy pkgcheck variable order checking
+MY_SLOT="0.31"
+SRC_URI="
+ ${SRC_URI}
+ https://dev.gentoo.org/~stasibear/distfiles/${PN}.png -> ${PN}-${MY_SLOT}.png
+ https://dev.gentoo.org/~stasibear/distfiles/${PN}.svg -> ${PN}-${MY_SLOT}.svg
+"
+
+S=${WORKDIR}/${MY_P}/source
+# 3-clause BSD: mt19937ar.cc, MSVC/stdint.h
+# 2-clause BSD: all contributions by Steve Noonan and Jesse Luehrs
+# Public Domain|CC0: most of tiles
+# MIT: json.cc/json.h, some .js files in webserver/static/scripts/contrib/
+LICENSE="GPL-2 BSD BSD-2 public-domain CC0-1.0 MIT"
+SLOT="${MY_SLOT}"
+KEYWORDS="amd64 x86"
+IUSE="advpng debug ncurses sound test +tiles"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="${LUA_REQUIRED_USE}"
+
+RDEPEND="
+ ${LUA_DEPS}
+ dev-db/sqlite:3
+ virtual/zlib:=
+ !ncurses? ( !tiles? ( sys-libs/ncurses:0 ) )
+ ncurses? ( sys-libs/ncurses:0 )
+ tiles? (
+ media-fonts/dejavu
+ media-libs/freetype:2
+ media-libs/libpng:0
+ sound? (
+ media-libs/libsdl2[X,opengl,sound,video]
+ media-libs/sdl2-mixer
+ )
+ !sound? ( media-libs/libsdl2[X,opengl,video] )
+ media-libs/sdl2-image[png]
+ virtual/glu
+ virtual/opengl
+ )"
+DEPEND="${RDEPEND}
+ test? ( <dev-cpp/catch-3.0.0:0 )
+ tiles? (
+ sys-libs/ncurses:0
+ )
+ "
+BDEPEND="
+ app-arch/unzip
+ dev-lang/perl
+ ${PYTHON_DEPS}
+ $(python_gen_any_dep 'dev-python/pyyaml[${PYTHON_USEDEP}]')
+ app-alternatives/lex
+ tiles? (
+ advpng? (
+ app-arch/advancecomp
+ )
+ !advpng? (
+ media-gfx/pngcrush
+ )
+ )
+ virtual/pkgconfig
+ app-alternatives/yacc
+ "
+
+PATCHES=(
+ "${FILESDIR}"/make-v3.patch
+ "${FILESDIR}"/rltiles-make.patch
+ "${FILESDIR}"/avoid-musl-execinfo.patch
+)
+
+python_check_deps() {
+ python_has_version "dev-python/pyyaml[${PYTHON_USEDEP}]"
+}
+
+pkg_setup() {
+ python-any-r1_pkg_setup
+
+ if use !ncurses && use !tiles ; then
+ ewarn "Neither ncurses nor tiles frontend"
+ ewarn "selected, choosing ncurses only."
+ ewarn "Note that you can also enable both."
+ fi
+
+ if use sound && use !tiles ; then
+ ewarn "Sound support is only available with tiles."
+ fi
+}
+
+src_prepare() {
+ default
+ python_fix_shebang "${S}/util/species-gen.py"
+
+ if use advpng; then
+ eapply "${FILESDIR}/make-advpng.patch"
+ fi
+
+ sed -i -e "s/GAME = crawl$/GAME = crawl-${SLOT}/" "${S}/Makefile" \
+ || die "Couldn't append slot to executable name"
+
+ # File required for a _pre build
+ if ! [ -f "${S}/util/release_ver" ]; then
+ echo "${SLOT}" >"${S}/util/release_ver" || die "Couldn't write release_ver"
+ fi
+
+ # Replace bundled catch2 package with system implementation
+ # https://bugs.gentoo.org/829950
+ if use test; then
+ cp /usr/include/catch2/catch.hpp "${S}/catch2-tests" || die "Couldn't substitute system catch2"
+ fi
+}
+
+src_compile() {
+
+ # Insurance that we're not using bundled lib sources
+ rm -rf contrib || die "Couldn't delete contrib directory"
+
+ myemakeargs=(
+ $(usex debug "FULLDEBUG=y DEBUG=y" "")
+ BUILD_LUA=
+ AR="$(tc-getAR)"
+ CFOPTIMIZE=''
+ # -DLUA_COMPAT_OPENLIB=1 is required to enable the
+ # deprecated (in 5.1) luaL_openlib API (#869671)
+ CFOTHERS="${CXXFLAGS} -DLUA_COMPAT_OPENLIB=1"
+ CONTRIBS=
+ DATADIR="/usr/share/${PN}-${SLOT}"
+ FORCE_CC="$(tc-getCC)"
+ FORCE_CXX="$(tc-getCXX)"
+ LDFLAGS="${LDFLAGS}"
+ MAKEOPTS="${MAKEOPTS}"
+ PKGCONFIG="$(tc-getPKG_CONFIG)"
+ RANLIB="$(tc-getRANLIB)"
+ SAVEDIR="~/.crawl-${SLOT}"
+ SOUND=$(usex sound "y" "")
+ STRIP=touch
+ USE_LUAJIT=
+ V=1
+ prefix="/usr"
+ )
+
+ if use ncurses || (use !ncurses && use !tiles) ; then
+ emake "${myemakeargs[@]}"
+ # move it in case we build both variants
+ use tiles && { mv "crawl-${SLOT}" "${WORKDIR}"/crawl-ncurses-${SLOT} || die ;}
+ fi
+
+ if use tiles ; then
+ emake "${myemakeargs[@]}" clean
+ emake "${myemakeargs[@]}" "TILES=y"
+ fi
+}
+
+src_test() {
+ emake "${myemakeargs[@]}" \
+ $(usex tiles "TILES=y" "") \
+ catch2-tests
+}
+
+src_install() {
+ emake "${myemakeargs[@]}" \
+ $(usex tiles "TILES=y" "") \
+ DESTDIR="${D}" \
+ prefix_fp="" \
+ bin_prefix="${D}/usr/bin" \
+ install
+
+ [[ -e "${WORKDIR}/crawl-ncurses-${SLOT}" ]] && dobin "${WORKDIR}/crawl-ncurses-${SLOT}"
+
+ # don't relocate docs, needed at runtime
+ rm -rf "${D}/usr/share/${PN}-${SLOT}"/docs/license
+
+ mv "${WORKDIR}/${MY_P}"/docs/crawl.6 "${WORKDIR}/${MY_P}/docs/crawl-${SLOT}.6" \
+ || die "Couldn't append slot to man page name"
+ doman "${WORKDIR}/${MY_P}/docs/crawl-${SLOT}.6"
+
+ # icons and menu for graphical build
+ if use tiles ; then
+ doicon -s 48 "${DISTDIR}"/${PN}-${SLOT}.png
+ doicon -s scalable "${DISTDIR}"/${PN}-${SLOT}.svg
+ make_desktop_entry "crawl-${SLOT}" "Dungeon Crawl Stone Soup (DCSS) ${SLOT}" "${PN}-${SLOT}"
+ fi
+}
+
+pkg_postinst() {
+ xdg_icon_cache_update
+
+ elog "crawl is a slotted install that supports having"
+ elog "multiple versions installed. The binary has the"
+ elog "slot appended, e.g. 'crawl-"${SLOT}"'."
+
+ if use tiles && use ncurses ; then
+ elog
+ elog "Since you have enabled both tiles and ncurses frontends"
+ elog "the ncurses binary is called 'crawl-ncurses-"${SLOT}"' and the"
+ elog "tiles binary is called 'crawl-"${SLOT}"'."
+ fi
+}
+
+pkg_postrm() {
+ xdg_icon_cache_update
+}
diff --git a/games-roguelike/stone-soup/stone-soup-0.32.1-r1.ebuild b/games-roguelike/stone-soup/stone-soup-0.32.1-r1.ebuild
new file mode 100644
index 000000000000..212ccb8846fb
--- /dev/null
+++ b/games-roguelike/stone-soup/stone-soup-0.32.1-r1.ebuild
@@ -0,0 +1,241 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# There are many slots for this package because people in the community
+# like to play old versions. Every release includes content changes
+# where species/spells/monsters are added or removed. The public
+# servers (e.g. http://crawl.akrasiac.org:8080) usually support playing
+# versions back to 0.11.
+
+# It's not necessary for Gentoo to support these old version but it's
+# something nice that our distro can offer that others don't. If the
+# maintenance burden becomes excessive than we can revisit that
+# position.
+
+EAPI=8
+
+LUA_COMPAT=( lua5-{1,3,4} luajit )
+LUA_REQ_USE="deprecated"
+PYTHON_COMPAT=( python3_{13..14} )
+VIRTUALX_REQUIRED="manual"
+inherit desktop python-any-r1 lua-single xdg-utils toolchain-funcs
+
+DESCRIPTION="Role-playing roguelike game of exploration and treasure-hunting in dungeons"
+HOMEPAGE="https://crawl.develz.org"
+
+# Leave empty string if not a _pre release
+COMMITSHA=""
+if [ -z "${COMMITSHA}" ]; then
+ # This is a tagged release
+ # Note the archive URI and file layout changed upstream between 0.29.0 and 0.29.1
+ SRC_URI="
+ https://github.com/crawl/crawl/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz
+ "
+ MY_P="crawl-${PV}/crawl-ref"
+else
+ # This is a _pre release
+ SRC_URI="
+ https://github.com/crawl/crawl/archive/${COMMITSHA}.tar.gz -> ${P}.tar.gz
+ "
+ MY_P="crawl-${COMMITSHA}/crawl-ref"
+fi
+# MY_SLOT to satisfy pkgcheck variable order checking
+MY_SLOT="0.32"
+SRC_URI="
+ ${SRC_URI}
+ https://dev.gentoo.org/~stasibear/distfiles/${PN}.png -> ${PN}-${MY_SLOT}.png
+ https://dev.gentoo.org/~stasibear/distfiles/${PN}.svg -> ${PN}-${MY_SLOT}.svg
+"
+
+S=${WORKDIR}/${MY_P}/source
+# 3-clause BSD: mt19937ar.cc, MSVC/stdint.h
+# 2-clause BSD: all contributions by Steve Noonan and Jesse Luehrs
+# Public Domain|CC0: most of tiles
+# MIT: json.cc/json.h, some .js files in webserver/static/scripts/contrib/
+LICENSE="GPL-2 BSD BSD-2 public-domain CC0-1.0 MIT"
+SLOT="${MY_SLOT}"
+KEYWORDS="amd64 x86"
+IUSE="advpng debug ncurses sound test +tiles"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="${LUA_REQUIRED_USE}"
+
+RDEPEND="
+ ${LUA_DEPS}
+ dev-db/sqlite:3
+ virtual/zlib:=
+ !ncurses? ( !tiles? ( sys-libs/ncurses:0 ) )
+ ncurses? ( sys-libs/ncurses:0 )
+ tiles? (
+ media-fonts/dejavu
+ media-libs/freetype:2
+ media-libs/libpng:0
+ sound? (
+ media-libs/libsdl2[X,opengl,sound,video]
+ media-libs/sdl2-mixer
+ )
+ !sound? ( media-libs/libsdl2[X,opengl,video] )
+ media-libs/sdl2-image[png]
+ virtual/glu
+ virtual/opengl
+ )"
+DEPEND="${RDEPEND}
+ test? ( <dev-cpp/catch-3.0.0:0 )
+ tiles? (
+ sys-libs/ncurses:0
+ )
+ "
+BDEPEND="
+ app-arch/unzip
+ dev-lang/perl
+ ${PYTHON_DEPS}
+ $(python_gen_any_dep 'dev-python/pyyaml[${PYTHON_USEDEP}]')
+ app-alternatives/lex
+ tiles? (
+ advpng? (
+ app-arch/advancecomp
+ )
+ !advpng? (
+ media-gfx/pngcrush
+ )
+ )
+ virtual/pkgconfig
+ app-alternatives/yacc
+ "
+
+PATCHES=(
+ "${FILESDIR}"/make-v3.patch
+ "${FILESDIR}"/rltiles-make.patch
+ "${FILESDIR}"/avoid-musl-execinfo.patch
+)
+
+python_check_deps() {
+ python_has_version "dev-python/pyyaml[${PYTHON_USEDEP}]"
+}
+
+pkg_setup() {
+ python-any-r1_pkg_setup
+
+ if use !ncurses && use !tiles ; then
+ ewarn "Neither ncurses nor tiles frontend"
+ ewarn "selected, choosing ncurses only."
+ ewarn "Note that you can also enable both."
+ fi
+
+ if use sound && use !tiles ; then
+ ewarn "Sound support is only available with tiles."
+ fi
+}
+
+src_prepare() {
+ default
+ python_fix_shebang "${S}/util/species-gen.py"
+
+ if use advpng; then
+ eapply "${FILESDIR}/make-advpng.patch"
+ fi
+
+ sed -i -e "s/GAME = crawl$/GAME = crawl-${SLOT}/" "${S}/Makefile" \
+ || die "Couldn't append slot to executable name"
+
+ # File required for a _pre build
+ if ! [ -f "${S}/util/release_ver" ]; then
+ echo "${SLOT}" >"${S}/util/release_ver" || die "Couldn't write release_ver"
+ fi
+
+ # Replace bundled catch2 package with system implementation
+ # https://bugs.gentoo.org/829950
+ if use test; then
+ cp /usr/include/catch2/catch.hpp "${S}/catch2-tests" || die "Couldn't substitute system catch2"
+ fi
+}
+
+src_compile() {
+
+ # Insurance that we're not using bundled lib sources
+ rm -rf contrib || die "Couldn't delete contrib directory"
+
+ myemakeargs=(
+ $(usex debug "FULLDEBUG=y DEBUG=y" "")
+ BUILD_LUA=
+ AR="$(tc-getAR)"
+ CFOPTIMIZE=''
+ # -DLUA_COMPAT_OPENLIB=1 is required to enable the
+ # deprecated (in 5.1) luaL_openlib API (#869671)
+ CFOTHERS="${CXXFLAGS} -DLUA_COMPAT_OPENLIB=1"
+ CONTRIBS=
+ DATADIR="/usr/share/${PN}-${SLOT}"
+ FORCE_CC="$(tc-getCC)"
+ FORCE_CXX="$(tc-getCXX)"
+ LDFLAGS="${LDFLAGS}"
+ MAKEOPTS="${MAKEOPTS}"
+ PKGCONFIG="$(tc-getPKG_CONFIG)"
+ RANLIB="$(tc-getRANLIB)"
+ SAVEDIR="~/.crawl-${SLOT}"
+ SOUND=$(usex sound "y" "")
+ STRIP=touch
+ USE_LUAJIT=
+ V=1
+ prefix="/usr"
+ )
+
+ if use ncurses || (use !ncurses && use !tiles) ; then
+ emake "${myemakeargs[@]}"
+ # move it in case we build both variants
+ use tiles && { mv "crawl-${SLOT}" "${WORKDIR}"/crawl-ncurses-${SLOT} || die ;}
+ fi
+
+ if use tiles ; then
+ emake "${myemakeargs[@]}" clean
+ emake "${myemakeargs[@]}" "TILES=y"
+ fi
+}
+
+src_test() {
+ emake "${myemakeargs[@]}" \
+ $(usex tiles "TILES=y" "") \
+ catch2-tests
+}
+
+src_install() {
+ emake "${myemakeargs[@]}" \
+ $(usex tiles "TILES=y" "") \
+ DESTDIR="${D}" \
+ prefix_fp="" \
+ bin_prefix="${D}/usr/bin" \
+ install
+
+ [[ -e "${WORKDIR}/crawl-ncurses-${SLOT}" ]] && dobin "${WORKDIR}/crawl-ncurses-${SLOT}"
+
+ # don't relocate docs, needed at runtime
+ rm -rf "${D}/usr/share/${PN}-${SLOT}"/docs/license
+
+ mv "${WORKDIR}/${MY_P}"/docs/crawl.6 "${WORKDIR}/${MY_P}/docs/crawl-${SLOT}.6" \
+ || die "Couldn't append slot to man page name"
+ doman "${WORKDIR}/${MY_P}/docs/crawl-${SLOT}.6"
+
+ # icons and menu for graphical build
+ if use tiles ; then
+ doicon -s 48 "${DISTDIR}"/${PN}-${SLOT}.png
+ doicon -s scalable "${DISTDIR}"/${PN}-${SLOT}.svg
+ make_desktop_entry "crawl-${SLOT}" "Dungeon Crawl Stone Soup (DCSS) ${SLOT}" "${PN}-${SLOT}"
+ fi
+}
+
+pkg_postinst() {
+ xdg_icon_cache_update
+
+ elog "crawl is a slotted install that supports having"
+ elog "multiple versions installed. The binary has the"
+ elog "slot appended, e.g. 'crawl-"${SLOT}"'."
+
+ if use tiles && use ncurses ; then
+ elog
+ elog "Since you have enabled both tiles and ncurses frontends"
+ elog "the ncurses binary is called 'crawl-ncurses-"${SLOT}"' and the"
+ elog "tiles binary is called 'crawl-"${SLOT}"'."
+ fi
+}
+
+pkg_postrm() {
+ xdg_icon_cache_update
+}
diff --git a/games-roguelike/stone-soup/stone-soup-0.33.1-r1.ebuild b/games-roguelike/stone-soup/stone-soup-0.33.1-r1.ebuild
new file mode 100644
index 000000000000..49c90c2402d3
--- /dev/null
+++ b/games-roguelike/stone-soup/stone-soup-0.33.1-r1.ebuild
@@ -0,0 +1,241 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# There are many slots for this package because people in the community
+# like to play old versions. Every release includes content changes
+# where species/spells/monsters are added or removed. The public
+# servers (e.g. http://crawl.akrasiac.org:8080) usually support playing
+# versions back to 0.11.
+
+# It's not necessary for Gentoo to support these old version but it's
+# something nice that our distro can offer that others don't. If the
+# maintenance burden becomes excessive than we can revisit that
+# position.
+
+EAPI=8
+
+LUA_COMPAT=( lua5-{1,3,4} luajit )
+LUA_REQ_USE="deprecated"
+PYTHON_COMPAT=( python3_{13..14} )
+VIRTUALX_REQUIRED="manual"
+inherit desktop python-any-r1 lua-single xdg-utils toolchain-funcs
+
+DESCRIPTION="Role-playing roguelike game of exploration and treasure-hunting in dungeons"
+HOMEPAGE="https://crawl.develz.org"
+
+# Leave empty string if not a _pre release
+COMMITSHA=""
+if [ -z "${COMMITSHA}" ]; then
+ # This is a tagged release
+ # Note the archive URI and file layout changed upstream between 0.29.0 and 0.29.1
+ SRC_URI="
+ https://github.com/crawl/crawl/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz
+ "
+ MY_P="crawl-${PV}/crawl-ref"
+else
+ # This is a _pre release
+ SRC_URI="
+ https://github.com/crawl/crawl/archive/${COMMITSHA}.tar.gz -> ${P}.tar.gz
+ "
+ MY_P="crawl-${COMMITSHA}/crawl-ref"
+fi
+# MY_SLOT to satisfy pkgcheck variable order checking
+MY_SLOT="0.33"
+SRC_URI="
+ ${SRC_URI}
+ https://dev.gentoo.org/~stasibear/distfiles/${PN}.png -> ${PN}-${MY_SLOT}.png
+ https://dev.gentoo.org/~stasibear/distfiles/${PN}.svg -> ${PN}-${MY_SLOT}.svg
+"
+
+S=${WORKDIR}/${MY_P}/source
+# 3-clause BSD: mt19937ar.cc, MSVC/stdint.h
+# 2-clause BSD: all contributions by Steve Noonan and Jesse Luehrs
+# Public Domain|CC0: most of tiles
+# MIT: json.cc/json.h, some .js files in webserver/static/scripts/contrib/
+LICENSE="GPL-2 BSD BSD-2 public-domain CC0-1.0 MIT"
+SLOT="${MY_SLOT}"
+KEYWORDS="amd64 x86"
+IUSE="advpng debug ncurses sound test +tiles"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="${LUA_REQUIRED_USE}"
+
+RDEPEND="
+ ${LUA_DEPS}
+ dev-db/sqlite:3
+ virtual/zlib:=
+ !ncurses? ( !tiles? ( sys-libs/ncurses:0 ) )
+ ncurses? ( sys-libs/ncurses:0 )
+ tiles? (
+ media-fonts/dejavu
+ media-libs/freetype:2
+ media-libs/libpng:0
+ sound? (
+ media-libs/libsdl2[X,opengl,sound,video]
+ media-libs/sdl2-mixer
+ )
+ !sound? ( media-libs/libsdl2[X,opengl,video] )
+ media-libs/sdl2-image[png]
+ virtual/glu
+ virtual/opengl
+ )"
+DEPEND="${RDEPEND}
+ test? ( <dev-cpp/catch-3.0.0:0 )
+ tiles? (
+ sys-libs/ncurses:0
+ )
+ "
+BDEPEND="
+ app-arch/unzip
+ dev-lang/perl
+ ${PYTHON_DEPS}
+ $(python_gen_any_dep 'dev-python/pyyaml[${PYTHON_USEDEP}]')
+ app-alternatives/lex
+ tiles? (
+ advpng? (
+ app-arch/advancecomp
+ )
+ !advpng? (
+ media-gfx/pngcrush
+ )
+ )
+ virtual/pkgconfig
+ app-alternatives/yacc
+ "
+
+PATCHES=(
+ "${FILESDIR}"/make-v3.patch
+ "${FILESDIR}"/rltiles-make.patch
+ "${FILESDIR}"/avoid-musl-execinfo.patch
+)
+
+python_check_deps() {
+ python_has_version "dev-python/pyyaml[${PYTHON_USEDEP}]"
+}
+
+pkg_setup() {
+ python-any-r1_pkg_setup
+
+ if use !ncurses && use !tiles ; then
+ ewarn "Neither ncurses nor tiles frontend"
+ ewarn "selected, choosing ncurses only."
+ ewarn "Note that you can also enable both."
+ fi
+
+ if use sound && use !tiles ; then
+ ewarn "Sound support is only available with tiles."
+ fi
+}
+
+src_prepare() {
+ default
+ python_fix_shebang "${S}/util/species-gen.py"
+
+ if use advpng; then
+ eapply "${FILESDIR}/make-advpng.patch"
+ fi
+
+ sed -i -e "s/GAME = crawl$/GAME = crawl-${SLOT}/" "${S}/Makefile" \
+ || die "Couldn't append slot to executable name"
+
+ # File required for a _pre build
+ if ! [ -f "${S}/util/release_ver" ]; then
+ echo "${SLOT}" >"${S}/util/release_ver" || die "Couldn't write release_ver"
+ fi
+
+ # Replace bundled catch2 package with system implementation
+ # https://bugs.gentoo.org/829950
+ if use test; then
+ cp /usr/include/catch2/catch.hpp "${S}/catch2-tests" || die "Couldn't substitute system catch2"
+ fi
+}
+
+src_compile() {
+
+ # Insurance that we're not using bundled lib sources
+ rm -rf contrib || die "Couldn't delete contrib directory"
+
+ myemakeargs=(
+ $(usex debug "FULLDEBUG=y DEBUG=y" "")
+ BUILD_LUA=
+ AR="$(tc-getAR)"
+ CFOPTIMIZE=''
+ # -DLUA_COMPAT_OPENLIB=1 is required to enable the
+ # deprecated (in 5.1) luaL_openlib API (#869671)
+ CFOTHERS="${CXXFLAGS} -DLUA_COMPAT_OPENLIB=1"
+ CONTRIBS=
+ DATADIR="/usr/share/${PN}-${SLOT}"
+ FORCE_CC="$(tc-getCC)"
+ FORCE_CXX="$(tc-getCXX)"
+ LDFLAGS="${LDFLAGS}"
+ MAKEOPTS="${MAKEOPTS}"
+ PKGCONFIG="$(tc-getPKG_CONFIG)"
+ RANLIB="$(tc-getRANLIB)"
+ SAVEDIR="~/.crawl-${SLOT}"
+ SOUND=$(usex sound "y" "")
+ STRIP=touch
+ USE_LUAJIT=
+ V=1
+ prefix="/usr"
+ )
+
+ if use ncurses || (use !ncurses && use !tiles) ; then
+ emake "${myemakeargs[@]}"
+ # move it in case we build both variants
+ use tiles && { mv "crawl-${SLOT}" "${WORKDIR}"/crawl-ncurses-${SLOT} || die ;}
+ fi
+
+ if use tiles ; then
+ emake "${myemakeargs[@]}" clean
+ emake "${myemakeargs[@]}" "TILES=y"
+ fi
+}
+
+src_test() {
+ emake "${myemakeargs[@]}" \
+ $(usex tiles "TILES=y" "") \
+ catch2-tests
+}
+
+src_install() {
+ emake "${myemakeargs[@]}" \
+ $(usex tiles "TILES=y" "") \
+ DESTDIR="${D}" \
+ prefix_fp="" \
+ bin_prefix="${D}/usr/bin" \
+ install
+
+ [[ -e "${WORKDIR}/crawl-ncurses-${SLOT}" ]] && dobin "${WORKDIR}/crawl-ncurses-${SLOT}"
+
+ # don't relocate docs, needed at runtime
+ rm -rf "${D}/usr/share/${PN}-${SLOT}"/docs/license
+
+ mv "${WORKDIR}/${MY_P}"/docs/crawl.6 "${WORKDIR}/${MY_P}/docs/crawl-${SLOT}.6" \
+ || die "Couldn't append slot to man page name"
+ doman "${WORKDIR}/${MY_P}/docs/crawl-${SLOT}.6"
+
+ # icons and menu for graphical build
+ if use tiles ; then
+ doicon -s 48 "${DISTDIR}"/${PN}-${SLOT}.png
+ doicon -s scalable "${DISTDIR}"/${PN}-${SLOT}.svg
+ make_desktop_entry "crawl-${SLOT}" "Dungeon Crawl Stone Soup (DCSS) ${SLOT}" "${PN}-${SLOT}"
+ fi
+}
+
+pkg_postinst() {
+ xdg_icon_cache_update
+
+ elog "crawl is a slotted install that supports having"
+ elog "multiple versions installed. The binary has the"
+ elog "slot appended, e.g. 'crawl-"${SLOT}"'."
+
+ if use tiles && use ncurses ; then
+ elog
+ elog "Since you have enabled both tiles and ncurses frontends"
+ elog "the ncurses binary is called 'crawl-ncurses-"${SLOT}"' and the"
+ elog "tiles binary is called 'crawl-"${SLOT}"'."
+ fi
+}
+
+pkg_postrm() {
+ xdg_icon_cache_update
+}
diff --git a/games-roguelike/stone-soup/stone-soup-0.34.0-r1.ebuild b/games-roguelike/stone-soup/stone-soup-0.34.0-r1.ebuild
new file mode 100644
index 000000000000..5d50ba8004a7
--- /dev/null
+++ b/games-roguelike/stone-soup/stone-soup-0.34.0-r1.ebuild
@@ -0,0 +1,241 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# There are many slots for this package because people in the community
+# like to play old versions. Every release includes content changes
+# where species/spells/monsters are added or removed. The public
+# servers (e.g. http://crawl.akrasiac.org:8080) usually support playing
+# versions back to 0.11.
+
+# It's not necessary for Gentoo to support these old version but it's
+# something nice that our distro can offer that others don't. If the
+# maintenance burden becomes excessive than we can revisit that
+# position.
+
+EAPI=8
+
+LUA_COMPAT=( lua5-{1,3,4} luajit )
+LUA_REQ_USE="deprecated"
+PYTHON_COMPAT=( python3_{13..14} )
+VIRTUALX_REQUIRED="manual"
+inherit desktop python-any-r1 lua-single xdg-utils toolchain-funcs
+
+DESCRIPTION="Role-playing roguelike game of exploration and treasure-hunting in dungeons"
+HOMEPAGE="https://crawl.develz.org"
+
+# Leave empty string if not a _pre release
+COMMITSHA=""
+if [ -z "${COMMITSHA}" ]; then
+ # This is a tagged release
+ # Note the archive URI and file layout changed upstream between 0.29.0 and 0.29.1
+ SRC_URI="
+ https://github.com/crawl/crawl/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz
+ "
+ MY_P="crawl-${PV}/crawl-ref"
+else
+ # This is a _pre release
+ SRC_URI="
+ https://github.com/crawl/crawl/archive/${COMMITSHA}.tar.gz -> ${P}.tar.gz
+ "
+ MY_P="crawl-${COMMITSHA}/crawl-ref"
+fi
+# MY_SLOT to satisfy pkgcheck variable order checking
+MY_SLOT="0.34"
+SRC_URI="
+ ${SRC_URI}
+ https://dev.gentoo.org/~stasibear/distfiles/${PN}.png -> ${PN}-${MY_SLOT}.png
+ https://dev.gentoo.org/~stasibear/distfiles/${PN}.svg -> ${PN}-${MY_SLOT}.svg
+"
+
+S=${WORKDIR}/${MY_P}/source
+# 3-clause BSD: mt19937ar.cc, MSVC/stdint.h
+# 2-clause BSD: all contributions by Steve Noonan and Jesse Luehrs
+# Public Domain|CC0: most of tiles
+# MIT: json.cc/json.h, some .js files in webserver/static/scripts/contrib/
+LICENSE="GPL-2 BSD BSD-2 public-domain CC0-1.0 MIT"
+SLOT="${MY_SLOT}"
+KEYWORDS="amd64 x86"
+IUSE="advpng debug ncurses sound test +tiles"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="${LUA_REQUIRED_USE}"
+
+RDEPEND="
+ ${LUA_DEPS}
+ dev-db/sqlite:3
+ virtual/zlib:=
+ !ncurses? ( !tiles? ( sys-libs/ncurses:0 ) )
+ ncurses? ( sys-libs/ncurses:0 )
+ tiles? (
+ media-fonts/dejavu
+ media-libs/freetype:2
+ media-libs/libpng:0
+ sound? (
+ media-libs/libsdl2[X,opengl,sound,video]
+ media-libs/sdl2-mixer
+ )
+ !sound? ( media-libs/libsdl2[X,opengl,video] )
+ media-libs/sdl2-image[png]
+ virtual/glu
+ virtual/opengl
+ )"
+DEPEND="${RDEPEND}
+ test? ( <dev-cpp/catch-3.0.0:0 )
+ tiles? (
+ sys-libs/ncurses:0
+ )
+ "
+BDEPEND="
+ app-arch/unzip
+ dev-lang/perl
+ ${PYTHON_DEPS}
+ $(python_gen_any_dep 'dev-python/pyyaml[${PYTHON_USEDEP}]')
+ app-alternatives/lex
+ tiles? (
+ advpng? (
+ app-arch/advancecomp
+ )
+ !advpng? (
+ media-gfx/pngcrush
+ )
+ )
+ virtual/pkgconfig
+ app-alternatives/yacc
+ "
+
+PATCHES=(
+ "${FILESDIR}"/make-v3.patch
+ "${FILESDIR}"/rltiles-make.patch
+ "${FILESDIR}"/avoid-musl-execinfo.patch
+)
+
+python_check_deps() {
+ python_has_version "dev-python/pyyaml[${PYTHON_USEDEP}]"
+}
+
+pkg_setup() {
+ python-any-r1_pkg_setup
+
+ if use !ncurses && use !tiles ; then
+ ewarn "Neither ncurses nor tiles frontend"
+ ewarn "selected, choosing ncurses only."
+ ewarn "Note that you can also enable both."
+ fi
+
+ if use sound && use !tiles ; then
+ ewarn "Sound support is only available with tiles."
+ fi
+}
+
+src_prepare() {
+ default
+ python_fix_shebang "${S}/util/species-gen.py"
+
+ if use advpng; then
+ eapply "${FILESDIR}/make-advpng.patch"
+ fi
+
+ sed -i -e "s/GAME = crawl$/GAME = crawl-${SLOT}/" "${S}/Makefile" \
+ || die "Couldn't append slot to executable name"
+
+ # File required for a _pre build
+ if ! [ -f "${S}/util/release_ver" ]; then
+ echo "${SLOT}" >"${S}/util/release_ver" || die "Couldn't write release_ver"
+ fi
+
+ # Replace bundled catch2 package with system implementation
+ # https://bugs.gentoo.org/829950
+ if use test; then
+ cp /usr/include/catch2/catch.hpp "${S}/catch2-tests" || die "Couldn't substitute system catch2"
+ fi
+}
+
+src_compile() {
+
+ # Insurance that we're not using bundled lib sources
+ rm -rf contrib || die "Couldn't delete contrib directory"
+
+ myemakeargs=(
+ $(usex debug "FULLDEBUG=y DEBUG=y" "")
+ BUILD_LUA=
+ AR="$(tc-getAR)"
+ CFOPTIMIZE=''
+ # -DLUA_COMPAT_OPENLIB=1 is required to enable the
+ # deprecated (in 5.1) luaL_openlib API (#869671)
+ CFOTHERS="${CXXFLAGS} -DLUA_COMPAT_OPENLIB=1"
+ CONTRIBS=
+ DATADIR="/usr/share/${PN}-${SLOT}"
+ FORCE_CC="$(tc-getCC)"
+ FORCE_CXX="$(tc-getCXX)"
+ LDFLAGS="${LDFLAGS}"
+ MAKEOPTS="${MAKEOPTS}"
+ PKGCONFIG="$(tc-getPKG_CONFIG)"
+ RANLIB="$(tc-getRANLIB)"
+ SAVEDIR="~/.crawl-${SLOT}"
+ SOUND=$(usex sound "y" "")
+ STRIP=touch
+ USE_LUAJIT=
+ V=1
+ prefix="/usr"
+ )
+
+ if use ncurses || (use !ncurses && use !tiles) ; then
+ emake "${myemakeargs[@]}"
+ # move it in case we build both variants
+ use tiles && { mv "crawl-${SLOT}" "${WORKDIR}"/crawl-ncurses-${SLOT} || die ;}
+ fi
+
+ if use tiles ; then
+ emake "${myemakeargs[@]}" clean
+ emake "${myemakeargs[@]}" "TILES=y"
+ fi
+}
+
+src_test() {
+ emake "${myemakeargs[@]}" \
+ $(usex tiles "TILES=y" "") \
+ catch2-tests
+}
+
+src_install() {
+ emake "${myemakeargs[@]}" \
+ $(usex tiles "TILES=y" "") \
+ DESTDIR="${D}" \
+ prefix_fp="" \
+ bin_prefix="${D}/usr/bin" \
+ install
+
+ [[ -e "${WORKDIR}/crawl-ncurses-${SLOT}" ]] && dobin "${WORKDIR}/crawl-ncurses-${SLOT}"
+
+ # don't relocate docs, needed at runtime
+ rm -rf "${D}/usr/share/${PN}-${SLOT}"/docs/license
+
+ mv "${WORKDIR}/${MY_P}"/docs/crawl.6 "${WORKDIR}/${MY_P}/docs/crawl-${SLOT}.6" \
+ || die "Couldn't append slot to man page name"
+ doman "${WORKDIR}/${MY_P}/docs/crawl-${SLOT}.6"
+
+ # icons and menu for graphical build
+ if use tiles ; then
+ doicon -s 48 "${DISTDIR}"/${PN}-${SLOT}.png
+ doicon -s scalable "${DISTDIR}"/${PN}-${SLOT}.svg
+ make_desktop_entry "crawl-${SLOT}" "Dungeon Crawl Stone Soup (DCSS) ${SLOT}" "${PN}-${SLOT}"
+ fi
+}
+
+pkg_postinst() {
+ xdg_icon_cache_update
+
+ elog "crawl is a slotted install that supports having"
+ elog "multiple versions installed. The binary has the"
+ elog "slot appended, e.g. 'crawl-"${SLOT}"'."
+
+ if use tiles && use ncurses ; then
+ elog
+ elog "Since you have enabled both tiles and ncurses frontends"
+ elog "the ncurses binary is called 'crawl-ncurses-"${SLOT}"' and the"
+ elog "tiles binary is called 'crawl-"${SLOT}"'."
+ fi
+}
+
+pkg_postrm() {
+ xdg_icon_cache_update
+}
diff --git a/games-roguelike/stone-soup/stone-soup-0.34.1.ebuild b/games-roguelike/stone-soup/stone-soup-0.34.1.ebuild
new file mode 100644
index 000000000000..86f2f5ee6d59
--- /dev/null
+++ b/games-roguelike/stone-soup/stone-soup-0.34.1.ebuild
@@ -0,0 +1,241 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# There are many slots for this package because people in the community
+# like to play old versions. Every release includes content changes
+# where species/spells/monsters are added or removed. The public
+# servers (e.g. http://crawl.akrasiac.org:8080) usually support playing
+# versions back to 0.11.
+
+# It's not necessary for Gentoo to support these old version but it's
+# something nice that our distro can offer that others don't. If the
+# maintenance burden becomes excessive than we can revisit that
+# position.
+
+EAPI=8
+
+LUA_COMPAT=( lua5-{1,3,4} luajit )
+LUA_REQ_USE="deprecated"
+PYTHON_COMPAT=( python3_{13..14} )
+VIRTUALX_REQUIRED="manual"
+inherit desktop python-any-r1 lua-single xdg-utils toolchain-funcs
+
+DESCRIPTION="Role-playing roguelike game of exploration and treasure-hunting in dungeons"
+HOMEPAGE="https://crawl.develz.org"
+
+# Leave empty string if not a _pre release
+COMMITSHA=""
+if [ -z "${COMMITSHA}" ]; then
+ # This is a tagged release
+ # Note the archive URI and file layout changed upstream between 0.29.0 and 0.29.1
+ SRC_URI="
+ https://github.com/crawl/crawl/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz
+ "
+ MY_P="crawl-${PV}/crawl-ref"
+else
+ # This is a _pre release
+ SRC_URI="
+ https://github.com/crawl/crawl/archive/${COMMITSHA}.tar.gz -> ${P}.tar.gz
+ "
+ MY_P="crawl-${COMMITSHA}/crawl-ref"
+fi
+# MY_SLOT to satisfy pkgcheck variable order checking
+MY_SLOT="0.34"
+SRC_URI="
+ ${SRC_URI}
+ https://dev.gentoo.org/~stasibear/distfiles/${PN}.png -> ${PN}-${MY_SLOT}.png
+ https://dev.gentoo.org/~stasibear/distfiles/${PN}.svg -> ${PN}-${MY_SLOT}.svg
+"
+
+S=${WORKDIR}/${MY_P}/source
+# 3-clause BSD: mt19937ar.cc, MSVC/stdint.h
+# 2-clause BSD: all contributions by Steve Noonan and Jesse Luehrs
+# Public Domain|CC0: most of tiles
+# MIT: json.cc/json.h, some .js files in webserver/static/scripts/contrib/
+LICENSE="GPL-2 BSD BSD-2 public-domain CC0-1.0 MIT"
+SLOT="${MY_SLOT}"
+KEYWORDS="~amd64 ~x86"
+IUSE="advpng debug ncurses sound test +tiles"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="${LUA_REQUIRED_USE}"
+
+RDEPEND="
+ ${LUA_DEPS}
+ dev-db/sqlite:3
+ virtual/zlib:=
+ !ncurses? ( !tiles? ( sys-libs/ncurses:0 ) )
+ ncurses? ( sys-libs/ncurses:0 )
+ tiles? (
+ media-fonts/dejavu
+ media-libs/freetype:2
+ media-libs/libpng:0
+ sound? (
+ media-libs/libsdl2[X,opengl,sound,video]
+ media-libs/sdl2-mixer
+ )
+ !sound? ( media-libs/libsdl2[X,opengl,video] )
+ media-libs/sdl2-image[png]
+ virtual/glu
+ virtual/opengl
+ )"
+DEPEND="${RDEPEND}
+ test? ( <dev-cpp/catch-3.0.0:0 )
+ tiles? (
+ sys-libs/ncurses:0
+ )
+ "
+BDEPEND="
+ app-arch/unzip
+ dev-lang/perl
+ ${PYTHON_DEPS}
+ $(python_gen_any_dep 'dev-python/pyyaml[${PYTHON_USEDEP}]')
+ app-alternatives/lex
+ tiles? (
+ advpng? (
+ app-arch/advancecomp
+ )
+ !advpng? (
+ media-gfx/pngcrush
+ )
+ )
+ virtual/pkgconfig
+ app-alternatives/yacc
+ "
+
+PATCHES=(
+ "${FILESDIR}"/make-v3.patch
+ "${FILESDIR}"/rltiles-make.patch
+ "${FILESDIR}"/avoid-musl-execinfo.patch
+)
+
+python_check_deps() {
+ python_has_version "dev-python/pyyaml[${PYTHON_USEDEP}]"
+}
+
+pkg_setup() {
+ python-any-r1_pkg_setup
+
+ if use !ncurses && use !tiles ; then
+ ewarn "Neither ncurses nor tiles frontend"
+ ewarn "selected, choosing ncurses only."
+ ewarn "Note that you can also enable both."
+ fi
+
+ if use sound && use !tiles ; then
+ ewarn "Sound support is only available with tiles."
+ fi
+}
+
+src_prepare() {
+ default
+ python_fix_shebang "${S}/util/species-gen.py"
+
+ if use advpng; then
+ eapply "${FILESDIR}/make-advpng.patch"
+ fi
+
+ sed -i -e "s/GAME = crawl$/GAME = crawl-${SLOT}/" "${S}/Makefile" \
+ || die "Couldn't append slot to executable name"
+
+ # File required for a _pre build
+ if ! [ -f "${S}/util/release_ver" ]; then
+ echo "${SLOT}" >"${S}/util/release_ver" || die "Couldn't write release_ver"
+ fi
+
+ # Replace bundled catch2 package with system implementation
+ # https://bugs.gentoo.org/829950
+ if use test; then
+ cp /usr/include/catch2/catch.hpp "${S}/catch2-tests" || die "Couldn't substitute system catch2"
+ fi
+}
+
+src_compile() {
+
+ # Insurance that we're not using bundled lib sources
+ rm -rf contrib || die "Couldn't delete contrib directory"
+
+ myemakeargs=(
+ $(usex debug "FULLDEBUG=y DEBUG=y" "")
+ BUILD_LUA=
+ AR="$(tc-getAR)"
+ CFOPTIMIZE=''
+ # -DLUA_COMPAT_OPENLIB=1 is required to enable the
+ # deprecated (in 5.1) luaL_openlib API (#869671)
+ CFOTHERS="${CXXFLAGS} -DLUA_COMPAT_OPENLIB=1"
+ CONTRIBS=
+ DATADIR="/usr/share/${PN}-${SLOT}"
+ FORCE_CC="$(tc-getCC)"
+ FORCE_CXX="$(tc-getCXX)"
+ LDFLAGS="${LDFLAGS}"
+ MAKEOPTS="${MAKEOPTS}"
+ PKGCONFIG="$(tc-getPKG_CONFIG)"
+ RANLIB="$(tc-getRANLIB)"
+ SAVEDIR="~/.crawl-${SLOT}"
+ SOUND=$(usex sound "y" "")
+ STRIP=touch
+ USE_LUAJIT=
+ V=1
+ prefix="/usr"
+ )
+
+ if use ncurses || (use !ncurses && use !tiles) ; then
+ emake "${myemakeargs[@]}"
+ # move it in case we build both variants
+ use tiles && { mv "crawl-${SLOT}" "${WORKDIR}"/crawl-ncurses-${SLOT} || die ;}
+ fi
+
+ if use tiles ; then
+ emake "${myemakeargs[@]}" clean
+ emake "${myemakeargs[@]}" "TILES=y"
+ fi
+}
+
+src_test() {
+ emake "${myemakeargs[@]}" \
+ $(usex tiles "TILES=y" "") \
+ catch2-tests
+}
+
+src_install() {
+ emake "${myemakeargs[@]}" \
+ $(usex tiles "TILES=y" "") \
+ DESTDIR="${D}" \
+ prefix_fp="" \
+ bin_prefix="${D}/usr/bin" \
+ install
+
+ [[ -e "${WORKDIR}/crawl-ncurses-${SLOT}" ]] && dobin "${WORKDIR}/crawl-ncurses-${SLOT}"
+
+ # don't relocate docs, needed at runtime
+ rm -rf "${D}/usr/share/${PN}-${SLOT}"/docs/license
+
+ mv "${WORKDIR}/${MY_P}"/docs/crawl.6 "${WORKDIR}/${MY_P}/docs/crawl-${SLOT}.6" \
+ || die "Couldn't append slot to man page name"
+ doman "${WORKDIR}/${MY_P}/docs/crawl-${SLOT}.6"
+
+ # icons and menu for graphical build
+ if use tiles ; then
+ doicon -s 48 "${DISTDIR}"/${PN}-${SLOT}.png
+ doicon -s scalable "${DISTDIR}"/${PN}-${SLOT}.svg
+ make_desktop_entry "crawl-${SLOT}" "Dungeon Crawl Stone Soup (DCSS) ${SLOT}" "${PN}-${SLOT}"
+ fi
+}
+
+pkg_postinst() {
+ xdg_icon_cache_update
+
+ elog "crawl is a slotted install that supports having"
+ elog "multiple versions installed. The binary has the"
+ elog "slot appended, e.g. 'crawl-"${SLOT}"'."
+
+ if use tiles && use ncurses ; then
+ elog
+ elog "Since you have enabled both tiles and ncurses frontends"
+ elog "the ncurses binary is called 'crawl-ncurses-"${SLOT}"' and the"
+ elog "tiles binary is called 'crawl-"${SLOT}"'."
+ fi
+}
+
+pkg_postrm() {
+ xdg_icon_cache_update
+}
diff --git a/games-roguelike/tome/Manifest b/games-roguelike/tome/Manifest
new file mode 100644
index 000000000000..dd12b9356167
--- /dev/null
+++ b/games-roguelike/tome/Manifest
@@ -0,0 +1 @@
+DIST tome-2.4.0_p20251212.tar.gz 2397560 BLAKE2B 609753f4b8d7648f565567ba6ae8288a3c55554377daf39a83b65a9021ae79bb40aea4c1d8eec1b32d58a0da686b44c7b97e4e8abe3031ec0bb142fee29db892 SHA512 d30f68896dfce7992526e462be607f18fd659138a0a211361aefcc1f7e8424230d92e451cc7c55c9a8a4dd8105cdb39461cc2c52782c688629cd43773987b783
diff --git a/games-roguelike/tome/metadata.xml b/games-roguelike/tome/metadata.xml
new file mode 100644
index 000000000000..183ecc5ceeeb
--- /dev/null
+++ b/games-roguelike/tome/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>games@gentoo.org</email>
+ <name>Gentoo Games Project</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/games-roguelike/tome/tome-2.4.0_p20251212.ebuild b/games-roguelike/tome/tome-2.4.0_p20251212.ebuild
new file mode 100644
index 000000000000..1d1a9270e3b6
--- /dev/null
+++ b/games-roguelike/tome/tome-2.4.0_p20251212.ebuild
@@ -0,0 +1,49 @@
+# Copyright 2025-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Fantasy adventure game, based on the works of J.R.R. Tolkien"
+HOMEPAGE="https://github.com/tome2/tome2"
+MY_COMMIT="8e2f6361e1a55b21e7abcf051e47a22761d41471"
+SRC_URI="https://github.com/tome2/tome2/archive/${MY_COMMIT}.tar.gz -> ${P}.tar.gz"
+S="${WORKDIR}/tome2-${MY_COMMIT}"
+
+LICENSE="Moria ToME2-theme"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="X"
+
+RDEPEND="
+ dev-libs/boost:=
+ >=dev-libs/libfmt-12:=
+ sys-libs/ncurses:=
+ X? ( x11-libs/libX11 )
+"
+DEPEND="
+ ${RDEPEND}
+ || (
+ >=dev-cpp/jsoncons-1.6.0
+ <dev-cpp/jsoncons-1.5.0
+ )
+ dev-cpp/pcg-cpp
+"
+BDEPEND="virtual/pkgconfig"
+
+src_configure() {
+ local mycmakeargs=(
+ -DSYSTEM_INSTALL=yes
+ -DBUILD_SHARED_LIBS=no
+ -DCMAKE_DISABLE_FIND_PACKAGE_X11=$(usex !X)
+ -DCMAKE_DISABLE_FIND_PACKAGE_GTK2=yes
+ -DCPM_LOCAL_PACKAGES_ONLY=yes
+ -DUSE_SYSTEM_PCG_RANDOM=yes
+ )
+ cmake_src_configure
+}
+
+src_test() {
+ "${BUILD_DIR}"/src/harness || die
+}
diff --git a/games-roguelike/tomenet/Manifest b/games-roguelike/tomenet/Manifest
new file mode 100644
index 000000000000..bc788f22d46a
--- /dev/null
+++ b/games-roguelike/tomenet/Manifest
@@ -0,0 +1 @@
+DIST tomenet-4.9.2.tar.bz2 7601198 BLAKE2B 3b7ac9264973ba04e929bbc29636ccfbd4f3ddc1990e9de50c500b58a8ae2ffd460bbde13656b834853cbbdcc89a399a0620b7069b59aa69e000af98f907ea48 SHA512 efa68b3e0ca4c090659991edf72bade09ed64de34e6dd5c6b9d562d2c24fa3fdad90b8ed5c04deab39820a8430c1149f85b24cc7fc4b943a8b980c15f91de958
diff --git a/games-roguelike/tomenet/files/tomenet-4.9.1-disable-experimental.patch b/games-roguelike/tomenet/files/tomenet-4.9.1-disable-experimental.patch
new file mode 100644
index 000000000000..02ee8bad8c90
--- /dev/null
+++ b/games-roguelike/tomenet/files/tomenet-4.9.1-disable-experimental.patch
@@ -0,0 +1,12 @@
+diff --git a/config.h b/config.h
+index 6280af8f0..f8c8ddebf 100644
+--- a/config.h
++++ b/config.h
+@@ -833,7 +833,6 @@
+ /*
+ * Use the new meta scheme to do neater things
+ */
+-#define EXPERIMENTAL_META
+ #ifdef EXPERIMENTAL_META
+ /* Retrieve ping times for all servers listed on the meta server. - C. Blue
+ The number indicates the max number of server names we read (raw, ie duplicates included).
diff --git a/games-roguelike/tomenet/files/tomenet-4.9.2-makefile.patch b/games-roguelike/tomenet/files/tomenet-4.9.2-makefile.patch
new file mode 100644
index 000000000000..8a66a54a29bd
--- /dev/null
+++ b/games-roguelike/tomenet/files/tomenet-4.9.2-makefile.patch
@@ -0,0 +1,48 @@
+diff --git a/makefile b/makefile
+index 60129a707..45ac2639d 100644
+--- a/makefile
++++ b/makefile
+@@ -226,7 +226,7 @@ CPP = cpp
+ #So, -nostdinc will prevent the whole own comment blob of cpp to get generated
+ #in the first place, as we never asked for it:
+ #CPPFLAGS = -C -P -nostdinc
+-CPPFLAGS = -x c -E -Wp,-C,-P,-nostdinc,-Wno-format-overflow
++CPPFLAGS = -x c -E -Wp,-C,-P,-nostdinc,-Wno-format-overflow $(GENTOO_CPPFLAGS)
+
+ # gcc variant:
+ #CPP = gcc
+@@ -237,6 +237,21 @@ CPPFLAGS = -x c -E -Wp,-C,-P,-nostdinc,-Wno-format-overflow
+ # For variations with X11
+ X11BASE = /usr/X11R6
+
++# Defines
++ifdef USE_SDL
++CFLAGS += -DSOUND_SDL -I/usr/local/include/SDL2 -I/usr/include/SDL2 $(shell sdl-config --cflags)
++SDL_LIBS = $(shell sdl-config --libs) -lSDL2 -lSDL2_mixer
++endif
++
++ifdef USE_X
++CFLAGS += -DUSE_X11
++LIBS += -lX11
++endif
++
++CFLAGS += -Wall
++CFLAGS += -DUSE_GCU -D_XOPEN_SOURCE -D_DEFAULT_SOURCE -DMEXP=19937 -std=c99
++LIBS += $(shell ${PKG_CONFIG} --libs ncurses) -lcrypt -lm ${SDL_LIBS}
++
+
+ # Account editor
+ ACCEDIT_LIBS = -lncurses -lcrypt
+@@ -291,12 +306,10 @@ SERVER_EXTRA_LIBS = -lcrypt
+
+ # With SDL2
+ # With sdl2-config
+-CFLAGS = -pipe -Wall -DUSE_GCU -D_XOPEN_SOURCE -D_BSD_SOURCE -DMEXP=19937 -std=c99 -D_DEFAULT_SOURCE -DACC32 -fPIE -fsigned-char
+ # Note: -fsigned-char is important for ARM64, as there 'char' is by default unsigned, while on x86/AM64 it is by default signed!
+ # With manually set prefix
+ #CFLAGS = -pipe -Wall -DUSE_X11 -DUSE_GCU -I${X11BASE}/include -D_XOPEN_SOURCE -D_BSD_SOURCE -DMEXP=19937 -std=c99 -DSOUND_SDL -I/usr/local/include/SDL2 -I/usr/include/SDL2 -D_REENTRANT -D_DEFAULT_SOURCE -DACC32 -fPIE -Wno-format-truncation
+ # With sdl2-config
+-LIBS = -L/usr/pkg/lib -lncurses -lm
+ # With manually set prefix
+ #LIBS = -L${X11BASE}/lib -L/usr/pkg/lib -lX11 -lncurses -lm -L/usr/local/lib -L/usr/lib -pthread -lSDL2 -lSDL2_mixer
+
diff --git a/games-roguelike/tomenet/files/tomenet-server-wrapper b/games-roguelike/tomenet/files/tomenet-server-wrapper
new file mode 100644
index 000000000000..831fbfb76ed8
--- /dev/null
+++ b/games-roguelike/tomenet/files/tomenet-server-wrapper
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+TOMENET_PATH="@LIBDIR@"
+export TOMENET_PATH
+cd "${TOMENET_PATH}"
+exec tomenet.server.bin "$@"
diff --git a/games-roguelike/tomenet/files/tomenet-wrapper b/games-roguelike/tomenet/files/tomenet-wrapper
new file mode 100644
index 000000000000..71abcb79cf25
--- /dev/null
+++ b/games-roguelike/tomenet/files/tomenet-wrapper
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+if [ ! -e ~/.tomenet/.gentoo ] || [ ! -e ~/.tomenet/game ] || [ ! -e ~/.tomenet/text ] ; then
+ LIBDIR="@LIBDIR@"
+ [ -e ~/.tomenet ] || mkdir ~/.tomenet
+
+ [ -e ~/.tomenet/game ] || ln -sf "${LIBDIR}"/game ~/.tomenet/game
+ [ -e ~/.tomenet/text ] || ln -sf "${LIBDIR}"/text ~/.tomenet/text
+ cp -R "${LIBDIR}"/user "${LIBDIR}"/scpt "${LIBDIR}"/xtra ~/.tomenet/
+ [ -e ~/.tomenetrc ] || cp "${LIBDIR}"/.tomenetrc ~/.tomenetrc
+
+ touch ~/.tomenet/.gentoo
+fi
+
+TOMENET_PATH="${HOME}/.tomenet"
+export TOMENET_PATH
+cd "${TOMENET_PATH}"
+exec tomenet.bin "$@"
diff --git a/games-roguelike/tomenet/metadata.xml b/games-roguelike/tomenet/metadata.xml
new file mode 100644
index 000000000000..c436effe8a27
--- /dev/null
+++ b/games-roguelike/tomenet/metadata.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>games@gentoo.org</email>
+ <name>Gentoo Games Project</name>
+ </maintainer>
+ <use>
+ <flag name="client">Compile client</flag>
+ <flag name="server">Compile server</flag>
+ </use>
+ <longdescription lang="en">
+ TomeNET is a multiplayer fantasy dungeon exploration game based on
+ the works of J.R.R. Tolkien. It is a game that emphasizes intricate,
+ challenging, and varied gameplay over graphics. Hundreds of
+ different monsters in randomly-generated,
+ unpredictable dungeons will strive to slay you by various means,
+ and you counter - if you survive - by developing the skills of your
+ choice and wielding mighty
+ artifacts.
+ </longdescription>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/games-roguelike/tomenet/tomenet-4.9.2.ebuild b/games-roguelike/tomenet/tomenet-4.9.2.ebuild
new file mode 100644
index 000000000000..444f60a88e34
--- /dev/null
+++ b/games-roguelike/tomenet/tomenet-4.9.2.ebuild
@@ -0,0 +1,98 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+inherit desktop toolchain-funcs xdg
+
+DESCRIPTION="A MMORPG based on the works of J.R.R. Tolkien"
+HOMEPAGE="https://www.tomenet.eu"
+SRC_URI="https://www.tomenet.eu/downloads/${P}.tar.bz2"
+
+LICENSE="Moria"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="+client server +sound X"
+REQUIRED_USE="|| ( client server )"
+
+RDEPEND="sys-libs/ncurses:0
+ client? (
+ X? (
+ x11-libs/libX11
+ )
+ sound? (
+ media-libs/libsdl2[sound]
+ media-libs/sdl2-mixer[vorbis,mp3]
+ )
+ )"
+DEPEND="${RDEPEND}
+ client? ( sound? ( app-arch/p7zip ) )"
+BDEPEND="virtual/pkgconfig"
+
+S=${WORKDIR}/${P}/src
+
+PATCHES=(
+ "${FILESDIR}"/${P}-makefile.patch
+ "${FILESDIR}"/${PN}-4.9.1-disable-experimental.patch
+)
+
+src_prepare() {
+ default
+ if ! use server; then
+ rm -r ../lib/{config,data,save} || die
+ fi
+
+ sed \
+ -e "s#@LIBDIR@#${EPREFIX}/usr/share/${PN}#" \
+ "${FILESDIR}"/${PN}-wrapper > "${T}"/${PN} || die
+
+ if use server; then
+ sed \
+ -e "s#@LIBDIR@#${EPREFIX}/usr/share/${PN}#" \
+ "${FILESDIR}"/${PN}-server-wrapper > "${T}"/${PN}.server || die
+ fi
+
+ tc-export PKG_CONFIG
+}
+
+src_compile() {
+ local mytargets="$(usex client "tomenet" "") $(usex server "accedit tomenet.server" "")"
+ emake \
+ $(usex client "$(usex X "USE_X=1" "")" "") \
+ $(usex client "$(usex sound "USE_SDL=1" "")" "") \
+ CC="$(tc-getCC)" \
+ CPP="$(tc-getCPP)" \
+ GENTOO_CPPFLAGS="${CPPFLAGS}" \
+ -f makefile \
+ ${mytargets[@]}
+}
+
+src_install() {
+ dodoc ../TomeNET-Guide.txt
+
+ if use client ; then
+ newbin ${PN} ${PN}.bin
+ dobin "${T}"/${PN}
+
+ doicon -s 48 client/tomenet4.png
+ make_desktop_entry ${PN} ${PN} ${PN}4
+ fi
+
+ if use server ; then
+ newbin tomenet.server tomenet.server.bin
+ dobin "${T}"/${PN}.server accedit
+ fi
+
+ insinto "/usr/share/${PN}"
+ doins -r ../lib/*
+ doins ../.tomenetrc
+}
+
+pkg_postinst() {
+ xdg_pkg_postinst
+
+ if use sound; then
+ elog "You can get soundpacks from here:"
+ elog ' https://tomenet.eu/downloads.php'
+ elog "They must be placed inside ~/.tomenet directory."
+ fi
+}
diff --git a/games-roguelike/zangband/Manifest b/games-roguelike/zangband/Manifest
new file mode 100644
index 000000000000..7cc60746cf3e
--- /dev/null
+++ b/games-roguelike/zangband/Manifest
@@ -0,0 +1 @@
+DIST zangband-2.7.4c.tar.gz 2821355 BLAKE2B 5d541ad0e24d61000194beb6d5139b3ff5236de3e48ace9861716c953303f5b37c855c933e7aaab711ff7389a7f81e644654535f88f83cd999484d3e4254f4ad SHA512 491dfeb72b6eb34f7feaa45d5360014da8eaeccd173dd75b3f7a1c2034e4fb634817493957b75babc0d9600077a80d88529cf2e86769948fc86d05e59958356e
diff --git a/games-roguelike/zangband/files/zangband-2.7.4c-configure.patch b/games-roguelike/zangband/files/zangband-2.7.4c-configure.patch
new file mode 100644
index 000000000000..b56fed37cfdb
--- /dev/null
+++ b/games-roguelike/zangband/files/zangband-2.7.4c-configure.patch
@@ -0,0 +1,51 @@
+--- a/configure.in
++++ b/configure.in
+@@ -236,48 +236,5 @@
+ AC_CHECK_FUNCS([Tk_SetClassProcs TkpSync])
+ AC_CHECK_FUNCS([mkstemp usleep getpwuid getpwnam shmget])
+
+-dnl A nice function to test compiler options (like warnings)
+-AC_DEFUN(AC_CHECK_CC_OPT,
+-[FLAG=`echo zangband_cv_cflag_$1 | sed s/-/_/g`
+-AC_CACHE_CHECK([whether ${CC-cc} accepts $1],
+-[$FLAG],
+-[echo 'void f(void); void f(){}' > conftest.c
+-if test -z "`${CC-cc} -c ${CFLAGS} $1 conftest.c 2>&1`"; then
+- eval $FLAG=yes
+-else
+- eval $FLAG=no
+-fi])
+-if test ${!FLAG} = yes ; then
+- CFLAGS="$1 $CFLAGS"
+-fi
+-])
+-
+-dnl Check for lots of extra warning options
+-AC_CHECK_CC_OPT(-pedantic)
+-AC_CHECK_CC_OPT(-W)
+-AC_CHECK_CC_OPT(-Wall)
+-AC_CHECK_CC_OPT(-Wmissing-prototypes)
+-AC_CHECK_CC_OPT(-Wmissing-declarations)
+-AC_CHECK_CC_OPT(-Wno-long-long)
+-AC_CHECK_CC_OPT(-Wwrite-strings)
+-AC_CHECK_CC_OPT(-Wpointer-arith)
+-AC_CHECK_CC_OPT(-Wbad-function-cast)
+-AC_CHECK_CC_OPT(-Waggregate-return)
+-AC_CHECK_CC_OPT(-Wstrict-prototypes)
+-AC_CHECK_CC_OPT(-Wredundant-decls)
+-dnl AC_CHECK_CC_OPT(-Wunreachable-code)
+-AC_CHECK_CC_OPT(-Wchar-subscripts)
+-AC_CHECK_CC_OPT(-Wimplicit)
+-AC_CHECK_CC_OPT(-Wparentheses)
+-AC_CHECK_CC_OPT(-Wsequence-point)
+-AC_CHECK_CC_OPT(-Wreturn-type)
+-AC_CHECK_CC_OPT(-Wswitch)
+-AC_CHECK_CC_OPT(-Wunused)
+-AC_CHECK_CC_OPT(-Wuninitialized)
+-AC_CHECK_CC_OPT(-Wundef)
+-AC_CHECK_CC_OPT(-Wnested-externs)
+-AC_CHECK_CC_OPT(-Wdeclaration-after-statement)
+-AC_CHECK_CC_OPT(-Wsign-compare)
+-
+ AC_CONFIG_FILES([makefile])
+ AC_OUTPUT
diff --git a/games-roguelike/zangband/files/zangband-2.7.4c-makefile.patch b/games-roguelike/zangband/files/zangband-2.7.4c-makefile.patch
new file mode 100644
index 000000000000..0fb2821ecfad
--- /dev/null
+++ b/games-roguelike/zangband/files/zangband-2.7.4c-makefile.patch
@@ -0,0 +1,29 @@
+--- a/makefile.in
++++ b/makefile.in
+@@ -111,17 +111,6 @@
+ %.o: %.c
+ $(CC) $(CFLAGS) $(CPPFLAGS) $(DEFS) $< -c -o $@ $(DEFS)
+
+-##
+-## Hack - make sure the build system is consistant.
+-##
+-makefile: configure makefile.in
+- $(CONFIGURE)
+-
+-configure: configure.in
+- aclocal
+- autoheader
+- autoconf
+-
+ dirs:
+ -mkdir $(DESTDIR)
+ -mkdir $(addprefix $(DESTDIR),$(filter-out $(srcdirlist), $(dirlist)))
+@@ -205,7 +194,7 @@
+ @echo $(srcdirlist) $(srcfiles)
+
+ # Hack to remake files depending on DEFAULT_PATH
+-.default_path: makefile
++.default_path:
+ @if [ ! -r .default_path ]; then \
+ echo "$(DESTDIR)" > .default_path; \
+ fi
diff --git a/games-roguelike/zangband/files/zangband-2.7.4c-rng.patch b/games-roguelike/zangband/files/zangband-2.7.4c-rng.patch
new file mode 100644
index 000000000000..4ac1b101dc8c
--- /dev/null
+++ b/games-roguelike/zangband/files/zangband-2.7.4c-rng.patch
@@ -0,0 +1,11 @@
+--- zangband/src/z-rand.c
++++ zangband/src/z-rand.c
+@@ -168,7 +168,7 @@
+ r = (Rand_state[j] += Rand_state[Rand_place]);
+
+ /* Hack -- extract a 28-bit "random" number */
+- r = (r >> 4) / n;
++ r = ((r >> 4) & 0x0FFFFFFF) / n;
+
+ /* Advance the index */
+ Rand_place = j;
diff --git a/games-roguelike/zangband/files/zangband-2.7.4c-tinfo.patch b/games-roguelike/zangband/files/zangband-2.7.4c-tinfo.patch
new file mode 100644
index 000000000000..e9b491e070ca
--- /dev/null
+++ b/games-roguelike/zangband/files/zangband-2.7.4c-tinfo.patch
@@ -0,0 +1,12 @@
+diff '--color=auto' -Naurd zangband.orig/configure.in zangband/configure.in
+--- zangband.orig/configure.in 2004-08-01 13:23:14.000000000 +0400
++++ zangband/configure.in 2019-05-04 19:01:09.287753294 +0300
+@@ -117,6 +117,8 @@
+ # Only check termcap if we don't have GCU
+ AC_SEARCH_LIBS([tgetent], [termcap],
+ AC_DEFINE(USE_CAP, 1, [Use termcap port])))
++# tinfo may be in a separate lib
++AC_SEARCH_LIBS([keypad], [tinfow tinfo])
+
+ if test "x$with_gtk" != "xno" ; then
+ AC_SEARCH_LIBS([gtk_init_check], [gtk],
diff --git a/games-roguelike/zangband/files/zangband-2.7.4c-tk85.patch b/games-roguelike/zangband/files/zangband-2.7.4c-tk85.patch
new file mode 100644
index 000000000000..6b4eff9d30da
--- /dev/null
+++ b/games-roguelike/zangband/files/zangband-2.7.4c-tk85.patch
@@ -0,0 +1,19 @@
+--- a/configure.in
++++ b/configure.in
+@@ -141,12 +141,12 @@
+ ])
+
+ if test "x$with_tcltk" != "xno" ; then
+- AC_SEARCH_LIBS([Tcl_Init], [tcl84 tcl8.4 tcl83 tcl8.3],
+- AC_SEARCH_LIBS([Tk_Init], [tk84 tk8.4 tk83 tk8.3],
+- [AC_SEARCH_HEADERS(/usr/local/include/tcl.h /usr/local/include/tcl/tcl.h /usr/include/tcl.h /usr/include/tcl8.4/tcl.h /usr/local/include/tcl8.4/tcl.h /usr/include/tcl8.3/tcl.h /usr/local/include/tcl8.3/tcl.h
++ AC_SEARCH_LIBS([Tcl_Init], [tcl86 tcl8.6 tcl85 tcl8.5 tcl84 tcl8.4 tcl83 tcl8.3],
++ AC_SEARCH_LIBS([Tk_Init], [tk86 tk8.6 tk85 tk8.5 tk84 tk8.4 tk83 tk8.3],
++ [AC_SEARCH_HEADERS(/usr/local/include/tcl.h /usr/local/include/tcl/tcl.h /usr/include/tcl.h /usr/include/tcl8.5/tcl.h /usr/include/tcl8.4/tcl.h /usr/local/include/tcl8.4/tcl.h /usr/include/tcl8.3/tcl.h /usr/local/include/tcl8.3/tcl.h
+ ,BASE_TCL_DIR)
+
+- AC_SEARCH_HEADERS("$BASE_TCL_DIR/tk.h" /usr/local/include/tk.h /usr/local/include/tcl/tk.h /usr/include/tk.h /usr/include/tk8.4/tk.h /usr/local/include/tk8.4/tk.h /usr/include/tk8.3/tk.h /usr/local/include/tk8.3/tk.h
++ AC_SEARCH_HEADERS("$BASE_TCL_DIR/tk.h" /usr/local/include/tk.h /usr/local/include/tcl/tk.h /usr/include/tk.h /usr/include/tk8.6/tk.h /usr/include/tk8.5/tk.h /usr/include/tk8.4/tk.h /usr/local/include/tk8.4/tk.h /usr/include/tk8.3/tk.h /usr/local/include/tk8.3/tk.h
+ ,BASE_TK_DIR)
+
+ dnl Checks for libraries.
diff --git a/games-roguelike/zangband/metadata.xml b/games-roguelike/zangband/metadata.xml
new file mode 100644
index 000000000000..183ecc5ceeeb
--- /dev/null
+++ b/games-roguelike/zangband/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>games@gentoo.org</email>
+ <name>Gentoo Games Project</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/games-roguelike/zangband/zangband-2.7.4c-r1.ebuild b/games-roguelike/zangband/zangband-2.7.4c-r1.ebuild
new file mode 100644
index 000000000000..900c08ca15d6
--- /dev/null
+++ b/games-roguelike/zangband/zangband-2.7.4c-r1.ebuild
@@ -0,0 +1,82 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools
+
+DESCRIPTION="An enhanced version of the Roguelike game Angband"
+HOMEPAGE="https://wiki.gentoo.org/wiki/No_homepage"
+SRC_URI="ftp://ftp.sunet.se/pub/games/Angband/Variant/ZAngband/${P}.tar.gz"
+S="${WORKDIR}"/${PN}
+
+LICENSE="Moria"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="tk"
+
+RDEPEND="
+ acct-group/gamestat
+ sys-libs/ncurses:=
+ x11-libs/libX11
+ x11-libs/libXaw
+ x11-libs/libXt
+ tk? (
+ dev-lang/tcl:=
+ dev-lang/tk:=
+ )
+"
+DEPEND="
+ ${RDEPEND}
+ x11-base/xorg-proto
+"
+BDEPEND="acct-group/gamestat"
+
+DOCS=( readme z_faq.txt z_update.txt )
+
+PATCHES=(
+ "${FILESDIR}"/${P}-tk85.patch
+ "${FILESDIR}"/${P}-rng.patch
+ "${FILESDIR}"/${P}-tinfo.patch
+ "${FILESDIR}"/${P}-configure.patch
+ "${FILESDIR}"/${P}-makefile.patch
+)
+
+src_prepare() {
+ default
+
+ mv configure.in configure.ac || die
+ eautoreconf
+}
+
+src_configure() {
+ local myconf=(
+ --datadir="${EPREFIX}"/var
+ --with-setgid=gamestat
+ --without-gtk
+ $(use_with tk tcltk)
+ )
+
+ econf "${myconf[@]}"
+}
+
+src_install() {
+ dodir /var/games/${PN}
+
+ # Install the basic files but remove unneeded bits to install ourselves
+ emake DESTDIR="${ED}"/var/games/${PN}/ installbase
+ # Covered via DOCS
+ rm "${ED}"/var/games/${PN}/{angdos.cfg,readme,z_faq.txt,z_update.txt} || die
+
+ # Install everything else and fix the permissions
+ dobin zangband
+
+ keepdir /var/games/zangband/lib/{bone,info,user,save,xtra/{,help,music}}
+
+ # All users in the games group need write permissions to
+ # some important dirs
+ fowners -R :gamestat /var/games/${PN}/lib/{apex,data,save,user}
+ fperms -R g+w /var/games/${PN}/lib/{apex,data,save,user}
+
+ einstalldocs
+}