How to building a package for ALT Linux.md - tx00100xt/SeriousSamClassic GitHub Wiki

Как собрать пакет для ALT Linux.

Введение

Данная реализация исходного кода предусматривает установку в системе, в каталоги /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

После установки нужно скопировать игровые данные в директории, которые мы выбрали.

Ресурсы модификаций

Получение данных Aplha Remake

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

Получение данных XPLUS

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-версия.

Если у вас есть цифровая копия игры в 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 версия.

Если вы купили цифровую версию на 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

CD версия.

Если вы купили физическую копию игры и у вас есть ISO-образ вашего диска, вы можете распаковать ресурсы любым менеджером архивов. Ресурсы игры находятся в папке Install на диске. Просто скопируйте оттуда весь контент (кроме директории Bin) в каталоги ~/.local/share/Serious-Engine/serioussam и ~/.local/share/Serious-Engine/serioussamse соответственно для игр Serious Sam: The First Encounter и Serious Sam: The Second Сталкиваться.

Запускаем игру.

Для запуска игры введите в консоли:

serioussam

или

serioussamse

Также можно воспользоваться запуском игры через меню:

menu1

Проверяем запуск игры:

menu2 menu3

⚠️ **GitHub.com Fallback** ⚠️