How to building a package for ALT Linux.md - tx00100xt/SeriousSamClassic GitHub Wiki
Данная реализация исходного кода предусматривает установку в системе, в каталоги /usr/bin, /usr/lib, /usr/share.
Во время запуска игры движок определяет место запуска, и если запуск произошел из каталога /usr/bin, то переходит в режим поиска библиотек в системных каталогах. Также добавляет поиск игровых данных в различных каталогах. О поиске игровых данных будет написано ниже.
В противном случае движок считает, что произошел локальный запуск игры и будет искать игровые данные в корневом каталоге игры. Пользовательские данные, такие как настройки игры, журнал, сохранения, демки, будут находиться в:
~/.local/share/Serious-Engine/serioussam/ — для TFE ~/.local/share/Serious-Engine/serioussamse/ — для TSE
Если запустить игру с ключом +portable, то будет полноценный портативный режим и пользовательские данные, такие как настройки игры, лог, сохранения, демки также будут находиться в корневом каталоге игры.
Внутреннее название игры для Serious Sam The First Encounter — serioussam, для Serious Sam The Second Encounter — serioussamse. Эти имена изначально приняты в движке и используются, например, в сетевой игре и на мастер-сервере.
Исполняемые файлы игры находятся в папке «/usr/bin».
/usr/bin/"внутреннее имя игры"
В этом же каталоге находится выделенный сервер и утилита для создания шрифтов для игры.
/usr/bin/"внутреннее имя игры"-ded /usr/bin/"внутреннее имя игры"-mkfont
Игровые библиотеки будут искать в следующих каталогах:
/usr/lib/"внутреннее имя игры"/ /usr/lib64/"внутреннее имя игры"/ /usr/lib/i386-linux-gnu/"внутреннее имя игры"/ /usr/lib/x86_64-linux-gnu/"внутреннее имя игры"/ /usr/lib/arm-linux-gnueabihf/"внутреннее имя игры"/ /usr/lib/aarch64-linux-gnu/"внутреннее имя игры"/ /usr/lib/riscv64-linux-gnu/"внутреннее имя игры"/ /usr/lib/powerpc64-linux-gnu/"внутреннее имя игры"/ /usr/lib/s390x-linux-gnu/"внутреннее имя игры"/
Расположение библиотек модификаций тоже по такому же принципу.
/usr/lib/"внутреннее название игры"/Mods/"имя мода"/ /usr/lib64/"внутреннее имя игры"/Mods/"имя мода"/ /usr/lib/i386-linux-gnu/"внутреннее имя игры"/Mods/"имя мода"/ /usr/lib/x86_64-linux-gnu/"внутреннее имя игры"/Mods/"имя мода"/ /usr/lib/arm-linux-gnueabihf/"внутреннее имя игры"/Mods/"Имя мода"/ /usr/lib/aarch64-linux-gnu/"внутреннее имя игры"/Mods/"имя мода"/ /usr/lib/riscv64-linux-gnu/"внутреннее имя игры"/Mods/"имя мода"/ /usr/lib/powerpc64-linux-gnu/"внутреннее имя игры"/Mods/"имя мода"/ /usr/lib/s390x-linux-gnu/"внутреннее имя игры"/Mods/"имя мода"/
Игровым библиотекам назначается суффикс, определенный в файле ModEXT.txt. Суффикс присваивается как библиотекам игр, так и библиотекам модов.
Движок библиотеки игр должен находиться в стандартной области поиска библиотеки. В одном из:
/usr/lib /usr/lib64 /usr/lib/i386-linux-gnu /usr/lib/x86_64-linux-gnu /usr/lib/arm-linux-gnueabihf /usr/lib/aarch64-linux-gnu /usr/lib/riscv64-linux-gnu /usr/lib/powerpc64-linux-gnu /usr/lib/s390x-linux-gnu
Исполняемый файл игры сначала загружает библиотеку движка, которая загружает остальные библиотеки из подкаталога с внутренним именем игры.
Чтобы получить выходные имена по соглашению, используйте ключ сборки cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr
В соответствии с соглашением об именах мы получаем следующее расположение исполняемых файлов, игровых библиотек Serious Sam The First Encounter и Serious Sam The Second Encounter для ALT LInux x86_64:
/usr/bin/serioussam /usr/bin/serioussam-ded /usr/bin/serioussam-mkfont /usr/lib64/libEngine.so /usr/lib64/serioussam/libShaders.so /usr/lib64/serioussam/libGame.so /usr/lib64/serioussam/libEntities.so /usr/lib64/serioussam/libamp11lib.so /usr/bin/serioussamse /usr/bin/serioussamse-ded /usr/bin/serioussamse-mkfont /usr/lib64/libEngineMP.so /usr/lib64/serioussamse/libShaders.so /usr/lib64/serioussamse/libGameMP.so /usr/lib64/serioussamse/libEntitiesMP.so /usr/lib64/serioussamse/libamp11lib.so
Для мода XPLUS:
/usr/lib64/serioussam/Mods/XPLUS/libGame.so /usr/lib64/serioussam/Mods/XPLUS/libEntities.so /usr/lib64/serioussamse/Mods/XPLUS/libGameMP.so /usr/lib64/serioussamse/Mods/XPLUS/libEntitiesMP.so
Для мода Serious Sam Alpha Remake (SSA):
/usr/lib64/serioussam/Mods/SSA/libGame.so /usr/lib64/serioussam/Mods/SSA/libEntities.so
Во время запуска игры движок определяет место запуска, и если запуск произошел из каталога /usr/bin, то данные игры будут искаться по рекомендованным путям. Если игровые данные не будут найдены по рекомендованным путям, то поиск будет в домашней директории, а при нахождении файлов игры путь будет записан в конфигурационный файл (не рекомендуется). Если файлы игры не найдены, появится окно сообщения.
Рекомендуемые пути для размещения игровых данных:
/usr/share/serioussam/ — для TFE /usr/share/serioussamse/ — для TSE
или
~/.local/share/Serious-Engine/serioussam/ — для TFE ~/.local/share/Serious-Engine/serioussamse/ — для TSE
Данные мода:
/usr/share/serioussam/Mods/"Имя мода" - для TFE /usr/share/serioussamse/Mods/"Имя мода" - для TSE
или
~/.local/share/Serious-Engine/serioussam/Mods/"Имя мода" - для TFE ~/.local/share/Serious-Engine/serioussamse/Mods/"Имя мода" - для TSE
Не разрешается располагать части игровых данных по разным рекомендуемым путям. Также, если вы выбрали свой собственный путь (что не рекомендуется), он должен быть единственным.
Файл SE1_10b.gro не входит в данные игры, распространяемые на компакт-дисках или в цифровых магазинах. Если вы выбрали первый рекомендуемый вариант, установите для него значение:
/usr/share/serioussam/SE1_10b.gro — для TFE /usr/share/serioussamse/SE1_10b.gro — для TSE
Если вы выбрали второй рекомендуемый вариант, то добавьте в постустановочный скрипт дополнительные строки: (Примечание: не нужно начиная с версии 1.10.5)
%post
USER_NAME=$(logname)
if test -z "$USER_NAME" ; then USER_NAME=$(loginctl user-status|awk 'NR==1{print $1}') ; fi
USER_GROUP=$(id -gn $USER_NAME)
HOME_DIR=$(cat /etc/passwd | grep $USER_NAME | sed -r 's!^[^/]+!!' | sed -r 's/:.+//')
mkdir -p $HOME_DIR/.local/share/Serious-Engine
mkdir -p $HOME_DIR/.local/share/Serious-Engine/serioussam
mkdir -p $HOME_DIR/.local/share/Serious-Engine/serioussamse
cp -rf /usr/share/serioussam/SE1_10b.gro $HOME_DIR/.local/share/Serious-Engine/serioussam
cp -rf /usr/share/serioussamse/SE1_10b.gro $HOME_DIR/.local/share/Serious-Engine/serioussamse
chown -R $USER_NAME:$USER_GROUP $HOME_DIR/.local/share/Serious-Engine
%postun
USER_NAME=$(logname)
if test -z "$USER_NAME" ; then USER_NAME=$(loginctl user-status|awk 'NR==1{print $1}') ; fi
HOME_DIR=$(cat /etc/passwd | grep $USER_NAME | sed -r 's!^[^/]+!!' | sed -r 's/:.+//')
rm -rf $HOME_DIR/.local/share/Serious-Engine/serioussam/SE1_10b.gro
rm -rf $HOME_DIR/.local/share/Serious-Engine/serioussamse/SE1_10b.gro
В качестве примера при создании пакетов и размещении данных мы выберем второй вариант рекомендуемого расположения.
Теперь, когда мы знаем, как должны располагаться исполняемые файлы, библиотеки и игровые данные, давайте приступим к сборке пакетов rpm для ALT Linux x86_64. Для работы по сборке пакетов лучше использовать отдельный компьютер или виртуальную машину.
Установим следующие пакеты:
sudo apt-get install git rpm-utils rpm-build rpm-build-licenses rpmdevtools flex
Создадим пользователя из под которого будем собирать пакеты:
sudo useradd builder -m -s /bin/bash
sudo passwd builder
Переключимся на созданного пользователя:
su - builder
Можно подредактировать файл .rpmmacros в домашнем каталоге.
nano -w .rpmmacros
Создадим каталоги для сборки пакетов:
mkdir RPM
mkdir RPM/{BUILD,RPMS,SRPMS,SPECS,SOURCES}
или
rpmdev-setuptree
Устанавливаем зависимости сборки для пакетов, которые будем собирать:
apt-get install cmake gcc-c++ libSDL2-devel libogg-devel libstdc++-devel-static libvorbis-devel rpm-macros-cmake zlib-devel python3-dev nasm
Склонируем репозитории:
git clone https://github.com/tx00100xt/SeriousSamClassic.git serioussamclassic-1.10.5
git clone https://github.com/tx00100xt/SeriousSamClassic.git serioussamclassic-xplus-1.10.5
git clone https://github.com/tx00100xt/SeriousSamAlphaRemake.git serioussamclassic-alpha-1.5.2
Уберем лишнее:
rm -rf serioussamclassic-1.10.5/.gi*
rm -rf serioussamclassic-xplus-1.10.5/.gi*
rm -rf serioussamclassic-alpha-1.5.2/.gi*
rm -rf serioussamclassic-1.10.5/Images
rm -rf serioussamclassic-xplus-1.10.5/Images
rm -rf serioussamclassic-alpha-1.5.2/Images
Создадим архивы:
tar -czvf RPM/SOURCES/serioussamclassic-1.10.5.tar.gz serioussamclassic-1.10.5
tar -czvf RPM/SOURCES/serioussamclassic-xplus-1.10.5.tar.gz serioussamclassic-xplus-1.10.5
tar -czvf RPM/SOURCES/serioussamclassic-alpha-1.5.2.tar.gz serioussamclassic-alpha-1.5.2
Скопируем туда же файл иконки:
cp -rf serioussam.png RPM/SOURCES
Создадим spec файлы:
nano -w RPM/SPECS/serioussamclassic.spec
%set_verify_elf_method unresolved=relaxed,textrel=relaxed
Name: serioussamclassic
Summary: Serious Sam Classic native Linux version
License: GPL2
Version: 1.10.5
Release: alt1
Group: Games/Arcade
Url: https://github.com/tx00100xt/SeriousSamClassic
Source: %name-%version.tar.gz
Source1: serioussam.png
BuildRequires: cmake libstdc++-devel-static rpm-macros-cmake sed flex bison
BuildRequires: zlib-devel libogg-devel libvorbis-devel glibc-devel nasm
BuildRequires: gcc-c++ python3-dev libSDL2-devel ImageMagick-tools
Requires: glibc libstdc++ zlib libogg libvorbis libSDL2 awk sed
Conflicts: serioussamclassic-vk
ExclusiveArch: %ix86 %{arm} x86_64 aarch64 e2k
%description
Open source game engine version developed by Croteam for Serious Sam Classic (Windows, Linux, FreeBSD, Raspberry Pi OS)
Playing Serious Sam: The First and Second Encounter still requires a legitimate copy of
the game. You can purchase a copy from Steam or your favorite retailer.
Place .gro game files and Levels, Help folders from the Serious Sam installation to:
$HOME/.local/share/Serious-Engine/serioussam - for Serious Sam: The First Encounter
$HOME/.local/share/Serious-Engine/serioussamse - for Serious Sam: The Second Encounter
%prep
%setup
%build
# standart x86_64 build
%ifarch x86_64
echo "ALT Linux arch x86_64"
CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr"
echo "CMAKE_ARGS $CMAKE_ARGS"
%endif
# standart i586 build
%ifarch %ix86
echo "ALT Linux arch i686"
CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_C_FLAGS=-mmmx -DCMAKE_CXX_FLAGS=-mmmx -DUSE_I386_NASM_ASM=TRUE"
echo "CMAKE_ARGS $CMAKE_ARGS"
%endif
# for raspberry pi 3b/4
%ifarch aarch64
MODEL_PI=$(cat /proc/cpuinfo | grep Model)
if [[ $MODEL_PI = *"Raspberry Pi 4"* ]]; then echo $MODEL_PI;
CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -DUSE_I386_NASM_ASM=FALSE -DRPI4=TRUE"
echo "CMAKE_ARGS $CMAKE_ARGS"
echo "Build for model Raspberry Pi4"
else
echo "CMAKE_ARGS $CMAKE_ARGS"
CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -DUSE_I386_NASM_ASM=FALSE"
echo "Stadart aarch64 build"
fi
%endif
# e2k
%ifarch e2k
echo "ALT Linux arch e2k"
CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr"
echo "CMAKE_ARGS $CMAKE_ARGS"
%endif
NCPU=`cat /proc/cpuinfo |grep vendor_id |wc -l`
if [[ $NCPU -eq 0 ]]
then
let NCPU='4'
else
let NCPU=$NCPU
fi
echo "Cores: $NCPU"
find . -name "CMakeLists.txt" -exec sed -i 's/-march=native/-mtune=generic/g' {} +
rm -rf ./%_arch-alt1-linux
mkdir ./%_arch-alt1-linux
cd $_
cmake .. $CMAKE_ARGS
make -j$NCPU
%install
mkdir -p %buildroot%_desktopdir
mkdir -p %buildroot%_bindir
mkdir -p %buildroot%_libdir/serioussam
mkdir -p %buildroot%_libdir/serioussamse
mkdir -p %buildroot%_datadir/serioussam
mkdir -p %buildroot%_datadir/serioussamse
cat > %buildroot%_desktopdir/serioussam.desktop << EOF
[Desktop Entry]
Name=Serious Sam The first Encounter
Comment=Linux port of Serious Sam Classic The First Encounter
Exec=serioussam
TryExec=serioussam
Icon=serioussam.png
Terminal=false
Type=Application
Categories=Game;
EOF
cat > %buildroot%_desktopdir/serioussamse.desktop << EOF
[Desktop Entry]
Name=Serious Sam The Second Encounter
Comment=Linux port of Serious Sam Classic The Second Encounter
Exec=serioussamse
TryExec=serioussamse
Icon=serioussam.png
Terminal=false
Type=Application
Categories=Game;
EOF
# install menu icons
for N in 16 32 48 64 128;
do
convert %SOURCE1 -scale ${N}x${N} $N.png;
install -D -m 0644 $N.png %buildroot%_iconsdir/hicolor/${N}x${N}/apps/serioussam.png
done
install -D -m0755 ./%_arch-alt1-linux/SamTFE/Sources/serioussam %buildroot%_bindir
install -D -m0755 ./%_arch-alt1-linux/SamTFE/Sources/serioussam-ded %buildroot%_bindir
install -D -m0755 ./%_arch-alt1-linux/SamTFE/Sources/serioussam-mkfont %buildroot%_bindir
install -D -m0755 ./%_arch-alt1-linux/SamTFE/Sources/Debug/libEngine.so %buildroot%_libdir/
install -D -m0755 ./%_arch-alt1-linux/SamTFE/Sources/Debug/libGame.so %buildroot%_libdir/serioussam
install -D -m0755 ./%_arch-alt1-linux/SamTFE/Sources/Debug/libEntities.so %buildroot%_libdir/serioussam
install -D -m0755 ./%_arch-alt1-linux/SamTFE/Sources/Debug/libShaders.so %buildroot%_libdir/serioussam
install -D -m0755 ./%_arch-alt1-linux/SamTFE/Sources/Debug/libamp11lib.so %buildroot%_libdir/serioussam
install -D -m0755 ./%_arch-alt1-linux/SamTSE/Sources/serioussamse %buildroot%_bindir
install -D -m0755 ./%_arch-alt1-linux/SamTSE/Sources/serioussamse-ded %buildroot%_bindir
install -D -m0755 ./%_arch-alt1-linux/SamTSE/Sources/serioussamse-mkfont %buildroot%_bindir
install -D -m0755 ./%_arch-alt1-linux/SamTSE/Sources/Debug/libEngineMP.so %buildroot%_libdir/
install -D -m0755 ./%_arch-alt1-linux/SamTSE/Sources/Debug/libGameMP.so %buildroot%_libdir/serioussamse
install -D -m0755 ./%_arch-alt1-linux/SamTSE/Sources/Debug/libEntitiesMP.so %buildroot%_libdir/serioussamse
install -D -m0755 ./%_arch-alt1-linux/SamTSE/Sources/Debug/libShaders.so %buildroot%_libdir/serioussamse
install -D -m0755 ./%_arch-alt1-linux/SamTSE/Sources/Debug/libamp11lib.so %buildroot%_libdir/serioussamse
install -D -m0755 ./SamTFE/SE1_10b.gro %buildroot%_datadir/serioussam/
install -D -m0755 ./SamTFE/SE1_10b.gro %buildroot%_datadir/serioussamse/
%files
%_bindir/serioussam
%_bindir/serioussam-ded
%_bindir/serioussam-mkfont
%_bindir/serioussamse
%_bindir/serioussamse-ded
%_bindir/serioussamse-mkfont
%_libdir/libEngine.so
%_libdir/libEngineMP.so
%_libdir/serioussam/libGame.so
%_libdir/serioussam/libEntities.so
%_libdir/serioussam/libShaders.so
%_libdir/serioussam/libamp11lib.so
%_libdir/serioussamse/libGameMP.so
%_libdir/serioussamse/libEntitiesMP.so
%_libdir/serioussamse/libShaders.so
%_libdir/serioussamse/libamp11lib.so
%_datadir/serioussam/SE1_10b.gro
%_datadir/serioussamse/SE1_10b.gro
%_desktopdir/serioussam.desktop
%_desktopdir/serioussamse.desktop
%_iconsdir/hicolor/*/apps/serioussam.png
%post
update-desktop-database
%postun
update-desktop-database
%changelog
* Mon Apr 24 2023 tx00100xt initial SPEC file.
-
nano -w RPM/SPECS/serioussamclassic-xplus.spec
%set_verify_elf_method unresolved=relaxed
Name: serioussamclassic-xplus
Summary: Serious Sam Classic native Linux modification
License: GPL2
Version: 1.10.5
Release: alt1
Group: Games/Arcade
Url: https://github.com/tx00100xt/SeriousSamClassic
Source: %name-%version.tar.gz
BuildRequires: cmake libstdc++-devel-static rpm-macros-cmake sed flex bison
BuildRequires: zlib-devel libogg-devel libvorbis-devel glibc-devel
BuildRequires: gcc-c++ python3-dev libSDL2-devel ImageMagick-tools
Requires: glibc libstdc++ zlib libogg libvorbis libSDL2 awk sed
Requires(pre): /usr/bin/serioussam /usr/bin/serioussamse
ExclusiveArch: %ix86 %{arm} x86_64 aarch64 e2k
%description
Open source nodifications based on game engine version developed by Croteam for Serious Sam Classic (Windows, Linux, FreeBSD, Raspberry Pi OS)
Playing Serious Sam: The First and Second Encounter still requires a legitimate copy of
the game. You can purchase a copy from Steam or your favorite retailer.
Place .gro game files and Levels, Help folders from the Serious Sam installation to:
$HOME/.local/share/Serious-Engine/serioussam - for Serious Sam: The First Encounter
$HOME/.local/share/Serious-Engine/serioussamse - for Serious Sam: The Second Encounter
Place Mods game files to:
$HOME/.local/share/Serious-Engine/serioussam/Mods - for Serious Sam: The First Encounter
$HOME/.local/share/Serious-Engine/serioussamse/Mods - for Serious Sam: The Second Encounter
%prep
%setup
%build
# standart x86_64 build
%ifarch x86_64
echo "ALT Linux arch x86_64"
CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr"
echo "CMAKE_ARGS $CMAKE_ARGS"
%endif
# standart i586 build
%ifarch %ix86
echo "ALT Linux arch i686"
CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_C_FLAGS=-mmmx -DCMAKE_CXX_FLAGS=-mmmx -DUSE_I386_NASM_ASM=TRUE"
echo "CMAKE_ARGS $CMAKE_ARGS"
%endif
# for raspberry pi 3b/4
%ifarch aarch64
MODEL_PI=$(cat /proc/cpuinfo | grep Model)
if [[ $MODEL_PI = *"Raspberry Pi 4"* ]]; then echo $MODEL_PI;
CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -DUSE_I386_NASM_ASM=FALSE -DRPI4=TRUE"
echo "CMAKE_ARGS $CMAKE_ARGS"
echo "Build for model Raspberry Pi4"
else
echo "CMAKE_ARGS $CMAKE_ARGS"
CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -DUSE_I386_NASM_ASM=FALSE"
echo "Stadart aarch64 build"
fi
%endif
# e2k
%ifarch e2k
echo "ALT Linux arch e2k"
CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr"
echo "CMAKE_ARGS $CMAKE_ARGS"
%endif
NCPU=`cat /proc/cpuinfo |grep vendor_id |wc -l`
if [[ $NCPU -eq 0 ]]
then
let NCPU='4'
else
let NCPU=$NCPU
fi
echo "Cores: $NCPU"
find . -name "CMakeLists.txt" -exec sed -i 's/-march=native/-mtune=generic/g' {} +
rm -rf ./%_arch-alt1-linux
mkdir ./%_arch-alt1-linux
cd $_
cmake .. $CMAKE_ARGS -DXPLUS=TRUE
make -j$NCPU
%install
mkdir -p %buildroot%_libdir/{serioussam,serioussam/Mods,serioussam/Mods/XPLUS}
mkdir -p %buildroot%_libdir/{serioussamse,serioussamse/Mods,serioussamse/Mods/XPLUS}
install -D -m0755 ./%_arch-alt1-linux/SamTFE/Sources/Debug/libGame.so %buildroot%_libdir/serioussam/Mods/XPLUS
install -D -m0755 ./%_arch-alt1-linux/SamTFE/Sources/Debug/libEntities.so %buildroot%_libdir/serioussam/Mods/XPLUS
install -D -m0755 ./%_arch-alt1-linux/SamTSE/Sources/Debug/libGameMP.so %buildroot%_libdir/serioussamse/Mods/XPLUS
install -D -m0755 ./%_arch-alt1-linux/SamTSE/Sources/Debug/libEntitiesMP.so %buildroot%_libdir/serioussamse/Mods/XPLUS
%files
%_libdir/serioussam/Mods/XPLUS/libGame.so
%_libdir/serioussam/Mods/XPLUS/libEntities.so
%_libdir/serioussamse/Mods/XPLUS/libGameMP.so
%_libdir/serioussamse/Mods/XPLUS/libEntitiesMP.so
%post
%postun
%changelog
* Mon Apr 24 2023 tx00100xt initial SPEC file.
-
nano -w RPM/SPECS/serioussamclassic-alpha.spec
%set_verify_elf_method unresolved=relaxed
Name: serioussamclassic-alpha
Summary: Serious Sam Classic native Linux modification
License: GPL2
Version: 1.5.2
Release: alt1
Group: Games/Arcade
Url: https://github.com/tx00100xt/SeriousSamAlphaRemake
Source: %name-%version.tar.gz
BuildRequires: cmake libstdc++-devel-static rpm-macros-cmake sed flex bison
BuildRequires: zlib-devel libogg-devel libvorbis-devel glibc-devel
BuildRequires: gcc-c++ python3-dev libSDL2-devel ImageMagick-tools
Requires: glibc libstdc++ zlib libogg libvorbis libSDL2 awk sed
Requires(pre): /usr/bin/serioussam /usr/bin/serioussamse
ExclusiveArch: %ix86 %{arm} x86_64 aarch64 e2k
%description
Open source nodifications based on game engine version developed by Croteam for Serious Sam Classic (Windows, Linux, FreeBSD, Raspberry Pi OS)
Playing Serious Sam: The First and Second Encounter still requires a legitimate copy of
the game. You can purchase a copy from Steam or your favorite retailer.
Place .gro game files and Levels, Help folders from the Serious Sam installation to:
$HOME/.local/share/Serious-Engine/serioussam - for Serious Sam: The First Encounter
$HOME/.local/share/Serious-Engine/serioussamse - for Serious Sam: The Second Encounter
Place Mods game files to:
$HOME/.local/share/Serious-Engine/serioussam/Mods - for Serious Sam: The First Encounter
$HOME/.local/share/Serious-Engine/serioussamse/Mods - for Serious Sam: The Second Encounter
%prep
%setup
%build
# standart x86_64 build
%ifarch x86_64
echo "ALT Linux arch x86_64"
CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr"
echo "CMAKE_ARGS $CMAKE_ARGS"
%endif
# standart i586 build
%ifarch %ix86
echo "ALT Linux arch i686"
CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_C_FLAGS=-mmmx -DCMAKE_CXX_FLAGS=-mmmx -DUSE_I386_NASM_ASM=TRUE"
echo "CMAKE_ARGS $CMAKE_ARGS"
%endif
# for raspberry pi 3b/4
%ifarch aarch64
MODEL_PI=$(cat /proc/cpuinfo | grep Model)
if [[ $MODEL_PI = *"Raspberry Pi 3 Model B"* ]] || [[ $MODEL_PI = *"Raspberry Pi 4"* ]]; then echo $MODEL_PI;
CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -DUSE_I386_NASM_ASM=FALSE -DRPI4=TRUE"
echo "CMAKE_ARGS $CMAKE_ARGS"
else echo "Unknown model PI"; exit 1; fi
%endif
# e2k
%ifarch e2k
echo "ALT Linux arch e2k"
CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr"
echo "CMAKE_ARGS $CMAKE_ARGS"
%endif
NCPU=`cat /proc/cpuinfo |grep vendor_id |wc -l`
if [[ $NCPU -eq 0 ]]
then
let NCPU='4'
else
let NCPU=$NCPU
fi
echo "Cores: $NCPU"
find . -name "CMakeLists.txt" -exec sed -i 's/-march=native/-mtune=generic/g' {} +
rm -rf ./Sources/%_arch-alt1-linux
mkdir ./Sources/%_arch-alt1-linux
cd $_
cmake .. $CMAKE_ARGS -DTFE=TRUE
make ecc
make -j$NCPU
cd ../../
%install
mkdir -p %buildroot%_libdir/{serioussam,serioussam/Mods,serioussam/Mods/SSA}
ln -sf ../../libamp11lib.so %buildroot%_libdir/serioussam/Mods/SSA/libamp11lib.so
install -D -m0755 ./Sources/%_arch-alt1-linux/Debug/libGame.so %buildroot%_libdir/serioussam/Mods/SSA
install -D -m0755 ./Sources/%_arch-alt1-linux/Debug/libEntities.so %buildroot%_libdir/serioussam/Mods/SSA
%files
%_libdir/serioussam/Mods/SSA/libGame.so
%_libdir/serioussam/Mods/SSA/libEntities.so
%_libdir/serioussam/Mods/SSA/libamp11lib.so
%post
%postun
%changelog
* Mon Apr 24 2023 tx00100xt initial SPEC file.
-
Создадим rpm пакеты:
rpmbuild -ba RPM/SPECS/serioussamclassic.spec
rpmbuild -ba RPM/SPECS/serioussamclassic-xplus.spec
rpmbuild -ba RPM/SPECS/serioussamclassic-alpha.spec
По окончанию сборки у вас будут готовые rpm пакеты в директории RPM/RPMS
Копируем пакеты в доступное место и покидаем сеанс пользователя builder
exit
Устанавливаем пакеты:
apt-get install serioussamclassic-1.10.5-alt1.x86_64.rpm
apt-get install serioussamclassic-xplus-1.10.5-alt1.x86_64.rpm
apt-get install serioussamclassic-alpha-1.5.2-alt1.x86_64.rpm
После установки нужно скопировать игровые данные в директории, которые мы выбрали.
wget https://archive.org/download/serious-sam-alpha-remake-data/SeriousSamAlphaRemake_v1.5.tar.xz
tar xJvf SeriousSamAlphaRemake_v1.5.tar.xz -C SeriousSamClassic/SamTFE
или
for var in a b c d; do wget https://github.com/tx00100xt/serioussam-mods/raw/main/SamTFE-SSA/SeriousSamAlphaRemake_v1.5.tar.xz.parta$var; done; cat SeriousSamAlphaRemake_v1.5.tar.xz.part* > SeriousSamAlphaRemake_v1.5.tar.xz
tar -xJvpf SeriousSamAlphaRemake_v1.5.tar.xz
mkdir ~/.local/share/Serious-Engine/serioussam/Mods
cp -vfr Mods/* ~/.local/share/Serious-Engine/serioussam/Mods
rm -rf Mods
wget https://archive.org/download/sam-tfe-xplus/SamTFE-XPLUS.tar.xz
wget https://archive.org/download/sam-tse-xplus/SamTSE-XPLUS.tar.xz
или
for var in a b c; do wget https://github.com/tx00100xt/serioussam-mods/raw/main/SamTFE-XPLUS/SamTFE-XPLUS.tar.xz.parta$var; done; cat SamTFE-XPLUS.tar.xz.part* > SamTFE-XPLUS.tar.xz
for var in a b c; do wget https://github.com/tx00100xt/serioussam-mods/raw/main/SamTSE-XPLUS/SamTSE-XPLUS.tar.xz.parta$var; done; cat SamTSE-XPLUS.tar.xz.part* > SamTSE-XPLUS.tar.xz
tar -xJvpf SamTFE-XPLUS.tar.xz
cp -vfr Mods/* ~/.local/share/Serious-Engine/serioussam/Mods
rm -rf Mods
tar -xJvpf SamTSE-XPLUS.tar.xz
mkdir ~/.local/share/Serious-Engine/serioussamse/Mods
cp -vfr Mods/* ~/.local/share/Serious-Engine/serioussamse/Mods
rm -rf Mods
Чтобы начать игру, вам потребуются исходные ресурсы лицензионной копии игр Serious Sam: The First Encounter и Serious Sam: The Second Encounter.
Если у вас есть цифровая копия игры в Steam, то ресурсы можно найти в ~/.local/share/Steam/steamapps/common/Serious Sam Classic The Second Encounter/ (каталог установки игры Steam по умолчанию в Linux).
rsync --progress -rh "$HOME/.local/share/Steam/steamapps/common/Serious Sam Classic The First Encounter/" "$HOME/.local/share/Serious-Engine/serioussam"
rsync --progress -rh "$HOME/.local/share/Steam/steamapps/common/Serious Sam Classic The Second Encounter/" "$HOME/.local/share/Serious-Engine/serioussamse"
Если вы купили цифровую версию на GOG, вы можете распаковать ресурсы с помощью инструмента командной строки innoextract. Чтобы установить innoextract через менеджер пакетов, запустите:
sudo apt-get install innoextract
Скопируйте файлы "setup_serious_sam_the_first_encounter_2.0.0.10.exe" и "setup_serious_sam_the_second_encounter_2.1.0.8.exe" в домашний каталог и выполните следующие команды:
cd ~/.
innoextract --gog setup_serious_sam_the_first_encounter_2.0.0.10.exe
rm -rf app/Bin
cp -vfr app/* ~/.local/share/Serious-Engine/serioussam
rm setup_serious_sam_the_first_encounter_2.0.0.10.exe
rm -rf app
rm -rf tmp
innoextract --gog setup_serious_sam_the_second_encounter_2.1.0.8.exe
rm -rf app/Bin
cp -vfr app/* ~/.local/share/Serious-Engine/serioussamse
rm setup_serious_sam_the_first_encounter_2.0.0.10.exe
rm -rf app
rm -rf tmp
rm -rf commonappdata
Если вы купили физическую копию игры и у вас есть ISO-образ вашего диска, вы можете распаковать ресурсы любым менеджером архивов. Ресурсы игры находятся в папке Install на диске. Просто скопируйте оттуда весь контент (кроме директории Bin) в каталоги ~/.local/share/Serious-Engine/serioussam и ~/.local/share/Serious-Engine/serioussamse соответственно для игр Serious Sam: The First Encounter и Serious Sam: The Second Сталкиваться.
Для запуска игры введите в консоли:
serioussam
или
serioussamse
Также можно воспользоваться запуском игры через меню:
Проверяем запуск игры: