Install this version:
emerge -a =games-fps/ut2004-data-3369
If this version is masked, you can unmask it using the autounmask tool or standard emerge options:
autounmask =games-fps/ut2004-data-3369
Or alternatively:
emerge --autounmask-write -a =games-fps/ut2004-data-3369
# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
CDROM_OPTIONAL="yes"
inherit cdrom check-reqs portability
DESCRIPTION="Data files for Unreal Tournament 2004"
HOMEPAGE="https://liandri.beyondunreal.com/Unreal_Tournament_2004"
GOG=( "setup_unreal_tournament_2004_1.0_(18947).exe" "setup_unreal_tournament_2004_1.0_(18947)-1.bin" )
SRC_URI="
!cdinstall? ( !gog? ( fetch+https://files.oldunreal.net/UT2004.ISO -> UT2004.iso ) )
gog? ( ${GOG[*]} )
megapack? ( fetch+https://unreal-archive-files-na.s3.ca-east-tor.io.cloud.ovh.net/managed/Unreal%20Tournament%202004/patches-updates/bonus-packs/ut2004megapack-linux.tar.bz2 )
"
S="${WORKDIR}"
LICENSE="Epic-TOS" # See metadata.xml for the legal background.
SLOT="0"
KEYWORDS="~amd64 ~arm64"
IUSE="megapack doc gog l10n_de l10n_es l10n_fr l10n_it l10n_ko"
RESTRICT="bindist gog? ( fetch ) mirror"
REQUIRED_USE="
?? ( cdinstall gog )
!cdinstall? ( !megapack )
"
UT_DEPEND=">=games-fps/ut2004-3374_pre23"
BDEPEND="
${UT_DEPEND}
cdinstall? ( app-arch/unshield )
gog? ( app-arch/innoextract )
!cdinstall? ( !gog? (
app-arch/libarchive
app-arch/unshield
) )
"
RDEPEND="
${UT_DEPEND}
!games-fps/ut2004-bonuspack-ece
!games-fps/ut2004-bonuspack-mega
!games-server/ut2004-ded
"
# Assuming the OldUnreal ISO.
CHECKREQS_DISK_BUILD="15G"
pkg_nofetch() {
einfo "Please download ${GOG[0]} and"
einfo "${GOG[1]} from GOG and move them"
einfo "to your distfiles directory. Note that you can no longer buy this"
einfo "game from GOG, so disable USE=\"gog\" to use OldUnreal's free ISO if"
einfo "you don't already own the game."
}
locale_mismatch() {
case "${1}" in
*.det|*.det_*|4_UT2004_*_German*) ! use l10n_de ;;
*.est|*.est_*|4_UT2004_*_Spanish) ! use l10n_es ;;
*.frt|*.frt_*|4_UT2004_*_French) ! use l10n_fr ;;
*.itt|*.itt_*|4_UT2004_*_Italian) ! use l10n_it ;;
*.kot|*.kot_*) ! use l10n_ko ;;
*) return 1 ;;
esac
}
src_unpack() {
if use gog; then
innoextract --extract "${DISTDIR}/${GOG[0]}" || die
return
elif use cdinstall; then
ewarn "It is no longer necessary to install this from CD or DVD. Please"
ewarn "disable USE=\"cdinstall\" if you would prefer to download the game for"
ewarn "free. Note that the free download lacks localised audio and some"
ewarn "localised text."
echo
else
# We might as well handle a downloaded ISO and a user-provided ISO the
# same way through cdrom.eclass.
CD_ROOT="${DISTDIR}/UT2004.iso"
fi
# No really, Midway.tga is *not* on the Midway DVD.
# The German Midway DVD doesn't include UT99.
cdrom_get_cds \
Manuals/UnrealTournament_English.pdf:autorund/unreal.ico:AutoRunData/Midway.tga:CD6/Sounds/TauntPack.det_uax.uz2:linux-installer.sh:System/UT2004.ini \
::::Textures/2K4Fonts.utx.uz2:Textures/2K4Fonts.utx.uz2 \
::::Textures/ONSDeadVehicles-TX.utx.uz2:Textures/ONSDeadVehicles-TX.utx.uz2 \
::::StaticMeshes/AlienTech.usx.uz2:StaticMeshes/AlienTech.usx.uz2 \
::::Speech/ons.xml:Speech/ons.xml \
:::::Sounds/TauntPack.det_uax.uz2
case ${CDROM_SET} in
0) einfo "Found Midway Unreal Anthology DVD" ;;
1) einfo "Found German Midway Unreal Anthology DVD" ;;
2) einfo "Found OldUnreal UT2004 DVD" ;;
3) einfo "Found UT2004 DVD (original or Editor's Choice Edition)" ;;
4) einfo "Found UT2004 CD 1 of 5" ;;
5) einfo "Found UT2004 CD 1 of 6" ;;
esac
case ${CDROM_SET} in
3|4|5)
if ! use megapack; then
die "Your installation source lacks the Mega Pack. Please enable USE=\"megapack\" to download it."
fi ;;
*)
if use megapack; then
ewarn "Enabling USE=\"megapack\" just downloads an unnecessary file with"
ewarn "this installation source. Please disable it."
fi ;;
esac
local group dir cdnum
case ${CDROM_SET} in
0|1)
# Symlinks for unshield. These files need to be in the same
# directory but on the disk, they are not for some reason.
ln -snf "${CDROM_ROOT}"/{Disk1/data1.hdr,Disk*/data*.cab} "${T}"/ || die
for group in $(unshield g "${T}"/data1.cab || die); do
case ${group} in
4_UT2004_Benchmark|4_UT2004_EXE|4_UT2004_Manual_*|4_UT2004_Web) continue ;;
4_UT2004_*) : ;;
*) continue ;;
esac
locale_mismatch "${group}" && continue
unshield -g "${group}" x "${T}"/data1.cab || die
done
for dir in 4_UT2004_*; do
mv -v "${dir}" "${dir#4_UT2004_}" || die
done
for dir in *_*/; do
mkdir -p "${dir%_*}" || die
tar -C "${dir}" --remove-files -cf - . | tar -C "${dir%_*}" -xvf - || die
done
;;
2)
# Symlinks for unshield. These files need to be in the same
# directory but on the disk, they are not for some reason.
ln -snf "${CDROM_ROOT}"/{Disk1/data1.hdr,Disk*/data*.cab} "${T}"/ || die
for group in $(unshield g "${T}"/data1.cab || die); do
case ${group} in
All_Benchmark|All_Web) continue ;;
All_*|English_Sounds_Speech_System_Help|US_License.int) : ;;
*) continue ;;
esac
unshield -g "${group}" x "${T}"/data1.cab || die
done
for dir in All_*; do
mv -v "${dir}" "${dir#All_}" || die
done
mkdir -p Sounds Speech System Help || die
mv -v UT2004.EXE/* US_License.int/* System/ || die
for dir in English_Sounds_Speech_System_Help/*/; do
mv -v "${dir}"/* "${dir#*/}" || die
done
;;
3)
for cdnum in {1..6}; do
tar -C "${CDROM_ROOT}/CD${cdnum}" --mode=u+w -cf - . | tar -xvf - || die
done
;;
4|5)
tar -C "${CDROM_ROOT}" --mode=u+w -cf - . | tar -xvf - || die
for cdnum in $(seq 2 $((CDROM_SET + 1))); do
cdrom_load_next_cd
tar -C "${CDROM_ROOT}" --mode=u+w -cf - . | tar -xvf - || die
done
;;
esac
# Some disks compress most of the files. The engine has the decompresser.
# Annoyingly, it logs to the engine's directory.
addpredict "${BROOT}"/opt/ut2004
find -name "*.uz2" -exec ut2004-ucc decompress "${PWD}"/{} -nohomedir \; -delete || die
# Install the Mega Pack where necessary for parity between different
# installation sources. This includes the ECE content but *not* the XP Bonus
# Maps (ONS-Aridoom and ONS-Ascendancy). The latter were never released as
# part of the game and OldUnreal does not include them in its installation.
case ${CDROM_SET} in
3|4|5) tar --strip-components=1 -jxvf "${DISTDIR}"/ut2004megapack-linux.tar.bz2 || die ;;
esac
}
src_install() {
local dir file
if use doc; then
case ${CDROM_SET} in
0|1)
newdoc "${CDROM_ROOT}"/Manuals/UT2004_English.pdf Manual.pdf
use l10n_de && newdoc "${CDROM_ROOT}"/Manuals/UT2004_German.pdf Manual_de.pdf
use l10n_es && newdoc "${CDROM_ROOT}"/Manuals/UT2004_Spanish.pdf Manual_es.pdf
use l10n_fr && newdoc "${CDROM_ROOT}"/Manuals/Français/UT2004.pdf Manual_fr.pdf
use l10n_it && newdoc "${CDROM_ROOT}"/Manuals/UT2004_Italian.pdf Manual_it.pdf ;;
2) dodoc "${CDROM_ROOT}"/Manual.pdf ;;
3) dodoc "${CDROM_ROOT}"/CD1/Manual/Manual.pdf ;;
*) dodoc Manual/Manual.pdf ;;
esac
fi
# Drop unwanted localisation files.
while read -r file; do
if locale_mismatch "${file}"; then
rm -v "${file}" || die
fi
done < <(find -type f)
# The OldUnreal patches currently lack localisation files for French,
# Italian, and Korean even though some editions did include these. Move them
# from System to SystemLocalized as recommended, but only if each has an
# equivalent English (.int) file. Also match the casing of the English
# filename for sanity and to avoid duplicates.
(
shopt -s extglob nocaseglob nullglob || die
local lang match
for lang in fr it ko; do
mkdir -p SystemLocalized/${lang}t || die
for file in System/*.${lang}t; do
file=${file#*/}
eval "match=( \"${BROOT}\"/opt/ut2004/SystemLocalized/int/?(${file%.*}.int) )"
if [[ -n ${match[0]} ]]; then
match=${match[0]##*/}
mv -v "System/${file}" "SystemLocalized/${lang}t/${match%.int}.${lang}t" || die
fi
done
done
)
insinto /opt/ut2004
doins -r SystemLocalized
# Drop any other non-localisation files not included in our listings for
# cleanliness and consistency between installation sources. These listings
# are (mostly) based on OldUnreal's installation.
for file in "${FILESDIR}"/listings/*; do
dir=${file##*/}
find "${dir}" -type f ! -name "*.*_uax" | grep -Fxvf <(sed "s:^:${dir}/:" "${file}") | xargs -r rm -v -- || die
done
# https://github.com/OldUnreal/UT2004Patches/issues/514
# We could regenerate the cache for the entire base game, but it's awkward,
# so just cover the missing BP2 maps in a separate file.
ut2004-ucc exportcache -mod=Gentoo Maps/*-BP2-*.ut2 || die
mv -v System/{CacheRecords,BP2}.ucl || die
for file in "${FILESDIR}"/listings/*; do
doins -r "${file##*/}"
done
for dir in CSVs Logs Results; do
keepdir /opt/ut2004/Benchmark/${dir}
done
}
Manage flags for this package:
euse -i <flag> -p games-fps/ut2004-data |
euse -E <flag> -p games-fps/ut2004-data |
euse -D <flag> -p games-fps/ut2004-data
>=games-fps/ut2004-3374_pre23 !games-fps/ut2004-bonuspack-ece !games-fps/ut2004-bonuspack-mega !games-server/ut2004-ded
>=games-fps/ut2004-3374_pre23 cdinstall? ( app-arch/unshield ) gog? ( app-arch/innoextract ) !cdinstall? ( !gog? ( app-arch/libarchive app-arch/unshield ) )
| Type | File | Size | Source URLs |
|---|---|---|---|
| DIST | UT2004.iso | 2995322880 bytes | fetch+https://files.oldunreal.net/UT2004.ISO |
| DIST | ut2004megapack-linux.tar.bz2 | 203124107 bytes | fetch+https://unreal-archive-files-na.s3.ca-east-tor.io.cloud.ovh.net/managed/Unreal%20Tournament%202004/patches-updates/bonus-packs/ut2004megapack-linux.tar.bz2 |