games/play-7-billion-humans.sh0000755000000000000000000000435514471751340015254 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2019 Mopi # SPDX-FileCopyrightText: © 2023 Antoine Le Gonidec set -o errexit ### # 7 Billion Humans # send your bug reports to vv221@dotslashplay.it ### script_version=20250429.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='7-billion-humans' GAME_NAME='7 Billion Humans' ARCHIVE_BASE_0_NAME='7_billion_humans_1_0_32487_23774.sh' ARCHIVE_BASE_0_MD5='3d42952a6b9329f1c64bda00b05c4afb' ARCHIVE_BASE_0_SIZE='160000' ARCHIVE_BASE_0_VERSION='1.0.32487-gog23774' ARCHIVE_BASE_0_URL='https://www.gog.com/game/7_billion_humans' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME_BIN64_FILES=' 7BillionHumans.bin.x86_64' CONTENT_GAME_BIN32_FILES=' 7BillionHumans.bin.x86' CONTENT_GAME_DATA_FILES=' shaders resource.pak icon.png' CONTENT_DOC_DATA_FILES=' LICENSE.txt README.linux' APP_MAIN_EXE_BIN64='7BillionHumans.bin.x86_64' APP_MAIN_EXE_BIN32='7BillionHumans.bin.x86' APP_MAIN_ICON='icon.png' PACKAGES_LIST=' PKG_BIN64 PKG_BIN32 PKG_DATA' PKG_BIN64_ARCH='64' PKG_BIN32_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libgcc_s.so.1 libm.so.6 libopenal.so.1 libpthread.so.0 libSDL2-2.0.so.0 libstdc++.so.6 libz.so.1' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run the default initialization actions initialization_default "$@" # Extract game data archive_extraction_default # Include game data content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers launchers_generation 'PKG_BIN64' launchers_generation 'PKG_BIN32' # Build packages packages_generation print_instructions # Clean up working_directory_cleanup exit 0 games/play-age-of-empires-2-expansions.sh0000755000000000000000000001551214471751340017310 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2025 Antoine Le Gonidec set -o errexit ### # Age of Empires 2 expansions: # - The Conquerors # send your bug reports to vv221@dotslashplay.it ### script_version=20260322.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='age-of-empires-2' GAME_NAME='Age of Empires II' EXPANSION_ID='the-conquerors' EXPANSION_NAME='The Conquerors' ARCHIVE_BASE_FR_0_NAME='AGE2_X1.iso' ARCHIVE_BASE_FR_0_MD5='e50d6f31de6f4a4daca15d3323cb2a51' ARCHIVE_BASE_FR_0_SIZE='473052' ARCHIVE_BASE_FR_0_VERSION='1.0-1' ARCHIVE_BASE_EN_0_NAME='AGE2_X1.iso' ARCHIVE_BASE_EN_0_MD5='82bb7757fa30328dd77d6dfed923d330' ARCHIVE_BASE_EN_0_SIZE='460046' ARCHIVE_BASE_EN_0_VERSION='1.0-1' ARCHIVE_OPTIONAL_FR_PATCH_NAME='Age2XPatch.exe' ARCHIVE_OPTIONAL_FR_PATCH_MD5='6e7f97ea81d54d0f5fe7f7ee38c2337b' ARCHIVE_OPTIONAL_FR_PATCH_TYPE='cabinet' ARCHIVE_OPTIONAL_FR_PATCH_SIZE='5460' ARCHIVE_OPTIONAL_FR_PATCH_VERSION='1.0c-1' ARCHIVE_OPTIONAL_EN_PATCH_NAME='Age2XPatch.exe' ARCHIVE_OPTIONAL_EN_PATCH_MD5='8170ef5a8fa02725dcecc230b2f172ec' ARCHIVE_OPTIONAL_EN_PATCH_TYPE='cabinet' ARCHIVE_OPTIONAL_EN_PATCH_SIZE='5467' ARCHIVE_OPTIONAL_EN_PATCH_VERSION='1.0c-1' # Files found directly on the CD-ROM CONTENT_PATH_DEFAULT='GAME' # The game crashes on launch if any of the following libraries is missing. CONTENT_LIBS_BIN_FILES=' ebueulax.dll language_x1.dll' # The game fails on launch with an empty error box if the following library is missing. CONTENT_LIBS0_BIN_FILES=' language_x1_p1.dll' CONTENT_GAME_BIN_FILES=' age2_x1/0000040c.016 age2_x1/0000040c.256 age2_x1/age2_x1.exe age2_x1/age2_x1.icd age2_x1/clokspl.exe' CONTENT_GAME_L10N_FILES=' campaign/media/intro* campaign/media/x* sound/campaign' CONTENT_GAME_DATA_FILES=' avi/age2_x1.avi campaign/xcam?.cpx data/empires2_x1.dat data/empires2_x1_p1.dat sound/stream/aztecs.mp3 sound/stream/huns.mp3 sound/stream/koreans.mp3 sound/stream/mayans.mp3 sound/stream/spanish.mp3 sound/stream/xcredits.mp3 sound/stream/xopen.mp3 sound/stream/xtown.mp3' # Files found in the cabinet archive CONTENT_GAME0_L10N_PATH='.' CONTENT_GAME0_L10N_FILES=' data/list.crx history sound/scenario taunt' CONTENT_GAME0_DATA_PATH='.' CONTENT_GAME0_DATA_FILES=' data/shadow.col data/blendomatic.dat data/view_icm.dat data/gamedata_x1.drs data/graphics.drs data/interfac.drs data/sounds_x1.drs data/terrain.drs random/random.txt sound/terrain support/support.txt' # Files found in the 1.0c patch CONTENT_LIBS1_BIN_PATH='.' CONTENT_LIBS1_BIN_FILES=' language_x1_p1.dll' CONTENT_GAME1_BIN_PATH='.' CONTENT_GAME1_BIN_FILES=' age2_x1/age2_x1.exe age2_x1/age2_x1.icd age2_x1/clokspl.exe age2_x1/secdrv.sys' CONTENT_GAME1_DATA_PATH='.' CONTENT_GAME1_DATA_FILES=' data/empires2_x1_p1.dat data/gamedata_x1_p1.drs random/*.rms' USER_PERSISTENT_DIRECTORIES=' campaign/*.cpx learn savegame scenario' USER_PERSISTENT_FILES=' data/*.dat *.nfp' # Without a WINE virtual desktop, the game menu is badly rendered. # (WINE 10.0) WINE_VIRTUAL_DESKTOP='1280x1024' APP_MAIN_ID="${GAME_ID}-${EXPANSION_ID}" APP_MAIN_NAME="${GAME_NAME}: ${EXPANSION_NAME}" APP_MAIN_EXE='age2_x1/age2_x1.exe' PACKAGES_LIST=' PKG_BIN PKG_L10N PKG_DATA' PKG_PARENT_ID="$GAME_ID" PKG_PARENT_ID_FR="${PKG_PARENT_ID}-fr" PKG_PARENT_ID_EN="${PKG_PARENT_ID}-en" PKG_BIN_ID="${GAME_ID}-${EXPANSION_ID}" PKG_BIN_ID_FR="${PKG_BIN_ID}-fr" PKG_BIN_ID_EN="${PKG_BIN_ID}-en" PKG_BIN_PROVIDES=" $PKG_BIN_ID" PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_PARENT PKG_L10N PKG_DATA' PKG_BIN_DEPENDENCIES_GSTREAMER_PLUGINS=' video/x-msvideo' PKG_L10N_ID="${GAME_ID}-${EXPANSION_ID}-l10n" PKG_L10N_ID_FR="${PKG_L10N_ID}-fr" PKG_L10N_ID_EN="${PKG_L10N_ID}-en" PKG_L10N_PROVIDES=" $PKG_L10N_ID ${GAME_ID}-l10n-common" PKG_L10N_PROVIDES_FR="$PKG_L10N_PROVIDES ${GAME_ID}-l10n-common-fr" PKG_L10N_PROVIDES_EN="$PKG_L10N_PROVIDES ${GAME_ID}-l10n-common-en" PKG_L10N_FR_DESCRIPTION='French localisation' PKG_L10N_FR_DESCRIPTION='English localisation' PKG_DATA_ID="${GAME_ID}-${EXPANSION_ID}-data" PKG_DATA_DESCRIPTION='data' PKG_DATA_PROVIDES=" ${GAME_ID}-data-common" # - cabextract is used to extract files from a cabinet archive on the CD-ROM. # - convmv is used to convert file paths to lower case. REQUIREMENTS_LIST=' cabextract convmv' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Check for the presence of the 1.0c patch. case "$(current_archive)" in ('ARCHIVE_BASE_FR_'*) archive_initialize_optional 'ARCHIVE_PATCH' 'ARCHIVE_OPTIONAL_FR_PATCH' ;; ('ARCHIVE_BASE_EN_'*) archive_initialize_optional 'ARCHIVE_PATCH' 'ARCHIVE_OPTIONAL_EN_PATCH' ;; esac if archive_is_available 'ARCHIVE_PATCH'; then export "$(current_archive)_VERSION=$(archive_version 'ARCHIVE_PATCH')" fi # Extract game data. archive_extraction_default # Convert all file paths to lowercase. # TODO: Try to get rid of the forced case conversion. tolower "$(path_archive_contents)" # Rename some files with an abbreviated file name. mv \ "$(path_archive_contents)/langua_1.dll" \ "$(path_archive_contents)/language_x1.dll" if [ -e "$(path_archive_contents)/langua_2.dll" ]; then mv \ "$(path_archive_contents)/langua_2.dll" \ "$(path_archive_contents)/language_x1_p1.dll" fi mv \ "$(path_archive_contents)/data/empire_1.dat" \ "$(path_archive_contents)/data/empires2_x1.dat" if [ -e "$(path_archive_contents)/empire_2.dll" ]; then mv \ "$(path_archive_contents)/data/empire_2.dat" \ "$(path_archive_contents)/data/empires2_x1_p1.dat" fi # Extract files from the cabinet archive. ARCHIVE_CABINET_PATH="${PLAYIT_WORKDIR}/gamedata/MSGAME.CAB" ARCHIVE_CABINET_TYPE='cabinet' archive_extraction 'ARCHIVE_CABINET' rm "$ARCHIVE_CABINET_PATH" # Extract files from the 1.0c patch. if archive_is_available 'ARCHIVE_PATCH'; then archive_extraction 'ARCHIVE_PATCH' fi # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --symbolic "$dll_source" "$dll_destination" done EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-age-of-empires-2.sh0000755000000000000000000001717214471751340015127 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2025 Antoine Le Gonidec set -o errexit ### # Age of Empires 2 # send your bug reports to vv221@dotslashplay.it ### script_version=20260322.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='age-of-empires-2' GAME_NAME='Age of Empires II: The Age of Kings' ARCHIVE_BASE_FR_0_NAME='AOE2.iso' ARCHIVE_BASE_FR_0_MD5='d5ff1494615233c7eb3d6ddc61930a40' ARCHIVE_BASE_FR_0_SIZE='483970' ARCHIVE_BASE_FR_0_VERSION='1.0-1' ARCHIVE_BASE_EN_0_NAME='AOE2.iso' ARCHIVE_BASE_EN_0_MD5='8153250ca4c15b1979c3899f986f2627' ARCHIVE_BASE_EN_0_SIZE='471713' ARCHIVE_BASE_EN_0_VERSION='1.0-1' ARCHIVE_OPTIONAL_FR_PATCH_NAME='Age2upA-FRN1.exe' ARCHIVE_OPTIONAL_FR_PATCH_MD5='f632bf26464cad1212588fc817599bae' ARCHIVE_OPTIONAL_FR_PATCH_TYPE='cabinet' ARCHIVE_OPTIONAL_FR_PATCH_SIZE='3849' ARCHIVE_OPTIONAL_FR_PATCH_VERSION='2.0c-1' ARCHIVE_OPTIONAL_EN_PATCH_NAME='Age2upA.exe' ARCHIVE_OPTIONAL_EN_PATCH_MD5='20b9fd4ebd51d0375882f4f510ca7c36' ARCHIVE_OPTIONAL_EN_PATCH_TYPE='cabinet' ARCHIVE_OPTIONAL_EN_PATCH_SIZE='3843' ARCHIVE_OPTIONAL_EN_PATCH_VERSION='2.0c-1' # Files found directly on the CD-ROM CONTENT_PATH_DEFAULT='GAME' # The game crashes on launch if the following library is missing. CONTENT_LIBS_BIN_FILES=' language.dll' CONTENT_GAME_BIN_FILES=' empires2.exe empires2.icd' CONTENT_GAME_L10N_FILES=' campaign/media/backgrd* campaign/media/c* sound/campaign' CONTENT_GAME_L10N_COMMON_FILES=' campaign/media/intro*' CONTENT_GAME_DATA_FILES=' avi data sound/stream' # Files found in the cabinet archive # The game crashes on launch if the following library is missing. CONTENT_LIBS0_BIN_PATH='.' CONTENT_LIBS0_BIN_FILES=' ebueula.dll' CONTENT_GAME0_BIN_PATH='.' CONTENT_GAME0_BIN_FILES=' data/closedpw.exe' CONTENT_GAME0_L10N_PATH='.' CONTENT_GAME0_L10N_FILES=" data/list.cr history sound/scenario taunt/01 yes.mp3 taunt/02 no.mp3 taunt/07 ahh.mp3 taunt/08 all hail.mp3 taunt/09 oooh.mp3 taunt/10 back to age 1.mp3 taunt/11 herb laugh.mp3 taunt/12 being rushed.mp3 taunt/13 blame your isp.mp3 taunt/14 start the game.mp3 taunt/15 don't point that thing.mp3 taunt/16 enemy sighted.mp3 taunt/17 it is good.mp3 taunt/18 i need a monk.mp3 taunt/19 long time no siege.mp3 taunt/20 my granny.mp3 taunt/21 nice town i'll take it.mp3 taunt/22 quit touchin.mp3 taunt/23 raiding party.mp3 taunt/24 dadgum.mp3 taunt/25 smite me.mp3 taunt/26 the wonder.mp3 taunt/27 you play 2 hours.mp3 taunt/28 you should see the other guy.mp3 taunt/29 roggan.mp3 taunt/30 wololo.mp3" CONTENT_GAME0_L10N_COMMON_PATH='.' CONTENT_GAME0_L10N_COMMON_FILES=' taunt/03 food, please.mp3 taunt/04 wood, please.mp3 taunt/05 gold, please.mp3 taunt/06 stone, please.mp3' CONTENT_GAME0_DATA_PATH='.' CONTENT_GAME0_DATA_FILES=' ai campaign data/load data/blkedge.dat data/filtermaps.dat data/lightmaps.dat data/loqmaps.dat data/patternmasks.dat data/stemplet.dat data/tileedge.dat data/gamedata.drs data/sounds.drs learn savegame scenario sound/terrain scenariobkg.bmp' CONTENT_GAME_DATA_COMMON_PATH='.' CONTENT_GAME_DATA_COMMON_FILES=' data/shadow.col data/blendomatic.dat data/view_icm.dat data/graphics.drs data/interfac.drs data/terrain.drs' # Files found in the 2.0c patch CONTENT_GAME1_BIN_PATH='.' CONTENT_GAME1_BIN_FILES=' empires2.exe empires2.icd' CONTENT_GAME1_DATA_PATH='.' CONTENT_GAME1_DATA_FILES=' data/gamedata.drs' USER_PERSISTENT_DIRECTORIES=' campaign/*.cpn learn savegame scenario' USER_PERSISTENT_FILES=' data/*.dat *.nfp' # Without a WINE virtual desktop, the game menu is badly rendered. # (WINE 10.0) WINE_VIRTUAL_DESKTOP='1280x1024' APP_MAIN_EXE='empires2.exe' APP_MAIN_ICON='../48256.ICO' PACKAGES_LIST=' PKG_BIN PKG_L10N PKG_L10N_COMMON PKG_DATA PKG_DATA_COMMON' PKG_BIN_ID="$GAME_ID" PKG_BIN_ID_FR="${PKG_BIN_ID}-fr" PKG_BIN_ID_EN="${PKG_BIN_ID}-en" PKG_BIN_PROVIDES=" $PKG_BIN_ID" PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_L10N PKG_L10N_COMMON PKG_DATA' PKG_BIN_DEPENDENCIES_GSTREAMER_PLUGINS=' video/x-msvideo' PKG_L10N_ID="${GAME_ID}-l10n" PKG_L10N_ID_FR="${PKG_L10N_ID}-fr" PKG_L10N_ID_EN="${PKG_L10N_ID}-en" PKG_L10N_PROVIDES=" $PKG_L10N_ID" PKG_L10N_DESCRIPTION_FR='French localisation' PKG_L10N_DESCRIPTION_EN='English localisation' PKG_L10N_DEPENDENCIES_SIBLINGS=' PKG_L10N_COMMON' PKG_L10N_COMMON_ID="${PKG_L10N_ID}-common" PKG_L10N_COMMON_ID_FR="${PKG_L10N_COMMON_ID}-fr" PKG_L10N_COMMON_ID_EN="${PKG_L10N_COMMON_ID}-en" PKG_L10N_COMMON_PROVIDES=" $PKG_L10N_COMMON_ID" PKG_L10N_COMMON_DESCRIPTION_FR='French localisation - files shared between the base game and the expansion' PKG_L10N_COMMON_DESCRIPTION_EN='English localisation - files shared between the base game and the expansion' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' PKG_DATA_DEPENDENCIES_SIBLINGS=' PKG_DATA_COMMON' PKG_DATA_COMMON_ID="${PKG_DATA_ID}-common" PKG_DATA_COMMON_DESCRIPTION='data - files shared between the base game and the expansion' # - cabextract is used to extract files from a cabinet archive on the CD-ROM. # - convmv is used to convert file paths to lower case. REQUIREMENTS_LIST=' cabextract convmv' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Check for the presence of the 2.0c patch. case "$(current_archive)" in ('ARCHIVE_BASE_FR_'*) archive_initialize_optional 'ARCHIVE_PATCH' 'ARCHIVE_OPTIONAL_FR_PATCH' ;; ('ARCHIVE_BASE_EN_'*) archive_initialize_optional 'ARCHIVE_PATCH' 'ARCHIVE_OPTIONAL_EN_PATCH' ;; esac if archive_is_available 'ARCHIVE_PATCH'; then export "$(current_archive)_VERSION=$(archive_version 'ARCHIVE_PATCH')" fi # Extract game data. archive_extraction_default # Convert all file paths to lowercase. # TODO: Try to get rid of this forced case conversion. tolower "$(path_archive_contents)" # Extract files from the cabinet archive. ARCHIVE_CABINET_PATH="$(path_archive_contents)/empires2.cab" archive_extraction 'ARCHIVE_CABINET' rm "$ARCHIVE_CABINET_PATH" # Extract files from the 2.0c patch. if archive_is_available 'ARCHIVE_PATCH'; then archive_extraction 'ARCHIVE_PATCH' case "$(current_archive)" in ('ARCHIVE_BASE_FR_'*) mv \ "$(path_archive_contents 'GAME1_BIN')/empires2frn.exe" \ "$(path_archive_contents 'GAME1_BIN')/empires2.exe" mv \ "$(path_archive_contents 'GAME1_BIN')/empires2frn.icd" \ "$(path_archive_contents 'GAME1_BIN')/empires2.icd" ;; ('ARCHIVE_BASE_EN_'*) mv \ "$(path_archive_contents 'GAME1_BIN')/empires2usa.exe" \ "$(path_archive_contents 'GAME1_BIN')/empires2.exe" mv \ "$path_archive_contents 'GAME1_BIN')/empires2usa.icd" \ "$path_archive_contents 'GAME1_BIN')/empires2.icd" ;; esac fi # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --symbolic "$dll_source" "$dll_destination" done EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-age-of-mythology.sh0000755000000000000000000015051014471751340015351 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2020 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2021 Hoël Bézier set -o errexit ### # Age of Mythology # send your bug reports to vv221@dotslashplay.it ### script_version=20260224.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='age-of-mythology' GAME_NAME='Age of Mythology' GAME_ID_DEMO="${GAME_ID}-demo" GAME_NAME_DEMO="$GAME_NAME (demo)" ARCHIVE_BASE_DEMO_0_NAME='mtrial.exe' ARCHIVE_BASE_DEMO_0_MD5='c475268b774c0fd469802e915b3c3803' ARCHIVE_BASE_DEMO_0_TYPE='cabinet' ARCHIVE_BASE_DEMO_0_SIZE='550000' ARCHIVE_BASE_DEMO_0_VERSION='1.0-archiveorg1' ARCHIVE_BASE_DEMO_0_URL='https://archive.org/details/AgeOfMythologyDemo' CONTENT_PATH_DEFAULT='aom' # aom.exe requirements CONTENT_LIBS_BIN_FILES=' RockallDLL.dll granny.dll mss32.dll' # moviePlayer.exe requirements CONTENT_LIBS0_BIN_FILES=' binkw32.dll' # The game fails to start if the following library is missing. CONTENT_LIBS1_BIN_PATH='.' CONTENT_LIBS1_BIN_FILES=' EBUEula.dll' # Text is wrongly displayed if the following library is missing. CONTENT_LIBS2_BIN_FILES=' language.dll' CONTENT_GAME_BIN_FILES=' mp3dec.asi *.exe' CONTENT_FONTS_DATA_FILES=' arialuni.ttf gio_bk.ttf per_____.ttf' CONTENT_FONTS0_DATA_PATH='.' CONTENT_FONTS0_DATA_FILES=' georgiab.ttf georgiai.ttf georgia.ttf georgiaz.ttf' CONTENT_GAME_DATA_FILES=' ai anim avi data docs fonts gfxconfig god powers history models ppdata rm scenario sound startup textures trigger *.bmp' CONTENT_DOC_DATA_PATH='.' CONTENT_DOC_DATA_FILES=' *.rtf' USER_PERSISTENT_FILES=' startup/persistent.cfg rts3banglog.txt *.XMB *.xml .xs' USER_PERSISTENT_DIRECTORIES=' cameratracks default language savegame screenshots users' # Prevent a loss of render on loss of focus. # (WINE 10.0, non-free nvidia driver) WINE_VIRTUAL_DESKTOP='1600x1200' APP_MAIN_EXE='aom.exe' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_ID_DEMO="${GAME_ID_DEMO}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. # Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Scan library paths used by ./play.it < 2.35. # This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Rename files with truncated names. ( cd "${PLAYIT_WORKDIR}/gamedata/$(content_path_default)" # Shipped libraries mv 'rockal_1.dll' 'rockalldll.dll' mv 'gfxcon_1' 'gfxconfig' mv 'godpow_1' 'god powers' mv 'sound/cinema_1' 'sound/cinematics' mv 'sound/music/interf_1' 'sound/music/interface' mv 'ai/ao9982_1.xs' 'ai/aomdefaultaiprogress.xs' mv 'ai/aomdef_1.xs' 'ai/aomdefaultai.xs' mv 'ai/aomdef_2.xs' 'ai/aomdefaultaieconomy.xs' mv 'ai/aomdef_3.xs' 'ai/aomdefaultaigodpowers.xs' mv 'ai/aomdef_4.xs' 'ai/aomdefaultaimilitary.xs' mv 'ai/defaul_1.xml' 'ai/defaultboom.xml' mv 'ai/defaul_2.xml' 'ai/defaultrandom.xml' mv 'ai/defaul_3.xml' 'ai/defaultrush.xml' mv 'ai/scn17a_1.xs' 'ai/scn17altp2.xs' mv 'ai/scn28p_1.xs' 'ai/scn28p234.xs' mv 'ai/scnlib_1.xs' 'ai/scn lib.xs' mv 'autopa_1.exe' 'autopatcher.exe' mv 'avi/aomlog_1.bik' 'avi/aom logo.bik' mv 'data/fimbul_1.lgt' 'data/fimbulwinter.lgt' mv 'data/ghostl_1.lgt' 'data/ghost lake.lgt' mv 'data/learnt_1.cpn' 'data/learn to play.cpn' mv 'data/mainca_1.cpn' 'data/main campaign.cpn' mv 'data/prword_1.xml' 'data/prwordlist.xml' mv 'docs/aomais_1.rtf' 'docs/aom ai script help file.rtf' mv 'docs/aomce__1.pdf' 'docs/aomce_egyptianqrc_en.pdf' mv 'docs/aomce__2.pdf' 'docs/aomce_greekqrc_en.pdf' mv 'docs/aomce__3.pdf' 'docs/aomce_norseqrc_en.pdf' mv 'docs/aom_in_1.pdf' 'docs/aom_ingamemanual.pdf' mv 'docs/aomran_1.rtf' 'docs/aom random map help file.rtf' mv 'docs/aomsce_1.rtf' 'docs/aom scenario editor faq.rtf' mv 'docs/aomsta_1.pdf' 'docs/aomstandard_manual_en.pdf' mv 'docs/troubl_1.rtf' 'docs/troubleshooting crashing issues.rtf' mv 'docs/troubl_2.rtf' 'docs/troubleshooting display problems.rtf' mv 'fonts/arialu_1.msk' 'fonts/arial unicode ms.msk' mv 'fonts/courie_1.msk' 'fonts/courier new.msk' mv 'fonts/frizqu_1.msk' 'fonts/friz quadrata tt.msk' mv 'fonts/giovan_1.msk' 'fonts/giovanni book.msk' mv 'fonts/giovan_2.msk' 'fonts/giovanni test.msk' mv 'fonts/giovan_3.msk' 'fonts/giovanniitctt.msk' mv 'fonts/imeuis_1.xml' 'fonts/imeuisettings.xml' mv 'fonts/timesn_1.msk' 'fonts/times new roman.msk' mv 'gfxconfig/0x015d_1.gfx' 'gfxconfig/0x015d_number9.gfx' mv 'gfxconfig/0x0315_1.gfx' 'gfxconfig/0x0315_sis.gfx' mv 'gfxconfig/0x1002_1.gfx' 'gfxconfig/0x1002_ati.gfx' mv 'gfxconfig/0x100c_1.gfx' 'gfxconfig/0x100c_tseng.gfx' mv 'gfxconfig/0x1013_1.gfx' 'gfxconfig/0x1013_cirruslogic.gfx' mv 'gfxconfig/0x1023_1.gfx' 'gfxconfig/0x1023_trident.gfx' mv 'gfxconfig/0x1029_1.gfx' 'gfxconfig/0x1029_trident.gfx' mv 'gfxconfig/0x102b_1.gfx' 'gfxconfig/0x102b_matrox.gfx' mv 'gfxconfig/0x1039_1.gfx' 'gfxconfig/0x1039_sis.gfx' mv 'gfxconfig/0x104a_1.gfx' 'gfxconfig/0x104a_stmicroelectronics.gfx' mv 'gfxconfig/0x104c_1.gfx' 'gfxconfig/0x104c_3dlabs.gfx' mv 'gfxconfig/0x104e_1.gfx' 'gfxconfig/0x104e_oaktech.gfx' mv 'gfxconfig/0x10c8_1.gfx' 'gfxconfig/0x10c8_neomagic.gfx' mv 'gfxconfig/0x10d9_1.gfx' 'gfxconfig/0x10d9_3dfx.gfx' mv 'gfxconfig/0x10de_1.gfx' 'gfxconfig/0x10de_nvidia.gfx' mv 'gfxconfig/0x110b_1.gfx' 'gfxconfig/0x110b_chromatic.gfx' mv 'gfxconfig/0x1142_1.gfx' 'gfxconfig/0x1142_3dfx.gfx' mv 'gfxconfig/0x1163_1.gfx' 'gfxconfig/0x1163_rendition.gfx' mv 'gfxconfig/0x121a_1.gfx' 'gfxconfig/0x121a_3dfx.gfx' mv 'gfxconfig/0x12d2_1.gfx' 'gfxconfig/0x12d2_nvidia.gfx' mv 'gfxconfig/0x14af_1.gfx' 'gfxconfig/0x14af_guillemot.gfx' mv 'gfxconfig/0x3d3d_1.gfx' 'gfxconfig/0x3d3d_3dlabs.gfx' mv 'gfxconfig/0x5333_1.gfx' 'gfxconfig/0x5333_s3.gfx' mv 'gfxconfig/0x8086_1.gfx' 'gfxconfig/0x8086_intel.gfx' mv 'gfxconfig/cyberb_1.gfx' 'gfxconfig/cyberbladexp.gfx' mv 'gfxconfig/geforc_1.gfx' 'gfxconfig/geforce1and2.gfx' mv 'gfxconfig/mt40b6_1.tss' 'gfxconfig/mtlinearblendalphaemissivespecularfactor_nvidia.tss' mv 'gfxconfig/mt6b37_1.tss' 'gfxconfig/mtlinearblendalphaemissivespecularfactor.tss' mv 'gfxconfig/mt6db5_1.tss' 'gfxconfig/mtlinearblendinversealpha.tss' mv 'gfxconfig/mt81aa_1.tss' 'gfxconfig/mtlinearblend_nvidia.tss' mv 'gfxconfig/mt8378_1.tss' 'gfxconfig/mtlinearblendemissivespecularfactor.tss' mv 'gfxconfig/mta5c3_1.tss' 'gfxconfig/mtlinearblendemissivespecularfactor_nvidia.tss' mv 'gfxconfig/mtadda_1.tss' 'gfxconfig/mtaddalpha.tss' mv 'gfxconfig/mtadda_2.tss' 'gfxconfig/mtaddalpha_nvidia.tss' mv 'gfxconfig/mtaddf_1.tss' 'gfxconfig/mtaddfactor.tss' mv 'gfxconfig/mtaddf_2.tss' 'gfxconfig/mtaddfactor_nvidia.tss' mv 'gfxconfig/mtaddi_1.tss' 'gfxconfig/mtaddinversealpha.tss' mv 'gfxconfig/mtaddi_2.tss' 'gfxconfig/mtaddinversealpha_nvidia.tss' mv 'gfxconfig/mte0b7_1.tss' 'gfxconfig/mtlinearblendalpha_nvidia.tss' mv 'gfxconfig/mtee67_1.tss' 'gfxconfig/mtlinearblendinversealpha_nvidia.tss' mv 'gfxconfig/mtemis_1.tss' 'gfxconfig/mtemissivespecularfactor.tss' mv 'gfxconfig/mtemis_2.tss' 'gfxconfig/mtemissivespecularfactor2stage.tss' mv 'gfxconfig/mtemis_3.tss' 'gfxconfig/mtemissivespecularfactornotx.tss' mv 'gfxconfig/mtemis_4.tss' 'gfxconfig/mtemissivespecularfactornotx2stage.tss' mv 'gfxconfig/mtfade_1.tss' 'gfxconfig/mtfadelightmapbyalpha.tss' mv 'gfxconfig/mtfogm_1.tss' 'gfxconfig/mtfogmask.tss' mv 'gfxconfig/mtfogm_2.tss' 'gfxconfig/mtfogmask2stage.tss' mv 'gfxconfig/mtligh_1.tss' 'gfxconfig/mtlightmap.tss' mv 'gfxconfig/mtline_1.tss' 'gfxconfig/mtlinearblend.tss' mv 'gfxconfig/mtline_2.tss' 'gfxconfig/mtlinearblend2stage.tss' mv 'gfxconfig/mtline_3.tss' 'gfxconfig/mtlinearblendalpha.tss' mv 'gfxconfig/mtline_4.tss' 'gfxconfig/mtlinearblendalpha2stage.tss' mv 'gfxconfig/mtoff2_1.tss' 'gfxconfig/mtoff2stage.tss' mv 'gfxconfig/mtoffn_1.tss' 'gfxconfig/mtoffnotx.tss' mv 'gfxconfig/mtoffn_2.tss' 'gfxconfig/mtoffnotx2stage.tss' mv 'gfxconfig/mtoffn_3.tss' 'gfxconfig/mtoffnovtxalpha.tss' mv 'gfxconfig/mtoffn_4.tss' 'gfxconfig/mtoffnovtxalpha2stage.tss' mv 'gfxconfig/mtoffo_1.tss' 'gfxconfig/mtoffonlyalpha.tss' mv 'gfxconfig/mtoffo_2.tss' 'gfxconfig/mtoffonlyalpha2stage.tss' mv 'gfxconfig/mtsepa_1.tss' 'gfxconfig/mtseparatealpha.tss' mv 'gfxconfig/mtspec_1.tss' 'gfxconfig/mtspecularbump.tss' mv 'gfxconfig/mtspec_2.tss' 'gfxconfig/mtspecularbump2stage.tss' mv 'gfxconfig/permed_1.gfx' 'gfxconfig/permedia2.gfx' mv 'gfxconfig/permed_2.gfx' 'gfxconfig/permedia3.gfx' mv 'gfxconfig/radeon_1.gfx' 'gfxconfig/radeon7500.gfx' mv 'gfxconfig/radeon_2.gfx' 'gfxconfig/radeon8500.gfx' mv 'gfxconfig/ragelt_1.gfx' 'gfxconfig/rageltpro.gfx' mv 'gfxconfig/refere_1.gfx' 'gfxconfig/reference.gfx' mv 'gfxconfig/savage_1.gfx' 'gfxconfig/savage2000.gfx' mv 'god powers/godpow_1.bar' 'god powers/godpowers.bar' mv 'history/arrows_1.txt' 'history/arrow ships.txt' mv 'history/blackm_1.txt' 'history/black map.txt' mv 'history/buildi_1.txt' 'history/buildings.txt' mv 'history/fogofw_1.txt' 'history/fog of war.txt' mv 'history/godpow_1.txt' 'history/god powers.txt' mv 'history/herode_1.txt' 'history/hero death model.txt' mv 'history/hippop_1.txt' 'history/hippopotamus.txt' mv 'history/humans_1.txt' 'history/human soldiers.txt' mv 'history/lineof_1.txt' 'history/line of sight.txt' mv 'history/mythun_1.txt' 'history/myth units.txt' mv 'history/popula_1.txt' 'history/population.txt' mv 'history/rammin_1.txt' 'history/ramming ships.txt' mv 'history/rammmi_1.txt' 'history/rammming ships.txt' mv 'history/sieges_1.txt' 'history/siege ships.txt' mv 'history/siegew_1.txt' 'history/siege weapons.txt' mv 'history/tableo_1.xmb' 'history/table of contents.xmb' mv 'history/techs/adzeof_1.txt' 'history/techs/adze of wepwawet.txt' mv 'history/techs/aegiss_1.txt' 'history/techs/aegis shield.txt' mv 'history/techs/age1ha_1.txt' 'history/techs/age 1 hades.txt' mv 'history/techs/age1is_1.txt' 'history/techs/age 1 isis.txt' mv 'history/techs/age1lo_1.txt' 'history/techs/age 1 loki.txt' mv 'history/techs/age1od_1.txt' 'history/techs/age 1 odin.txt' mv 'history/techs/age1po_1.txt' 'history/techs/age 1 poseidon.txt' mv 'history/techs/age1ra_1.txt' 'history/techs/age 1 ra.txt' mv 'history/techs/age1se_1.txt' 'history/techs/age 1 set.txt' mv 'history/techs/age1th_1.txt' 'history/techs/age 1 thor.txt' mv 'history/techs/age1ze_1.txt' 'history/techs/age 1 zeus.txt' mv 'history/techs/age2an_1.txt' 'history/techs/age 2 anubis.txt' mv 'history/techs/age2ar_1.txt' 'history/techs/age 2 ares.txt' mv 'history/techs/age2at_1.txt' 'history/techs/age 2 athena.txt' mv 'history/techs/age2ba_1.txt' 'history/techs/age 2 bast.txt' mv 'history/techs/age2fo_1.txt' 'history/techs/age 2 forseti.txt' mv 'history/techs/age2fr_1.txt' 'history/techs/age 2 freyja.txt' mv 'history/techs/age2he_1.txt' 'history/techs/age 2 heimdall.txt' mv 'history/techs/age2he_2.txt' 'history/techs/age 2 hermes.txt' mv 'history/techs/age2pt_1.txt' 'history/techs/age 2 ptah.txt' mv 'history/techs/age3ap_1.txt' 'history/techs/age 3 aphrodite.txt' mv 'history/techs/age3ap_2.txt' 'history/techs/age 3 apollo.txt' mv 'history/techs/age3br_1.txt' 'history/techs/age 3 bragi.txt' mv 'history/techs/age3di_1.txt' 'history/techs/age 3 dionysos.txt' mv 'history/techs/age3ha_1.txt' 'history/techs/age 3 hathor.txt' mv 'history/techs/age3ne_1.txt' 'history/techs/age 3 nephthys.txt' mv 'history/techs/age3nj_1.txt' 'history/techs/age 3 njord.txt' mv 'history/techs/age3se_1.txt' 'history/techs/age 3 sekhmet.txt' mv 'history/techs/age3sk_1.txt' 'history/techs/age 3 skadi.txt' mv 'history/techs/age4ar_1.txt' 'history/techs/age 4 artemis.txt' mv 'history/techs/age4ba_1.txt' 'history/techs/age 4 baldr.txt' mv 'history/techs/age4he_1.txt' 'history/techs/age 4 hel.txt' mv 'history/techs/age4he_2.txt' 'history/techs/age 4 hephaestus.txt' mv 'history/techs/age4he_3.txt' 'history/techs/age 4 hera.txt' mv 'history/techs/age4ho_1.txt' 'history/techs/age 4 horus.txt' mv 'history/techs/age4os_1.txt' 'history/techs/age 4 osiris.txt' mv 'history/techs/age4th_1.txt' 'history/techs/age 4 thoth.txt' mv 'history/techs/age4ty_1.txt' 'history/techs/age 4 tyr.txt' mv 'history/techs/ambass_1.txt' 'history/techs/ambassadors.txt' mv 'history/techs/anastr_1.txt' 'history/techs/anastrophe.txt' mv 'history/techs/ancest_1.txt' 'history/techs/ancestors.txt' mv 'history/techs/animal_1.txt' 'history/techs/animal magnetism.txt' mv 'history/techs/archit_1.txt' 'history/techs/architects.txt' mv 'history/techs/arctic_1.txt' 'history/techs/arctic gale.txt' mv 'history/techs/arctic_2.txt' 'history/techs/arctic winds.txt' mv 'history/techs/atefcr_1.txt' 'history/techs/atef crown.txt' mv 'history/techs/atheni_1.txt' 'history/techs/athenian wall.txt' mv 'history/techs/aurora_1.txt' 'history/techs/aurora borealis.txt' mv 'history/techs/axeofv_1.txt' 'history/techs/axe of vengeance.txt' mv 'history/techs/baccha_1.txt' 'history/techs/bacchanalia.txt' mv 'history/techs/ballis_1.txt' 'history/techs/ballista tower.txt' mv 'history/techs/berser_1.txt' 'history/techs/berserkergang.txt' mv 'history/techs/boilin_1.txt' 'history/techs/boiling oil.txt' mv 'history/techs/bonebo_1.txt' 'history/techs/bone bow.txt' mv 'history/techs/bookof_1.txt' 'history/techs/book of thoth.txt' mv 'history/techs/bowsaw_1.txt' 'history/techs/bow saw.txt' mv 'history/techs/br2276_1.txt' 'history/techs/bronze weapons.txt' mv 'history/techs/brdd97_1.txt' 'history/techs/bronze weapons thor.txt' mv 'history/techs/bronze_1.txt' 'history/techs/bronze mail.txt' mv 'history/techs/bronze_2.txt' 'history/techs/bronze mail thor.txt' mv 'history/techs/bronze_3.txt' 'history/techs/bronze shields.txt' mv 'history/techs/bronze_4.txt' 'history/techs/bronze shields thor.txt' mv 'history/techs/burnin_1.txt' 'history/techs/burning pitch.txt' mv 'history/techs/burnin_2.txt' 'history/techs/burning pitch thor.txt' mv 'history/techs/callof_1.txt' 'history/techs/call of valhalla.txt' mv 'history/techs/carpen_1.txt' 'history/techs/carpenters.txt' mv 'history/techs/carrie_1.txt' 'history/techs/carrier pigeons.txt' mv 'history/techs/ceasef_1.txt' 'history/techs/cease fire.txt' mv 'history/techs/ch5cf5_1.txt' 'history/techs/heavy chariots.txt' mv 'history/techs/ch9a9d_1.txt' 'history/techs/champion slingers.txt' mv 'history/techs/ch9fb2_1.txt' 'history/techs/medium archers.txt' mv 'history/techs/cha3d9_1.txt' 'history/techs/champion archers.txt' mv 'history/techs/cha9ae_1.txt' 'history/techs/heavy axemen.txt' mv 'history/techs/champi_1.txt' 'history/techs/champion camelry.txt' mv 'history/techs/champi_2.txt' 'history/techs/heavy camels.txt' mv 'history/techs/champi_3.txt' 'history/techs/medium cavalry.txt' mv 'history/techs/champi_4.txt' 'history/techs/heavy camelry.txt' mv 'history/techs/chcf33_1.txt' 'history/techs/medium infantry.txt' mv 'history/techs/citade_1.txt' 'history/techs/citadel wall.txt' mv 'history/techs/cityof_1.txt' 'history/techs/city of the dead.txt' mv 'history/techs/co3e7a_1.txt' 'history/techs/conscript archers.txt' mv 'history/techs/co3f35_1.txt' 'history/techs/conscript migdol soldiers.txt' mv 'history/techs/co73d0_1.txt' 'history/techs/conscript barracks soldiers.txt' mv 'history/techs/co8f28_1.txt' 'history/techs/copper weapons.txt' mv 'history/techs/coc88d_1.txt' 'history/techs/copper weapons thor.txt' mv 'history/techs/coe3f7_1.txt' 'history/techs/conscript sailors.txt' mv 'history/techs/conscr_1.txt' 'history/techs/conscript cavalry.txt' mv 'history/techs/conscr_2.txt' 'history/techs/conscript longhouse soldiers.txt' mv 'history/techs/conscr_3.txt' 'history/techs/conscript hill fort soldiers.txt' mv 'history/techs/conscr_4.txt' 'history/techs/conscript infantry.txt' mv 'history/techs/copper_1.txt' 'history/techs/copper mail.txt' mv 'history/techs/copper_2.txt' 'history/techs/copper mail thor.txt' mv 'history/techs/copper_3.txt' 'history/techs/copper shields.txt' mv 'history/techs/copper_4.txt' 'history/techs/copper shields thor.txt' mv 'history/techs/create_1.txt' 'history/techs/create gold.txt' mv 'history/techs/crenel_1.txt' 'history/techs/crenellations.txt' mv 'history/techs/criosp_1.txt' 'history/techs/criosphinx.txt' mv 'history/techs/crocod_1.txt' 'history/techs/crocodopolis.txt' mv 'history/techs/deimos_1.txt' 'history/techs/deimos sword of dread.txt' mv 'history/techs/desert_1.txt' 'history/techs/desert wind.txt' mv 'history/techs/divine_1.txt' 'history/techs/divine blood.txt' mv 'history/techs/drafth_1.txt' 'history/techs/draft horses.txt' mv 'history/techs/dragon_1.txt' 'history/techs/dragonscale shields.txt' mv 'history/techs/dwarve_1.txt' 'history/techs/dwarven auger.txt' mv 'history/techs/dwarve_2.txt' 'history/techs/dwarven mail.txt' mv 'history/techs/dwarve_3.txt' 'history/techs/dwarven shields.txt' mv 'history/techs/dwarve_4.txt' 'history/techs/dwarven weapons.txt' mv 'history/techs/earthq_1.txt' 'history/techs/earthquake.txt' mv 'history/techs/eldhri_1.txt' 'history/techs/eldhrimnir kettle.txt' mv 'history/techs/electr_1.txt' 'history/techs/electrum bullets.txt' mv 'history/techs/enclos_1.txt' 'history/techs/enclosed deck.txt' mv 'history/techs/engine_1.txt' 'history/techs/engineers.txt' mv 'history/techs/enyosb_1.txt' 'history/techs/enyos bow of horror.txt' mv 'history/techs/eyesin_1.txt' 'history/techs/eyes in the forest.txt' mv 'history/techs/faceof_1.txt' 'history/techs/face of the gorgon.txt' mv 'history/techs/feetof_1.txt' 'history/techs/feet of the jackal.txt' mv 'history/techs/flames_1.txt' 'history/techs/flames of typhon.txt' mv 'history/techs/flamin_1.txt' 'history/techs/flaming weapons.txt' mv 'history/techs/floodc_1.txt' 'history/techs/flood control.txt' mv 'history/techs/floodo_1.txt' 'history/techs/flood of the nile.txt' mv 'history/techs/forest_1.txt' 'history/techs/forest fire.txt' mv 'history/techs/forgeo_1.txt' 'history/techs/forge of olympus.txt' mv 'history/techs/fortif_1.txt' 'history/techs/fortified wall.txt' mv 'history/techs/fortif_2.txt' 'history/techs/fortify town center.txt' mv 'history/techs/funera_1.txt' 'history/techs/funeral barge.txt' mv 'history/techs/funera_2.txt' 'history/techs/funeral rites.txt' mv 'history/techs/golden_1.txt' 'history/techs/golden apples.txt' mv 'history/techs/granit_1.txt' 'history/techs/granite blood.txt' mv 'history/techs/greate_1.txt' 'history/techs/greatest of fifty.txt' mv 'history/techs/greath_1.txt' 'history/techs/great hunt.txt' mv 'history/techs/guardt_1.txt' 'history/techs/guard tower.txt' mv 'history/techs/hallof_1.txt' 'history/techs/hall of thanes.txt' mv 'history/techs/hamarr_1.txt' 'history/techs/hamarrtroll.txt' mv 'history/techs/hammer_1.txt' 'history/techs/hammer of the gods.txt' mv 'history/techs/handax_1.txt' 'history/techs/hand axe.txt' mv 'history/techs/handof_1.txt' 'history/techs/hand of talos.txt' mv 'history/techs/healin_1.txt' 'history/techs/healing spring.txt' mv 'history/techs/heavya_1.txt' 'history/techs/champion axemen.txt' mv 'history/techs/heavya_2.txt' 'history/techs/heavy spearmen.txt' mv 'history/techs/heavyc_1.txt' 'history/techs/champion camels.txt' mv 'history/techs/heavyc_2.txt' 'history/techs/medium axemen.txt' mv 'history/techs/heavyc_3.txt' 'history/techs/heavy archers.txt' mv 'history/techs/heavyc_4.txt' 'history/techs/medium slingers.txt' mv 'history/techs/heavye_1.txt' 'history/techs/heavy infantry.txt' mv 'history/techs/heavyi_1.txt' 'history/techs/champion chariots.txt' mv 'history/techs/heavys_1.txt' 'history/techs/heavy elephants.txt' mv 'history/techs/heavys_2.txt' 'history/techs/champion cavalry.txt' mv 'history/techs/hierac_1.txt' 'history/techs/hieracosphinx.txt' mv 'history/techs/huntin_1.txt' 'history/techs/hunting dogs.txt' mv 'history/techs/huntre_1.txt' 'history/techs/huntress axe.txt' mv 'history/techs/husban_1.txt' 'history/techs/husbandry.txt' mv 'history/techs/ironma_1.txt' 'history/techs/iron mail.txt' mv 'history/techs/ironma_2.txt' 'history/techs/iron mail thor.txt' mv 'history/techs/ironsh_1.txt' 'history/techs/iron shields.txt' mv 'history/techs/ironsh_2.txt' 'history/techs/iron shields thor.txt' mv 'history/techs/ironwe_1.txt' 'history/techs/iron weapons.txt' mv 'history/techs/ironwe_2.txt' 'history/techs/iron weapons thor.txt' mv 'history/techs/irriga_1.txt' 'history/techs/irrigation.txt' mv 'history/techs/labyri_1.txt' 'history/techs/labyrinth of minos.txt' mv 'history/techs/leathe_1.txt' 'history/techs/leather frame shield.txt' mv 'history/techs/levyar_1.txt' 'history/techs/levy cavalry.txt' mv 'history/techs/levyba_1.txt' 'history/techs/levy hill fort soldiers.txt' mv 'history/techs/levyca_1.txt' 'history/techs/levy longhouse soldiers.txt' mv 'history/techs/levyhi_1.txt' 'history/techs/levy migdol soldiers.txt' mv 'history/techs/levyin_1.txt' 'history/techs/levy barracks soldiers.txt' mv 'history/techs/levylo_1.txt' 'history/techs/levy archers.txt' mv 'history/techs/levymi_1.txt' 'history/techs/levy infantry.txt' mv 'history/techs/lightn_1.txt' 'history/techs/lightning storm.txt' mv 'history/techs/locust_1.txt' 'history/techs/locust swarm.txt' mv 'history/techs/lonewa_1.txt' 'history/techs/lone wanderer.txt' mv 'history/techs/longse_1.txt' 'history/techs/long serpent.txt' mv 'history/techs/lordof_1.txt' 'history/techs/lord of horses.txt' mv 'history/techs/me699b_1.txt' 'history/techs/champion spearmen.txt' mv 'history/techs/me78ac_1.txt' 'history/techs/champion infantry.txt' mv 'history/techs/medium_1.txt' 'history/techs/heavy cavalry.txt' mv 'history/techs/medium_2.txt' 'history/techs/champion elephants.txt' mv 'history/techs/medium_3.txt' 'history/techs/heavy slingers.txt' mv 'history/techs/medium_4.txt' 'history/techs/medium spearmen.txt' mv 'history/techs/meteor_1.txt' 'history/techs/meteoric iron mail.txt' mv 'history/techs/mithri_1.txt' 'history/techs/mithril breastplate.txt' mv 'history/techs/monstr_1.txt' 'history/techs/monstrous rage.txt' mv 'history/techs/navalo_1.txt' 'history/techs/naval oxybeles.txt' mv 'history/techs/necrop_1.txt' 'history/techs/necropolis.txt' mv 'history/techs/newkin_1.txt' 'history/techs/new kingdom.txt' mv 'history/techs/olympi_1.txt' 'history/techs/olympic parentage.txt' mv 'history/techs/omnisc_1.txt' 'history/techs/omniscience.txt' mv 'history/techs/pestil_1.txt' 'history/techs/pestilence.txt' mv 'history/techs/phobos_1.txt' 'history/techs/phobos spear of panic.txt' mv 'history/techs/pigsti_1.txt' 'history/techs/pig sticker.txt' mv 'history/techs/prospe_1.txt' 'history/techs/prosperity.txt' mv 'history/techs/purses_1.txt' 'history/techs/purse seine.txt' mv 'history/techs/ramoft_1.txt' 'history/techs/ram of the west wind.txt' mv 'history/techs/rebell_1.txt' 'history/techs/rebellion.txt' mv 'history/techs/reinfo_1.txt' 'history/techs/reinforced hull.txt' mv 'history/techs/restor_1.txt' 'history/techs/restoration.txt' mv 'history/techs/ringgi_1.txt' 'history/techs/ring giver.txt' mv 'history/techs/roarof_1.txt' 'history/techs/roar of orthus.txt' mv 'history/techs/sacred_1.txt' 'history/techs/sacred cats.txt' mv 'history/techs/safegu_1.txt' 'history/techs/safeguard.txt' mv 'history/techs/saltam_1.txt' 'history/techs/salt amphora.txt' mv 'history/techs/sandst_1.txt' 'history/techs/sandstorm.txt' mv 'history/techs/scallo_1.txt' 'history/techs/scalloped axe.txt' mv 'history/techs/serpen_1.txt' 'history/techs/serpent spear.txt' mv 'history/techs/shaftm_1.txt' 'history/techs/shaft mine.txt' mv 'history/techs/shafts_1.txt' 'history/techs/shafts of plague.txt' mv 'history/techs/should_1.txt' 'history/techs/shoulder of talos.txt' mv 'history/techs/signal_1.txt' 'history/techs/signal fires.txt' mv 'history/techs/skelet_1.txt' 'history/techs/skeleton power.txt' mv 'history/techs/skinof_1.txt' 'history/techs/skin of the rhino.txt' mv 'history/techs/slings_1.txt' 'history/techs/slings of the sun.txt' mv 'history/techs/snowst_1.txt' 'history/techs/snow storm.txt' mv 'history/techs/sonofo_1.txt' 'history/techs/son of osiris.txt' mv 'history/techs/sonsof_1.txt' 'history/techs/sons of sleipnir.txt' mv 'history/techs/spearo_1.txt' 'history/techs/spear on the horizon.txt' mv 'history/techs/spirit_1.txt' 'history/techs/spirit of maat.txt' mv 'history/techs/spirit_2.txt' 'history/techs/spirited charge.txt' mv 'history/techs/stones_1.txt' 'history/techs/stones of red linen.txt' mv 'history/techs/stonew_1.txt' 'history/techs/stone wall.txt' mv 'history/techs/sundri_1.txt' 'history/techs/sundried mud brick.txt' mv 'history/techs/sunray_1.txt' 'history/techs/sun ray.txt' mv 'history/techs/swinea_1.txt' 'history/techs/swine array.txt' mv 'history/techs/sylvan_1.txt' 'history/techs/sylvan lore.txt' mv 'history/techs/taxcol_1.txt' 'history/techs/tax collectors.txt' mv 'history/techs/temple_1.txt' 'history/techs/temple of healing.txt' mv 'history/techs/thraci_1.txt' 'history/techs/thracian horses.txt' mv 'history/techs/thunde_1.txt' 'history/techs/thundering hooves.txt' mv 'history/techs/thuris_1.txt' 'history/techs/thurisaz rune.txt' mv 'history/techs/triera_1.txt' 'history/techs/trierarch.txt' mv 'history/techs/tuskso_1.txt' 'history/techs/tusks of apedemak.txt' mv 'history/techs/underm_1.txt' 'history/techs/undermine.txt' mv 'history/techs/underw_1.txt' 'history/techs/underworld passage.txt' mv 'history/techs/valley_1.txt' 'history/techs/valley of the kings.txt' mv 'history/techs/vaults_1.txt' 'history/techs/vaults of erebus.txt' mv 'history/techs/walkin_1.txt' 'history/techs/walking woods.txt' mv 'history/techs/watcht_1.txt' 'history/techs/watch tower.txt' mv 'history/techs/weapon_1.txt' 'history/techs/weapon of the titans.txt' mv 'history/techs/willof_1.txt' 'history/techs/will of kronos.txt' mv 'history/techs/winged_1.txt' 'history/techs/winged messenger.txt' mv 'history/techs/winter_1.txt' 'history/techs/winter harvest.txt' mv 'history/techs/wratho_1.txt' 'history/techs/wrath of the deep.txt' mv 'history/units/agamem_1.txt' 'history/units/agamemnon.txt' mv 'history/units/anim0000.txt' 'history/units/animal attractor.txt' mv 'history/units/apeofs_1.txt' 'history/units/ape of set.txt' mv 'history/units/archer_1.txt' 'history/units/archery range.txt' mv 'history/units/arkant_1.txt' 'history/units/arkantos.txt' mv 'history/units/arkantos.txt' 'history/units/arkantosman.txt' mv 'history/units/atlant_1.txt' 'history/units/atlantis wall connector.txt' mv 'history/units/atlant_2.txt' 'history/units/atlantis wall long.txt' mv 'history/units/bandit_1.txt' 'history/units/bandit migdol.txt' mv 'history/units/battle_1.txt' 'history/units/battle boar.txt' mv 'history/units/berryb_1.txt' 'history/units/berry bush.txt' mv 'history/units/bolder_1.txt' 'history/units/bolder rolling.txt' mv 'history/units/bolder_2.txt' 'history/units/bolder rolling dead.txt' mv 'history/units/bolder_3.txt' 'history/units/bolder rolling 2.txt' mv 'history/units/bolder_4.txt' 'history/units/bolder wall.txt' mv 'history/units/broken_1.txt' 'history/units/broken column.txt' mv 'history/units/carava_1.txt' 'history/units/caravan egyptian.txt' mv 'history/units/carava_2.txt' 'history/units/caravan greek.txt' mv 'history/units/carava_3.txt' 'history/units/caravan norse.txt' mv 'history/units/cataph_1.txt' 'history/units/cataphract.txt' mv 'history/units/chario_1.txt' 'history/units/chariot archer.txt' mv 'history/units/charon_1.txt' 'history/units/charon ferry.txt' mv 'history/units/cita0000.txt' 'history/units/citadel center.txt' mv 'history/units/column_1.txt' 'history/units/columns broken.txt' mv 'history/units/column_2.txt' 'history/units/columns fallen.txt' mv 'history/units/constr_1.txt' 'history/units/construction extra large.txt' mv 'history/units/constr_2.txt' 'history/units/construction large.txt' mv 'history/units/constr_3.txt' 'history/units/construction medium.txt' mv 'history/units/constr_4.txt' 'history/units/construction small.txt' mv 'history/units/croc0000.txt' 'history/units/crocodile.txt' mv 'history/units/crocod_2.txt' 'history/units/crocodile of set.txt' mv 'history/units/crossb_1.txt' 'history/units/crossbowman.txt' mv 'history/units/crowne_1.txt' 'history/units/crowned crane.txt' mv 'history/units/digpil_1.txt' 'history/units/dig pile.txt' mv 'history/units/dwar0000.txt' 'history/units/dwarven forge.txt' mv 'history/units/dwarff_1.txt' 'history/units/dwarf foundry.txt' mv 'history/units/einher_1.txt' 'history/units/einheriar.txt' mv 'history/units/excava_1.txt' 'history/units/excavation.txt' mv 'history/units/fallen_1.txt' 'history/units/fallen columns.txt' mv 'history/units/fencei_1.txt' 'history/units/fence iron.txt' mv 'history/units/fences_1.txt' 'history/units/fence stone.txt' mv 'history/units/fencew_1.txt' 'history/units/fence wood.txt' mv 'history/units/fenris_1.txt' 'history/units/fenris wolf.txt' mv 'history/units/fimbul_1.txt' 'history/units/fimbulwinter wolf.txt' mv 'history/units/firegi_1.txt' 'history/units/fire giant.txt' mv 'history/units/fishin_1.txt' 'history/units/fishing ship egyptian.txt' mv 'history/units/fishin_2.txt' 'history/units/fishing ship greek.txt' mv 'history/units/fishin_3.txt' 'history/units/fishing ship norse.txt' mv 'history/units/fish_m_1.txt' 'history/units/fish - mahi.txt' mv 'history/units/fish_p_1.txt' 'history/units/fish - perch.txt' mv 'history/units/fish_s_1.txt' 'history/units/fish - salmon.txt' mv 'history/units/flying_1.txt' 'history/units/flying purple hippo.txt' mv 'history/units/folsta_1.txt' 'history/units/folstag flag bearer.txt' mv 'history/units/frostg_1.txt' 'history/units/frost giant.txt' mv 'history/units/gargar_1.txt' 'history/units/gargarensis.txt' mv 'history/units/gatera_1.txt' 'history/units/gate ram.txt' mv 'history/units/gatera_2.txt' 'history/units/gate ram 2.txt' mv 'history/units/gazell_1.txt' 'history/units/gazelle of set.txt' mv 'history/units/ghosts_1.txt' 'history/units/ghost ship.txt' mv 'history/units/giantg_1.txt' 'history/units/giant gate ram 2.txt' mv 'history/units/giantg_2.txt' 'history/units/giant gate ram.txt' mv 'history/units/giraff_1.txt' 'history/units/giraffe.txt' mv 'history/units/giraffe.txt' 'history/units/giraffe of set.txt' mv 'history/units/gold0000.txt' 'history/units/golden lion.txt' mv 'history/units/goldmi_1.txt' 'history/units/gold mine.txt' mv 'history/units/goldmi_2.txt' 'history/units/gold mine dwarven.txt' mv 'history/units/goldmi_3.txt' 'history/units/gold mine small.txt' mv 'history/units/goldmi_4.txt' 'history/units/gold mine tiny.txt' mv 'history/units/greatb_1.txt' 'history/units/great box.txt' mv 'history/units/greatb_2.txt' 'history/units/great box cart.txt' mv 'history/units/greatb_3.txt' 'history/units/great box cart 2.txt' mv 'history/units/guardi_1.txt' 'history/units/guardian sleeping.txt' mv 'history/units/hadesd_1.txt' 'history/units/hades door.txt' mv 'history/units/hadess_1.txt' 'history/units/hades shade.txt' mv 'history/units/he001a_1.txt' 'history/units/hero greek perseus.txt' mv 'history/units/he0444_1.txt' 'history/units/hero greek hippolyta.txt' mv 'history/units/he2813_1.txt' 'history/units/hero greek bellerophon.txt' mv 'history/units/he29cd_1.txt' 'history/units/hero greek polyphemus.txt' mv 'history/units/he9adf_1.txt' 'history/units/hero greek odysseus.txt' mv 'history/units/hea167_1.txt' 'history/units/hero greek jason.txt' mv 'history/units/heal0000.txt' 'history/units/healing spring object.txt' mv 'history/units/hedc5b_1.txt' 'history/units/hero greek chiron.txt' mv 'history/units/hee615_1.txt' 'history/units/hero greek heracles.txt' mv 'history/units/hef21d_1.txt' 'history/units/hero greek theseus.txt' mv 'history/units/helepo_1.txt' 'history/units/helepolis.txt' mv 'history/units/herobo_1.txt' 'history/units/hero boar 2.txt' mv 'history/units/herobo_2.txt' 'history/units/hero boar.txt' mv 'history/units/herogr_1.txt' 'history/units/hero greek achilles.txt' mv 'history/units/herogr_2.txt' 'history/units/hero greek ajax.txt' mv 'history/units/herogr_3.txt' 'history/units/hero greek argo.txt' mv 'history/units/herogr_4.txt' 'history/units/hero greek atalanta.txt' mv 'history/units/herono_1.txt' 'history/units/hero norse.txt' mv 'history/units/herora_1.txt' 'history/units/hero ragnorok.txt' mv 'history/units/hillfo_1.txt' 'history/units/hill fort.txt' mv 'history/units/hipp0000.txt' 'history/units/hippopotamus.txt' mv 'history/units/hippoc_1.txt' 'history/units/hippocampus.txt' mv 'history/units/hippoo_1.txt' 'history/units/hippo of set.txt' mv 'history/units/hyenao_1.txt' 'history/units/hyena of set.txt' mv 'history/units/hypasp_1.txt' 'history/units/hypaspist.txt' mv 'history/units/jailwa_1.txt' 'history/units/jail wall.txt' mv 'history/units/jormun_1.txt' 'history/units/jormund elver.txt' mv 'history/units/kraken_1.txt' 'history/units/kraken.txt' mv 'history/units/kraken.txt' 'history/units/kraken spc.txt' mv 'history/units/lazerb_1.txt' 'history/units/lazer bear.txt' mv 'history/units/leviat_1.txt' 'history/units/leviathan.txt' mv 'history/units/lighth_1.txt' 'history/units/lighthouse.txt' mv 'history/units/longho_1.txt' 'history/units/longhouse.txt' mv 'history/units/lumber_1.txt' 'history/units/lumber camp.txt' mv 'history/units/mantic_1.txt' 'history/units/manticore.txt' mv 'history/units/mercen_1.txt' 'history/units/mercenary cavalry.txt' mv 'history/units/mercen_2.txt' 'history/units/mercenary.txt' mv 'history/units/migdol_1.txt' 'history/units/migdol stronghold.txt' mv 'history/units/mining_1.txt' 'history/units/mining camp.txt' mv 'history/units/monkey_1.txt' 'history/units/monkey raft.txt' mv 'history/units/monkey_2.txt' 'history/units/monkey relic.txt' mv 'history/units/monume_1.txt' 'history/units/monument 2.txt' mv 'history/units/monume_2.txt' 'history/units/monument 3.txt' mv 'history/units/monume_3.txt' 'history/units/monument 4.txt' mv 'history/units/monume_4.txt' 'history/units/monument 5.txt' mv 'history/units/mounta_1.txt' 'history/units/mountain giant.txt' mv 'history/units/navals_1.txt' 'history/units/naval shipyard.txt' mv 'history/units/nemean_1.txt' 'history/units/nemean lion.txt' mv 'history/units/nidh0000.txt' 'history/units/nidhogg.txt' mv 'history/units/oakaut_1.txt' 'history/units/oak autumn.txt' mv 'history/units/oaktre_1.txt' 'history/units/oak tree.txt' mv 'history/units/oldman_1.txt' 'history/units/old man.txt' mv 'history/units/oxcart_1.txt' 'history/units/ox cart.txt' mv 'history/units/petrob_1.txt' 'history/units/petrobolos.txt' mv 'history/units/petsuc_1.txt' 'history/units/petsuchos.txt' mv 'history/units/pharao_1.txt' 'history/units/pharaoh of osiris.txt' mv 'history/units/pharao_2.txt' 'history/units/pharaoh secondary.txt' mv 'history/units/phoeni_1.txt' 'history/units/phoenix egg.txt' mv 'history/units/pigspe_1.txt' 'history/units/pig special.txt' mv 'history/units/pinede_1.txt' 'history/units/pine dead.txt' mv 'history/units/pinesn_1.txt' 'history/units/pine snow.txt' mv 'history/units/pirate_1.txt' 'history/units/pirate ship.txt' mv 'history/units/plenty_1.txt' 'history/units/plenty vault koth.txt' mv 'history/units/plenty_2.txt' 'history/units/plenty vault.txt' mv 'history/units/polarb_1.txt' 'history/units/polar bear.txt' mv 'history/units/portab_1.txt' 'history/units/portable ram.txt' mv 'history/units/poseid_1.txt' 'history/units/poseidon statue.txt' mv 'history/units/prodro_1.txt' 'history/units/prodromos.txt' mv 'history/units/pyrami_1.txt' 'history/units/pyramid large.txt' mv 'history/units/raidin_1.txt' 'history/units/raiding cavalry.txt' mv 'history/units/ramm0000.txt' 'history/units/ramming ship egyptian.txt' mv 'history/units/rammin_2.txt' 'history/units/ramming ship greek.txt' mv 'history/units/rammin_3.txt' 'history/units/ramming ship norse.txt' mv 'history/units/reginl_1.txt' 'history/units/reginleif.txt' mv 'history/units/rhinoc_1.txt' 'history/units/rhinoceros of set.txt' mv 'history/units/rhinoc_2.txt' 'history/units/rhinocerous.txt' mv 'history/units/savann_1.txt' 'history/units/savannah tree.txt' mv 'history/units/scaffo_1.txt' 'history/units/scaffolding.txt' mv 'history/units/scorpi_1.txt' 'history/units/scorpion man.txt' mv 'history/units/seasna_1.txt' 'history/units/sea snake.txt' mv 'history/units/seatur_1.txt' 'history/units/sea turtle.txt' mv 'history/units/sentin_1.txt' 'history/units/sentinel main.txt' mv 'history/units/settle_1.txt' 'history/units/settlement level 1.txt' mv 'history/units/settle_2.txt' 'history/units/settlement.txt' mv 'history/units/shabak_1.txt' 'history/units/shaba ka.txt' mv 'history/units/shadeo_1.txt' 'history/units/shade of erebus.txt' mv 'history/units/shadeo_2.txt' 'history/units/shade of hades.txt' mv 'history/units/shipwr_1.txt' 'history/units/shipwreck.txt' mv 'history/units/sieg0000.txt' 'history/units/siege ship egyptian.txt' mv 'history/units/siegec_1.txt' 'history/units/siege camp.txt' mv 'history/units/sieges_2.txt' 'history/units/siege ship greek.txt' mv 'history/units/sieges_3.txt' 'history/units/siege ship norse.txt' mv 'history/units/sieget_1.txt' 'history/units/siege tower.txt' mv 'history/units/skrael_1.txt' 'history/units/skraeling.txt' mv 'history/units/sleepi_1.txt' 'history/units/sleeping guardian.txt' mv 'history/units/st9642_1.txt' 'history/units/statue pharaoh.txt' mv 'history/units/statue_1.txt' 'history/units/statue lion left.txt' mv 'history/units/statue_2.txt' 'history/units/statue lion right.txt' mv 'history/units/statue_3.txt' 'history/units/statue of lightning.txt' mv 'history/units/statue_4.txt' 'history/units/statue of major god.txt' mv 'history/units/storeh_1.txt' 'history/units/storehouse.txt' mv 'history/units/swordb_1.txt' 'history/units/sword bearers.txt' mv 'history/units/tamari_1.txt' 'history/units/tamarisk tree.txt' mv 'history/units/taproo_1.txt' 'history/units/taproot large.txt' mv 'history/units/temp0000.txt' 'history/units/temple underworld.txt' mv 'history/units/thorha_1.txt' 'history/units/thor hammer haft.txt' mv 'history/units/thorha_2.txt' 'history/units/thor hammer head.txt' mv 'history/units/throwi_1.txt' 'history/units/throwing axeman.txt' mv 'history/units/titanb_1.txt' 'history/units/titan bad.txt' mv 'history/units/transp_1.txt' 'history/units/transport ship egyptian.txt' mv 'history/units/transp_2.txt' 'history/units/transport ship greek.txt' mv 'history/units/transp_3.txt' 'history/units/transport ship norse.txt' mv 'history/units/trojan_1.txt' 'history/units/trojan horse.txt' mv 'history/units/troyga_1.txt' 'history/units/troy gate.txt' mv 'history/units/troywa_1.txt' 'history/units/troy wall connector.txt' mv 'history/units/troywa_2.txt' 'history/units/troy wall long.txt' mv 'history/units/troywa_3.txt' 'history/units/troy wall short.txt' mv 'history/units/unde0000.txt' 'history/units/underworld passage spc.txt' mv 'history/units/villag_1.txt' 'history/units/villager egyptian.txt' mv 'history/units/villag_2.txt' 'history/units/villager greek.txt' mv 'history/units/villag_3.txt' 'history/units/villager norse.txt' mv 'history/units/waaa05_1.txt' 'history/units/walking woods pine.txt' mv 'history/units/waca6e_1.txt' 'history/units/walking woods savannah.txt' mv 'history/units/walk0000.txt' 'history/units/walking woods oak.txt' mv 'history/units/walkin_2.txt' 'history/units/walking woods palm.txt' mv 'history/units/walkin_3.txt' 'history/units/walking woods pine dead.txt' mv 'history/units/walkin_4.txt' 'history/units/walking woods pine snow.txt' mv 'history/units/wallat_1.txt' 'history/units/wall atlantis connector.txt' mv 'history/units/wallat_2.txt' 'history/units/wall atlantis long.txt' mv 'history/units/wallco_1.txt' 'history/units/wall connector.txt' mv 'history/units/walllo_1.txt' 'history/units/wall long.txt' mv 'history/units/wallme_1.txt' 'history/units/wall medium.txt' mv 'history/units/wallsh_1.txt' 'history/units/wall short.txt' mv 'history/units/warele_1.txt' 'history/units/war elephant.txt' mv 'history/units/waterb_1.txt' 'history/units/water buffalo.txt' mv 'history/units/wellof_1.txt' 'history/units/well of urd.txt' mv 'history/units/wonder_1.txt' 'history/units/wonder spc.txt' mv 'loadin_1.bmp' 'loading1024.bmp' mv 'loadin_2.bmp' 'loading1280.bmp' mv 'loadin_3.bmp' 'loading640.bmp' mv 'loadin_4.bmp' 'loading800.bmp' mv 'models/sfxabo_1.lng' 'models/sfx a bolt.lng' mv 'models/sfxaos_1.lng' 'models/sfx a osiris.lng' mv 'models/sfxape_1.lng' 'models/sfx a petosuchus.lng' mv 'models/sfxgli_1.lng' 'models/sfx g lightning bolt large.lng' mv 'models/sfxgli_2.lng' 'models/sfx g lightning bolt medium.lng' mv 'models/sfxgli_3.lng' 'models/sfx g lightning bolt small.lng' mv 'moviep_1.exe' 'movieplayer.exe' mv 'rm/acropo_1.xml' 'rm/acropolis.xml' mv 'rm/acropo_1.xs' 'rm/acropolis.xs' mv 'rm/archip_1.xml' 'rm/archipelago.xml' mv 'rm/archip_1.xs' 'rm/archipelago.xs' mv 'rm/fastra_1.set' 'rm/fastrandom.set' mv 'rm/ghostl_1.xml' 'rm/ghost lake.xml' mv 'rm/ghostl_1.xs' 'rm/ghost lake.xs' mv 'rm/jotunh_1.xml' 'rm/jotunheim.xml' mv 'rm/jotunh_1.xs' 'rm/jotunheim.xs' mv 'rm/kingof_1.xml' 'rm/king of the hill.xml' mv 'rm/kingof_1.xs' 'rm/king of the hill.xs' mv 'rm/medite_1.xml' 'rm/mediterranean.xml' mv 'rm/medite_1.xs' 'rm/mediterranean.xs' mv 'rm/random_1.set' 'rm/randommaps.set' mv 'rm/rivern_1.xml' 'rm/river nile.xml' mv 'rm/rivern_1.xs' 'rm/river nile.xs' mv 'rm/seaofw_1.xml' 'rm/sea of worms.xml' mv 'rm/seaofw_1.xs' 'rm/sea of worms.xs' mv 'rm/sudden_1.xml' 'rm/sudden death.xml' mv 'rm/sudden_1.xs' 'rm/sudden death.xs' mv 'rm/teammi_1.xml' 'rm/team migration.xml' mv 'rm/teammi_1.xs' 'rm/team migration.xs' mv 'rm/theunk_1.xml' 'rm/the unknown.xml' mv 'rm/theunk_1.xs' 'rm/the unknown.xs' mv 'rm/valley_1.xml' 'rm/valley of kings.xml' mv 'rm/valley_1.xs' 'rm/valley of kings.xs' mv 'rm/vinlan_1.xml' 'rm/vinlandsaga.xml' mv 'rm/vinlan_1.xs' 'rm/vinlandsaga.xs' mv 'rm/wateri_1.xml' 'rm/watering hole.xml' mv 'rm/wateri_1.xs' 'rm/watering hole.xs' mv 'rts3ba_1.txt' 'rts3banglog.txt' mv 'scenario/scenar_1.bar' 'scenario/scenarios.bar' mv 'sound/aheroh_1.wav' 'sound/aherohasfallen.wav' mv 'sound/cinematics/04_in/armyar_1.wav' 'sound/cinematics/04_in/armyarrive.wav' mv 'sound/cinematics/04_in/music1_1.mp3' 'sound/cinematics/04_in/music 1.mp3' mv 'sound/cinematics/04_in/music2_1.mp3' 'sound/cinematics/04_in/music 2.mp3' mv 'sound/cinematics/04_in/wavesb_1.mp3' 'sound/cinematics/04_in/wavesbirdsmix.mp3' mv 'sound/cinematics/04_out/wave0000.mp3' 'sound/cinematics/04_out/wavesbirds.mp3' mv 'sound/cinematics/05_out/boatsp_1.mp3' 'sound/cinematics/05_out/boatspass.mp3' mv 'sound/cinematics/05_out/kamosl_1.mp3' 'sound/cinematics/05_out/kamosleap.mp3' mv 'sound/cinematics/05_out/leviat_1.mp3' 'sound/cinematics/05_out/leviathangrunt.mp3' mv 'sound/cinematics/05_out/musi0000.mp3' 'sound/cinematics/05_out/music.mp3' mv 'sound/cinematics/1/wave0001.mp3' 'sound/cinematics/1/waves.mp3' mv 'sound/cinematics/3/ambi0000.mp3' 'sound/cinematics/3/ambience.mp3' mv 'sound/cinematics/3/boat0000.mp3' 'sound/cinematics/3/boatpass.mp3' mv 'sound/cinematics/3/wave0002.mp3' 'sound/cinematics/3/waves.mp3' mv 'sound/cinematics/a/dreamt_1.mp3' 'sound/cinematics/a/dreamthing.mp3' mv 'sound/cinematics/a/lostso_1.mp3' 'sound/cinematics/a/lostsouls.mp3' mv 'sound/cinematics/a/wave0003.mp3' 'sound/cinematics/a/waves.mp3' mv 'sound/dialog/kastor_1.mp3' 'sound/dialog/kastor061.mp3' mv 'sound/dialog/kastor_2.mp3' 'sound/dialog/kastor062.mp3' mv 'sound/music/culture/greekt_1.mp3' 'sound/music/culture/greek to me.mp3' mv 'sound/music/culture/ndnile_1.mp3' 'sound/music/culture/n. d. nile.mp3' mv 'sound/music/culture/ofnors_1.mp3' 'sound/music/culture/of norse not!.mp3' mv 'sound/music/fight/iwishi_1.mp3' 'sound/music/fight/i wish i could throw shapes.mp3' mv 'sound/music/fight/oi_tha_1.mp3' 'sound/music/fight/oi, that pops!!!.mp3' mv 'sound/music/fight/rotloa_1.mp3' 'sound/music/fight/rot loaf.mp3' mv 'sound/music/fight/thefir_1.mp3' 'sound/music/fight/the fire brigade.mp3' mv 'sound/music/interface/acatna_1.mp3' 'sound/music/interface/a cat named mittens.mp3' mv 'sound/music/interface/ganksn_1.mp3' "sound/music/interface/gank sneakin'.mp3" mv 'sound/music/interface/ifyouc_1.mp3' 'sound/music/interface/if you can use a doorknob.mp3' mv 'sound/music/interface/ma_ams_1.mp3' "sound/music/interface/ma'am...some other sunset.mp3" mv 'sound/music/quiet/behold_1.mp3' 'sound/music/quiet/behold the great science fi (mellow mix).mp3' mv 'sound/music/quiet/eatyou_1.mp3' 'sound/music/quiet/eat your potatoes (mellow mix).mp3' mv 'sound/music/quiet/_finel_1.mp3' 'sound/music/quiet/(fine layers of) slaysenflite (mellow mix).mp3' mv 'sound/music/quiet/flavor_1.mp3' 'sound/music/quiet/flavor cats (in the comfort zone) (mellow mix).mp3' mv 'sound/music/quiet/neverm_1.mp3' 'sound/music/quiet/never mind the slacks and bashers (mellow mix).mp3' mv 'sound/music/quiet/thebal_1.mp3' 'sound/music/quiet/the ballad of ace lebaron (mellow mix).mp3' mv 'sound/music/standard/beho0000.mp3' 'sound/music/standard/behold the great science fi.mp3' mv 'sound/music/standard/eaty0000.mp3' 'sound/music/standard/eat your potatoes.mp3' mv 'sound/music/standard/_fin0000.mp3' 'sound/music/standard/(fine layers of) slaysenflite.mp3' mv 'sound/music/standard/flav0000.mp3' 'sound/music/standard/flavor cats (in the comfort zone).mp3' mv 'sound/music/standard/neve0000.mp3' 'sound/music/standard/never mind the slacks and bashers.mp3' mv 'sound/music/standard/theb0000.mp3' 'sound/music/standard/the ballad of ace lebaron.mp3' mv 'startup/gamese_1.bar' 'startup/gamesettings.bar' mv 'textures/cursors/co0576_1.cur' 'textures/cursors/command god no isis mono icon.cur' mv 'textures/cursors/co06af_1.cur' 'textures/cursors/command no god power mono icon.cur' mv 'textures/cursors/co085a_1.cur' 'textures/cursors/cursor_hyperlink.cur' mv 'textures/cursors/co0d51_1.cur' 'textures/cursors/command gather fish mono icon.cur' mv 'textures/cursors/co0ddb_1.cur' 'textures/cursors/command guard icon.cur' mv 'textures/cursors/co17c2_1.cur' 'textures/cursors/command resource drop off gold mono icon.cur' mv 'textures/cursors/co1b52_1.cur' 'textures/cursors/cursor_ankh.cur' mv 'textures/cursors/co1ec7_1.cur' 'textures/cursors/command gather berries icon.cur' mv 'textures/cursors/co36e9_1.cur' 'textures/cursors/command cursor icon.cur' mv 'textures/cursors/co3d45_1.cur' 'textures/cursors/command no god power icon.cur' mv 'textures/cursors/co3e43_1.cur' 'textures/cursors/command herdable gaia mono icon.cur' mv 'textures/cursors/co4014_1.cur' 'textures/cursors/command gather gold icon.cur' mv 'textures/cursors/co4096_1.cur' 'textures/cursors/command gather wood icon.cur' mv 'textures/cursors/co40d2_1.cur' 'textures/cursors/command gather food icon.cur' mv 'textures/cursors/co41d0_1.cur' 'textures/cursors/command gather fish icon.cur' mv 'textures/cursors/co4648_1.cur' 'textures/cursors/command gather berries mono icon.cur' mv 'textures/cursors/co48a6_1.cur' 'textures/cursors/command patrol icon.cur' mv 'textures/cursors/co4c41_1.cur' 'textures/cursors/command cursor mono icon.cur' mv 'textures/cursors/co4e87_1.cur' 'textures/cursors/command empower mono icon.cur' mv 'textures/cursors/co5d3d_1.cur' 'textures/cursors/command convert mono icon.cur' mv 'textures/cursors/co6199_1.cur' 'textures/cursors/command god no isis icon.cur' mv 'textures/cursors/co61d1_1.cur' 'textures/cursors/command resource drop off gold icon.cur' mv 'textures/cursors/co63d7_1.cur' 'textures/cursors/command convert icon.cur' mv 'textures/cursors/co67c2_1.cur' 'textures/cursors/command resource drop off food mono icon.cur' mv 'textures/cursors/co7449_1.cur' 'textures/cursors/command god power mono icon.cur' mv 'textures/cursors/co7874_1.cur' 'textures/cursors/command resource drop off wood mono icon.cur' mv 'textures/cursors/co7886_1.cur' 'textures/cursors/cursor_gather.cur' mv 'textures/cursors/co846f_1.cur' 'textures/cursors/command repair icon.cur' mv 'textures/cursors/co8c08_1.cur' 'textures/cursors/command god power icon.cur' mv 'textures/cursors/co8ebb_1.cur' 'textures/cursors/command guard mono icon.cur' mv 'textures/cursors/co8ff0_1.cur' 'textures/cursors/command help icon.cur' mv 'textures/cursors/co9852_1.cur' 'textures/cursors/command gather favor icon.cur' mv 'textures/cursors/coa0a9_1.cur' 'textures/cursors/command unboard icon.cur' mv 'textures/cursors/coa29a_1.cur' 'textures/cursors/command help mono icon.cur' mv 'textures/cursors/coa2d1_1.cur' 'textures/cursors/command resource drop off food icon.cur' mv 'textures/cursors/cob08a_1.cur' 'textures/cursors/command dangerous gaia mono icon.cur' mv 'textures/cursors/coba58_1.cur' 'textures/cursors/command herdable gaia icon.cur' mv 'textures/cursors/cobfd6_1.cur' 'textures/cursors/command build icon.cur' mv 'textures/cursors/cod7b8_1.cur' 'textures/cursors/command dangerous gaia icon.cur' mv 'textures/cursors/codcf9_1.cur' 'textures/cursors/command patrol mono icon.cur' mv 'textures/cursors/code16_1.cur' 'textures/cursors/command build mono icon.cur' mv 'textures/cursors/coe410_1.cur' 'textures/cursors/command gather wood mono icon.cur' mv 'textures/cursors/coe4c0_1.cur' 'textures/cursors/command gather gold mono icon.cur' mv 'textures/cursors/coe690_1.cur' 'textures/cursors/command resource drop off wood icon.cur' mv 'textures/cursors/coe8ee_1.cur' 'textures/cursors/command gather favor mono icon.cur' mv 'textures/cursors/coeb2a_1.cur' 'textures/cursors/command repair mono icon.cur' mv 'textures/cursors/coec91_1.cur' 'textures/cursors/command gather food mono icon.cur' mv 'textures/cursors/coed8a_1.cur' 'textures/cursors/command gather resource mono icon.cur' mv 'textures/cursors/cof31e_1.cur' 'textures/cursors/command resource drop off mono icon.cur' mv 'textures/cursors/cof67e_1.cur' 'textures/cursors/command unboard mono icon.cur' mv 'textures/cursors/comman_1.cur' 'textures/cursors/cursor_attack.cur' mv 'textures/cursors/comman_2.cur' 'textures/cursors/command attack mono icon.cur' mv 'textures/cursors/comman_3.cur' 'textures/cursors/command board icon.cur' mv 'textures/cursors/comman_4.cur' 'textures/cursors/command board mono icon.cur' mv 'textures/cursors/cu29a0_1.cur' 'textures/cursors/cursor_pray mono.cur' mv 'textures/cursors/cu3102_1.cur' 'textures/cursors/cursor_hyperlink mono.cur' mv 'textures/cursors/cu3753_1.cur' 'textures/cursors/cursor_build mono.cur' mv 'textures/cursors/cu5567_1.cur' 'textures/cursors/cursor_pray.cur' mv 'textures/cursors/cu6cd0_1.cur' 'textures/cursors/cursor_workon.cur' mv 'textures/cursors/cu89cd_1.cur' 'textures/cursors/cursor_gather mono.cur' mv 'textures/cursors/cu8a47_1.cur' 'textures/cursors/cursor_workon mono.cur' mv 'textures/cursors/cub6eb_1.cur' 'textures/cursors/command resource drop off icon.cur' mv 'textures/cursors/cuc6cb_1.cur' 'textures/cursors/cursor_build.cur' mv 'textures/cursors/cucae1_1.cur' 'textures/cursors/command gather resource icon.cur' mv 'textures/cursors/cue611_1.cur' 'textures/cursors/cursor_pointer.cur' mv 'textures/cursors/cue9f1_1.cur' 'textures/cursors/cursor_pointer mono.cur' mv 'textures/cursors/cursor_1.cur' 'textures/cursors/cursor_ankh mono.cur' mv 'textures/cursors/cursor_2.cur' 'textures/cursors/command empower icon.cur' mv 'textures/cursors/cursor_3.cur' 'textures/cursors/cursor_attack mono.cur' mv 'textures/cursors/cursor_4.cur' 'textures/cursors/command attack icon.cur' mv 'textures/cursors/sc7b34_1.cur' 'textures/cursors/scale_vert cursor.cur' mv 'textures/cursors/scale__1.cur' 'textures/cursors/scale_both cursor mono.cur' mv 'textures/cursors/scale__2.cur' 'textures/cursors/scale_both cursor.cur' mv 'textures/cursors/scale__3.cur' 'textures/cursors/scale_horiz cursor mono.cur' mv 'textures/cursors/scale__4.cur' 'textures/cursors/scale_horiz cursor.cur' mv 'textures/cursors/scbed3_1.cur' 'textures/cursors/scale_vert cursor mono.cur' mv 'trigger/basicv_1.xs' 'trigger/basicvcnomain.xs' mv 'trigger/rmsudd_1.xs' 'trigger/rmsuddendeathvc.xs' ) # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. ln --force --symbolic $(path_libraries)/* "\${PATH_PREFIX}" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up working_directory_cleanup exit 0 games/play-alpha-centauri.sh0000755000000000000000000002253014471751340015057 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec set -o errexit ### # Alpha Centauri # send your bug reports to vv221@dotslashplay.it ### script_version=20260311.4 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='alpha-centauri' GAME_NAME='Alpha Centauri' ARCHIVE_BASE_1_NAME='setup_sid_meiers_alpha_centauri_planetary_pack_1.1_pracx_ddraw_(77244).exe' ARCHIVE_BASE_1_MD5='d401431ff9c1c7526c3104194409bd6e' ARCHIVE_BASE_1_EXTRACTOR='innoextract' ARCHIVE_BASE_1_EXTRACTOR_OPTIONS='--lowercase' ARCHIVE_BASE_1_VERSION='6.0b-gog77244' ARCHIVE_BASE_1_SIZE='601205' ARCHIVE_BASE_1_URL='https://www.gog.com/game/sid_meiers_alpha_centauri' ARCHIVE_BASE_0_NAME='setup_sid_meiers_alpha_centauri_2.0.2.23.exe' ARCHIVE_BASE_0_MD5='6c9bd7e1cf88fdbfa0e75f694bf8b0e5' ARCHIVE_BASE_0_EXTRACTOR='innoextract' ARCHIVE_BASE_0_EXTRACTOR_OPTIONS='--lowercase' ARCHIVE_BASE_0_VERSION='6.0b-gog2.0.2.23' ARCHIVE_BASE_0_SIZE='609309' # Loki native Linux engine ARCHIVE_REQUIRED_ENGINE_NAME='alpha-centauri-linux.tar.xz' ARCHIVE_REQUIRED_ENGINE_MD5='a13676f2bdf1d3570ebb1835c2e4b2e8' ARCHIVE_REQUIRED_ENGINE_URL='https://downloads.dotslashplay.it/games/alpha-centauri/' # Optional icons pack ARCHIVE_OPTIONAL_ICONS_NAME='alpha-centauri-icons.2022-10-04.tar.gz' ARCHIVE_OPTIONAL_ICONS_MD5='9293b41c5b0ab978ff007f78d29fbbcf' ARCHIVE_OPTIONAL_ICONS_URL='https://downloads.dotslashplay.it/games/alpha-centauri/' CONTENT_ICONS_PATH='.' CONTENT_ICONS_FILES=' 16x16 32x32 48x48' CONTENT_PATH_DEFAULT='.' CONTENT_PATH_DEFAULT_0='app' CONTENT_GAME_BIN_PATH='.' CONTENT_GAME_BIN_FILES=' smac smac.dynamic smacx smacx.dynamic smacpack' CONTENT_GAME_MOVIES_FILES=' data/movies' CONTENT_FONTS_DATA_FILES=' alphc___.ttf arialnbi.ttf arialnb.ttf arialni.ttf arialn.ttf' CONTENT_FONTS0_DATA_PATH='data/fonts' CONTENT_FONTS0_DATA_FILES=' arialb.ttf ariali.ttf arialr.ttf loki_times.ttf' CONTENT_GAME_DATA_FILES=' data/facs data/fx data/maps data/projs data/scenarios data/techs data/voices data/alieniscript.txt data/alienuscript.txt data/alpha.txt data/alphax.txt data/angels.txt data/basename.txt data/believe.txt data/blurbs.txt data/blurbsx.txt data/brian.txt data/caretake.txt data/concepts.txt data/conceptsx.txt data/credits.txt data/cyborg.txt data/drone.txt data/facedit.txt data/faction.txt data/flavor.txt data/fungboy.txt data/gaians.txt data/help.txt data/helpx.txt data/hive.txt data/holobook.txt data/humanludes.txt data/interludea.txt data/interlude.txt data/interludex.txt data/jackal.txt data/labels.txt data/logfile.txt data/menu.txt data/monument.txt data/morgan.txt data/movlist.txt data/peace.txt data/pirates.txt data/planets.txt data/scenario.txt data/script.txt data/sid.txt data/spartans.txt data/system.txt data/techlongs.txt data/techshorts.txt data/tutor.txt data/univ.txt data/usurper.txt data/xscript.txt data/*.cfg data/*.cvr data/*.flc data/*.pcx data/*.sys' CONTENT_GAME0_DATA_PATH='.' CONTENT_GAME0_DATA_FILES=' data' CONTENT_DOC_DATA_FILES=' manual.pdf' CONTENT_DOC0_DATA_RELATIVE_PATH='data' CONTENT_DOC0_DATA_FILES=' readme.txt readme_ac.txt smac_xp2000_readme.txt' APP_MAIN_EXE='smac.dynamic' APP_MAIN_ICON='terran.exe' # Work around font rendering problems. # cf. https://freetype.org/freetype2/docs/reference/ft2-properties.html#tt_interpreter_version_xxx # (FreeType 2.14.2) APP_MAIN_PRERUN=' # Work around font rendering problems. # cf. https://freetype.org/freetype2/docs/reference/ft2-properties.html#tt_interpreter_version_xxx # (FreeType 2.14.2) export FREETYPE_PROPERTIES="truetype:interpreter-version=35" ' # Work around a rendering failure. # cf. https://github.com/libsdl-org/sdl2-compat/issues/581 # (SDL 3.4.2) APP_MAIN_PRERUN="${APP_MAIN_PRERUN:-} # Work around a rendering failure. # cf. https://github.com/libsdl-org/sdl2-compat/issues/581 # (SDL 3.4.2) export SDL_RENDER_DRIVER=vulkan " APP_SMACX_ID="${GAME_ID}-alien-crossfire" APP_SMACX_NAME="$GAME_NAME - Alien Crossfire" APP_SMACX_EXE='smacx.dynamic' APP_SMACX_ICON='terranx.exe' APP_SMACX_PRERUN="$APP_MAIN_PRERUN" PACKAGES_LIST=' PKG_BIN PKG_MOVIES PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_MOVIES PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libEGL.so.1 libfreetype.so.6 libm.so.6 libpthread.so.0 libSDL-1.2.so.0 libSDL_mixer-1.2.so.0 libSDL_ttf-2.0.so.0 libsmpeg-0.4.so.0 libz.so.1' PKG_MOVIES_ID="${GAME_ID}-movies" PKG_MOVIES_DESCRIPTION='movies' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # LD_PRELOAD shim allowing the old engine to run on top of current SDL libraries. # cf. https://github.com/ZeroPointEnergy/lokishim LD_PRELOAD_SOURCE=' #define _GNU_SOURCE #include #include void *__builtin_new(size_t size) { return malloc(size); } void __builtin_delete(void *ptr) { free(ptr); } void *__builtin_vec_new(size_t size) { return malloc(size); } void __builtin_vec_delete(void *ptr) { free(ptr); } ' # Convert text files to UNIX-style line breaks. REQUIREMENTS_LIST="${REQUIREMENTS_LIST:-} dos2unix" # Convert movies from the original format. REQUIREMENTS_LIST="${REQUIREMENTS_LIST:-} ffmpeg mplex" # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Check for the native engine availability. archive_initialize_required \ 'ARCHIVE_ENGINE' \ 'ARCHIVE_REQUIRED_ENGINE' # Check that the "rename" command is available. unset RENAME_CMD # On Arch Linux it is provided under the name "perl-rename". for rename_cmd in 'perl-rename' 'rename'; do if command -v "$rename_cmd" >/dev/null 2>&1; then RENAME_CMD="$rename_cmd" break fi done if [ -z "${RENAME_CMD:-}" ]; then error_dependency_not_found 'rename' exit 1 fi # Extract game data. archive_extraction_default archive_extraction 'ARCHIVE_ENGINE' # Drop unused alternative art assets. path_archive_contents=$(path_archive_contents) rm --force --recursive \ "${path_archive_contents}/alternative art" \ "${path_archive_contents}/color blind palette" # Replace spaces in file paths by underscores. find "${path_archive_contents}" -depth -name '* *' -execdir \ "$RENAME_CMD" 's/ /_/g' {} + # Convert text files to UNIX-style line breaks. find "${path_archive_contents}" -type f -name '*.txt' -exec \ dos2unix --quiet {} + # Move data files into the expected paths. mkdir --parents "${path_archive_contents}/data" mv --target-directory="${path_archive_contents}/data" -- \ "${path_archive_contents}"/facs \ "${path_archive_contents}"/fx \ "${path_archive_contents}"/maps \ "${path_archive_contents}"/projs \ "${path_archive_contents}"/techs \ "${path_archive_contents}"/voices \ "${path_archive_contents}"/*.cvr \ "${path_archive_contents}"/*.flc \ "${path_archive_contents}"/*.pcx \ "${path_archive_contents}"/*.sys \ "${path_archive_contents}"/*.txt mv \ "${path_archive_contents}/scenarios/alpha_centauri_scenarios" \ "${path_archive_contents}/data/scenarios" if [ -e "${path_archive_contents}/__support/app/ip.cfg" ]; then mv \ "${path_archive_contents}/__support/app/ip.cfg" \ "${path_archive_contents}/data/ip.cfg" else mv \ "${path_archive_contents}/ip.cfg" \ "${path_archive_contents}/data/ip.cfg" fi # Convert movies from the original format. case "$(messages_language)" in ('fr') message_begin='Conversion des fichiers vidéo, cette étape peut prendre plusieurs minutes…\n' message_done='Conversion terminée\n' ;; ('en'|*) message_begin='Converting video files, this will take several minutes…\n' message_done='Converting done\n' ;; esac printf "$message_begin" destination_directory="${path_archive_contents}/data/movies" mkdir "$destination_directory" find "${path_archive_contents}/movies" -name '*.wve' -print0 | xargs --null --max-args=1 --max-procs="$(nproc)" sh -c ' destination_directory=$1 source_file=$2 stream_video="${source_file%.wve}.m1v" stream_audio="${source_file%.wve}.mp2" destination_file="${destination_directory}/$(basename "$source_file" .wve).mpg" ffmpeg -i "$source_file" -loglevel quiet -map v -codec:v mpeg1video -b:v 1727k -minrate 1727k -maxrate 1727k -r 29.97 "$stream_video" ffmpeg -i "$source_file" -loglevel quiet -map a -codec:a mp2 -ar 44100 "$stream_audio" rm "$source_file" mplex --verbose 0 --video-buffer 500 --output "$destination_file" "$stream_video" "$stream_audio" rm "$stream_video" "$stream_audio" ' -- "$destination_directory" printf "$message_done" # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Link the fonts in the hardcoded path the game engine expects. fonts_source=$(path_fonts_ttf) fonts_destination="$(package_path 'PKG_DATA')$(path_game_data)/data/fonts" mkdir --parents "$fonts_destination" for font_file in \ 'alphc___.ttf' \ 'arialr.ttf' \ 'arialb.ttf' \ 'ariali.ttf' \ 'arialn.ttf' \ 'arialnb.ttf' \ 'arialni.ttf' \ 'arialnbi.ttf' \ 'loki_times.ttf' do ln --symbolic "${fonts_source}/${font_file}" "$fonts_destination" done # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-anachronox.sh0000755000000000000000000000660014471751340014322 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2016 Mopi set -o errexit ### # Anachronox # send your bug reports to vv221@dotslashplay.it ### script_version=20260323.5 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='anachronox' GAME_NAME='Anachronox' ARCHIVE_BASE_1_NAME='setup_anachronox_1.02_(22258).exe' ARCHIVE_BASE_1_MD5='4e23d4f7637f6914a7cd6c13feb7ad7d' ARCHIVE_BASE_1_TYPE='innosetup' ARCHIVE_BASE_1_SIZE='1074901' ARCHIVE_BASE_1_VERSION='1.02-gog22258' ARCHIVE_BASE_1_URL='https://www.gog.com/game/anachronox' ARCHIVE_BASE_0_NAME='setup_anachronox_2.0.0.28.exe' ARCHIVE_BASE_0_MD5='a9e148972e51a4980a2531d12a85dfc0' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_SIZE='1100000' ARCHIVE_BASE_0_VERSION='1.02-gog2.0.0.28' CONTENT_PATH_DEFAULT='.' CONTENT_PATH_DEFAULT_0='app' CONTENT_GAME_BIN_FILES=' anox.exe' # anox.exe requirements CONTENT_LIBS_BIN_FILES=' anoxaux.dll anoxgfx.dll gamex86.dll PATCH.dll ref_gl.dll zlib.dll' # anoxgfx.dll requirements CONTENT_LIBS0_BIN_FILES=' libpng13a.dll' CONTENT_GAME0_BIN_FILES=' anoxdata/MILES/mp3dec.asi anoxdata/MILES/*.m3d anoxdata/PLUGINS/dllorder.txt' CONTENT_LIBS1_BIN_FILES=' anoxdata/PLUGINS/anoxsnd.dll anoxdata/PLUGINS/ApeExtend.dll anoxdata/PLUGINS/camera.dll anoxdata/PLUGINS/Intellinox.dll anoxdata/PLUGINS/NoxDrop.dll anoxdata/PLUGINS/NoxGame.dll anoxdata/PLUGINS/planet.dll anoxdata/PLUGINS/ui.dll anoxdata/PLUGINS/viewthing.dll' # anoxdata/PLUGINS/anoxsnd.dll requirements CONTENT_LIBS2_BIN_FILES=' mss32.dll' CONTENT_GAME_DATA_FILES=' anoxdata/CONFIGS anoxdata/gameflow anoxdata/graphics anoxdata/MODELS anoxdata/MUSIC anoxdata/SAVE anoxdata/SOUND anoxdata/version.anox anoxdata/anox1.zip anoxdata/*.dat anachronox_word.jpg' CONTENT_DOC_DATA_FILES=' manual.pdf readme.htm Anachronox Patch 1_02.rtf *README.txt' USER_PERSISTENT_DIRECTORIES=' anoxdata/SAVE' USER_PERSISTENT_FILES=' anoxdata/nokill.*' APP_MAIN_EXE='anox.exe' APP_MAIN_ICON='anox.ico' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --symbolic "$dll_source" "$dll_destination" done EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-ballisticng-expansions.sh0000755000000000000000000000577514471751340016656 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2024 Antoine Le Gonidec set -o errexit ### # BallisticNG expansions: # - Neon Nights # send your bug reports to vv221@dotslashplay.it ### script_version=20260414.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='ballisticng' GAME_NAME='BallisticNG' EXPANSION_ID_NEON='neon-nights' EXPANSION_NAME_NEON='Neon Nights' ARCHIVE_BASE_NEON_7_NAME='ballisticng_neon_nights_1_4_1_3_89966.sh' ARCHIVE_BASE_NEON_7_MD5='75fdc44f845e855ccb5cc54bff8b2b13' ARCHIVE_BASE_NEON_7_SIZE='100404' ARCHIVE_BASE_NEON_7_VERSION='1.4.1.3-gog89966' ARCHIVE_BASE_NEON_7_URL='https://www.gog.com/game/ballisticng_neon_nights' ARCHIVE_BASE_NEON_6_NAME='ballisticng_neon_nights_1_4_1_2_89013.sh' ARCHIVE_BASE_NEON_6_MD5='7abe3ec9dff17a204104d99e92070346' ARCHIVE_BASE_NEON_6_SIZE='100096' ARCHIVE_BASE_NEON_6_VERSION='1.4.1.2-gog89013' ARCHIVE_BASE_NEON_5_NAME='ballisticng_neon_nights_1_4_1_1_87257.sh' ARCHIVE_BASE_NEON_5_MD5='5402d684c341acf18943ceb5baa12eff' ARCHIVE_BASE_NEON_5_SIZE='100096' ARCHIVE_BASE_NEON_5_VERSION='1.4.1.1-gog87257' ARCHIVE_BASE_NEON_4_NAME='ballisticng_neon_nights_1_4_1b_86951.sh' ARCHIVE_BASE_NEON_4_MD5='0d8a35d1016d5c16e62ee1e6a7cafb84' ARCHIVE_BASE_NEON_4_SIZE='100096' ARCHIVE_BASE_NEON_4_VERSION='1.4.1b-gog86951' ARCHIVE_BASE_NEON_3_NAME='ballisticng_neon_nights_1_4_1_86271.sh' ARCHIVE_BASE_NEON_3_MD5='a7f2c3344970d5ccf6a7ec0757abee39' ARCHIVE_BASE_NEON_3_SIZE='100096' ARCHIVE_BASE_NEON_3_VERSION='1.4.1-gog86271' ARCHIVE_BASE_NEON_2_NAME='ballisticng_neon_nights_1_4_0_1b_81954.sh' ARCHIVE_BASE_NEON_2_MD5='5d2391186e508eda373e7caf24eba6f6' ARCHIVE_BASE_NEON_2_SIZE='100096' ARCHIVE_BASE_NEON_2_VERSION='1.4.0.1b-gog81954' ARCHIVE_BASE_NEON_1_NAME='ballisticng_neon_nights_1_4_0_1_81860.sh' ARCHIVE_BASE_NEON_1_MD5='10d999ef9faeded119f293c6ee8b6d7e' ARCHIVE_BASE_NEON_1_SIZE='100096' ARCHIVE_BASE_NEON_1_VERSION='1.4.0.1-gog81860' ARCHIVE_BASE_NEON_0_NAME='ballisticng_neon_nights_1_3_3_1_69502.sh' ARCHIVE_BASE_NEON_0_MD5='18897d4477a80a88afe3a05fa52cfee9' ARCHIVE_BASE_NEON_0_SIZE='100101' ARCHIVE_BASE_NEON_0_VERSION='1.3.3.1-gog69502' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME_MAIN_FILES=' DLC' PKG_PARENT_ID="$GAME_ID" PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_PARENT' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_default # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-ballisticng.sh0000755000000000000000000000773414471751340014466 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2024 Antoine Le Gonidec set -o errexit ### # BallisticNG # send your bug reports to vv221@dotslashplay.it ### script_version=20260414.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='ballisticng' GAME_NAME='BallisticNG' ARCHIVE_BASE_7_NAME='ballisticng_1_4_1_3_89966.sh' ARCHIVE_BASE_7_MD5='3d6cb02350c7a93467d4e702560d6a96' ARCHIVE_BASE_7_SIZE='3449398' ARCHIVE_BASE_7_VERSION='1.4.1.3-gog89966' ARCHIVE_BASE_7_URL='https://www.gog.com/game/ballisticng' ARCHIVE_BASE_6_NAME='ballisticng_1_4_1_2_89013.sh' ARCHIVE_BASE_6_MD5='3c0891e033e4efaa20b8f4af8f9218d5' ARCHIVE_BASE_6_SIZE='3430475' ARCHIVE_BASE_6_VERSION='1.4.1.2-gog89013' ARCHIVE_BASE_5_NAME='ballisticng_1_4_1_1_87257.sh' ARCHIVE_BASE_5_MD5='ee9ecebb26e5580d057d2ea1e897b66e' ARCHIVE_BASE_5_SIZE='3430475' ARCHIVE_BASE_5_VERSION='1.4.1.1-gog87257' ARCHIVE_BASE_4_NAME='ballisticng_1_4_1b_86951.sh' ARCHIVE_BASE_4_MD5='fe6e6d0cf71aef856bfbf1cddd8ac360' ARCHIVE_BASE_4_SIZE='3430475' ARCHIVE_BASE_4_VERSION='1.4.1b-gog86951' ARCHIVE_BASE_3_NAME='ballisticng_1_4_1_86271.sh' ARCHIVE_BASE_3_MD5='e50a92e232d519ba942e79c8b98652e4' ARCHIVE_BASE_3_SIZE='3430475' ARCHIVE_BASE_3_VERSION='1.4.1-gog86271' ARCHIVE_BASE_2_NAME='ballisticng_1_4_0_1b_81954.sh' ARCHIVE_BASE_2_MD5='3adf1cbf124a48baccb987473eec85ea' ARCHIVE_BASE_2_SIZE='3381101' ARCHIVE_BASE_2_VERSION='1.4.0.1b-gog81954' ARCHIVE_BASE_1_NAME='ballisticng_1_4_0_1_81860.sh' ARCHIVE_BASE_1_MD5='beedfb6afab94fc66783c12b805876df' ARCHIVE_BASE_1_SIZE='3380551' ARCHIVE_BASE_1_VERSION='1.4.0.1-gog81860' ARCHIVE_BASE_0_NAME='ballisticng_1_3_3_1_69502.sh' ARCHIVE_BASE_0_MD5='4fd3dd5695e9f94523bb699df024dbee' ARCHIVE_BASE_0_SIZE='2749158' ARCHIVE_BASE_0_VERSION='1.3.3.1-gog69502' UNITY3D_NAME='BallisticNG' UNITY3D_PLUGINS=' cimgui.so libaudioplugin_phonon.so libphonon.so' # Starting with game version 1.4, # the game no longer loads without the shipped Steam library. UNITY3D_PLUGINS="$UNITY3D_PLUGINS libsteam_api.so" CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME_EXPANSION_TRACKS_FILES=' DLC/free extra tracks.cpd DLC/free extra tracks.cps' CONTENT_GAME_EXPANSION_VOICES_FILES=' User/Mods/Sounds/Legacy System Voices' CONTENT_GAME_MODDING_FILES=' Modding' CONTENT_DOC_DATA_FILES=' Legacy Track Creator Commands.txt' USER_PERSISTENT_DIRECTORIES=' User' PACKAGES_LIST=' PKG_BIN PKG_EXPANSION_TRACKS PKG_EXPANSION_VOICES PKG_MODDING PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libgcc_s.so.1 libm.so.6 libpthread.so.0 librt.so.1 libstdc++.so.6 libz.so.1' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' PKG_EXPANSION_TRACKS_ID="${GAME_ID}-expansion-free-extra-tracks" PKG_EXPANSION_TRACKS_DESCRIPTION='expansion - free extra tracks' PKG_EXPANSION_TRACKS_DEPENDENCIES_SIBLINGS=' PKG_BIN' PKG_EXPANSION_VOICES_ID="${GAME_ID}-expansion-legacy-system-voices" PKG_EXPANSION_VOICES_DESCRIPTION='expansion - legacy system voices' PKG_EXPANSION_VOICES_DEPENDENCIES_SIBLINGS=' PKG_BIN' PKG_MODDING_ID="${GAME_ID}-modding" PKG_MODDING_DESCRIPTION='modding' PKG_MODDING_DEPENDENCIES_SIBLINGS=' PKG_BIN' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-bastion.sh0000755000000000000000000001057214471751340013624 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2017 Mopi # SPDX-FileCopyrightText: © 2020 Hoël Bézier set -o errexit ### # Bastion # send your bug reports to vv221@dotslashplay.it ### script_version=20250814.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='bastion' GAME_NAME='Bastion' ARCHIVE_BASE_GOG_3_NAME='bastion_1_0_1747_initial_test_33876.sh' ARCHIVE_BASE_GOG_3_MD5='b4edf5e95e952a35bfde0c12959134ab' ARCHIVE_BASE_GOG_3_SIZE='1285709' ARCHIVE_BASE_GOG_3_VERSION='1.50436-gog33876' ARCHIVE_BASE_GOG_3_URL='https://www.gog.com/game/bastion' ARCHIVE_BASE_GOG_2_NAME='bastion_1_50436_29_08_2018_23317.sh' ARCHIVE_BASE_GOG_2_MD5='73c6b33c23232597bec30f211a46f73d' ARCHIVE_BASE_GOG_2_SIZE='1400000' ARCHIVE_BASE_GOG_2_VERSION='1.50436.20180829-gog23317' ARCHIVE_BASE_GOG_1_NAME='bastion_en_1_50436_23291.sh' ARCHIVE_BASE_GOG_1_MD5='59c2bbcf43cd9ba243d5fa1baa4a4b48' ARCHIVE_BASE_GOG_1_SIZE='1400000' ARCHIVE_BASE_GOG_1_VERSION='1.50436-gog23291' ARCHIVE_BASE_GOG_0_NAME='gog_bastion_2.0.0.1.sh' ARCHIVE_BASE_GOG_0_MD5='e5e6eefb4885b67abcfa201b1b3a9c48' ARCHIVE_BASE_GOG_0_SIZE='1300000' ARCHIVE_BASE_GOG_0_VERSION='1.2.20161020-gog2.0.0.1' ARCHIVE_BASE_HUMBLE_0_NAME='bastion-10162016-bin' ARCHIVE_BASE_HUMBLE_0_MD5='19fea173ff2da0f990f60bd5e7c3b237' ## This is a MojoSetup installer, not relying on Makeself. ARCHIVE_BASE_HUMBLE_0_EXTRACTOR='bsdtar' ARCHIVE_BASE_HUMBLE_0_SIZE='1253966' ARCHIVE_BASE_HUMBLE_0_VERSION='1.2.20161020-humble161019' CONTENT_PATH_DEFAULT_GOG='data/noarch/game' CONTENT_PATH_DEFAULT_HUMBLE='data' CONTENT_GAME_MAIN_FILES=' Bastion.bmp Bastion.exe gamecontrollerdb.txt mono monomachineconfig monoconfig Content' CONTENT_DOC_MAIN_FILES=' Linux.README' ## Some Mono libraries are not provided by system packages. CONTENT_GAME0_MAIN_FILES=' FMOD.dll FNA.dll FNA.dll.config Lidgren.Network.dll MojoShader.dll MonoGame.Framework.Net.dll SDL2.dll' ## System-provided libmojoshader.so can not be used, as it triggers the following error: ## System.NullReferenceException: Object reference not set to an instance of an object ## cf. https://forge.dotslashplay.it/play.it/games/-/issues/653 CONTENT_LIBS_FILES=' libfmodex.so libmojoshader.so' CONTENT_LIBS_LIBS64_RELATIVE_PATH='lib64' CONTENT_LIBS_LIBS64_FILES="$CONTENT_LIBS_FILES" CONTENT_LIBS_LIBS32_RELATIVE_PATH='lib' CONTENT_LIBS_LIBS32_FILES="$CONTENT_LIBS_FILES" ## libSteamWrapper.so is required to prevent a crash of the Humble Bundle build, ## libsteam_api.so is required by libSteamWrapper.so. CONTENT_LIBS0_FILES=' libSteamWrapper.so libsteam_api.so' CONTENT_LIBS0_LIBS64_RELATIVE_PATH='lib64' CONTENT_LIBS0_LIBS64_FILES_HUMBLE="$CONTENT_LIBS0_FILES" CONTENT_LIBS0_LIBS32_RELATIVE_PATH='lib' CONTENT_LIBS0_LIBS32_FILES_HUMBLE="$CONTENT_LIBS0_FILES" APP_MAIN_EXE='Bastion.exe' APP_MAIN_ICON='Bastion.bmp' PACKAGES_LIST=' PKG_MAIN PKG_LIBS32 PKG_LIBS64' PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_LIBS' PKG_MAIN_DEPENDENCIES_LIBRARIES=' libGL.so.1 libSDL2-2.0.so.0 libudev.so.1' PKG_MAIN_DEPENDENCIES_MONO_LIBRARIES=' mscorlib.dll Mono.Posix.dll Mono.Security.dll System.dll System.Configuration.dll System.Core.dll System.Data.dll System.Drawing.dll System.Numerics.dll System.Runtime.Serialization.dll System.Security.dll System.Xml.dll System.Xml.Linq.dll' PKG_LIBS_ID="${GAME_ID}-libs" PKG_LIBS64_ARCH='64' PKG_LIBS32_ARCH='32' PKG_LIBS_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libm.so.6 libpthread.so.0 libstdc++.so.6' # Load common functions PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run the default initialization actions initialization_default "$@" # Extract game data archive_extraction_default # Include game data content_inclusion_icons 'PKG_MAIN' content_inclusion_default # Write launchers launchers_generation 'PKG_MAIN' # Build packages packages_generation print_instructions # Clean up working_directory_cleanup exit 0 games/play-beyond-good-and-evil.sh0000755000000000000000000001102614471751340016063 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2017 Mopi set -o errexit ### # Beyond Good and Evil # send your bug reports to vv221@dotslashplay.it ### script_version=20260326.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='beyond-good-and-evil' GAME_NAME='Beyond Good and Evil' ARCHIVE_BASE_0_NAME='setup_beyond_good_and_evil_2.1.0.9.exe' ARCHIVE_BASE_0_MD5='fdfa4b94cf02e24523b01c9d54568482' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_SIZE='2195754' ARCHIVE_BASE_0_VERSION='1.0-gog2.1.0.9' ARCHIVE_BASE_0_URL='https://www.gog.com/game/beyond_good_and_evil' CONTENT_PATH_DEFAULT='app' CONTENT_GAME_BIN_FILES=' BGE.exe' # bge.exe requirements CONTENT_LIBS_BIN_FILES=' binkw32.dll' CONTENT_GAME0_BIN_FILES=' SettingsApplication.exe' # settingsapplication.exe crashes on launch if this library is not available. CONTENT_LIBS0_BIN_PATH='sys' CONTENT_LIBS0_BIN_FILES=' eax.dll' # settingsapplication.exe fails with a critical error if any of the following binaries is missing. CONTENT_GAME1_BIN_FILES=' CheckApplication.exe run.exe' CONTENT_GAME_DATA_FILES=' jade.spe sally_clean.bf' # TODO: Check if the following video file is required. CONTENT_GAME0_DATA_FILES=' BGEMakingOf.bik' CONTENT_DOC_DATA_FILES=' manual.pdf readme.txt' USER_PERSISTENT_FILES=' sally.idx *.sav' # Prevent a loss of input on loss of focus. # (WINE 10.0) WINE_VIRTUAL_DESKTOP='1280x1024' WINE_REGEDIT_PERSISTENT_KEYS=' HKEY_CURRENT_USER\Software\Ubisoft\Beyond Good & Evil\settingsapplication.INI' # Set default settings on first launch, preventing the need to force-spawn the settings window. WINE_REGISTRY_INIT=' [HKEY_CURRENT_USER\Software\Ubisoft\Beyond Good & Evil\settingsapplication.INI\Basic video] "Activate compatibility settings"=dword:00000000 "Adapter GUID"=hex:00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 "AfterFx"=dword:00000001 "Autogen mipmap"=dword:00000001 "Blurryness"=dword:0000000a "Depth buffer"=dword:00000001 "Flare"=dword:00000001 "Flipmode"=dword:00000003 "Format"=dword:00000016 "Frame buffers"=dword:00000002 "HardwareVertexProcessing"=dword:00000001 "Mipmapping"=dword:00000001 "Mode"=dword:0000000d "Shadows Quality"=dword:00000200 "SSE Enabled"=dword:00000001 "Vertex Streams"=dword:00000001 "Video Adapter"=dword:00000000 "VSynch"=dword:00000001 "Water quality"=dword:00000002 [HKEY_CURRENT_USER\Software\Ubisoft\Beyond Good & Evil\settingsapplication.INI\Key bindings] "Buddy action/Compass"=dword:001200cf "Center view"=dword:002e004c "Crouch"=dword:001d00dd "Down"=dword:001f00d0 "Horizontal inversion"=dword:00000001 "Inventory next"=dword:000400d1 "Inventory prev"=dword:000300c9 "Left"=dword:001e00cb "Look mode"=dword:002a0052 "Map"=dword:000f000e "Menu"=dword:000100c5 "Menu back"=dword:01030001 "Menu info"=dword:00390104 "Primary action"=dword:01020000 "Right"=dword:002000cd "Run/Accelerate"=dword:0039009d "Secondary action"=dword:01030000 "Up"=dword:001100c8 "Use object"=dword:001000d3 "Vertical inversion"=dword:00000001 [HKEY_CURRENT_USER\Software\Ubisoft\Beyond Good & Evil\settingsapplication.INI\Sound] "Audio board FX Capable"=dword:00000001 "Audio board GUID"=hex:00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 "Sound FX"=dword:00000001 ' APP_MAIN_EXE='BGE.exe' APP_SETTINGS_ID="${GAME_ID}-settings" APP_SETTINGS_NAME="${GAME_NAME} - settings" APP_SETTINGS_CAT='Settings' APP_SETTINGS_EXE='SettingsApplication.exe' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. ## Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. ln --force --symbolic $(path_libraries)/* "\${PATH_PREFIX}" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-blacksad-under-the-skin.sh0000755000000000000000000001300714471751340016560 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2021 Antoine Le Gonidec set -o errexit ### # Blacksad: Under the Skin # send your bug reports to vv221@dotslashplay.it ### script_version=20260314.2 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='blacksad-under-the-skin' GAME_NAME='Blacksad: Under the Skin' ARCHIVE_BASE_2_NAME='setup_blacksad_under_the_skin_20270705_blacksad_patch_(74700).exe' ARCHIVE_BASE_2_MD5='70a5fc8fb6321cf832154a6db74366f5' ARCHIVE_BASE_2_TYPE='innosetup' ARCHIVE_BASE_2_PART1_NAME='setup_blacksad_under_the_skin_20270705_blacksad_patch_(74700)-1.bin' ARCHIVE_BASE_2_PART1_MD5='0d258ccdb79b34e9124108c73a18b49f' ARCHIVE_BASE_2_PART2_NAME='setup_blacksad_under_the_skin_20270705_blacksad_patch_(74700)-2.bin' ARCHIVE_BASE_2_PART2_MD5='3ef508b9e836742dc5ead2519799b5b5' ARCHIVE_BASE_2_PART3_NAME='setup_blacksad_under_the_skin_20270705_blacksad_patch_(74700)-3.bin' ARCHIVE_BASE_2_PART3_MD5='c0a9371f54b7dd6150ecdf4d7f8c9a09' ARCHIVE_BASE_2_PART4_NAME='setup_blacksad_under_the_skin_20270705_blacksad_patch_(74700)-4.bin' ARCHIVE_BASE_2_PART4_MD5='5d9e0d6b7b1af4c423f44e599ce70fa1' ARCHIVE_BASE_2_SIZE='15210283' ## "20270705" is most probably a typo for "20240705". ARCHIVE_BASE_2_VERSION='2024.07.05-gog74700' ARCHIVE_BASE_2_URL='https://www.gog.com/game/blacksad_under_the_skin' ARCHIVE_BASE_1_NAME='setup_blacksad_under_the_skin_20240621_(74269).exe' ARCHIVE_BASE_1_MD5='9e1bafb70073291b5bbf554ba9f48cb7' ARCHIVE_BASE_1_TYPE='innosetup' ARCHIVE_BASE_1_PART1_NAME='setup_blacksad_under_the_skin_20240621_(74269)-1.bin' ARCHIVE_BASE_1_PART1_MD5='19b038f25821bb10fe8439af45db294b' ARCHIVE_BASE_1_PART2_NAME='setup_blacksad_under_the_skin_20240621_(74269)-2.bin' ARCHIVE_BASE_1_PART2_MD5='9085f255243fd1eddc058ded6a69da97' ARCHIVE_BASE_1_PART3_NAME='setup_blacksad_under_the_skin_20240621_(74269)-3.bin' ARCHIVE_BASE_1_PART3_MD5='14e9c32b5fbb26a4c004cca8175dfd42' ARCHIVE_BASE_1_PART4_NAME='setup_blacksad_under_the_skin_20240621_(74269)-4.bin' ARCHIVE_BASE_1_PART4_MD5='b1f14b3ae72154f77f0905f1c51e5bcb' ARCHIVE_BASE_1_SIZE='15208271' ARCHIVE_BASE_1_VERSION='2024.06.21-gog74269' ARCHIVE_BASE_0_NAME='setup_blacksad_under_the_skin_1.0.5_12210.2935.2020040301_(37312).exe' ARCHIVE_BASE_0_MD5='9c9211aac30170bf4ac85950094f99a2' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_PART1_NAME='setup_blacksad_under_the_skin_1.0.5_12210.2935.2020040301_(37312)-1.bin' ARCHIVE_BASE_0_PART1_MD5='0d21ed49ef3377b4816ae364cbb5eee1' ARCHIVE_BASE_0_PART2_NAME='setup_blacksad_under_the_skin_1.0.5_12210.2935.2020040301_(37312)-2.bin' ARCHIVE_BASE_0_PART2_MD5='58e82951055a5c863cd804f2421e729f' ARCHIVE_BASE_0_PART3_NAME='setup_blacksad_under_the_skin_1.0.5_12210.2935.2020040301_(37312)-3.bin' ARCHIVE_BASE_0_PART3_MD5='acf9dc21ffa4d483b124561e5b19633d' ARCHIVE_BASE_0_PART4_NAME='setup_blacksad_under_the_skin_1.0.5_12210.2935.2020040301_(37312)-4.bin' ARCHIVE_BASE_0_PART4_MD5='d1c80d50a67c2a4212e9898416193562' ARCHIVE_BASE_0_SIZE='16000000' ARCHIVE_BASE_0_VERSION='1.0.5-gog37312' UNITY3D_NAME='Blacksad' # TODO: Experimental support for Windows Unity3D plugins, # no support in ./play.it library yet. # (./play.it 2.35) # Prevent a freeze of the initial loading. UNITY3D_PLUGINS=' GalaxyCSharpGlue.dll' # GalaxyCSharpGlue.dll requirement UNITY3D_PLUGINS="$UNITY3D_PLUGINS Galaxy64.dll" CONTENT_PATH_DEFAULT='.' # Prevent a fatal error on launch. CONTENT_LIBS_BIN_FILES=' MonoBleedingEdge/EmbedRuntime/mono-2.0-bdwgc.dll' # blacksad.exe requirements CONTENT_LIBS0_BIN_FILES=' UnityPlayer.dll' CONTENT_GAME_DATA_ASSETS_FILES=" ${UNITY3D_NAME}_Data/StreamingAssets" WINE_PERSISTENT_DIRECTORIES=' users/${USER}/AppData/LocalLow/PenduloStudios/Blacksad' PACKAGES_LIST=' PKG_BIN PKG_DATA_ASSETS PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' PKG_DATA_DEPENDENCIES_SIBLINGS=' PKG_DATA_ASSETS' PKG_DATA_ASSETS_ID="${PKG_DATA_ID}-assets" PKG_DATA_ASSETS_DESCRIPTION="$PKG_DATA_DESCRIPTION - assets" # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' # Prevent inclusion of unwanted shipped libraries. content_inclusion_default_libraries 'PKG_BIN' rm --recursive "$(path_archive_contents)/MonoBleedingEdge/EmbedRuntime" # Include Unity3D plugins. unity3d_plugins_inclusion 'PKG_BIN' "$(unity3d_name)_Data/Plugins/x86_64" "$(path_libraries)/$(unity3d_name)_Data/Plugins" content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --symbolic "$dll_source" "$dll_destination" done EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-blackwell-series.sh0000755000000000000000000003004214471751340015407 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2017 Mopi # SPDX-FileCopyrightText: © 2017 Antoine Le Gonidec set -o errexit ### # Blackwell series: # - Blackwell 1 # - Blackwell 2 # - Blackwell 3 # - Blackwell 4 # - Blackwell 5 # send your bug reports to vv221@dotslashplay.it ### script_version=20250722.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID_BLACKWELL1='blackwell-1' GAME_NAME_BLACKWELL1='Blackwell 1: The Blackwell Legacy' GAME_ID_BLACKWELL2='blackwell-2' GAME_NAME_BLACKWELL2='Blackwell 2: Blackwell Unbound' GAME_ID_BLACKWELL3='blackwell-3' GAME_NAME_BLACKWELL3='Blackwell 3: The Blackwell Convergence' GAME_ID_BLACKWELL4='blackwell-4' GAME_NAME_BLACKWELL4='Blackwell 4: The Blackwell Deception' GAME_ID_BLACKWELL5='blackwell-5' GAME_NAME_BLACKWELL5='Blackwell 5: The Blackwell Epiphany' # Game archives ## Blackwell 1 ARCHIVE_BASE_BLACKWELL1_9_NAME='blackwell_legacy_4_0c_83072.sh' ARCHIVE_BASE_BLACKWELL1_9_MD5='49e613195092d1b0ec88dcb3caf67a90' ARCHIVE_BASE_BLACKWELL1_9_SIZE='317377' ARCHIVE_BASE_BLACKWELL1_9_VERSION='4.0c-gog83072' ARCHIVE_BASE_BLACKWELL1_9_URL='https://www.gog.com/game/blackwell_bundle' ARCHIVE_BASE_BLACKWELL1_8_NAME='blackwell_legacy_4_0b_81238.sh' ARCHIVE_BASE_BLACKWELL1_8_MD5='03b3da181b08c148781d422165fbeaf4' ARCHIVE_BASE_BLACKWELL1_8_SIZE='317376' ARCHIVE_BASE_BLACKWELL1_8_VERSION='4.0b-gog81238' ARCHIVE_BASE_BLACKWELL1_7_NAME='blackwell_legacy_4_0_79895.sh' ARCHIVE_BASE_BLACKWELL1_7_MD5='3606c861a4d62a55f8a451a9d07e3b1b' ARCHIVE_BASE_BLACKWELL1_7_SIZE='312096' ARCHIVE_BASE_BLACKWELL1_7_VERSION='4.0-gog79895' ARCHIVE_BASE_BLACKWELL1_6_NAME='blackwell_legacy_3_7_76434.sh' ARCHIVE_BASE_BLACKWELL1_6_MD5='2cfc73a83548212940a995ab4b01dd50' ARCHIVE_BASE_BLACKWELL1_6_SIZE='312095' ARCHIVE_BASE_BLACKWELL1_6_VERSION='3.7-gog76434' ARCHIVE_BASE_BLACKWELL1_5_NAME='blackwell_legacy_3_5_71786.sh' ARCHIVE_BASE_BLACKWELL1_5_MD5='3b1b569ec92ff53a8ad243627a13c6a2' ARCHIVE_BASE_BLACKWELL1_5_SIZE='312061' ARCHIVE_BASE_BLACKWELL1_5_VERSION='3.5-gog71786' ARCHIVE_BASE_BLACKWELL1_4_NAME='blackwell_legacy_3_1_67142.sh' ARCHIVE_BASE_BLACKWELL1_4_MD5='840ad19ae85cbfdcbc431e8333767f0d' ARCHIVE_BASE_BLACKWELL1_4_SIZE='312516' ARCHIVE_BASE_BLACKWELL1_4_VERSION='3.1-gog67142' ARCHIVE_BASE_BLACKWELL1_3_NAME='blackwell_legacy_3_0_66153.sh' ARCHIVE_BASE_BLACKWELL1_3_MD5='f21fa6de53dc115ccfb769ffe3ef9e70' ARCHIVE_BASE_BLACKWELL1_3_SIZE='320000' ARCHIVE_BASE_BLACKWELL1_3_VERSION='3.0-gog66153' ARCHIVE_BASE_BLACKWELL1_2_NAME='blackwell_legacy_2_4a_55329.sh' ARCHIVE_BASE_BLACKWELL1_2_MD5='4ac2a52315daa0ccde214adf68dadfc9' ARCHIVE_BASE_BLACKWELL1_2_SIZE='320000' ARCHIVE_BASE_BLACKWELL1_2_VERSION='2.4a-gog55329' ARCHIVE_BASE_BLACKWELL1_1_NAME='blackwell_legacy_2_2_3_53579.sh' ARCHIVE_BASE_BLACKWELL1_1_MD5='1649b8c1c430dd24b0bbe89f7ccb541b' ARCHIVE_BASE_BLACKWELL1_1_SIZE='320000' ARCHIVE_BASE_BLACKWELL1_1_VERSION='2.2.3-gog53579' ## Optional icons pack ARCHIVE_OPTIONAL_ICONS_NAME_BLACKWELL1='blackwell-1_icons.tar.xz' ARCHIVE_OPTIONAL_ICONS_MD5_BLACKWELL1='3352b2267c9200b1c06d21c5d65ddef8' ARCHIVE_OPTIONAL_ICONS_URL_BLACKWELL1='https://downloads.dotslashplay.it/games/blackwell/' CONTENT_ICONS_PATH_BLACKWELL1='.' CONTENT_ICONS_FILES_BLACKWELL1=' 16x16 24x24 32x32 48x48 256x256' ## Blackwell 2 ARCHIVE_BASE_BLACKWELL2_8_NAME='blackwell_unbound_4_4a_81600.sh' ARCHIVE_BASE_BLACKWELL2_8_MD5='eedcfdacbd2b2a659d46bc4f4eca463b' ARCHIVE_BASE_BLACKWELL2_8_SIZE='268420' ARCHIVE_BASE_BLACKWELL2_8_VERSION='4.4a-gog81600' ARCHIVE_BASE_BLACKWELL2_8_URL='https://www.gog.com/game/blackwell_bundle' ARCHIVE_BASE_BLACKWELL2_7_NAME='blackwell_unbound_4_3_80449.sh' ARCHIVE_BASE_BLACKWELL2_7_MD5='239baa7241c168919308e1b1cd6d1cd9' ARCHIVE_BASE_BLACKWELL2_7_SIZE='263139' ARCHIVE_BASE_BLACKWELL2_7_VERSION='4.3-gog80449' ARCHIVE_BASE_BLACKWELL2_6_NAME='blackwell_unbound_4_2_80305.sh' ARCHIVE_BASE_BLACKWELL2_6_MD5='70f444e9b31bb77452f7978d087336cb' ARCHIVE_BASE_BLACKWELL2_6_SIZE='263130' ARCHIVE_BASE_BLACKWELL2_6_VERSION='4.2-gog80305' ARCHIVE_BASE_BLACKWELL2_5_NAME='blackwell_unbound_3_1a_71097.sh' ARCHIVE_BASE_BLACKWELL2_5_MD5='9bcabf910cf4f719ecb2f4d8a8d033ad' ARCHIVE_BASE_BLACKWELL2_5_SIZE='263113' ARCHIVE_BASE_BLACKWELL2_5_VERSION='3.1a-gog71097' ARCHIVE_BASE_BLACKWELL2_4_NAME='blackwell_unbound_3_0_67142.sh' ARCHIVE_BASE_BLACKWELL2_4_MD5='8336d9714956fbe4b2a872afdabca960' ARCHIVE_BASE_BLACKWELL2_4_SIZE='263568' ARCHIVE_BASE_BLACKWELL2_4_VERSION='3.0-gog67142' ARCHIVE_BASE_BLACKWELL2_3_NAME='blackwell_unbound_3_0_66153.sh' ARCHIVE_BASE_BLACKWELL2_3_MD5='efcc0c8bb1643ca653b72a3675534dee' ARCHIVE_BASE_BLACKWELL2_3_SIZE='270000' ARCHIVE_BASE_BLACKWELL2_3_VERSION='3.0-gog66153' ARCHIVE_BASE_BLACKWELL2_2_NAME='blackwell_unbound_2_4_57370.sh' ARCHIVE_BASE_BLACKWELL2_2_MD5='3eaef9e29721384d1aec74fe0901f195' ARCHIVE_BASE_BLACKWELL2_2_SIZE='260000' ARCHIVE_BASE_BLACKWELL2_2_VERSION='2.4-gog57370' ARCHIVE_BASE_BLACKWELL2_1_NAME='blackwell_unbound_2_2_2_1_53176.sh' ARCHIVE_BASE_BLACKWELL2_1_MD5='026d7f9171819be7bd4d4bfe3b9e9f6e' ARCHIVE_BASE_BLACKWELL2_1_SIZE='260000' ARCHIVE_BASE_BLACKWELL2_1_VERSION='2.2.2.1-gog53176' ## Optional icons pack ARCHIVE_OPTIONAL_ICONS_NAME_BLACKWELL2='blackwell-2_icons.tar.xz' ARCHIVE_OPTIONAL_ICONS_MD5_BLACKWELL2='e7bef09076eaf830effc44d7fe6b8a9e' ARCHIVE_OPTIONAL_ICONS_URL_BLACKWELL2='https://downloads.dotslashplay.it/games/blackwell/' CONTENT_ICONS_PATH_BLACKWELL2='.' CONTENT_ICONS_FILES_BLACKWELL2=' 16x16 24x24 32x32 48x48 256x256' ## Blackwell 3 ARCHIVE_BASE_BLACKWELL3_5_NAME='blackwell_convergence_3_1c_81238.sh' ARCHIVE_BASE_BLACKWELL3_5_MD5='61d6ec1f808ccbae6e81e1bad5731a93' ARCHIVE_BASE_BLACKWELL3_5_SIZE='330405' ARCHIVE_BASE_BLACKWELL3_5_VERSION='3.1c-gog81238' ARCHIVE_BASE_BLACKWELL3_5_URL='https://www.gog.com/game/blackwell_bundle' ARCHIVE_BASE_BLACKWELL3_4_NAME='blackwell_convergence_3_1a_71097.sh' ARCHIVE_BASE_BLACKWELL3_4_MD5='1ca9574462053e33555da972f02accbc' ARCHIVE_BASE_BLACKWELL3_4_SIZE='325125' ARCHIVE_BASE_BLACKWELL3_4_VERSION='3.1a-gog71097' ARCHIVE_BASE_BLACKWELL3_3_NAME='blackwell_convergence_3_0_67142.sh' ARCHIVE_BASE_BLACKWELL3_3_MD5='a0e8f8eb25df6e3aab086424c4e5c8e7' ARCHIVE_BASE_BLACKWELL3_3_SIZE='325592' ARCHIVE_BASE_BLACKWELL3_3_VERSION='3.0-gog67142' ARCHIVE_BASE_BLACKWELL3_2_NAME='blackwell_convergence_3_0_66153.sh' ARCHIVE_BASE_BLACKWELL3_2_MD5='2c074d610175629e72e1f7e4970e9342' ARCHIVE_BASE_BLACKWELL3_2_SIZE='330000' ARCHIVE_BASE_BLACKWELL3_2_VERSION='3.0-gog66153' ARCHIVE_BASE_BLACKWELL3_1_NAME='blackwell_convergence_2_2_2_53176.sh' ARCHIVE_BASE_BLACKWELL3_1_MD5='e0e6b8c425c35804f47aa0ffe41ff98d' ARCHIVE_BASE_BLACKWELL3_1_SIZE='380000' ARCHIVE_BASE_BLACKWELL3_1_VERSION='2.2.2-gog53176' ## Optional icons pack ARCHIVE_OPTIONAL_ICONS_NAME_BLACKWELL3='blackwell-3_icons.tar.xz' ARCHIVE_OPTIONAL_ICONS_MD5_BLACKWELL3='49cb2320d1a32788399493dd42e3d607' ARCHIVE_OPTIONAL_ICONS_URL_BLACKWELL3='https://downloads.dotslashplay.it/games/blackwell/' CONTENT_ICONS_PATH_BLACKWELL3='.' CONTENT_ICONS_FILES_BLACKWELL3=' 32x32 64x64 256x256' ## Blackwell 4 ARCHIVE_BASE_BLACKWELL4_8_NAME='blackwell_deception_3_5_82978.sh' ARCHIVE_BASE_BLACKWELL4_8_MD5='f6a7bb4f86a9cd9dd789e3b94ce3192c' ARCHIVE_BASE_BLACKWELL4_8_SIZE='590765' ARCHIVE_BASE_BLACKWELL4_8_VERSION='3.5-gog82978' ARCHIVE_BASE_BLACKWELL4_8_URL='https://www.gog.com/game/blackwell_bundle' ARCHIVE_BASE_BLACKWELL4_7_NAME='blackwell_deception_3_3d_82942.sh' ARCHIVE_BASE_BLACKWELL4_7_MD5='ba5f8461ef4206863391fabad12d6fb9' ARCHIVE_BASE_BLACKWELL4_7_SIZE='590764' ARCHIVE_BASE_BLACKWELL4_7_VERSION='3.3d-gog82942' ARCHIVE_BASE_BLACKWELL4_6_NAME='blackwell_deception_3_3_76159.sh' ARCHIVE_BASE_BLACKWELL4_6_MD5='a65df9a5e03d9c656c5fda6075e698a5' ARCHIVE_BASE_BLACKWELL4_6_SIZE='585481' ARCHIVE_BASE_BLACKWELL4_6_VERSION='3.3-gog76159' ARCHIVE_BASE_BLACKWELL4_4_NAME='blackwell_deception_3_2_72383.sh' ARCHIVE_BASE_BLACKWELL4_4_MD5='65531d5078cefc73589ddefcb4e10672' ARCHIVE_BASE_BLACKWELL4_4_SIZE='585481' ARCHIVE_BASE_BLACKWELL4_4_VERSION='3.2-gog72383' ARCHIVE_BASE_BLACKWELL4_3_NAME='blackwell_deception_3_0_67142.sh' ARCHIVE_BASE_BLACKWELL4_3_MD5='c4823fb1410fd412b6262323d9b05a19' ARCHIVE_BASE_BLACKWELL4_3_SIZE='585944' ARCHIVE_BASE_BLACKWELL4_3_VERSION='3.0-gog67142' ARCHIVE_BASE_BLACKWELL4_2_NAME='blackwell_deception_3_0_66153.sh' ARCHIVE_BASE_BLACKWELL4_2_MD5='c8839642e293df1a016db8ed6046dbee' ARCHIVE_BASE_BLACKWELL4_2_SIZE='590000' ARCHIVE_BASE_BLACKWELL4_2_VERSION='3.0-gog66153' ARCHIVE_BASE_BLACKWELL4_1_NAME='blackwell_deception_1_3_53244.sh' ARCHIVE_BASE_BLACKWELL4_1_MD5='61c144995e396515948fbb15c3467494' ARCHIVE_BASE_BLACKWELL4_1_SIZE='660000' ARCHIVE_BASE_BLACKWELL4_1_VERSION='1.3-gog53244' ## Optional icons pack ARCHIVE_OPTIONAL_ICONS_NAME_BLACKWELL4='blackwell-4_icons.tar.xz' ARCHIVE_OPTIONAL_ICONS_MD5_BLACKWELL4='d9dae751697727cb42e43221755f507a' ARCHIVE_OPTIONAL_ICONS_URL_BLACKWELL4='https://downloads.dotslashplay.it/games/blackwell/' CONTENT_ICONS_PATH_BLACKWELL4='.' CONTENT_ICONS_FILES_BLACKWELL4=' 16x16 24x24 32x32 48x48 256x256' ## Blackwell 5 ARCHIVE_BASE_BLACKWELL5_6_NAME='blackwell_epiphany_3_3c_81238.sh' ARCHIVE_BASE_BLACKWELL5_6_MD5='9d6e3f969f8c267a8e53ec519dc361f5' ARCHIVE_BASE_BLACKWELL5_6_SIZE='869580' ARCHIVE_BASE_BLACKWELL5_6_VERSION='3.3c-gog81238' ARCHIVE_BASE_BLACKWELL5_6_URL='https://www.gog.com/game/blackwell_epiphany_the' ARCHIVE_BASE_BLACKWELL5_5_NAME='blackwell_epiphany_3_3a_78230.sh' ARCHIVE_BASE_BLACKWELL5_5_MD5='765e4f7f90161c7708728f7096d2a495' ARCHIVE_BASE_BLACKWELL5_5_SIZE='864300' ARCHIVE_BASE_BLACKWELL5_5_VERSION='3.3a-gog78230' ARCHIVE_BASE_BLACKWELL5_4_NAME='blackwell_epiphany_3_1a_71097.sh' ARCHIVE_BASE_BLACKWELL5_4_MD5='b313ed9ee4a8531a2205f3d9f1932f9d' ARCHIVE_BASE_BLACKWELL5_4_SIZE='864300' ARCHIVE_BASE_BLACKWELL5_4_VERSION='3.1a-gog71097' ARCHIVE_BASE_BLACKWELL5_3_NAME='blackwell_epiphany_3_0_67142.sh' ARCHIVE_BASE_BLACKWELL5_3_MD5='bc979e295bee8e1e7e59299bea33080f' ARCHIVE_BASE_BLACKWELL5_3_SIZE='864772' ARCHIVE_BASE_BLACKWELL5_3_VERSION='3.0-gog67142' ARCHIVE_BASE_BLACKWELL5_2_NAME='blackwell_epiphany_3_0_66153.sh' ARCHIVE_BASE_BLACKWELL5_2_MD5='c0865ccac7ad31c7dc95a0b1a171e589' ARCHIVE_BASE_BLACKWELL5_2_SIZE='870000' ARCHIVE_BASE_BLACKWELL5_2_VERSION='3.0-gog66153' ARCHIVE_BASE_BLACKWELL5_1_NAME='blackwell_epiphany_2_2_53244.sh' ARCHIVE_BASE_BLACKWELL5_1_MD5='6ffbcfb56b62e476a0255eaa1a2aae6d' ARCHIVE_BASE_BLACKWELL5_1_SIZE='890000' ARCHIVE_BASE_BLACKWELL5_1_VERSION='2.2-gog53244' ## Optional icons pack ARCHIVE_OPTIONAL_ICONS_NAME_BLACKWELL5='blackwell-5_icons.tar.xz' ARCHIVE_OPTIONAL_ICONS_MD5_BLACKWELL5='7f054b2b1c499de5d992adbfe07411ba' ARCHIVE_OPTIONAL_ICONS_URL_BLACKWELL5='https://downloads.dotslashplay.it/games/blackwell/' CONTENT_ICONS_PATH_BLACKWELL5='.' CONTENT_ICONS_FILES_BLACKWELL5=' 16x16 24x24 32x32 48x48 256x256' AGS_NAME_BLACKWELL1='blackwell1' AGS_NAME_BLACKWELL2='blackwell2' AGS_NAME_BLACKWELL3='blackwell3' AGS_NAME_BLACKWELL4='blackwell4' AGS_NAME_BLACKWELL5='blackwell5' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_DOC_MAIN_FILES=' licenses' APP_MAIN_ICON='../support/icon.png' APP_MAIN_ICON_BLACKWELL1_1='Blackwell Legacy.exe' APP_MAIN_ICON_BLACKWELL1_2='Blackwell Legacy.exe' APP_MAIN_ICON_BLACKWELL2_1='Unbound.exe' APP_MAIN_ICON_BLACKWELL2_2='Unbound.exe' APP_MAIN_ICON_BLACKWELL3_1='Convergence.exe' APP_MAIN_ICON_BLACKWELL4_1='Deception.exe' APP_MAIN_ICON_BLACKWELL5_1='Epiphany.exe' # Load common functions PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run the default initialization actions initialization_default "$@" # Extract game data archive_extraction_default # Include game data content_inclusion_icons content_inclusion_default # Write launchers launchers_generation # Build packages packages_generation print_instructions # Clean up working_directory_cleanup exit 0 games/play-caesar-3.sh0000755000000000000000000000601114471751340013554 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec set -o errexit ### # Caesar 3 # send your bug reports to vv221@dotslashplay.it ### script_version=20250724.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='caesar-3' GAME_NAME='Cæsar Ⅲ' # Archives ## Base game installer ARCHIVE_BASE_1_NAME='setup_caesartm_3_1.0.1.0_(76354).exe' ARCHIVE_BASE_1_MD5='6a5ee051d469f1b3eea42d84e483b066' ARCHIVE_BASE_1_TYPE='innosetup' ARCHIVE_BASE_1_SIZE='650439' ARCHIVE_BASE_1_VERSION='1.0.1.0-gog76354' ARCHIVE_BASE_1_URL='https://www.gog.com/game/caesar_3' ARCHIVE_BASE_0_NAME='setup_caesar3_2.0.0.9.exe' ARCHIVE_BASE_0_MD5='2ee16fab54493e1c2a69122fd2e56635' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_SIZE='550000' ARCHIVE_BASE_0_VERSION='1.1-gog2.0.0.9' CONTENT_PATH_DEFAULT='.' CONTENT_PATH_DEFAULT_0='app' CONTENT_GAME_MAIN_FILES=' 555 smk wavs mission1.pak c3_model.txt *.555 *.emp *.eng *.map *.sg2' CONTENT_DOC_MAIN_FILES=' readme.txt *.pdf' USER_PERSISTENT_FILES=' c3_model.txt status.txt *.ini *.sav' APP_MAIN_TYPE='custom' APP_MAIN_ICON='c3.exe' PKG_MAIN_DEPENDENCIES_COMMANDS=' julius' ## Ensure easy upgrades from packages generated with pre-20250112.1 game scripts PKG_MAIN_PROVIDES="${PKG_MAIN_PROVIDES:-} caesar-3-data" # Load common functions PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run the default initialization actions initialization_default "$@" # Extract game data archive_extraction_default # Include game data content_inclusion_icons content_inclusion_default # Write launchers custom_launcher() { local application application="$1" launcher_headers # Set the paths that should be available to the generated launcher launcher_init_paths "$application" # Generate the game prefix prefix_symlinks_generate # Set up the paths diversion to persistent storage persistent_storage_initialization persistent_storage_common persistent_path_diversion persistent_storage_update_directories persistent_storage_update_files native_launcher_run "$application" # Update persistent storage with files from the current prefix persistent_storage_update_files_from_prefix launcher_exit } native_launcher_binary_copy() { return 0; } case "$(option_value 'package')" in ('gentoo'|'egentoo') game_exec_line() { cat <<- 'EOF' julius-game "$@" EOF } ;; (*) game_exec_line() { cat <<- 'EOF' julius "$@" EOF } ;; esac launchers_generation # Build packages packages_generation print_instructions # Clean up working_directory_cleanup exit 0 games/play-dark-reign-2.sh0000755000000000000000000000723014471751340014344 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2017 Antoine Le Gonidec set -o errexit ### # Dark Reign 2 # send your bug reports to vv221@dotslashplay.it ### script_version=20260324.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='dark-reign-2' GAME_NAME='Dark Reign 2' ARCHIVE_BASE_1_NAME='setup_dark_reign_2_1.3_(56283).exe' ARCHIVE_BASE_1_MD5='23b441f1a8ffd5302e7cde3c1099cb73' ARCHIVE_BASE_1_TYPE='innosetup' ARCHIVE_BASE_1_VERSION='1.3.882-gog56283' ARCHIVE_BASE_1_SIZE='572562' ARCHIVE_BASE_1_URL='https://www.gog.com/game/dark_reign_2' ARCHIVE_BASE_0_NAME='setup_dark_reign2_2.0.0.11.exe' ARCHIVE_BASE_0_MD5='9a3d10825507b73c4db178f9caea2406' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_VERSION='1.3.882-gog2.0.0.11' ARCHIVE_BASE_0_SIZE='450000' CONTENT_PATH_DEFAULT='.' CONTENT_PATH_DEFAULT_0='app' CONTENT_GAME_BIN_FILES=' dr2.exe' # dr2.exe requirements CONTENT_LIBS_BIN_FILES=' binkw32.dll mss32.dll' # mss32.dll requirements CONTENT_LIBS0_BIN_FILES=' _INMM.dll' # _INMM.dll requirements CONTENT_LIBS1_BIN_FILES=' libvorbisfile.dll' # libvorbisfile.dll requirements CONTENT_LIBS2_BIN_FILES=' libvorbis.dll' CONTENT_GAME0_BIN_FILES=' library/activision/tools.cat library/won/kver.pub library/engine/startup.cfg library/engine/download.cfg' # launcher.exe is only provided with the 2.0.0.11 GOG build. CONTENT_GAME1_BIN_FILES_0=' launcher.exe' CONTENT_GAME_DATA_FILES=' missions mods music packs sides worlds' CONTENT_DOC_DATA_FILES=' customer_support.htm manual.pdf readme.rtf license.txt' USER_PERSISTENT_DIRECTORIES=' mods users' USER_PERSISTENT_FILES=' settings.cfg' # Without a virtual desktop, the profile creation/selection screen is badly rendered, making it unusable. # (WINE 10.0) WINE_VIRTUAL_DESKTOP='auto' APP_MAIN_EXE='dr2.exe' APP_MAIN_EXE_0='launcher.exe' APP_MAIN_ICON='dr2.exe' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Register the game CD-key. REQUIREMENTS_LIST=' base64 xxd' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Extract and store the game CD-key. cdkey_destination="$(package_path 'PKG_BIN')$(path_game_data)" mkdir --parents "$cdkey_destination" # The source is a base64-encoded string, that must be converted to an hexadecimal representation. sed --silent --expression='71s/.*"valueData": "\(.*\)",/\1/p' \ "$(path_archive_contents)/goggame-1207658911.script" | base64 --decode | xxd -plain \ > "${cdkey_destination}/cdkey" # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # - Register the game CD-key. # - Install shipped libraries. wineprefix_init_custom() { cat <<- 'EOF' # Register the game CD-key. cdkey=$(cat "${PATH_GAME_DATA}/cdkey") $(wine_command) reg add 'HKLM\Software\WON\CDKeys' /v 'DarkReign2' /t REG_BINARY /d "$cdkey" /f EOF cat <<- EOF # Install shipped libraries. ln --force --symbolic $(path_libraries)/* "\${PATH_PREFIX}" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-darkest-dungeon-expansions.sh0000755000000000000000000002616214471751340017446 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2017 Antoine Le Gonidec set -o errexit ### # Darkest Dungeon expansions: # - Musketeer # - The Crimson Court # - The Shieldbreaker # - The Color of Madness # send your bug reports to vv221@dotslashplay.it ### script_version=20250913.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='darkest-dungeon' GAME_NAME='Darkest Dungeon' EXPANSION_ID_MUSKETEER='musketeer' EXPANSION_NAME_MUSKETEER='Musketeer' EXPANSION_ID_CRIMSONCOURT='crimson-court' EXPANSION_NAME_CRIMSONCOURT='The Crimson Court' EXPANSION_ID_SHIELDBREAKER='shieldbreaker' EXPANSION_NAME_SHIELDBREAKER='The Shieldbreaker' EXPANSION_ID_COLOROFMADNESS='color-of-madness' EXPANSION_NAME_COLOROFMADNESS='The Color of Madness' # Archives ## Musketeer ARCHIVE_BASE_MUSKETEER_7_NAME='darkest_dungeon_musketeer_26186c_83747.sh' ARCHIVE_BASE_MUSKETEER_7_MD5='57cdcc137b92c2b1d3a07816be0f13f0' ARCHIVE_BASE_MUSKETEER_7_SIZE='20500' ARCHIVE_BASE_MUSKETEER_7_VERSION='26186c-gog83747' ARCHIVE_BASE_MUSKETEER_7_URL='https://www.gog.com/game/darkest_dungeon_musketeer' ## This build is the one provided by GOG since 2025-05-29, but it is an old build from 2018. ARCHIVE_BASE_MUSKETEER_6_NAME='darkest_dungeon_musketeer_24788_82473.sh' ARCHIVE_BASE_MUSKETEER_6_MD5='3af92d89c085c91d7e654da2171c70a8' ARCHIVE_BASE_MUSKETEER_6_SIZE='20500' ARCHIVE_BASE_MUSKETEER_6_VERSION='24788-gog82473' ARCHIVE_BASE_MUSKETEER_5_NAME='darkest_dungeon_musketeer_26186_81633.sh' ARCHIVE_BASE_MUSKETEER_5_MD5='c7f10e04a57302b89f6793768f9fc1de' ARCHIVE_BASE_MUSKETEER_5_SIZE='20500' ARCHIVE_BASE_MUSKETEER_5_VERSION='26186-gog81633' ARCHIVE_BASE_MUSKETEER_4_NAME='darkest_dungeon_musketeer_24839_28859.sh' ARCHIVE_BASE_MUSKETEER_4_MD5='ee9980710f2d4e229b5b2afb22918dac' ARCHIVE_BASE_MUSKETEER_4_SIZE='22000' ARCHIVE_BASE_MUSKETEER_4_VERSION='24839-gog28859' ARCHIVE_BASE_MUSKETEER_3_NAME='darkest_dungeon_musketeer_24788_26004.sh' ARCHIVE_BASE_MUSKETEER_3_MD5='2e24f30855bd6404f940d66d0b1b44d9' ARCHIVE_BASE_MUSKETEER_3_SIZE='22000' ARCHIVE_BASE_MUSKETEER_3_VERSION='24788-gog26004' ARCHIVE_BASE_MUSKETEER_2_NAME='darkest_dungeon_musketeer_dlc_en_24358_23005.sh' ARCHIVE_BASE_MUSKETEER_2_MD5='c8ebb84ab177b4ffcee79faadd8f5981' ARCHIVE_BASE_MUSKETEER_2_SIZE='22000' ARCHIVE_BASE_MUSKETEER_2_VERSION='24358-gog23005' ARCHIVE_BASE_MUSKETEER_1_NAME='darkest_dungeon_musketeer_dlc_en_24154_22522.sh' ARCHIVE_BASE_MUSKETEER_1_MD5='d68e50da94cc01920759ff7009a7a3c2' ARCHIVE_BASE_MUSKETEER_1_SIZE='22000' ARCHIVE_BASE_MUSKETEER_1_VERSION='24154-gog22522' ARCHIVE_BASE_MUSKETEER_0_NAME='darkest_dungeon_musketeer_dlc_en_23885_21662.sh' ARCHIVE_BASE_MUSKETEER_0_MD5='f9362568f7e4e1fd205835c3dba2083e' ARCHIVE_BASE_MUSKETEER_0_SIZE='22000' ARCHIVE_BASE_MUSKETEER_0_VERSION='23885-gog21662' ## The Crimson Court ARCHIVE_BASE_CRIMSONCOURT_10_NAME='darkest_dungeon_the_crimson_court_26186c_83747.sh' ARCHIVE_BASE_CRIMSONCOURT_10_MD5='7a1fc1515fb35f16837147f8588adc38' ARCHIVE_BASE_CRIMSONCOURT_10_SIZE='343087' ARCHIVE_BASE_CRIMSONCOURT_10_VERSION='26186c-gog83747' ARCHIVE_BASE_CRIMSONCOURT_10_URL='https://www.gog.com/game/darkest_dungeon_the_crimson_court' ## This build is the one provided by GOG since 2025-05-29, but it is an old build from 2018. ARCHIVE_BASE_CRIMSONCOURT_9_NAME='darkest_dungeon_the_crimson_court_24788_82473.sh' ARCHIVE_BASE_CRIMSONCOURT_9_MD5='1d9d53d8100eb001402a48a7a37d50a9' ARCHIVE_BASE_CRIMSONCOURT_9_SIZE='342998' ARCHIVE_BASE_CRIMSONCOURT_9_VERSION='24788-gog82473' ## This build of the expansion is broken, many files are missing. ARCHIVE_BASE_CRIMSONCOURT_8_NAME='darkest_dungeon_the_crimson_court_26186_81633.sh' ARCHIVE_BASE_CRIMSONCOURT_8_MD5='724ec690ba5e9e92ad496bb7302e2d39' ARCHIVE_BASE_CRIMSONCOURT_8_SIZE='95178' ARCHIVE_BASE_CRIMSONCOURT_8_VERSION='26186-gog81633' ARCHIVE_BASE_CRIMSONCOURT_7_NAME='darkest_dungeon_the_crimson_court_24839_28859.sh' ARCHIVE_BASE_CRIMSONCOURT_7_MD5='bf81a16639bf98a4daa2e7eb74d2652b' ARCHIVE_BASE_CRIMSONCOURT_7_SIZE='350000' ARCHIVE_BASE_CRIMSONCOURT_7_VERSION='24839-gog28859' ARCHIVE_BASE_CRIMSONCOURT_6_NAME='darkest_dungeon_the_crimson_court_24788_26004.sh' ARCHIVE_BASE_CRIMSONCOURT_6_MD5='02618eb0e4abfc632035e429c134cc42' ARCHIVE_BASE_CRIMSONCOURT_6_SIZE='350000' ARCHIVE_BASE_CRIMSONCOURT_6_VERSION='24788-gog26004' ARCHIVE_BASE_CRIMSONCOURT_5_NAME='darkest_dungeon_the_crimson_court_dlc_en_24358_23005.sh' ARCHIVE_BASE_CRIMSONCOURT_5_MD5='344350ff10770ab3abeecabe048c9816' ARCHIVE_BASE_CRIMSONCOURT_5_SIZE='350000' ARCHIVE_BASE_CRIMSONCOURT_5_VERSION='24358-gog23005' ARCHIVE_BASE_CRIMSONCOURT_4_NAME='darkest_dungeon_the_crimson_court_dlc_en_24154_22522.sh' ARCHIVE_BASE_CRIMSONCOURT_4_MD5='985324dbc5b0ab3e00f04c24a2f2c7cf' ARCHIVE_BASE_CRIMSONCOURT_4_SIZE='350000' ARCHIVE_BASE_CRIMSONCOURT_4_VERSION='24154-gog22522' ARCHIVE_BASE_CRIMSONCOURT_3_NAME='darkest_dungeon_the_crimson_court_dlc_en_23885_21662.sh' ARCHIVE_BASE_CRIMSONCOURT_3_MD5='70018fc475ee4d24fdc19e107fa41a2a' ARCHIVE_BASE_CRIMSONCOURT_3_SIZE='350000' ARCHIVE_BASE_CRIMSONCOURT_3_VERSION='23885-gog21662' ARCHIVE_BASE_CRIMSONCOURT_2_NAME='darkest_dungeon_the_crimson_court_dlc_en_21096_16065.sh' ARCHIVE_BASE_CRIMSONCOURT_2_MD5='d4beaeb7effff0cbd2e292abf0ef5332' ARCHIVE_BASE_CRIMSONCOURT_2_SIZE='350000' ARCHIVE_BASE_CRIMSONCOURT_2_VERSION='21096-gog16066' ARCHIVE_BASE_CRIMSONCOURT_1_NAME='darkest_dungeon_the_crimson_court_dlc_en_21071_15970.sh' ARCHIVE_BASE_CRIMSONCOURT_1_MD5='67fcfc5e91763cbf20a4ef51ff7b8eff' ARCHIVE_BASE_CRIMSONCOURT_1_SIZE='350000' ARCHIVE_BASE_CRIMSONCOURT_1_VERSION='21071-gog15970' ARCHIVE_BASE_CRIMSONCOURT_0_NAME='darkest_dungeon_the_crimson_court_dlc_en_20645_15279.sh' ARCHIVE_BASE_CRIMSONCOURT_0_MD5='523c66d4575095c66a03d3859e4f83b8' ARCHIVE_BASE_CRIMSONCOURT_0_SIZE='360000' ARCHIVE_BASE_CRIMSONCOURT_0_VERSION='20645-gog15279' ## The Shieldbreaker ARCHIVE_BASE_SHIELDBREAKER_7_NAME='darkest_dungeon_the_shieldbreaker_26186c_83747.sh' ARCHIVE_BASE_SHIELDBREAKER_7_MD5='cc74051a999566bcdad375c9801129e2' ARCHIVE_BASE_SHIELDBREAKER_7_SIZE='40182' ARCHIVE_BASE_SHIELDBREAKER_7_VERSION='26186c-gog83747' ARCHIVE_BASE_SHIELDBREAKER_7_URL='https://www.gog.com/game/darkest_dungeon_the_shieldbreaker' ## This build is the one provided by GOG since 2025-05-29, but it is an old build from 2018. ARCHIVE_BASE_SHIELDBREAKER_6_NAME='darkest_dungeon_the_shieldbreaker_24788_82473.sh' ARCHIVE_BASE_SHIELDBREAKER_6_MD5='ec9c10ddbd4833496cfdd26d37bfe485' ARCHIVE_BASE_SHIELDBREAKER_6_SIZE='40158' ARCHIVE_BASE_SHIELDBREAKER_6_VERSION='24788-gog82473' ARCHIVE_BASE_SHIELDBREAKER_5_NAME='darkest_dungeon_the_shieldbreaker_26186_81633.sh' ARCHIVE_BASE_SHIELDBREAKER_5_MD5='896d66ca296bc1b52988be55651d203a' ARCHIVE_BASE_SHIELDBREAKER_5_SIZE='40182' ARCHIVE_BASE_SHIELDBREAKER_5_VERSION='26186-gog81633' ARCHIVE_BASE_SHIELDBREAKER_4_NAME='darkest_dungeon_the_shieldbreaker_24839_28859.sh' ARCHIVE_BASE_SHIELDBREAKER_4_MD5='6d28e99b0b66d9a0b7e528b961371131' ARCHIVE_BASE_SHIELDBREAKER_4_SIZE='42000' ARCHIVE_BASE_SHIELDBREAKER_4_VERSION='24839-gog28859' ARCHIVE_BASE_SHIELDBREAKER_3_NAME='darkest_dungeon_the_shieldbreaker_24788_26004.sh' ARCHIVE_BASE_SHIELDBREAKER_3_MD5='df614551f769df6b3ee3f9f2bcfcf94e' ARCHIVE_BASE_SHIELDBREAKER_3_SIZE='42000' ARCHIVE_BASE_SHIELDBREAKER_3_VERSION='24788-gog26004' ARCHIVE_BASE_SHIELDBREAKER_2_NAME='darkest_dungeon_the_shieldbreaker_dlc_en_24358_23005.sh' ARCHIVE_BASE_SHIELDBREAKER_2_MD5='e47653b8750583df1fea96ad2c52bad2' ARCHIVE_BASE_SHIELDBREAKER_2_SIZE='42000' ARCHIVE_BASE_SHIELDBREAKER_2_VERSION='24358-gog23005' ARCHIVE_BASE_SHIELDBREAKER_1_NAME='darkest_dungeon_the_shieldbreaker_dlc_en_23885_21662.sh' ARCHIVE_BASE_SHIELDBREAKER_1_MD5='795cdfaecd19177264731d9acb0daca2' ARCHIVE_BASE_SHIELDBREAKER_1_SIZE='41000' ARCHIVE_BASE_SHIELDBREAKER_1_VERSION='23855-gog21662' ARCHIVE_BASE_SHIELDBREAKER_0_NAME='darkest_dungeon_the_shieldbreaker_dlc_en_21142_16140.sh' ARCHIVE_BASE_SHIELDBREAKER_0_MD5='8606531e5fc728786f497b4803c19994' ARCHIVE_BASE_SHIELDBREAKER_0_SIZE='42000' ARCHIVE_BASE_SHIELDBREAKER_0_VERSION='21142-gog16140' ## The Color of Madness ARCHIVE_BASE_COLOROFMADNESS_7_NAME='darkest_dungeon_the_color_of_madness_26186c_83747.sh' ARCHIVE_BASE_COLOROFMADNESS_7_MD5='c9f3c570e143fd96c5d4b675ddd9cdd1' ARCHIVE_BASE_COLOROFMADNESS_7_SIZE='629799' ARCHIVE_BASE_COLOROFMADNESS_7_VERSION='26186c-gog83747' ARCHIVE_BASE_COLOROFMADNESS_7_URL='https://www.gog.com/game/darkest_dungeon_the_color_of_madness' ## This build is the one provided by GOG since 2025-05-29, but it is an old build from 2018. ARCHIVE_BASE_COLOROFMADNESS_6_NAME='darkest_dungeon_the_color_of_madness_24788_82473.sh' ARCHIVE_BASE_COLOROFMADNESS_6_MD5='181fb603158b512b2b2c07730f9f9c0b' ARCHIVE_BASE_COLOROFMADNESS_6_SIZE='629673' ARCHIVE_BASE_COLOROFMADNESS_6_VERSION='24788-gog82473' ARCHIVE_BASE_COLOROFMADNESS_5_NAME='darkest_dungeon_the_color_of_madness_26186_81633.sh' ARCHIVE_BASE_COLOROFMADNESS_5_MD5='a15a93c4a74c61b186210b97dcbc9383' ARCHIVE_BASE_COLOROFMADNESS_5_SIZE='629799' ARCHIVE_BASE_COLOROFMADNESS_5_VERSION='26186-gog81633' ARCHIVE_BASE_COLOROFMADNESS_4_NAME='darkest_dungeon_the_color_of_madness_24839_28859.sh' ARCHIVE_BASE_COLOROFMADNESS_4_MD5='9830e2b3cefc653db593a022e1c87359' ARCHIVE_BASE_COLOROFMADNESS_4_SIZE='640000' ARCHIVE_BASE_COLOROFMADNESS_4_VERSION='24839-gog28859' ARCHIVE_BASE_COLOROFMADNESS_3_NAME='darkest_dungeon_the_color_of_madness_24788_26004.sh' ARCHIVE_BASE_COLOROFMADNESS_3_MD5='a92a69e13e7ddb5da63d283ea40d93f7' ARCHIVE_BASE_COLOROFMADNESS_3_SIZE='640000' ARCHIVE_BASE_COLOROFMADNESS_3_VERSION='24788-gog26004' ARCHIVE_BASE_COLOROFMADNESS_2_NAME='darkest_dungeon_the_color_of_madness_dlc_en_24358_23005.sh' ARCHIVE_BASE_COLOROFMADNESS_2_MD5='0447fad1313ab47f6521debc3e75d308' ARCHIVE_BASE_COLOROFMADNESS_2_SIZE='640000' ARCHIVE_BASE_COLOROFMADNESS_2_VERSION='24358-gog23005' ARCHIVE_BASE_COLOROFMADNESS_1_NAME='darkest_dungeon_the_color_of_madness_dlc_en_24154_22522.sh' ARCHIVE_BASE_COLOROFMADNESS_1_MD5='40088860d8e3e3a651074e84eb2746ac' ARCHIVE_BASE_COLOROFMADNESS_1_SIZE='630000' ARCHIVE_BASE_COLOROFMADNESS_1_VERSION='24154-gog22522' ARCHIVE_BASE_COLOROFMADNESS_0_NAME='darkest_dungeon_the_color_of_madness_dlc_en_23885_21662.sh' ARCHIVE_BASE_COLOROFMADNESS_0_MD5='fe07f35c57c3ddd421db5da33b42ee6e' ARCHIVE_BASE_COLOROFMADNESS_0_SIZE='630000' ARCHIVE_BASE_COLOROFMADNESS_0_VERSION='23885-gog21662' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME_MAIN_FILES=' dlc' PKG_PARENT_ID="$GAME_ID" PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_PARENT' # Load common functions. PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_default # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-darkest-dungeon.sh0000755000000000000000000001513714471751340015261 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec set -o errexit ### # Darkest Dungeon # send your bug reports to vv221@dotslashplay.it ### script_version=20250913.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='darkest-dungeon' GAME_NAME='Darkest Dungeon' ARCHIVE_BASE_1_NAME='darkest_dungeon_26186c_83747.sh' ARCHIVE_BASE_1_MD5='d738675c70bf4e11a79745403583af9b' ARCHIVE_BASE_1_SIZE='2294105' ARCHIVE_BASE_1_VERSION='26186c-gog83747' ARCHIVE_BASE_1_URL='https://www.gog.com/game/darkest_dungeon' ## This build is the one provided by GOG since 2025-05-29, but it is an old build from 2018. ARCHIVE_BASE_OLD_8_NAME='darkest_dungeon_24788_82473.sh' ARCHIVE_BASE_OLD_8_MD5='875d36d3beca80c350c8848dc0e421c0' ARCHIVE_BASE_OLD_8_SIZE='2269724' ARCHIVE_BASE_OLD_8_VERSION='24788-gog82473' ## This build comes with a broken installer for The Crimson Court expansion. ARCHIVE_BASE_0_NAME='darkest_dungeon_26186_81633.sh' ARCHIVE_BASE_0_MD5='5d63601a7640cc359b960be054eb294e' ARCHIVE_BASE_0_SIZE='2294082' ARCHIVE_BASE_0_VERSION='26186-gog81633' ARCHIVE_BASE_OLD_7_NAME='darkest_dungeon_24839_28859.sh' ARCHIVE_BASE_OLD_7_MD5='2a04beb04b3129b4bd68b4dd9023e82d' ARCHIVE_BASE_OLD_7_SIZE='2300000' ARCHIVE_BASE_OLD_7_VERSION='24839-gog28859' ARCHIVE_BASE_OLD_6_NAME='darkest_dungeon_24788_26004.sh' ARCHIVE_BASE_OLD_6_MD5='be838bdc8e7c971e4d412f833fd348ac' ARCHIVE_BASE_OLD_6_SIZE='2300000' ARCHIVE_BASE_OLD_6_VERSION='24788-gog26004' ARCHIVE_BASE_OLD_5_NAME='darkest_dungeon_en_24358_23005.sh' ARCHIVE_BASE_OLD_5_MD5='3d7dc739665003d48589cdbe6cc472ef' ARCHIVE_BASE_OLD_5_SIZE='2300000' ARCHIVE_BASE_OLD_5_VERSION='24358-gog23005' ARCHIVE_BASE_OLD_4_NAME='darkest_dungeon_en_24154_22522.sh' ARCHIVE_BASE_OLD_4_MD5='361d3e7b117725e8ce3982d183d4810a' ARCHIVE_BASE_OLD_4_SIZE='2300000' ARCHIVE_BASE_OLD_4_VERSION='24154-gog22522' ARCHIVE_BASE_OLD_3_NAME='darkest_dungeon_en_23904_21681.sh' ARCHIVE_BASE_OLD_3_MD5='9ddb131060d0995c4ceb56dd9c846b8f' ARCHIVE_BASE_OLD_3_SIZE='2300000' ARCHIVE_BASE_OLD_3_VERSION='23904-gog21681' ARCHIVE_BASE_OLD_2_NAME='darkest_dungeon_en_23885_21662.sh' ARCHIVE_BASE_OLD_2_MD5='ff449de9cfcdf97fa1a27d1073139463' ARCHIVE_BASE_OLD_2_SIZE='2300000' ARCHIVE_BASE_OLD_2_VERSION='23885-gog21662' ARCHIVE_BASE_OLD_1_NAME='darkest_dungeon_en_21142_16140.sh' ARCHIVE_BASE_OLD_1_MD5='4b43065624dbab74d794c56809170588' ARCHIVE_BASE_OLD_1_SIZE='2200000' ARCHIVE_BASE_OLD_1_VERSION='21142-gog16140' ARCHIVE_BASE_OLD_0_NAME='darkest_dungeon_en_21096_16066.sh' ARCHIVE_BASE_OLD_0_MD5='435905fe6edd911a8645d4feaf94ec34' ARCHIVE_BASE_OLD_0_SIZE='2200000' ARCHIVE_BASE_OLD_0_VERSION='21096-gog16066' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_LIBS_BIN_FILES=' libfmod.so.9 libfmodstudio.so.9' CONTENT_LIBS_BIN64_RELATIVE_PATH='_linuxnosteam/lib64' CONTENT_LIBS_BIN64_RELATIVE_PATH_OLD='lib64' CONTENT_LIBS_BIN64_FILES="$CONTENT_LIBS_BIN_FILES" CONTENT_LIBS_BIN32_RELATIVE_PATH='_linuxnosteam/lib' CONTENT_LIBS_BIN32_RELATIVE_PATH_OLD='lib' CONTENT_LIBS_BIN32_FILES="$CONTENT_LIBS_BIN_FILES" CONTENT_GAME_BIN64_FILES=' _linuxnosteam/darkest.bin.x86_64' CONTENT_GAME_BIN64_FILES_OLD=' darkest.bin.x86_64' CONTENT_GAME_BIN32_FILES=' _linuxnosteam/darkest.bin.x86' CONTENT_GAME_BIN32_FILES_OLD=' darkest.bin.x86' CONTENT_GAME_DATA_FILES=' activity_log audio __build campaign colours curios cursors dlc dungeons effects fe_flow fonts fx game_over heroes inventory _linuxnosteam loading_screen localization loot maps modes mods monsters overlays panels props raid raid_results scripts scrolls shaders shaders_ps4 shaders_psv shared trinkets upgrades user_information video video_ps4 video_psv pin Icon.bmp steam_appid.txt svn_revision.txt' CONTENT_DOC_DATA_RELATIVE_PATH='_linuxnosteam' CONTENT_DOC_DATA_RELATIVE_PATH_OLD='.' CONTENT_DOC_DATA_FILES=' README.linux' APP_MAIN_EXE_BIN64='_linuxnosteam/darkest.bin.x86_64' APP_MAIN_EXE_BIN64_OLD='darkest.bin.x86_64' APP_MAIN_EXE_BIN32='_linuxnosteam/darkest.bin.x86' APP_MAIN_EXE_BIN32_OLD='darkest.bin.x86' APP_MAIN_ICON='_linuxnosteam/Icon.bmp' APP_MAIN_ICON_OLD='Icon.bmp' ## Using the wayland backend of SDL triggers a floating point exception, ## with the following trace: ## ## #0 0x00000000013d1887 in _glewHashListExists () ## #1 0x00000000013d1c5c in glxewContextInit () ## #2 0x0000000000ed273a in InternalMain(int, char**, SDL_GLprofile) () ## #3 0x0000000000ed3b61 in main () APP_MAIN_PRERUN=' # Prevent a game crash when using the Wayland video backend of SDL if [ "${SDL_VIDEODRIVER:-}" = "wayland" ]; then unset SDL_VIDEODRIVER fi ' PACKAGES_LIST=' PKG_BIN64 PKG_BIN32 PKG_DATA' PKG_BIN64_ARCH='64' PKG_BIN32_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libgcc_s.so.1 libGL.so.1 libm.so.6 libpthread.so.0 librt.so.1 libSDL2-2.0.so.0 libssl.so.1.0.0 libstdc++.so.6' PKG_BIN_DEPENDENCIES_LIBRARIES_OLD=' libc.so.6 libdl.so.2 libgcc_s.so.1 libGL.so.1 libm.so.6 libpthread.so.0 librt.so.1 libSDL2-2.0.so.0 libstdc++.so.6' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Fix icon background transparency. REQUIREMENTS_LIST=' convert' # Load common functions. PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default ## Fix icon background transparency. icon_path=$(icon_path 'APP_MAIN_ICON') convert \ "${PLAYIT_WORKDIR}/gamedata/$(content_path_default)/${icon_path}" \ -transparent "#008080" \ -transparent "#006e6e" \ "${PLAYIT_WORKDIR}/gamedata/$(content_path_default)/${icon_path%.bmp}_fixed.bmp" mv \ "${PLAYIT_WORKDIR}/gamedata/$(content_path_default)/${icon_path%.bmp}_fixed.bmp" \ "${PLAYIT_WORKDIR}/gamedata/$(content_path_default)/${icon_path}" # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. ## These values rely on both package context and archive context. APP_MAIN_EXE_BIN64=$(context_value 'APP_MAIN_EXE_BIN64') APP_MAIN_EXE_BIN32=$(context_value 'APP_MAIN_EXE_BIN32') launchers_generation 'PKG_BIN64' launchers_generation 'PKG_BIN32' # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-day-of-the-tentacle.sh0000755000000000000000000000561514471751340015721 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Mopi # SPDX-FileCopyrightText: © 2017 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2020 macaron set -o errexit ### # Day of the Tentacle # send your bug reports to vv221@dotslashplay.it ### script_version=20260101.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='day-of-the-tentacle' GAME_NAME='Day of the Tentacle' ARCHIVE_BASE_0_NAME='gog_day_of_the_tentacle_remastered_2.1.0.2.sh' ARCHIVE_BASE_0_MD5='612c59c5cbdbf4d73322b46527a2d502' ARCHIVE_BASE_0_SIZE='2677592' ARCHIVE_BASE_0_VERSION='1.4.1-gog2.1.0.2' ARCHIVE_BASE_0_URL='https://www.gog.com/game/day_of_the_tentacle_remastered' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_LIBS_BIN_RELATIVE_PATH='lib' CONTENT_LIBS_BIN_FILES=' libfmod.so.8' CONTENT_GAME_BIN_FILES=' Dott controllerdef.txt' CONTENT_GAME_DATA_FILES=' tenta.cle' CONTENT_DOC_DATA_FILES=' readme.txt' APP_MAIN_EXE='Dott' APP_MAIN_ICON='../support/icon.png' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libgcc_s.so.1 libGL.so.1 libm.so.6 libpthread.so.0 librt.so.1 libstdc++.so.6' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. ## Force the use of system-provided SDL. APP_MAIN_PRERUN="$(application_prerun 'APP_MAIN') $(launcher_tweak_sdl_override)" PKG_BIN_DEPENDENCIES_LIBRARIES="$(dependencies_libraries_list 'PKG_BIN') libSDL2-2.0.so.0" launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-desperados-1.sh0000755000000000000000000000550714471751340014456 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2017 Mopi set -o errexit ### # Desperados: Wanted Dead or Alive # send your bug reports to vv221@dotslashplay.it ### script_version=20251224.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='desperados-1' GAME_NAME='Desperados: Wanted Dead or Alive' ARCHIVE_BASE_1_NAME='desperados_wanted_dead_or_alive_en_1_0_2_thqn_22430.sh' ARCHIVE_BASE_1_MD5='c4338cd7526dc01eef347408368f6bf4' ARCHIVE_BASE_1_SIZE='1938955' ARCHIVE_BASE_1_VERSION='1.0.2-gog22430' ARCHIVE_BASE_1_URL='https://www.gog.com/game/desperados_wanted_dead_or_alive' ARCHIVE_BASE_0_NAME='desperados_wanted_dead_or_alive_en_gog_1_22137.sh' ARCHIVE_BASE_0_MD5='72e623355b7ca5ccdef0c549d0a77192' ARCHIVE_BASE_0_SIZE='2000000' ARCHIVE_BASE_0_VERSION='1.0-gog22137' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME_BIN_FILES=' desperados32' CONTENT_GAME_DATA_FILES=' bootmenu data demo localisation localisation_demo shaders' CONTENT_DOC_DATA_FILES=' readme.txt' APP_MAIN_EXE='desperados32' APP_MAIN_ICON='../support/icon.png' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libgcc_s.so.1 libGL.so.1 libm.so.6 libpthread.so.0 libSDL2-2.0.so.0 libstdc++.so.6' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-desperados-3.sh0000755000000000000000000001302414471751340014451 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2022 Antoine Le Gonidec set -o errexit ### # Desperados 3 # send your bug reports to vv221@dotslashplay.it ### script_version=20260330.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='desperados-3' GAME_NAME='Desperados III' GAME_ID_DEMO="${GAME_ID}-demo" GAME_NAME_DEMO="$GAME_NAME (demo)" ARCHIVE_BASE_0_NAME='setup_desperados_3_1.7_(43311).exe' ARCHIVE_BASE_0_MD5='27d07bcafb7b0a0c5bd0af5a0b91edb8' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_PART1_NAME='setup_desperados_3_1.7_(43311)-1.bin' ARCHIVE_BASE_0_PART1_MD5='5554579fd67870ad94347b70df2743f6' ARCHIVE_BASE_0_PART2_NAME='setup_desperados_3_1.7_(43311)-2.bin' ARCHIVE_BASE_0_PART2_MD5='f7f43119dda91362ec45b122e4ea641d' ARCHIVE_BASE_0_PART3_NAME='setup_desperados_3_1.7_(43311)-3.bin' ARCHIVE_BASE_0_PART3_MD5='51948b7e8d6a9e45638b49988f86c5f9' ARCHIVE_BASE_0_SIZE='24000000' ARCHIVE_BASE_0_VERSION='1.5.8-gog43311' ARCHIVE_BASE_0_URL='https://www.gog.com/game/desperados_iii' ARCHIVE_BASE_DEMO_0_NAME='setup_desperados_3_demo_1.0b_(38752).exe' ARCHIVE_BASE_DEMO_0_MD5='2a856f6a70fb57b7095d829fe90f0e61' ARCHIVE_BASE_DEMO_0_TYPE='innosetup' ARCHIVE_BASE_DEMO_0_PART1_NAME='setup_desperados_3_demo_1.0b_(38752)-1.bin' ARCHIVE_BASE_DEMO_0_PART1_MD5='fa829f953b1183dd8a41c12599c992fe' ARCHIVE_BASE_DEMO_0_PART2_NAME='setup_desperados_3_demo_1.0b_(38752)-2.bin' ARCHIVE_BASE_DEMO_0_PART2_MD5='77e764c9d83158abf31b7e98006cc5c9' ARCHIVE_BASE_DEMO_0_SIZE='7537932' ARCHIVE_BASE_DEMO_0_VERSION='1.0b-gog38752' ARCHIVE_BASE_DEMO_0_URL='https://www.gog.com/game/desperados_iii_demo' UNITY3D_NAME='Desperados III' CONTENT_PATH_DEFAULT='.' # Desperados III.exe requirements CONTENT_LIBS_BIN_FILES=' UnityPlayer.dll' # The game fails to start without the following libraries. CONTENT_LIBS0_BIN_FILES=' THQNOnline/gog/Galaxy64.dll steam_api64.dll' # Prevent a critical error on launch. CONTENT_LIBS1_BIN_FILES=' MonoBleedingEdge/EmbedRuntime/mono-2.0-bdwgc.dll' # The initial loading does not complete without the following library. CONTENT_LIBS2_BIN_FILES=' MonoBleedingEdge/EmbedRuntime/MonoPosixHelper.dll' # Prevent a critical error on launch. CONTENT_GAME0_BIN_FILES=' thqnocfg.dat' CONTENT_GAME_DATA_GI_FILES=" ${UNITY3D_NAME}_Data/GI" CONTENT_GAME_DATA_STREAMINGASSETS_FILES=" ${UNITY3D_NAME}_Data/StreamingAssets" CONTENT_GAME_DATA_LEVELS_FILES_DEMO=" ${UNITY3D_NAME}_Data/level*" CONTENT_GAME_DATA_LEVELS_1_FILES=" ${UNITY3D_NAME}_Data/level? ${UNITY3D_NAME}_Data/level?.resS ${UNITY3D_NAME}_Data/level?? ${UNITY3D_NAME}_Data/level??.resS" CONTENT_GAME_DATA_LEVELS_2_FILES=" ${UNITY3D_NAME}_Data/level??? ${UNITY3D_NAME}_Data/level???.resS" WINE_PERSISTENT_DIRECTORIES=' users/${USER}/AppData/Local/Desperados III' PACKAGES_LIST=' PKG_BIN PKG_DATA_GI PKG_DATA_STREAMINGASSETS PKG_DATA_LEVELS_1 PKG_DATA_LEVELS_2 PKG_DATA' PACKAGES_LIST_DEMO=' PKG_BIN PKG_DATA_GI PKG_DATA_STREAMINGASSETS PKG_DATA_LEVELS PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_GSTREAMER_PLUGINS=' video/quicktime, variant=(string)iso' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_ID_DEMO="${GAME_ID_DEMO}-data" PKG_DATA_DESCRIPTION='data' PKG_DATA_DEPENDENCIES_SIBLINGS=' PKG_DATA_GI PKG_DATA_STREAMINGASSETS PKG_DATA_LEVELS_1 PKG_DATA_LEVELS_2' PKG_DATA_DEPENDENCIES_SIBLINGS_DEMO=' PKG_DATA_GI PKG_DATA_STREAMINGASSETS PKG_DATA_LEVELS' PKG_DATA_GI_ID="${PKG_DATA_ID}-gi" PKG_DATA_GI_ID_DEMO="${PKG_DATA_ID_DEMO}-gi" PKG_DATA_GI_DESCRIPTION="$PKG_DATA_DESCRIPTION - gi" PKG_DATA_STREAMINGASSETS_ID="${PKG_DATA_ID}-streamingassets" PKG_DATA_STREAMINGASSETS_ID_DEMO="${PKG_DATA_ID_DEMO}-streamingassets" PKG_DATA_STREAMINGASSETS_DESCRIPTION="$PKG_DATA_DESCRIPTION - streamingassets" PKG_DATA_LEVELS_ID="${PKG_DATA_ID}-levels" PKG_DATA_LEVELS_ID_DEMO="${PKG_DATA_ID_DEMO}-levels" PKG_DATA_LEVELS_1_ID="${PKG_DATA_LEVELS_ID}-1" PKG_DATA_LEVELS_2_ID="${PKG_DATA_LEVELS_ID}-2" PKG_DATA_LEVELS_DESCRIPTION="$PKG_DATA_DESCRIPTION - levels" PKG_DATA_LEVELS_1_DESCRIPTION="$PKG_DATA_LEVELS_DESCRIPTION - 1" PKG_DATA_LEVELS_2_DESCRIPTION="$PKG_DATA_LEVELS_DESCRIPTION - 2" # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' # Prevent inclusion of unwanted shipped libraries. content_inclusion_default_libraries 'PKG_BIN' rm --recursive \ "$(path_archive_contents)/MonoBleedingEdge/EmbedRuntime" \ "$(path_archive_contents)/$(unity3d_name)_Data/Plugins" content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --symbolic "$dll_source" "$dll_destination" done EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-deus-ex.sh0000755000000000000000000001732014471751340013535 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2018 Phil Morrell set -o errexit ### # Deus Ex # send your bug reports to vv221@dotslashplay.it ### script_version=20260226.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='deus-ex' GAME_NAME='Deus Ex' ARCHIVE_BASE_7_NAME='setup_deus_ex_goty_1.112fm(revision_1.6.3.0)_(51757).exe' ARCHIVE_BASE_7_MD5='9dd2b837300bfa19c6b5b8fde5d38df6' ARCHIVE_BASE_7_TYPE='innosetup' ARCHIVE_BASE_7_SIZE='870816' ARCHIVE_BASE_7_VERSION='1.112fm-gog51757' ARCHIVE_BASE_7_URL='https://www.gog.com/game/deus_ex' ARCHIVE_BASE_6_NAME='setup_deus_ex_goty_1.112fm(revision_1.6.1.0)_(45326).exe' ARCHIVE_BASE_6_MD5='688495ac0f2e6f05f1b47bdc40cee198' ARCHIVE_BASE_6_TYPE='innosetup' ARCHIVE_BASE_6_SIZE='880000' ARCHIVE_BASE_6_VERSION='1.112fm-gog45326' ARCHIVE_BASE_5_NAME='setup_deus_ex_goty_1.112fm(revision_1.6.0.0)_(42784).exe' ARCHIVE_BASE_5_MD5='0ff01014f9364c3487a5193f9ac30dc1' ARCHIVE_BASE_5_TYPE='innosetup' ARCHIVE_BASE_5_SIZE='880000' ARCHIVE_BASE_5_VERSION='1.112fm-gog42784' ARCHIVE_BASE_4_NAME='setup_deus_ex_goty_1.112fm(revision_1.5.0.0)_(35268).exe' ARCHIVE_BASE_4_MD5='3c5693ff82d754d4fe0d6be14e5337dd' ARCHIVE_BASE_4_TYPE='innosetup' ARCHIVE_BASE_4_SIZE='880000' ARCHIVE_BASE_4_VERSION='1.112fm-gog35268' ARCHIVE_BASE_3_NAME='setup_deus_ex_goty_1.112fm_(revision_1.4.0.2)_nglide_fix_(34088).exe' ARCHIVE_BASE_3_MD5='085d7ea792d002236999dfd3697b85de' ARCHIVE_BASE_3_TYPE='innosetup' ARCHIVE_BASE_3_SIZE='760000' ARCHIVE_BASE_3_VERSION='1.112fm-gog34088' ARCHIVE_BASE_2_NAME='setup_deus_ex_goty_1.112fm(revision_1.4.0.2)_(26650).exe' ARCHIVE_BASE_2_MD5='ab165b74b26623ccee5bfd7b6f65f734' ARCHIVE_BASE_2_TYPE='innosetup' ARCHIVE_BASE_2_SIZE='760000' ARCHIVE_BASE_2_VERSION='1.112fm-gog26650' ARCHIVE_BASE_1_NAME='setup_deus_ex_goty_1.112fm(revision_1.4.0.1.5)_(24946).exe' ARCHIVE_BASE_1_MD5='daa330f1e7a427af64b952cd138cfc59' ARCHIVE_BASE_1_TYPE='innosetup' ARCHIVE_BASE_1_SIZE='760000' ARCHIVE_BASE_1_VERSION='1.112fm-gog24946' ARCHIVE_BASE_0_NAME='setup_deus_ex_goty_1.112fm(revision_1.4)_(21273).exe' ARCHIVE_BASE_0_MD5='9ec295ecad72e96fb7b9f0109dd90324' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_SIZE='750000' ARCHIVE_BASE_0_VERSION='1.112fm-gog21273' ARCHIVE_BASE_OLDTEMPLATE_3_NAME='setup_deus_ex_goty_1.112fm(revision_1.3.1)_(17719).exe' ARCHIVE_BASE_OLDTEMPLATE_3_MD5='92e9e6a33642f9e6c41cb24055df9b3c' ARCHIVE_BASE_OLDTEMPLATE_3_TYPE='innosetup' ARCHIVE_BASE_OLDTEMPLATE_3_SIZE='750000' ARCHIVE_BASE_OLDTEMPLATE_3_VERSION='1.112fm-gog17719' ARCHIVE_BASE_OLDTEMPLATE_2_NAME='setup_deus_ex_goty_1.112fm(revision_1.3.0.1)_(16231).exe' ARCHIVE_BASE_OLDTEMPLATE_2_MD5='eaaf7c7c3052fbf71f5226e2d4495268' ARCHIVE_BASE_OLDTEMPLATE_2_TYPE='innosetup' ARCHIVE_BASE_OLDTEMPLATE_2_SIZE='750000' ARCHIVE_BASE_OLDTEMPLATE_2_VERSION='1.112fm-gog16231' ARCHIVE_BASE_OLDTEMPLATE_1_NAME='setup_deus_ex_goty_1.112fm(revision_1.2.2)_(15442).exe' ARCHIVE_BASE_OLDTEMPLATE_1_MD5='573582142424ba1b5aba1f6727276450' ARCHIVE_BASE_OLDTEMPLATE_1_TYPE='innosetup' ARCHIVE_BASE_OLDTEMPLATE_1_SIZE='750000' ARCHIVE_BASE_OLDTEMPLATE_1_VERSION='1.112fm-gog15442' ARCHIVE_BASE_OLDTEMPLATE_0_NAME='setup_deus_ex_2.1.0.12.exe' ARCHIVE_BASE_OLDTEMPLATE_0_MD5='cc2c6e43b2e8e67c7586bbab5ef492ee' ARCHIVE_BASE_OLDTEMPLATE_0_TYPE='innosetup' ARCHIVE_BASE_OLDTEMPLATE_0_SIZE='750000' ARCHIVE_BASE_OLDTEMPLATE_0_VERSION='1.112fm-gog2.1.0.12' CONTENT_PATH_DEFAULT='.' CONTENT_PATH_DEFAULT_OLDTEMPLATE='app' # deusex.exe requirements CONTENT_LIBS_BIN_FILES=' system/Window.dll system/Core.dll system/Engine.dll' # A critical error is triggered on launch if any of these libraries is missing. CONTENT_LIBS0_BIN_FILES=' system/DeusEx.dll system/WinDrv.dll system/Render.dll system/Fire.dll system/DeusExText.dll system/IpDrv.dll System/Galaxy.dll' # DeusEx.dll requirements CONTENT_LIBS1_BIN_FILES=' system/CONSYS.dll system/Extension.dll' # WinDrv.dll fails to load if the following library is missing. CONTENT_LIBS2_BIN_FILES=' System/OpenglDrv.dll' CONTENT_GAME_BIN_FILES=' system/*.exe system/*.ini system/*.int' CONTENT_GAME_DATA_FILES=' help maps music sounds textures system/*.u' CONTENT_DOC_DATA_FILES=' manual.pdf system/*.txt' USER_PERSISTENT_FILES=' system/*.ini system/*.log' USER_PERSISTENT_DIRECTORIES=' save' # Without a WINE virtual desktop, the game fails to render anything but a black window. # (WINE 10.0) WINE_VIRTUAL_DESKTOP='auto' # Disable csmt, as it would cause performance issues with single CPU affinity. WINE_WINETRICKS_VERBS='csmt=off' APP_MAIN_EXE='system/deusex.exe' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Set OpenGL as the default rendering engine. REQUIREMENTS_LIST=' sed unix2dos' # Load common functions. # Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Scan library paths used by ./play.it < 2.35. # This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Set OpenGL as the default rendering engine. ini_file="${PLAYIT_WORKDIR}/gamedata/$(content_path_default)/system/deusex.ini" ini_field='GameRenderDevice' ini_value='OpenGLDrv.OpenGLRenderDevice' sed_expression="s/^${ini_field}=.*$/${ini_field}=${ini_value}/" ini_field='FirstRun' ini_value='1100' sed_expression="${sed_expression};s/^${ini_field}=.*$/${ini_field}=${ini_value}/" dos2unix --quiet "$ini_file" sed --in-place --expression="$sed_expression" "$ini_file" unix2dos --quiet "$ini_file" # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --symbolic "$dll_source" "$dll_destination" done EOF } # - Run the game binary from its parent directory. # - Set the CPU affinity to a single core, to work around a random crash on launch. # cf. https://www.gamingonlinux.com/2020/02/the-sad-case-of-unreal-engine-1-on-mesa-and-linux-in-2020/page=2#r174041 game_exec_line() { cat <<- 'EOF' # Run the game binary from its parent directory. cd system EOF cat <<- 'EOF' # Set the CPU affinity to a single core, to work around a random crash on launch. # cf. https://www.gamingonlinux.com/2020/02/the-sad-case-of-unreal-engine-1-on-mesa-and-linux-in-2020/page=2#r174041 taskset --cpu-list 0 "$(wine_command)" deusex.exe "$@" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-diablo-1.sh0000755000000000000000000001023614471751340013552 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2019 Antoine Le Gonidec set -o errexit ### # Diablo # send your bug reports to vv221@dotslashplay.it ### script_version=20260101.2 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='diablo-1' GAME_NAME='Diablo' ARCHIVE_BASE_8_NAME='setup_diablo_1.09_hellfire_v4_(78466).exe' ARCHIVE_BASE_8_MD5='c4d36192c35eb5f34faa1d97aae34455' ARCHIVE_BASE_8_TYPE='innosetup' ARCHIVE_BASE_8_SIZE='845401' ARCHIVE_BASE_8_VERSION='1.09-gog78466' ARCHIVE_BASE_8_URL='https://www.gog.com/game/diablo' ARCHIVE_BASE_7_NAME='setup_diablo_1.09_hellfire_v3_(78106).exe' ARCHIVE_BASE_7_MD5='b8d5a38fd4b21311853f19559c2ebfee' ARCHIVE_BASE_7_TYPE='innosetup' ARCHIVE_BASE_7_SIZE='845020' ARCHIVE_BASE_7_VERSION='1.09-gog78106' ARCHIVE_BASE_6_NAME='setup_diablo_1.09_hellfire_v2_(30037).exe' ARCHIVE_BASE_6_MD5='2b8f0eafc528a56452b0008dde4151a8' ARCHIVE_BASE_6_TYPE='innosetup' ARCHIVE_BASE_6_SIZE='843414' ARCHIVE_BASE_6_VERSION='1.09-gog30037' ARCHIVE_BASE_5_NAME='setup_diablo_1.09_hellfire_v2_(30038).exe' ARCHIVE_BASE_5_MD5='e70187d92fa120771db99dfa81679cfc' ARCHIVE_BASE_5_TYPE='innosetup' ARCHIVE_BASE_5_SIZE='850000' ARCHIVE_BASE_5_VERSION='1.09-gog30038' ARCHIVE_BASE_4_NAME='setup_diablo_1.09_v6_(28378).exe' ARCHIVE_BASE_4_MD5='588ab50c1ef25abb682b86ea4306ea50' ARCHIVE_BASE_4_TYPE='innosetup' ARCHIVE_BASE_4_SIZE='670000' ARCHIVE_BASE_4_VERSION='1.09-gog28378' ARCHIVE_BASE_3_NAME='setup_diablo_1.09_v4_(27989).exe' ARCHIVE_BASE_3_MD5='8dac74a616646fa41d5d73f4765cef40' ARCHIVE_BASE_3_TYPE='innosetup' ARCHIVE_BASE_3_SIZE='670000' ARCHIVE_BASE_3_VERSION='1.09-gog27989' ARCHIVE_BASE_2_NAME='setup_diablo_1.09_v3_(27965).exe' ARCHIVE_BASE_2_MD5='38d654af858d7a2591711f0e6324fcd0' ARCHIVE_BASE_2_TYPE='innosetup' ARCHIVE_BASE_2_SIZE='670000' ARCHIVE_BASE_2_VERSION='1.09-gog27695' ARCHIVE_BASE_1_NAME='setup_diablo_1.09_v2_(27882).exe' ARCHIVE_BASE_1_MD5='83b2d6b8551a9825a426dac7b9302654' ARCHIVE_BASE_1_TYPE='innosetup' ARCHIVE_BASE_1_SIZE='670000' ARCHIVE_BASE_1_VERSION='1.09-gog27882' ARCHIVE_BASE_0_NAME='setup_diablo_1.09_(27873).exe' ARCHIVE_BASE_0_MD5='bf57594f5218a794a284b5e2a0f5ba14' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_SIZE='680000' ARCHIVE_BASE_0_VERSION='1.09-gog27873' CONTENT_PATH_DEFAULT='.' CONTENT_GAME_MAIN_FILES=' diabdat.mpq drtl_ix86_108_109.mpq patch_rt.mpq' CONTENT_DOC_MAIN_FILES=' manual.pdf manual_de.pdf manual_fr.pdf manual_it.pdf license.txt patch.txt readme.txt update.txt' APP_MAIN_TYPE='custom' APP_MAIN_ICON='diablo.exe' PKG_MAIN_DEPENDENCIES_COMMANDS=' devilutionx' ## Easier upgrades from pre-20260101.2 packages PKG_MAIN_PROVIDES=' diablo-1-data' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons content_inclusion_default # Write launchers. custom_launcher() { launcher_headers cat <<- EOF devilutionx --data-dir "$(path_game_data)" EOF launcher_exit } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-diablo-2-expansions.sh0000755000000000000000000001164614471751340015746 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2025 Antoine Le Gonidec set -o errexit ### # Diablo 2 expansions: # - Lord of Destruction # send your bug reports to vv221@dotslashplay.it ### script_version=20260322.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='diablo-2' GAME_NAME='Diablo II' EXPANSION_ID='lord-of-destruction' EXPANSION_NAME='Lord of Destruction' ARCHIVE_BASE_FR_0_NAME='Installer Tome.mpq' ARCHIVE_BASE_FR_0_MD5='5ff92ff2fc1c1eb5c81631b6ff56c804' ARCHIVE_BASE_FR_0_SIZE='605156' ARCHIVE_BASE_FR_0_VERSION='1.14b-blizzard' ARCHIVE_BASE_FR_0_URL='https://eu.battle.net/download/getLegacy?os=win&locale=frFR&product=D2XP' ARCHIVE_BASE_EN_0_NAME='Installer Tome.mpq' ARCHIVE_BASE_EN_0_MD5='fb7bdc951003b8def5332f73060cd464' ARCHIVE_BASE_EN_0_SIZE='489332' ARCHIVE_BASE_EN_0_VERSION='1.14b-blizzard' ARCHIVE_BASE_EN_0_URL='https://eu.battle.net/download/getLegacy?os=win&locale=enUS&product=D2XP' CONTENT_PATH_DEFAULT='.' CONTENT_GAME_MAIN_PATH='Common' CONTENT_GAME_MAIN_FILES=' d2exp.mpq d2xtalk.mpq d2xvideo.mpq' CONTENT_GAME_DATA_MUSIC_PATH='Common' CONTENT_GAME_DATA_MUSIC_FILES=' d2xmusic.mpq' CONTENT_GAME_DATA_SHARED_PATH='Common' CONTENT_GAME_DATA_SHARED_FILES=' d2char.mpq patch_d2.mpq' APP_MAIN_ICON='PC/Diablo II.exe' PACKAGES_LIST=' PKG_MAIN PKG_DATA_MUSIC PKG_DATA_SHARED' PKG_PARENT_ID="$GAME_ID" PKG_MAIN_ID="${GAME_ID}-${EXPANSION_ID}" PKG_MAIN_ID_EN="${PKG_MAIN_ID}-en" PKG_MAIN_ID_FR="${PKG_MAIN_ID}-fr" PKG_MAIN_PROVIDES=" $PKG_MAIN_ID" PKG_MAIN_DESCRIPTION_FR='French localisation' PKG_MAIN_DESCRIPTION_EN='English localisation' PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_PARENT PKG_DATA_MUSIC PKG_DATA_SHARED' PKG_DATA_MUSIC_ID="${GAME_ID}-${EXPANSION_ID}-data-music" PKG_DATA_MUSIC_DESCRIPTION='music' PKG_DATA_SHARED_ID="${GAME_ID}-${EXPANSION_ID}-data-shared" PKG_DATA_SHARED_PROVIDES=" $PKG_DATA_SHARED_ID ${GAME_ID}-data-shared" PKG_DATA_SHARED_DESCRIPTION='data shared between the base game and the expansion' # smpq is required to manipulate .mpq archive files. REQUIREMENTS_LIST=' smpq' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Check for the presence of the CD key files. # During a regular install of Lord of Destruction, the CD key is stored encrypted into d2char.mpq, # in files under the "data/global/sfx/cursor" and "data/global/chars/am/cof" directories. # In order to build a package that includes the CD key (required, or the game will not launch), # you need to provide the following files in addition to the installer .mpq: # - curindx.wav # - amblxbow.cof # # They can be extracted from a regular Diablo 2 install with: # smpq --extract d2char.mpq data/global/sfx/cursor/curindx.wav data/global/chars/am/cof/amblxbow.cof ARCHIVE_REQUIRED_CDKEY_1_NAME='curindx.wav' ARCHIVE_REQUIRED_CDKEY_2_NAME='amblxbow.cof' archive_initialize_required \ 'ARCHIVE_CDKEY_1' \ 'ARCHIVE_REQUIRED_CDKEY_1' archive_initialize_required \ 'ARCHIVE_CDKEY_2' \ 'ARCHIVE_REQUIRED_CDKEY_2' # In addition to these files, the d2char.mpq archive from Diablo 2 base game is required. # If Diablo 2 is installed on the current system, a symbolic link to the game file is enough. ARCHIVE_REQUIRED_D2CHAR_NAME='d2char.mpq' archive_initialize_required \ 'ARCHIVE_D2CHAR' \ 'ARCHIVE_REQUIRED_D2CHAR' # Extract game data. archive_path=$(archive_path "$(current_archive)") archive_path_cdkey_1=$(archive_path 'ARCHIVE_CDKEY_1') archive_path_cdkey_2=$(archive_path 'ARCHIVE_CDKEY_2') archive_path_d2char=$(archive_path 'ARCHIVE_D2CHAR') mkdir --parents "${PLAYIT_WORKDIR}/gamedata" information_archive_data_extraction "$archive_path" ( cd "$(path_archive_contents)" smpq --extract "$archive_path" # Update d2char.mpq archive. cp --dereference "$archive_path_d2char" ./Common/ ( cd 'PC-100x' smpq --append --overwrite ../Common/d2char.mpq ./* ) ( cd 'Files' mkdir --parents \ 'data/global/sfx/cursor' \ 'data/global/chars/am/cof' cp --dereference \ "$archive_path_cdkey_1" \ 'data/global/sfx/cursor' cp --dereference \ "$archive_path_cdkey_2" \ 'data/global/chars/am/cof' smpq --append --overwrite ../Common/d2char.mpq \ data/global/sfx/cursor/curindx.wav \ data/global/chars/am/cof/amblxbow.cof rm --force --recursive 'data/global/sfx' 'data/global/chars/am' ) ) # Include game data. content_inclusion_icons 'PKG_DATA_SHARED' 'APP_MAIN' content_inclusion_default # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-diablo-2.sh0000755000000000000000000001164514471751340013560 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2025 Antoine Le Gonidec set -o errexit ### # Diablo 2 # send your bug reports to vv221@dotslashplay.it ### script_version=20260322.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='diablo-2' GAME_NAME='Diablo II' ARCHIVE_BASE_FR_0_NAME='Installer Tome.mpq' ARCHIVE_BASE_FR_0_MD5='04a89652d44e7acf126d4d108bdcff87' ARCHIVE_BASE_FR_0_SIZE='1524530' ARCHIVE_BASE_FR_0_VERSION='1.14b-blizzard' ARCHIVE_BASE_FR_0_URL='https://eu.battle.net/download/getLegacy?os=win&locale=frFR&product=D2DV' ARCHIVE_BASE_EN_0_NAME='Installer Tome.mpq' ARCHIVE_BASE_EN_0_MD5='f5cf9b3685eacd506e9ddb521751cdfc' ARCHIVE_BASE_EN_0_SIZE='1526589' ARCHIVE_BASE_EN_0_VERSION='1.14b-blizzard' ARCHIVE_BASE_EN_0_URL='https://eu.battle.net/download/getLegacy?os=win&locale=enUS&product=D2DV' CONTENT_PATH_DEFAULT='.' # Diablo II.exe differs between the English and the French build of the game, # for now we assume the differences are not critical and one can be used in place of the other. CONTENT_GAME_BIN_PATH='PC' CONTENT_GAME_BIN_FILES=' Diablo II.exe Game.exe D2.LNG' # Game.exe requirements CONTENT_LIBS_BIN_PATH='PC' CONTENT_LIBS_BIN_FILES=' binkw32.dll smackw32.dll ijl11.dll' CONTENT_GAME_DATA_PATH='Common' CONTENT_GAME_DATA_FILES=' d2data.mpq d2sfx.mpq d2speech.mpq d2video.mpq' CONTENT_GAME_DATA_MUSIC_PATH='Common' CONTENT_GAME_DATA_MUSIC_FILES=' d2music.mpq' CONTENT_GAME_DATA_SHARED_PATH='Common' CONTENT_GAME_DATA_SHARED_FILES=' d2char.mpq patch_d2.mpq' WINE_PERSISTENT_DIRECTORIES=' users/${USER}/Saved Games/Diablo II' APP_MAIN_EXE='Game.exe' APP_MAIN_ICON='PC/Diablo II.exe' PACKAGES_LIST=' PKG_BIN PKG_DATA PKG_DATA_MUSIC PKG_DATA_SHARED' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA_BASE' PKG_BIN_DEPENDENCIES_GSTREAMER_PLUGINS=' video/x-msvideo' PKG_DATA_BASE_ID="${GAME_ID}-data" PKG_DATA_ID_FR="${PKG_DATA_BASE_ID}-fr" PKG_DATA_ID_EN="${PKG_DATA_BASE_ID}-en" PKG_DATA_PROVIDES=" $PKG_DATA_BASE_ID" PKG_DATA_DESCRIPTION_FR='data (French localisation)' PKG_DATA_DESCRIPTION_EN='data (English localisation)' PKG_DATA_DEPENDENCIES_SIBLINGS=' PKG_DATA_MUSIC PKG_DATA_SHARED' PKG_DATA_MUSIC_ID="${PKG_DATA_BASE_ID}-music" PKG_DATA_MUSIC_DESCRIPTION='music' PKG_DATA_SHARED_ID="${PKG_DATA_BASE_ID}-shared" PKG_DATA_SHARED_DESCRIPTION='data shared between the base game and the expansion' # smpq is required to manipulate .mpq archive files. REQUIREMENTS_LIST=' smpq' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Check for the presence of required CD key files. # During a regular install of Diablo 2, the CD key is stored encrypted into d2data.mpq, in the files under the "data/global/sfx/cursor" directory. # In order to build a package that includes the CD key (required, or the game will not launch), # you need to provide the following files in addition to the installer .mpq: # - curindx.wav # - wavindx.wav # # They can be extracted from a regular Diablo 2 install with: # smpq --extract d2data.mpq data/global/sfx/cursor/curindx.wav data/global/sfx/cursor/wavindx.wav ARCHIVE_REQUIRED_CDKEY_1_NAME='curindx.wav' ARCHIVE_REQUIRED_CDKEY_2_NAME='wavindx.wav' archive_initialize_required \ 'ARCHIVE_CDKEY_1' \ 'ARCHIVE_REQUIRED_CDKEY_1' archive_initialize_required \ 'ARCHIVE_CDKEY_2' \ 'ARCHIVE_REQUIRED_CDKEY_2' # Extract game data. archive_path=$(archive_path "$(current_archive)") archive_path_cdkey_1=$(archive_path 'ARCHIVE_CDKEY_1') archive_path_cdkey_2=$(archive_path 'ARCHIVE_CDKEY_2') mkdir --parents "${PLAYIT_WORKDIR}/gamedata" information_archive_data_extraction "$archive_path" ( cd "$(path_archive_contents)" smpq --extract "$archive_path" # Update d2data.mpq archive. ( cd 'PC-100' smpq --append ../Common/d2data.mpq ./* ) ( cd 'Files' mkdir --parents 'data/global/sfx/cursor' cp --dereference \ "$archive_path_cdkey_1" \ "$archive_path_cdkey_2" \ 'data/global/sfx/cursor' smpq --append ../Common/d2data.mpq \ data/global/sfx/cursor/curindx.wav \ data/global/sfx/cursor/wavindx.wav rm --force --recursive 'data/global/sfx' ) ) # Include game data. content_inclusion_icons 'PKG_DATA_SHARED' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. ln --force --symbolic $(path_libraries)/* "\${PATH_PREFIX}" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-disco-elysium.sh0000755000000000000000000002430714471751340014754 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2022 Antoine Le Gonidec set -o errexit ### # Disco Elysium # send your bug reports to vv221@dotslashplay.it ### script_version=20260315.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='disco-elysium' GAME_NAME='Disco Elysium' ARCHIVE_BASE_9_NAME='setup_disco_elysium_-_the_final_cut_wina0a063ab_(87949).exe' ARCHIVE_BASE_9_MD5='f8b5b7da299887ecdc0ba6d21888f569' ARCHIVE_BASE_9_TYPE='innosetup' ARCHIVE_BASE_9_PART1_NAME='setup_disco_elysium_-_the_final_cut_wina0a063ab_(87949)-1.bin' ARCHIVE_BASE_9_PART1_MD5='3b1ea58bc7e80d6d0e0afe18ad8a3187' ARCHIVE_BASE_9_PART2_NAME='setup_disco_elysium_-_the_final_cut_wina0a063ab_(87949)-2.bin' ARCHIVE_BASE_9_PART2_MD5='602c9be0e9a050af55fc337221e3992e' ARCHIVE_BASE_9_PART3_NAME='setup_disco_elysium_-_the_final_cut_wina0a063ab_(87949)-3.bin' ARCHIVE_BASE_9_PART3_MD5='69b2f730d69e7b9a97d52f9ff3a8266d' ARCHIVE_BASE_9_SIZE='10073778' ARCHIVE_BASE_9_VERSION='1.0.a0a063ab-gog87949' ARCHIVE_BASE_9_URL='https://www.gog.com/game/disco_elysium' ARCHIVE_BASE_8_NAME='setup_disco_elysium_-_the_final_cut_wina0a063aa_(87015).exe' ARCHIVE_BASE_8_MD5='83e24b26a460d4a03b6b9f5506ee8a6e' ARCHIVE_BASE_8_TYPE='innosetup' ARCHIVE_BASE_8_PART1_NAME='setup_disco_elysium_-_the_final_cut_wina0a063aa_(87015)-1.bin' ARCHIVE_BASE_8_PART1_MD5='32731403fc773c1b0bd488f4df328d5f' ARCHIVE_BASE_8_PART2_NAME='setup_disco_elysium_-_the_final_cut_wina0a063aa_(87015)-2.bin' ARCHIVE_BASE_8_PART2_MD5='4c0d1232a25f27e426e20247801677c6' ARCHIVE_BASE_8_PART3_NAME='setup_disco_elysium_-_the_final_cut_wina0a063aa_(87015)-3.bin' ARCHIVE_BASE_8_PART3_MD5='24f238a4340e64fd4d04373b9f3b11e1' ARCHIVE_BASE_8_SIZE='10077561' ARCHIVE_BASE_8_VERSION='1.0.a0a063aa-gog87015' ARCHIVE_BASE_7_NAME='setup_disco_elysium_-_the_final_cut_wina0a062f0_(77603).exe' ARCHIVE_BASE_7_MD5='8dad100dd4462ac2cbb01f9f11dd0be1' ARCHIVE_BASE_7_TYPE='innosetup' ARCHIVE_BASE_7_PART1_NAME='setup_disco_elysium_-_the_final_cut_wina0a062f0_(77603)-1.bin' ARCHIVE_BASE_7_PART1_MD5='9743142f176fe8f61617d87d8518aef3' ARCHIVE_BASE_7_PART2_NAME='setup_disco_elysium_-_the_final_cut_wina0a062f0_(77603)-2.bin' ARCHIVE_BASE_7_PART2_MD5='cf4a3e7c58b00a9b90dbd722075350f6' ARCHIVE_BASE_7_PART3_NAME='setup_disco_elysium_-_the_final_cut_wina0a062f0_(77603)-3.bin' ARCHIVE_BASE_7_PART3_MD5='9aa0fdaec98a1b97a9e2059e2db7cfca' ARCHIVE_BASE_7_SIZE='10092905' ARCHIVE_BASE_7_VERSION='1.0.a0a062f0-gog77603' ARCHIVE_BASE_6_NAME='setup_disco_elysium_-_the_final_cut_wina0a062f7_(75177).exe' ARCHIVE_BASE_6_MD5='6cced47952e91f7acbaaf718f457ca29' ARCHIVE_BASE_6_TYPE='innosetup' ARCHIVE_BASE_6_PART1_NAME='setup_disco_elysium_-_the_final_cut_wina0a062f7_(75177)-1.bin' ARCHIVE_BASE_6_PART1_MD5='fa7646cb5754722dcc40dd4631f22587' ARCHIVE_BASE_6_PART2_NAME='setup_disco_elysium_-_the_final_cut_wina0a062f7_(75177)-2.bin' ARCHIVE_BASE_6_PART2_MD5='2255e435c92bd2507822469d851fcf79' ARCHIVE_BASE_6_PART3_NAME='setup_disco_elysium_-_the_final_cut_wina0a062f7_(75177)-3.bin' ARCHIVE_BASE_6_PART3_MD5='33bf8ad6a9421f58c5418103f3a95bd6' ARCHIVE_BASE_6_SIZE='10074505' ARCHIVE_BASE_6_VERSION='1.0.a0a062f7-gog75177' ARCHIVE_BASE_5_NAME='setup_disco_elysium_-_the_final_cut_wina0a062f3_(74350).exe' ARCHIVE_BASE_5_MD5='52a20a526a898a173d98b800f331616c' ARCHIVE_BASE_5_TYPE='innosetup' ARCHIVE_BASE_5_PART1_NAME='setup_disco_elysium_-_the_final_cut_wina0a062f3_(74350)-1.bin' ARCHIVE_BASE_5_PART1_MD5='29cac3aca83c0c3ef1b0c5923b7a8f22' ARCHIVE_BASE_5_PART2_NAME='setup_disco_elysium_-_the_final_cut_wina0a062f3_(74350)-2.bin' ARCHIVE_BASE_5_PART2_MD5='82fe3cd0526d89342f41df1f58dfec01' ARCHIVE_BASE_5_PART3_NAME='setup_disco_elysium_-_the_final_cut_wina0a062f3_(74350)-3.bin' ARCHIVE_BASE_5_PART3_MD5='4cbf7779c69ca856d689cad0bc568ef3' ARCHIVE_BASE_5_SIZE='10074442' ARCHIVE_BASE_5_VERSION='1.0.a0a062f3-gog74350' ARCHIVE_BASE_4_NAME='setup_disco_elysium_-_the_final_cut_wina0a062f1_(73330).exe' ARCHIVE_BASE_4_MD5='fa1ab8b1023dbdd96464e48426f724de' ARCHIVE_BASE_4_TYPE='innosetup' ARCHIVE_BASE_4_PART1_NAME='setup_disco_elysium_-_the_final_cut_wina0a062f1_(73330)-1.bin' ARCHIVE_BASE_4_PART1_MD5='fa2edf58880e63def21f2565ac14c73f' ARCHIVE_BASE_4_PART2_NAME='setup_disco_elysium_-_the_final_cut_wina0a062f1_(73330)-2.bin' ARCHIVE_BASE_4_PART2_MD5='b4d7b67b7633f29688380c6fd83a426b' ARCHIVE_BASE_4_PART3_NAME='setup_disco_elysium_-_the_final_cut_wina0a062f1_(73330)-3.bin' ARCHIVE_BASE_4_PART3_MD5='2dff22e62041509591e11d91d5567ee0' ARCHIVE_BASE_4_SIZE='10076178' ARCHIVE_BASE_4_VERSION='1.0.a0a062f1-gog73330' ARCHIVE_BASE_3_NAME='setup_disco_elysium_-_the_final_cut_wina0a062ed_(72872).exe' ARCHIVE_BASE_3_MD5='8f2bc041892c5edea9fbcf5340ad05c1' ARCHIVE_BASE_3_TYPE='innosetup' ARCHIVE_BASE_3_PART1_NAME='setup_disco_elysium_-_the_final_cut_wina0a062ed_(72872)-1.bin' ARCHIVE_BASE_3_PART1_MD5='f150ff79eabe46ac6440ac85f1ed63a9' ARCHIVE_BASE_3_PART2_NAME='setup_disco_elysium_-_the_final_cut_wina0a062ed_(72872)-2.bin' ARCHIVE_BASE_3_PART2_MD5='798ce91c5204e3d0bf810033734700bd' ARCHIVE_BASE_3_PART3_NAME='setup_disco_elysium_-_the_final_cut_wina0a062ed_(72872)-3.bin' ARCHIVE_BASE_3_PART3_MD5='3fccee3836168ab2d76b5759258d8363' ARCHIVE_BASE_3_SIZE='10078050' ARCHIVE_BASE_3_VERSION='1.0.a0a062ed-gog72872' ARCHIVE_BASE_2_NAME='setup_disco_elysium_a0a062e7_(64bit)_(63158).exe' ARCHIVE_BASE_2_MD5='1d9cab4e4952a588a5a8af30ac7dd7aa' ARCHIVE_BASE_2_TYPE='innosetup' ARCHIVE_BASE_2_PART1_NAME='setup_disco_elysium_a0a062e7_(64bit)_(63158)-1.bin' ARCHIVE_BASE_2_PART1_MD5='fbe7a581843d47681ba0f2aa1696a58c' ARCHIVE_BASE_2_PART2_NAME='setup_disco_elysium_a0a062e7_(64bit)_(63158)-2.bin' ARCHIVE_BASE_2_PART2_MD5='8925592fc18c4565e262fd4e3008e9fc' ARCHIVE_BASE_2_PART3_NAME='setup_disco_elysium_a0a062e7_(64bit)_(63158)-3.bin' ARCHIVE_BASE_2_PART3_MD5='ddbda58eb8c570662689721246b4f081' ARCHIVE_BASE_2_SIZE='10000000' ARCHIVE_BASE_2_VERSION='1.0.a0a062e7-gog63158' ARCHIVE_BASE_1_NAME='setup_disco_elysium_3c54ad81_(64bit)_(60250).exe' ARCHIVE_BASE_1_MD5='c915229dfa223b16f4399475589ff346' ARCHIVE_BASE_1_TYPE='innosetup' ARCHIVE_BASE_1_PART1_NAME='setup_disco_elysium_3c54ad81_(64bit)_(60250)-1.bin' ARCHIVE_BASE_1_PART1_MD5='a6d13f109f26f17a2f1a9d06f519ba1f' ARCHIVE_BASE_1_PART2_NAME='setup_disco_elysium_3c54ad81_(64bit)_(60250)-2.bin' ARCHIVE_BASE_1_PART2_MD5='816a2fed25591f9f26b094f9ead7a1af' ARCHIVE_BASE_1_PART3_NAME='setup_disco_elysium_3c54ad81_(64bit)_(60250)-3.bin' ARCHIVE_BASE_1_PART3_MD5='a12113e41085154d94209cd076ce5057' ARCHIVE_BASE_1_SIZE='10000000' ARCHIVE_BASE_1_VERSION='1.0.3c54ad81-gog60250' ARCHIVE_BASE_0_NAME='setup_disco_elysium_ee8d3b39_(64bit)_(58288).exe' ARCHIVE_BASE_0_MD5='6b196bb79102de695bbc45904342b8ad' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_PART1_NAME='setup_disco_elysium_ee8d3b39_(64bit)_(58288)-1.bin' ARCHIVE_BASE_0_PART1_MD5='120e95e8fef4537283705b5510af6d86' ARCHIVE_BASE_0_PART2_NAME='setup_disco_elysium_ee8d3b39_(64bit)_(58288)-2.bin' ARCHIVE_BASE_0_PART2_MD5='82c73e068dc3b18893e11a45bf74242e' ARCHIVE_BASE_0_PART3_NAME='setup_disco_elysium_ee8d3b39_(64bit)_(58288)-3.bin' ARCHIVE_BASE_0_PART3_MD5='20d337ae2de345628b5e4a6b9a2f55c7' ARCHIVE_BASE_0_SIZE='10000000' ARCHIVE_BASE_0_VERSION='1.0.ee8d3b39-gog58288' UNITY3D_NAME='disco' UNITY3D_NAME_2='Disco Elysium' UNITY3D_NAME_1='Disco Elysium' UNITY3D_NAME_0='Disco Elysium' # TODO: Experimental support for Windows Unity3D plugins, # no support in ./play.it library yet. # (./play.it 2.35) # Prevent a loading freeze before playing the logo video. UNITY3D_PLUGINS=' GalaxyCSharpGlue.dll steam_api64.dll' # Prevent a looping error tanking performances in the menu. UNITY3D_PLUGINS="$UNITY3D_PLUGINS AmplifyTextureNative.dll" # GalaxyCSharpGlue.dll requirement UNITY3D_PLUGINS="$UNITY3D_PLUGINS Galaxy64.dll" CONTENT_PATH_DEFAULT='.' # disco.exe requirements CONTENT_LIBS_BIN_FILES=' UnityPlayer.dll' # Prevent the following error on launch: # Failed to load il2cpp CONTENT_LIBS0_BIN_FILES=' GameAssembly.dll' # GameAssembly.dll requirements CONTENT_LIBS1_BIN_FILES=' baselib.dll' CONTENT_GAME_DATA_STREAMINGASSETS_FILES=" ${UNITY3D_NAME}_Data/StreamingAssets" CONTENT_GAME_DATA_STREAMINGASSETS_FILES_2=" ${UNITY3D_NAME_2}_Data/StreamingAssets" CONTENT_GAME_DATA_STREAMINGASSETS_FILES_1=" ${UNITY3D_NAME_1}_Data/StreamingAssets" CONTENT_GAME_DATA_STREAMINGASSETS_FILES_0=" ${UNITY3D_NAME_0}_Data/StreamingAssets" WINE_PERSISTENT_DIRECTORIES=' users/${USER}/AppData/LocalLow/ZAUM Studio/Disco Elysium' PACKAGES_LIST=' PKG_BIN PKG_DATA_STREAMINGASSETS PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' PKG_DATA_DEPENDENCIES_SIBLINGS=' PKG_DATA_STREAMINGASSETS' PKG_DATA_STREAMINGASSETS_ID="${PKG_DATA_ID}-streamingassets" PKG_DATA_STREAMINGASSETS_DESCRIPTION="$PKG_DATA_DESCRIPTION - streamingassets" # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' # Include Unity3D plugins. unity3d_plugins_inclusion 'PKG_BIN' "$(unity3d_name)_Data/Plugins/x86_64" "$(path_libraries)/$(unity3d_name)_Data/Plugins" # Prevent inclusion of unwanted shipped libraries. content_inclusion_default_libraries 'PKG_BIN' rm --recursive "$(path_archive_contents)/$(unity3d_name)_Data/Plugins" content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --symbolic "$dll_source" "$dll_destination" done EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-distance.sh0000755000000000000000000000602514471751340013755 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2018 Antoine Le Gonidec set -o errexit ### # Distance # send your bug reports to vv221@dotslashplay.it ### script_version=20250724.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='distance' GAME_NAME='Distance' ARCHIVE_BASE_5_NAME='distance_6895_linux.tar.gz' ARCHIVE_BASE_5_MD5='8c71eb4ebd4dbe0b89ee90ba538eadd9' ARCHIVE_BASE_5_SIZE='2600000' ARCHIVE_BASE_5_VERSION='1.4.0-humble190905' ARCHIVE_BASE_5_URL='https://www.humblebundle.com/store/distance' ARCHIVE_BASE_4_NAME='distance_6842_linux.tar.gz' ARCHIVE_BASE_4_MD5='58e05033c1a0ae206718be5d5ee800db' ARCHIVE_BASE_4_SIZE='2400000' ARCHIVE_BASE_4_VERSION='1.3.1-humble190618' ARCHIVE_BASE_3_NAME='distance_6839_linux.tar.gz' ARCHIVE_BASE_3_MD5='308b8276a490f641476098900180d1d3' ARCHIVE_BASE_3_SIZE='2400000' ARCHIVE_BASE_3_VERSION='1.3.0-humble190609' ARCHIVE_BASE_2_NAME='distance_6802_linux.tar.gz' ARCHIVE_BASE_2_MD5='e98812e71ce42e667c33cdf3f38793b7' ARCHIVE_BASE_2_SIZE='2400000' ARCHIVE_BASE_2_VERSION='1.2.4-humble190418' ARCHIVE_BASE_1_NAME='distance_6714_linux.tar.gz' ARCHIVE_BASE_1_MD5='6b82a258c4fe4c5fe5dcf3ec70f7c326' ARCHIVE_BASE_1_SIZE='2300000' ARCHIVE_BASE_1_VERSION='1.1.1-humble190120' ARCHIVE_BASE_0_NAME='distance_6670_linux.tar.gz' ARCHIVE_BASE_0_MD5='7542f19db3aa2f00368b4efb91907a4f' ARCHIVE_BASE_0_SIZE='1800000' ARCHIVE_BASE_0_VERSION='1.0.2-humble181103' UNITY3D_NAME='Distance' UNITY3D_PLUGINS=' libAkFlanger.so libAkGuitarDistortion.so libAkHarmonizer.so libAkPitchShifter.so libAkSoundEngine.so libAkStereoDelay.so libAkTremolo.so libSynthOne.so ScreenSelector.so' CONTENT_PATH_DEFAULT='bin' CONTENT_DOC_DATA_PATH='.' CONTENT_DOC_DATA_FILES=' EULA.txt' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libgcc_s.so.1 libgdk_pixbuf-2.0.so.0 libglib-2.0.so.0 libGL.so.1 libgobject-2.0.so.0 libgtk-x11-2.0.so.0 libm.so.6 libpthread.so.0 librt.so.1 libstdc++.so.6 libX11.so.6 libXcursor.so.1 libXrandr.so.2 libz.so.1' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run the default initialization actions initialization_default "$@" # Extract game data archive_extraction_default # Include game data content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers launchers_generation 'PKG_BIN' # Build packages packages_generation print_instructions # Clean up working_directory_cleanup exit 0 games/play-dungeon-keeper-1.sh0000755000000000000000000001470014471751340015230 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec set -o errexit ### # Dungeon Keeper 1 # send your bug reports to vv221@dotslashplay.it ### script_version=20250828.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='dungeon-keeper-1' GAME_NAME='Dungeon Keeper' ARCHIVE_BASE_2_NAME='setup_dungeon_keeper_gold_1.01_fix_(76190).exe' ARCHIVE_BASE_2_MD5='bb51a55e868c7b22c505cbf6bfaa3789' ARCHIVE_BASE_2_TYPE='innosetup' ARCHIVE_BASE_2_SIZE='393045' ARCHIVE_BASE_2_VERSION='1.01-gog76190' ARCHIVE_BASE_2_URL='https://www.gog.com/game/dungeon_keeper' ARCHIVE_BASE_1_NAME='setup_dungeon_keeper_gold_10.1_(28184).exe' ARCHIVE_BASE_1_MD5='5d9c6f723c0375590cd77f79bed44eff' ARCHIVE_BASE_1_TYPE='innosetup' ARCHIVE_BASE_1_SIZE='370026' ARCHIVE_BASE_1_VERSION='1.01-gog28184' ARCHIVE_BASE_0_NAME='setup_dungeon_keeper_gold_2.1.0.7.exe' ARCHIVE_BASE_0_MD5='8f8890d743c171fb341c9d9c87c52343' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_SIZE='400000' ARCHIVE_BASE_0_VERSION='1.01-gog2.1.0.7' CONTENT_PATH_DEFAULT='.' CONTENT_PATH_DEFAULT_0='app' CONTENT_GAME_MAIN_FILES=' data ldata levels sound game.gog game.ins dpatch.1 wpatch.1 deeper.exe dos4gw.exe keeper.exe patch1.exe keeper.pat keeper.pti *.ogg' CONTENT_GAME0_MAIN_PATH='__support/save' CONTENT_GAME0_MAIN_PATH_0='app' CONTENT_GAME0_MAIN_FILES=' keeper.cfg sound/dig.ini' CONTENT_DOC_MAIN_FILES=' readme.txt *.pdf' ## Localisation files, extracted from the disk image. CONTENT_L10N_TXT_PATH='keeper/data' CONTENT_L10N_TXT_EN_PATH="${CONTENT_L10N_TXT_PATH}/english" CONTENT_L10N_TXT_FR_PATH="${CONTENT_L10N_TXT_PATH}/french" CONTENT_L10N_TXT_FILES=' dd1text.dat text.dat' CONTENT_L10N_TXT_EN_FILES="$CONTENT_L10N_TXT_FILES" CONTENT_L10N_TXT_FR_FILES="$CONTENT_L10N_TXT_FILES" CONTENT_L10N_VOICES_SPEECH_PATH='keeper/sound/speech' CONTENT_L10N_VOICES_SPEECH_EN_PATH="${CONTENT_L10N_VOICES_SPEECH_PATH}/english" CONTENT_L10N_VOICES_SPEECH_FR_PATH="${CONTENT_L10N_VOICES_SPEECH_PATH}/french" CONTENT_L10N_VOICES_SPEECH_FILES=' speech.dat' CONTENT_L10N_VOICES_SPEECH_EN_FILES="$CONTENT_L10N_VOICES_SPEECH_FILES" CONTENT_L10N_VOICES_SPEECH_FR_FILES="$CONTENT_L10N_VOICES_SPEECH_FILES" CONTENT_L10N_VOICES_ATLAS_PATH='keeper/sound/atlas' CONTENT_L10N_VOICES_ATLAS_EN_PATH="${CONTENT_L10N_VOICES_ATLAS_PATH}/english" CONTENT_L10N_VOICES_ATLAS_FR_PATH="${CONTENT_L10N_VOICES_ATLAS_PATH}/french" CONTENT_L10N_VOICES_ATLAS_FILES=' bad??.wav good??.wav' CONTENT_L10N_VOICES_ATLAS_EN_FILES="$CONTENT_L10N_VOICES_ATLAS_FILES" CONTENT_L10N_VOICES_ATLAS_FR_FILES="$CONTENT_L10N_VOICES_ATLAS_FILES" DOSBOX_DISK_IMAGE_PATH='game.ins' USER_PERSISTENT_DIRECTORIES=' save' USER_PERSISTENT_FILES=' *.cfg data/HISCORES.DAT' APP_MAIN_EXE='keeper.exe' APP_MAIN_ICON='goggame-1207658934.ico' APP_ADDON_ID="${GAME_ID}-deeper-dungeons" APP_ADDON_NAME="$GAME_NAME - Deeper Dungeons" APP_ADDON_EXE='deeper.exe' APP_ADDON_ICON='gfw_high_addon.ico' PACKAGES_LIST=' PKG_L10N_TXT_EN PKG_L10N_TXT_FR PKG_L10N_VOICES_EN PKG_L10N_VOICES_FR PKG_MAIN' PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_L10N_TXT PKG_L10N_VOICES' PKG_L10N_TXT_ID="${GAME_ID}-l10n-txt" PKG_L10N_TXT_EN_ID="${PKG_L10N_TXT_ID}-en" PKG_L10N_TXT_FR_ID="${PKG_L10N_TXT_ID}-fr" PKG_L10N_TXT_PROVIDES=" $PKG_L10N_TXT_ID" PKG_L10N_TXT_EN_PROVIDES="$PKG_L10N_TXT_PROVIDES" PKG_L10N_TXT_FR_PROVIDES="$PKG_L10N_TXT_PROVIDES" PKG_L10N_TXT_EN_DESCRIPTION='English text' PKG_L10N_TXT_FR_DESCRIPTION='French text' PKG_L10N_VOICES_ID="${GAME_ID}-l10n-voices" PKG_L10N_VOICES_EN_ID="${PKG_L10N_VOICES_ID}-en" PKG_L10N_VOICES_FR_ID="${PKG_L10N_VOICES_ID}-fr" PKG_L10N_VOICES_PROVIDES=" $PKG_L10N_VOICES_ID" PKG_L10N_VOICES_EN_PROVIDES="$PKG_L10N_VOICES_PROVIDES" PKG_L10N_VOICES_FR_PROVIDES="$PKG_L10N_VOICES_PROVIDES" PKG_L10N_VOICES_EN_DESCRIPTION='English voices' PKG_L10N_VOICES_FR_DESCRIPTION='French voices' ## - unar is used to extract files from the disk image. ## - convmv is used to convert file paths to lower case. REQUIREMENTS_LIST=' unar convmv' # Load common functions. PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default ( cd "${PLAYIT_WORKDIR}/gamedata/$(content_path_default)" ## Delete files that should not be included in the base package. ## These files are provided by localisation packages. rm --force --recursive \ 'data/dd1text.dat' \ 'data/text.dat' \ 'sound/atlas' \ 'sound/speech.dat' ## Enforce consistent name for the disk image table of content. if [ -e 'game.inst' ]; then mv 'game.inst' "$(dosbox_disk_image_path)" fi ) ## Extract localisation files from the disk image. ARCHIVE_L10N_PATH="${PLAYIT_WORKDIR}/gamedata/$(content_path_default)/game.gog" ARCHIVE_L10N_EXTRACTOR='unar' archive_extraction 'ARCHIVE_L10N' ( cd "${PLAYIT_WORKDIR}/gamedata/$(content_path_default)" ## Convert all file paths to lowercase. tolower . ) # Include game data. content_inclusion_icons 'PKG_MAIN' content_inclusion 'L10N_TXT_EN' 'PKG_L10N_TXT_EN' "$(path_game_data)/data" content_inclusion 'L10N_TXT_FR' 'PKG_L10N_TXT_FR' "$(path_game_data)/data" content_inclusion 'L10N_VOICES_SPEECH_EN' 'PKG_L10N_VOICES_EN' "$(path_game_data)/sound" content_inclusion 'L10N_VOICES_SPEECH_FR' 'PKG_L10N_VOICES_FR' "$(path_game_data)/sound" content_inclusion 'L10N_VOICES_ATLAS_EN' 'PKG_L10N_VOICES_EN' "$(path_game_data)/sound/atlas" content_inclusion 'L10N_VOICES_ATLAS_FR' 'PKG_L10N_VOICES_FR' "$(path_game_data)/sound/atlas" content_inclusion_default # Write launchers. launchers_generation 'PKG_MAIN' # Build packages. packages_generation case "$(messages_language)" in ('fr') lang_string='version %s :' lang_en='anglaise' lang_fr='française' ;; ('en'|*) lang_string='%s version:' lang_en='English' lang_fr='French' ;; esac printf '\n' printf "$lang_string" "$lang_en" print_instructions 'PKG_L10N_TXT_EN' 'PKG_L10N_VOICES_EN' 'PKG_MAIN' printf "$lang_string" "$lang_fr" print_instructions 'PKG_L10N_TXT_FR' 'PKG_L10N_VOICES_FR' 'PKG_MAIN' # Clean up. working_directory_cleanup exit 0 games/play-dungeon-keeper-2.sh0000755000000000000000000001065514471751340015236 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec set -o errexit ### # Dungeon Keeper 2 # send your bug reports to vv221@dotslashplay.it ### script_version=20260224.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='dungeon-keeper-2' GAME_NAME='Dungeon Keeper II' ARCHIVE_BASE_EN_2_NAME='setup_dungeon_keepertm_2_1.7_alttab_hotfix_(77775).exe' ARCHIVE_BASE_EN_2_MD5='250ba86776e434e2fc65534a97e68e41' ARCHIVE_BASE_EN_2_TYPE='innosetup' ARCHIVE_BASE_EN_2_PART1_NAME='setup_dungeon_keepertm_2_1.7_alttab_hotfix_(77775)-1.bin' ARCHIVE_BASE_EN_2_PART1_MD5='4cf9a2db8dfba58d6e869e2b124edbe0' ARCHIVE_BASE_EN_2_SIZE='514101' ARCHIVE_BASE_EN_2_VERSION='1.7-gog77775' ARCHIVE_BASE_EN_2_URL='https://www.gog.com/game/dungeon_keeper_2' ARCHIVE_BASE_FR_2_NAME='setup_dungeon_keepertm_2_1.7_alttab_hotfix_(french)_(77775).exe' ARCHIVE_BASE_FR_2_MD5='1ce059082cddb831ea25e571c571eaef' ARCHIVE_BASE_FR_2_TYPE='innosetup' ARCHIVE_BASE_FR_2_PART1_NAME='setup_dungeon_keepertm_2_1.7_alttab_hotfix_(french)_(77775)-1.bin' ARCHIVE_BASE_FR_2_PART1_MD5='5cd909d382a35f22ad93470e5281fa2e' ARCHIVE_BASE_FR_2_SIZE='512981' ARCHIVE_BASE_FR_2_VERSION='1.7-gog77775' ARCHIVE_BASE_FR_2_URL='https://www.gog.com/game/dungeon_keeper_2' ARCHIVE_BASE_EN_1_NAME='setup_dungeon_keeper_2_1.7_(22280).exe' ARCHIVE_BASE_EN_1_MD5='eeb2229ee49518504884a9ac65f611ad' ARCHIVE_BASE_EN_1_TYPE='innosetup' ARCHIVE_BASE_EN_1_SIZE='500537' ARCHIVE_BASE_EN_1_VERSION='1.7-gog22280' ARCHIVE_BASE_EN_0_NAME='setup_dungeon_keeper2_2.0.0.32.exe' ARCHIVE_BASE_EN_0_MD5='92d04f84dd870d9624cd18449d3622a5' ARCHIVE_BASE_EN_0_TYPE='innosetup' ARCHIVE_BASE_EN_0_SIZE='510000' ARCHIVE_BASE_EN_0_VERSION='1.7-gog2.0.0.32' CONTENT_PATH_DEFAULT='.' CONTENT_PATH_DEFAULT_0='app' CONTENT_LIBS_BIN_FILES=' aweman32.dll patch.dll qmixer.dll sfman32.dll weanetr.dll' CONTENT_GAME_BIN_FILES=' dkii.exe dkii-dx.exe' CONTENT_GAME_L10N_FILES=' data/sound/sfx/speech_* data/text/default' CONTENT_GAME_DATA_FILES=' data dk2texturecache' CONTENT_DOC_L10N_FILES=' eamseula.txt readme.txt' CONTENT_DOC_DATA_FILES=' manual.pdf reference_card.pdf' USER_PERSISTENT_DIRECTORIES=' data/settings data/save' WINE_REGEDIT_PERSISTENT_KEYS=' HKEY_CURRENT_USER\Software\Bullfrog Productions Ltd\Dungeon Keeper II' # Without a virtual desktop, many 3D models disappear on loss of focus. # (WINE 10.0) WINE_VIRTUAL_DESKTOP='auto' APP_MAIN_EXE='dkii-dx.exe' APP_MAIN_ICON='dkii.exe' PACKAGES_LIST=' PKG_BIN PKG_L10N PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_L10N_BASE PKG_DATA' PKG_L10N_BASE_ID="${GAME_ID}-l10n" PKG_L10N_ID_EN="${PKG_L10N_BASE_ID}-en" PKG_L10N_ID_FR="${PKG_L10N_BASE_ID}-fr" PKG_L10N_PROVIDES=" $PKG_L10N_BASE_ID" PKG_L10N_DESCRIPTION_EN='English localisation' PKG_L10N_DESCRIPTION_FR='French localisation' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. # Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Scan library paths used by ./play.it < 2.35. # This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. ln --force --symbolic $(path_libraries)/* "\${PATH_PREFIX}" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-factorio.sh0000755000000000000000000001120614471751340013766 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2019 BetaRays # SPDX-FileCopyrightText: © 2020 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2021 HS-157 # SPDX-FileCopyrightText: © 2021 Hoël Bézier set -o errexit ### # Factorio # send your bug reports to vv221@dotslashplay.it ### script_version=20251223.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='factorio' GAME_NAME='Factorio' GAME_NAME_SPACEAGE="${GAME_NAME}: Space Age" GAME_ID_DEMO="${GAME_ID}-demo" GAME_NAME_DEMO="$GAME_NAME (demo)" ## Factorio (full game) ARCHIVE_BASE_1_NAME='factorio_linux_2.0.72.tar.xz' ARCHIVE_BASE_1_MD5='76fb4857cc223569d4397026e3e7996e' ARCHIVE_BASE_1_SIZE='1979577' ARCHIVE_BASE_1_VERSION='2.0.72-1' ARCHIVE_BASE_1_URL='https://www.factorio.com/' ARCHIVE_BASE_0_NAME='factorio_linux_2.0.7.tar.xz' ARCHIVE_BASE_0_MD5='016efe181a57ebb649260b68b0696b3a' ARCHIVE_BASE_0_SIZE='1973608' ARCHIVE_BASE_0_VERSION='2.0.7-1' ## Factorio including Space Age expansion ARCHIVE_BASE_SPACEAGE_0_NAME='factorio-space-age_linux_2.0.7.tar.xz' ARCHIVE_BASE_SPACEAGE_0_MD5='56559ce107be62443b8743dc8696f65e' ARCHIVE_BASE_SPACEAGE_0_SIZE='4741087' ARCHIVE_BASE_SPACEAGE_0_VERSION='2.0.7-1' ARCHIVE_BASE_SPACEAGE_0_URL='https://www.factorio.com/' ## Factorio (demo) ARCHIVE_BASE_DEMO_0_NAME='factorio-demo_linux_2.0.69.tar.xz' ARCHIVE_BASE_DEMO_0_MD5='ea86004b1f44d38e14cabcf26144d2e0' ARCHIVE_BASE_DEMO_0_SIZE='1658679' ARCHIVE_BASE_DEMO_0_VERSION='2.0.69-1' ARCHIVE_BASE_DEMO_0_URL='https://www.factorio.com/download' CONTENT_PATH_DEFAULT='factorio' CONTENT_GAME_BIN_FILES=' bin/x64/factorio' CONTENT_GAME_DATA_SPACEAGE_FILES=' data/elevated-rails data/quality data/space-age' CONTENT_GAME_DATA_FILES=' data config-path.cfg' CONTENT_DOC_DATA_FILES=' doc-html' USER_PERSISTENT_FILES=' *.cfg *.dat player-data.json' USER_PERSISTENT_DIRECTORIES=' config mods saves' APP_MAIN_EXE='bin/x64/factorio' APP_MAIN_ICON='data/core/graphics/factorio-icon.png' ## Work around the engine poor support for symbolic links. APP_MAIN_PRERUN=' # Work around the engine poor support for symbolic links. for mod in core base elevated-rails quality space-age; do if [ ! -h "data/${mod}" ] && [ -e "${PATH_GAME_DATA}/data/${mod}" ]; then rm --force --recursive "data/${mod}" ln --symbolic "${PATH_GAME_DATA}/data/${mod}" "data/${mod}" fi done ' PACKAGES_LIST=' PKG_BIN PKG_DATA' PACKAGES_LIST_SPACEAGE=' PKG_BIN PKG_DATA_SPACEAGE PKG_DATA' PKG_BIN_ID_SPACEAGE="${GAME_ID}-space-age" PKG_BIN_ID_DEMO="$GAME_ID_DEMO" PKG_BIN_PROVIDES_SPACEAGE=" $GAME_ID" PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_SIBLINGS_SPACEAGE=' PKG_DATA PKG_DATA_SPACEAGE' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libm.so.6 libpthread.so.0 libresolv.so.2 librt.so.1' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_ID_DEMO="${GAME_ID_DEMO}-data" PKG_DATA_DESCRIPTION='data' PKG_DATA_SPACEAGE_ID="${PKG_DATA_ID}-space-age" PKG_DATA_SPACEAGE_DESCRIPTION="$PKG_DATA_DESCRIPTION - Space Age" # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. ## Force the use of system-provided SDL. APP_MAIN_PRERUN="$(application_prerun 'APP_MAIN') $(launcher_tweak_sdl_override)" PKG_BIN_DEPENDENCIES_LIBRARIES="$PKG_BIN_DEPENDENCIES_LIBRARIES libSDL2-2.0.so.0" launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-faster-than-light.sh0000755000000000000000000001072714471751340015510 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2017 Mopi # SPDX-FileCopyrightText: © 2018 BetaRays set -o errexit ### # Faster Than Light # send your bug reports to vv221@dotslashplay.it ### script_version=20250429.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='faster-than-light' GAME_NAME='FTL: Faster Than Light' # Archives ## Installers sold from gog.com ARCHIVE_BASE_GOG_6_NAME='ftl_advanced_edition_1_6_12_2_35269.sh' ARCHIVE_BASE_GOG_6_MD5='fc012e9ac7515f0b7b119a73ccfd7190' ARCHIVE_BASE_GOG_6_SIZE='401336' ARCHIVE_BASE_GOG_6_VERSION='1.6.12.2-gog35269' ARCHIVE_BASE_GOG_6_URL='https://www.gog.com/game/faster_than_light' ARCHIVE_BASE_GOG_5_NAME='ftl_advanced_edition_1_6_12_2_34795.sh' ARCHIVE_BASE_GOG_5_MD5='d62355fc9339cd901242fc1828e8c248' ARCHIVE_BASE_GOG_5_SIZE='410000' ARCHIVE_BASE_GOG_5_VERSION='1.6.12.2-gog34795' ARCHIVE_BASE_GOG_4_NAME='ftl_advanced_edition_1_6_9_25330.sh' ARCHIVE_BASE_GOG_4_MD5='c3598ab0c07d1f038eb1642da066b6a5' ARCHIVE_BASE_GOG_4_SIZE='230000' ARCHIVE_BASE_GOG_4_VERSION='1.6.9-gog25330' ARCHIVE_BASE_GOG_3_NAME='ftl_advanced_edition_1_6_8_24110.sh' ARCHIVE_BASE_GOG_3_MD5='4d654aeca32de557c109fa5c642ff455' ARCHIVE_BASE_GOG_3_SIZE='230000' ARCHIVE_BASE_GOG_3_VERSION='1.6.8-gog24110' ARCHIVE_BASE_GOG_2_NAME='ftl_advanced_edition_1_6_7_24012.sh' ARCHIVE_BASE_GOG_2_MD5='43392da0d11548b1c16f1263fc5fad65' ARCHIVE_BASE_GOG_2_SIZE='230000' ARCHIVE_BASE_GOG_2_VERSION='1.6.8-gog24012' ARCHIVE_BASE_GOG_1_NAME='ftl_advanced_edition_en_1_6_7_18662.sh' ARCHIVE_BASE_GOG_1_MD5='2c5254547639b7718dac7a06dabd1d82' ARCHIVE_BASE_GOG_1_SIZE='210000' ARCHIVE_BASE_GOG_1_VERSION='1.6.7-gog18662' ARCHIVE_BASE_GOG_0_NAME='ftl_advanced_edition_en_1_6_3_17917.sh' ARCHIVE_BASE_GOG_0_MD5='b64692d5302a1ab60d912c5eb5fbc5e4' ARCHIVE_BASE_GOG_0_SIZE='210000' ARCHIVE_BASE_GOG_0_VERSION='1.6.3-gog17917' # Installers sold from humblebundle.com ARCHIVE_BASE_HUMBLE_2_NAME='FTL.1.6.12.Linux.zip' ARCHIVE_BASE_HUMBLE_2_MD5='4ee7ea561d7753c8a003570364e15311' ARCHIVE_BASE_HUMBLE_2_SIZE='400104' ARCHIVE_BASE_HUMBLE_2_VERSION='1.6.12-humble191220' ARCHIVE_BASE_HUMBLE_2_URL='https://www.humblebundle.com/store/ftl-faster-than-light' ARCHIVE_BASE_HUMBLE_1_NAME='FTL.1.6.9.tar.gz' ARCHIVE_BASE_HUMBLE_1_MD5='c70d9cbc55217a5f83e0d51189240ec2' ARCHIVE_BASE_HUMBLE_1_SIZE='230000' ARCHIVE_BASE_HUMBLE_1_VERSION='1.6.9-humble181120' ARCHIVE_BASE_HUMBLE_0_NAME='FTL-linux-1.6.8.tar.gz' ARCHIVE_BASE_HUMBLE_0_MD5='5898d476dae289dae20d93ecfc1b8390' ARCHIVE_BASE_HUMBLE_0_SIZE='230000' ARCHIVE_BASE_HUMBLE_0_VERSION='1.6.8-humble180928' CONTENT_PATH_DEFAULT_GOG='data/noarch/game/data' CONTENT_PATH_DEFAULT_HUMBLE='FTL-linux/data' CONTENT_PATH_DEFAULT_HUMBLE_2='FTL.1.6.12.Linux/data' CONTENT_GAME_BIN64_FILES=' FTL.amd64' CONTENT_GAME_BIN32_FILES=' FTL.x86' CONTENT_GAME_DATA_FILES=' exe_icon.bmp ftl.dat' CONTENT_DOC_DATA_FILES=' licenses' CONTENT_DOC0_DATA_RELATIVE_PATH='..' CONTENT_DOC0_DATA_FILES=' FTL_README.html' APP_MAIN_EXE_BIN64='FTL.amd64' APP_MAIN_EXE_BIN32='FTL.x86' APP_MAIN_ICON='exe_icon.bmp' ## Work around problems with non-US locales. APP_MAIN_PRERUN=' # Work around problems with non-US locales export LANG=C ' PACKAGES_LIST=' PKG_BIN64 PKG_BIN32 PKG_DATA' PKG_BIN64_ARCH='64' PKG_BIN32_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libasound.so.2 libc.so.6 libdl.so.2 libGL.so.1 libm.so.6 libpthread.so.0 librt.so.1 libX11.so.6' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run the default initialization actions initialization_default "$@" # Extract game data archive_extraction_default # Include game data content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers launchers_generation 'PKG_BIN64' launchers_generation 'PKG_BIN32' # Build packages packages_generation print_instructions # Clean up working_directory_cleanup exit 0 games/play-freelancer.sh0000755000000000000000000001633114471751340014272 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2020 Antoine Le Gonidec set -o errexit ### # Freelancer # send your bug reports to vv221@dotslashplay.it ### script_version=20260330.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='freelancer' GAME_NAME='Freelancer' GAME_ID_DEMO="${GAME_ID}-demo" GAME_NAME_DEMO="$GAME_NAME (demo)" ARCHIVE_BASE_DEMO_EN_0_NAME='freelancer_demo.exe' ARCHIVE_BASE_DEMO_EN_0_MD5='1af0a4cc730a64de9f6a6ecde30edc11' ARCHIVE_BASE_DEMO_EN_0_TYPE='cabinet' ARCHIVE_BASE_DEMO_EN_0_VERSION='1.0-archiveorg1' ARCHIVE_BASE_DEMO_EN_0_SIZE='450000' ARCHIVE_BASE_DEMO_EN_0_URL='https://archive.org/details/freelancer_demo' CONTENT_PATH_DEFAULT='.' CONTENT_GAME_BIN_RELATIVE_PATH='game' CONTENT_GAME_BIN_FILES=' exe/freelancer.exe' # freelancer.exe requirements CONTENT_LIBS_BIN_PATH='cab1' CONTENT_LIBS_BIN_FILES=' exe/Common.dll exe/DALib.dll exe/Movie.dll exe/DACOM.dll exe/ImeUI.dll' # DALib.dll requirements CONTENT_LIBS0_BIN_PATH='cab1' CONTENT_LIBS0_BIN_FILES=' exe/zlib.dll' # A critical error is triggered on launch if the following library is missing. CONTENT_LIBS1_BIN_PATH='cab1' CONTENT_LIBS1_BIN_FILES=' exe/ebueula.dll' # The game crashes on launch if any of the following libraries is missing. CONTENT_LIBS2_BIN_PATH='cab1' CONTENT_LIBS2_BIN_FILES=' exe/engbase.dll exe/readfile.dll exe/rendcomp.dll exe/soundstreamer.dll exe/system.dll' # The game freezes before rendering the introduction videos if any of the following libraries is missing. CONTENT_LIBS3_BIN_PATH='cab1' CONTENT_LIBS3_BIN_FILES=' exe/alchemy.dll exe/rp8.dll exe/shading.dll exe/x86math.dll' # The game crashes before reaching the menu if any of the following libraries is missing. CONTENT_LIBS4_BIN_PATH='cab1' CONTENT_LIBS4_BIN_FILES=' exe/rpclocal.dll exe/server.dll' # The game freezes before reaching the menu if any of the following libraries is missing. CONTENT_LIBS5_BIN_PATH='cab1' CONTENT_LIBS5_BIN_FILES=' dlls/bin/content.dll exe/thorn.dll' # The game freezes when trying to enter the options menu or quit the game if the following library is missing. CONTENT_LIBS6_BIN_PATH='cab1' CONTENT_LIBS6_BIN_FILES=' exe/flmaterials.dll' # 2D pictures are not displayed if the following library is missing. CONTENT_LIBS7_BIN_PATH='cab1' CONTENT_LIBS7_BIN_FILES=' exe/ximage.dll' # Sound effects (outside of music) do not play if the following library is missing. CONTENT_LIBS8_BIN_PATH='cab1' CONTENT_LIBS8_BIN_FILES=' exe/soundmanager.dll' # The in-game introduction fails to play if the following library is missing. CONTENT_LIBS9_BIN_PATH='cab1' CONTENT_LIBS9_BIN_FILES=' exe/deformable2.dll' # These libraries are required to display text strings in menus and in-game. CONTENT_LIBS_L10N_LIBS_PATH='cab1' CONTENT_LIBS_L10N_LIBS_FILES=' exe/equipresources.dll exe/infocards.dll exe/misctext.dll exe/misctextinfo2.dll exe/nameresources.dll exe/offerbriberesources.dll exe/resources.dll exe/serverresources.dll' # TODO: A more explicit list of files should be set. CONTENT_GAME0_BIN_PATH='cab1' CONTENT_GAME0_BIN_FILES=' exe/*.bmp exe/*.exe exe/*.fl exe/*.hta exe/*.ini exe/*.txt' CONTENT_GAME_L10N_PATH='cab1' CONTENT_GAME_L10N_FILES=' data/audio/dialogue data/audio/mixes data/audio/sounds/ui/news_vendor_open.wav data/audio/*.ini data/audio/*.utf' CONTENT_GAME0_L10N_PATH='cab2' CONTENT_GAME0_L10N_FILES=' data/audio/dialogue data/audio/mixes data/audio/sounds/ui/news_vendor_open.wav data/audio/*.ini data/audio/*.utf' CONTENT_FONTS_DATA_PATH='fonts' CONTENT_FONTS_DATA_FILES=' agencyb.ttf agencyr.ttf arialuni.ttf' CONTENT_GAME_DATA_FILES=' fl.ico' CONTENT_GAME0_DATA_PATH='cab1' CONTENT_GAME0_DATA_FILES=' data' CONTENT_GAME1_DATA_PATH='cab2' CONTENT_GAME1_DATA_FILES=' data/audio data/bases data/characters data/fx data/interface data/missions data/randommissions data/screens data/scripts data/ships data/solar data/universe' CONTENT_GAME_MOVIES_PATH='cab2' CONTENT_GAME_MOVIES_FILES=' data/movies' CONTENT_DOC_DATA_FILES=' eula.rtf readme.rtf' WINE_PERSISTENT_DIRECTORIES=' users/${USER}/Documents/My Games/Freelancer Trial' # Without a virtual desktop, loss of focus due to workspace switch can lead to loss of keyboard input. # Keyboard input can then be restored when the mouse cursor leaves then re-enter the game window, # but the game tries to trap the mouse in the game window. # (WINE 10.0) WINE_VIRTUAL_DESKTOP='1280x960' APP_MAIN_EXE='exe/freelancer.exe' APP_MAIN_ICON='fl.ico' PACKAGES_LIST=' PKG_BIN PKG_L10N PKG_L10N_LIBS PKG_DATA PKG_MOVIES PKG_MOVIES_LIBS' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_L10N_BASE PKG_DATA' PKG_L10N_BASE_ID_DEMO="${GAME_ID_DEMO}-l10n" PKG_L10N_ID_DEMO_EN="${PKG_L10N_BASE_ID_DEMO}-en" PKG_L10N_PROVIDES_DEMO=" $PKG_L10N_BASE_ID_DEMO" PKG_L10N_DESCRIPTION_DEMO_EN='English localisation' PKG_L10N_DEPENDENCIES_SIBLINGS=' PKG_L10N_LIBS' PKG_L10N_LIBS_ID_DEMO_EN="${PKG_L10N_ID_DEMO_EN}-libs" PKG_L10N_LIBS_PROVIDES_DEMO=" ${PKG_L10N_BASE_ID_DEMO}-libs" PKG_L10N_LIBS_ARCH='32' PKG_L10N_LIBS_DESCRIPTION_DEMO_EN="$PKG_L10N_DESCRIPTION_DEMO_EN - libraries" # Prevent a fallback on PKG_L10N_DEPENDENCIES_SIBLINGS. PKG_L10N_LIBS_DEPENDENCIES_SIBLINGS=' ' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_ID_DEMO="${GAME_ID_DEMO}-data" PKG_DATA_DESCRIPTION='data' PKG_MOVIES_ID="${GAME_ID}-movies" PKG_MOVIES_ID_DEMO="${GAME_ID_DEMO}-movies" PKG_MOVIES_DESCRIPTION='movies' PKG_MOVIES_DEPENDENCIES_SIBLINGS=' PKG_BIN PKG_MOVIES_LIBS' PKG_MOVIES_LIBS_ARCH='32' PKG_MOVIES_LIBS_ID="${PKG_MOVIES_ID}-libs" PKG_MOVIES_LIBS_ID_DEMO="${PKG_MOVIES_ID_DEMO}-libs" PKG_MOVIES_LIBS_DESCRIPTION="$PKG_MOVIES_DESCRIPTION - libraries" PKG_MOVIES_LIBS_DEPENDENCIES_GSTREAMER_PLUGINS=' deinterlace video/x-ms-asf' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default ARCHIVE_INNER1_PATH="$(path_archive_contents)/cab1.cab" archive_extraction 'ARCHIVE_INNER1' rm "$ARCHIVE_INNER1_PATH" ARCHIVE_INNER2_PATH="$(path_archive_contents)/cab2.cab" archive_extraction 'ARCHIVE_INNER2' rm "$ARCHIVE_INNER2_PATH" # Rename a file with a truncated name. mv \ "$(path_archive_contents 'GAME_BIN')/exe/freela_1.exe" \ "$(path_archive_contents 'GAME_BIN')/exe/freelancer.exe" # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --symbolic "$dll_source" "$dll_destination" done EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-frostpunk-expansions.sh0000755000000000000000000000477714471751340016417 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2022 Antoine Le Gonidec set -o errexit ### # Frostpunk expansions: # - The Rifts # - The Last Autumn # - On The Edge # send your bug reports to vv221@dotslashplay.it ### script_version=20260323.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='frostpunk' GAME_NAME='Frostpunk' EXPANSION_ID_RIFTS='the-rifts' EXPANSION_NAME_RIFTS='The Rifts' EXPANSION_ID_AUTUMN='the-last-autumn' EXPANSION_NAME_AUTUMN='The Last Autumn' EXPANSION_ID_EDGE='on-the-edge' EXPANSION_NAME_EDGE='On The Edge' # The Rifts ARCHIVE_BASE_RIFTS_0_NAME='setup_frostpunk_-_szczeliny_1.6.1_51852_59618_(51757).exe' ARCHIVE_BASE_RIFTS_0_MD5='28b7855428687f3e819e141e78f0efce' ARCHIVE_BASE_RIFTS_0_TYPE='innosetup' ARCHIVE_BASE_RIFTS_0_SIZE='7457' ARCHIVE_BASE_RIFTS_0_VERSION='1.6.1-gog51757' ARCHIVE_BASE_RIFTS_0_URL='https://www.gog.com/game/frostpunk_the_rifts' # The Last Autumn ARCHIVE_BASE_AUTUMN_0_NAME='setup_frostpunk_the_last_autumn_1.6.1_51852_59618_(51757).exe' ARCHIVE_BASE_AUTUMN_0_MD5='caf40e3e2fc0354b4a4ac130abba1f9e' ARCHIVE_BASE_AUTUMN_0_TYPE='innosetup' ARCHIVE_BASE_AUTUMN_0_SIZE='7132' ARCHIVE_BASE_AUTUMN_0_VERSION='1.6.1-gog51757' ARCHIVE_BASE_AUTUMN_0_URL='https://www.gog.com/game/frostpunk_the_last_autumn' # On The Edge ARCHIVE_BASE_EDGE_0_NAME='setup_frostpunk_on_the_edge_1.6.1_51852_59618_(51757).exe' ARCHIVE_BASE_EDGE_0_MD5='ac91f06f1e421f0ae8061eefaaf42859' ARCHIVE_BASE_EDGE_0_TYPE='innosetup' ARCHIVE_BASE_EDGE_0_SIZE='7926' ARCHIVE_BASE_EDGE_0_VERSION='1.6.1-gog51757' ARCHIVE_BASE_EDGE_0_URL='https://www.gog.com/game/frostpunk_on_the_edge' CONTENT_PATH_DEFAULT='.' CONTENT_GAME_MAIN_FILES=' goggame-*.info' PKG_PARENT_ID="$GAME_ID" PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_PARENT' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_default # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-frostpunk.sh0000755000000000000000000001235614471751340014222 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2019 Antoine Le Gonidec set -o errexit ### # Frostpunk # send your bug reports to vv221@dotslashplay.it ### script_version=20260323.3 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='frostpunk' GAME_NAME='Frostpunk' ARCHIVE_BASE_2_NAME='setup_frostpunk_1.6.1_51852_59618_(51757).exe' ARCHIVE_BASE_2_MD5='6d1f0d7c81821c949c5a7eb9c7f26133' ARCHIVE_BASE_2_TYPE='innosetup' ARCHIVE_BASE_2_PART1_NAME='setup_frostpunk_1.6.1_51852_59618_(51757)-1.bin' ARCHIVE_BASE_2_PART1_MD5='43f6adbfdc53299d4591a2abb1c84457' ARCHIVE_BASE_2_PART2_NAME='setup_frostpunk_1.6.1_51852_59618_(51757)-2.bin' ARCHIVE_BASE_2_PART2_MD5='6689f6a289b899ddcd69af920f4ecdc4' ARCHIVE_BASE_2_PART3_NAME='setup_frostpunk_1.6.1_51852_59618_(51757)-3.bin' ARCHIVE_BASE_2_PART3_MD5='a72c123ddeef82cdebeed57792b02e4c' ARCHIVE_BASE_2_SIZE='9593582' ARCHIVE_BASE_2_VERSION='1.6.1-gog51757' ARCHIVE_BASE_2_URL='https://www.gog.com/game/frostpunk' ARCHIVE_BASE_1_NAME='setup_frostpunk_1.5.0.51146.56648_(2020-02-14_17-22)_(36204).exe' ARCHIVE_BASE_1_MD5='cc9bd3aba061dacd4f83e79e6a13d4e8' ARCHIVE_BASE_1_TYPE='innosetup' ARCHIVE_BASE_1_PART1_NAME='setup_frostpunk_1.5.0.51146.56648_(2020-02-14_17-22)_(36204)-1.bin' ARCHIVE_BASE_1_PART1_MD5='ba31654b9f3b1d24b22df3999e5ff78e' ARCHIVE_BASE_1_PART2_NAME='setup_frostpunk_1.5.0.51146.56648_(2020-02-14_17-22)_(36204)-2.bin' ARCHIVE_BASE_1_PART2_MD5='fc560cb127691e6fdcd9e1a82f0e7b26' ARCHIVE_BASE_1_PART3_NAME='setup_frostpunk_1.5.0.51146.56648_(2020-02-14_17-22)_(36204)-3.bin' ARCHIVE_BASE_1_PART3_MD5='b82e3dc7bd981c8a30b8da51813acbf6' ARCHIVE_BASE_1_SIZE='8700000' ARCHIVE_BASE_1_VERSION='1.5.0-gog36204' ARCHIVE_BASE_0_NAME='setup_frostpunk_1.4.1.50110.53938_(2019-11-05_1825)_(33713).exe' ARCHIVE_BASE_0_MD5='99b71af138d5fdcb67418392b0a14d62' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_PART1_NAME='setup_frostpunk_1.4.1.50110.53938_(2019-11-05_1825)_(33713)-1.bin' ARCHIVE_BASE_0_PART1_MD5='3fbe880a3c3acaf00ede07c998b13c92' ARCHIVE_BASE_0_PART2_NAME='setup_frostpunk_1.4.1.50110.53938_(2019-11-05_1825)_(33713)-2.bin' ARCHIVE_BASE_0_PART2_MD5='86267bb5dc870db828c50ccaa45d6091' ARCHIVE_BASE_0_SIZE='6500000' ARCHIVE_BASE_0_VERSION='1.4.1-gog33713' CONTENT_PATH_DEFAULT='.' CONTENT_GAME_BIN_FILES=' Frostpunk.exe GfxConfig.ini' # Frostpunk.exe requirements CONTENT_LIBS_BIN_FILES=' AnselSDK64.dll Galaxy64.dll libcurl.dll' # libcurl.dll requirements CONTENT_LIBS0_BIN_FILES=' LIBEAY32.dll SSLEAY32.dll libssh2.dll' CONTENT_GAME_DATA_FILES=' animations.dat animations.idx archives.dat archives.idx common.dat common.idx localizations.dat localizations.idx scenes.dat scenes.idx sequences.dat sequences.idx sounds.dat sounds.idx templates.dat templates.idx videos.dat videos.idx' # The game crashes on launch if these .idx files are missing. CONTENT_GAME0_DATA_FILES=' custom_localizations.idx voices.idx' CONTENT_GAME_DATA_TEXTURES_FILES=' textures-s3.dat textures-s3.idx' CONTENT_DOC_DATA_FILES=' openfontlicense.txt' # With wined3d the game menu is rendered with glitches, and the actual gameplay is too dark. # - https://bugs.winehq.org/show_bug.cgi?id=45098 # - https://bugs.winehq.org/show_bug.cgi?id=45364 # (WINE 11.5) WINE_DIRECT3D_RENDERER='dxvk' WINE_PERSISTENT_DIRECTORIES=' users/${USER}/AppData/Roaming/11bitstudios/Frostpunk' USER_PERSISTENT_FILES=' GfxConfig.ini' APP_MAIN_EXE='Frostpunk.exe' # The game crashes on launch with some SDL settings. APP_MAIN_PRERUN=' # The game crashes on launch with some SDL settings if [ "${SDL_VIDEODRIVER:-}" = "wayland" ]; then unset SDL_VIDEODRIVER fi if [ "${SDL_AUDIODRIVER:-}" = "alsa" ]; then unset SDL_AUDIODRIVER fi ' PACKAGES_LIST=' PKG_BIN PKG_DATA PKG_DATA_TEXTURES' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' PKG_DATA_DEPENDENCIES_SIBLINGS=' PKG_DATA_TEXTURES' PKG_DATA_TEXTURES_ID="${PKG_DATA_ID}-textures" PKG_DATA_TEXTURES_DESCRIPTION="$PKG_DATA_DESCRIPTION - textures" # Easier upgrades from pre-20251111.2 packages PKG_DATA_TEXTURES_PROVIDES=' frostpunk-textures' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Create some empty files, the game crashes on launch if they are missing. touch \ "$(package_path 'PKG_DATA')$(path_game_data)/custom_localizations.dat" \ "$(package_path 'PKG_DATA')$(path_game_data)/voices.dat" # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. ln --force --symbolic $(path_libraries)/* "\${PATH_PREFIX}" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-galacticare.sh0000755000000000000000000001410614471751340014421 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2025 Antoine Le Gonidec set -o errexit ### # Galacticare # send your bug reports to vv221@dotslashplay.it ### script_version=20260315.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='galacticare' GAME_NAME='Galacticare' ARCHIVE_BASE_3_NAME='setup_galacticare_1.2.3_(88331).exe' ARCHIVE_BASE_3_MD5='b8474e193e1d99372e42f62b08061501' ARCHIVE_BASE_3_TYPE='innosetup' ARCHIVE_BASE_3_PART1_NAME='setup_galacticare_1.2.3_(88331)-1.bin' ARCHIVE_BASE_3_PART1_MD5='c313432fe1d1cce94bd4e9cb76322f7d' ARCHIVE_BASE_3_PART2_NAME='setup_galacticare_1.2.3_(88331)-2.bin' ARCHIVE_BASE_3_PART2_MD5='4377215cdeaa6ecb76d293d696e500cb' ARCHIVE_BASE_3_SIZE='29187597' # From 1.2.3.1 to 1.2.3, hopefully a symptom of developers mathematics # and not an actual rollback to an older game build. ARCHIVE_BASE_3_VERSION='1.2.3-gog88331' ARCHIVE_BASE_3_URL='https://www.gog.com/game/galacticare' ARCHIVE_BASE_2_NAME='setup_galacticare_1.2.3.1plus6d76582b76_(82662).exe' ARCHIVE_BASE_2_MD5='7b070946d0dc45e0df58b073195d48fb' ARCHIVE_BASE_2_TYPE='innosetup' ARCHIVE_BASE_2_PART1_NAME='setup_galacticare_1.2.3.1plus6d76582b76_(82662)-1.bin' ARCHIVE_BASE_2_PART1_MD5='dd3d876d9b90e018a83e3722d4f89f3f' ARCHIVE_BASE_2_PART2_NAME='setup_galacticare_1.2.3.1plus6d76582b76_(82662)-2.bin' ARCHIVE_BASE_2_PART2_MD5='c4bc049c0f14a2cf190d27763513f65e' ARCHIVE_BASE_2_SIZE='29191051' ARCHIVE_BASE_2_VERSION='1.2.3.1-gog82662' ARCHIVE_BASE_1_NAME='setup_galacticare_1.2.3plus6d76582b76_(82235).exe' ARCHIVE_BASE_1_MD5='7d95382f9ccd962ed3c571f30c8ca642' ARCHIVE_BASE_1_TYPE='innosetup' ARCHIVE_BASE_1_PART1_NAME='setup_galacticare_1.2.3plus6d76582b76_(82235)-1.bin' ARCHIVE_BASE_1_PART1_MD5='54c02d98af9b70b80e6438e12c4c9611' ARCHIVE_BASE_1_PART2_NAME='setup_galacticare_1.2.3plus6d76582b76_(82235)-2.bin' ARCHIVE_BASE_1_PART2_MD5='d420139ae4cebdcae18183d5fb77c982' ARCHIVE_BASE_1_PART3_NAME='setup_galacticare_1.2.3plus6d76582b76_(82235)-3.bin' ARCHIVE_BASE_1_PART3_MD5='ad4998209a459ccc9fd23c43fa53554f' ARCHIVE_BASE_1_PART4_NAME='setup_galacticare_1.2.3plus6d76582b76_(82235)-4.bin' ARCHIVE_BASE_1_PART4_MD5='0c927f423541c464acf3e27d0922f7fe' ARCHIVE_BASE_1_SIZE='34968590' ARCHIVE_BASE_1_VERSION='1.2.3-gog82235' ARCHIVE_BASE_0_NAME='setup_galacticare_1.2.0plus73e3612ea7_(81088).exe' ARCHIVE_BASE_0_MD5='87f45a1769017c88f4a0ed323d1ca6e5' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_PART1_NAME='setup_galacticare_1.2.0plus73e3612ea7_(81088)-1.bin' ARCHIVE_BASE_0_PART1_MD5='54c02d98af9b70b80e6438e12c4c9611' ARCHIVE_BASE_0_PART2_NAME='setup_galacticare_1.2.0plus73e3612ea7_(81088)-2.bin' ARCHIVE_BASE_0_PART2_MD5='8afab5b704640ef48ea419517feda31f' ARCHIVE_BASE_0_PART3_NAME='setup_galacticare_1.2.0plus73e3612ea7_(81088)-3.bin' ARCHIVE_BASE_0_PART3_MD5='9042ba9cb019e5ec52e8ff0560d5470d' ARCHIVE_BASE_0_PART4_NAME='setup_galacticare_1.2.0plus73e3612ea7_(81088)-4.bin' ARCHIVE_BASE_0_PART4_MD5='94cc896f1bf5ada6099d75200b666178' ARCHIVE_BASE_0_SIZE='34948708' ARCHIVE_BASE_0_VERSION='1.2.0-gog81088' UNITY3D_NAME='Galacticare' # TODO: Experimental support for Windows Unity3D plugins, # no support in ./play.it library yet. # (./play.it 2.35) # Prevent a loading loop. UNITY3D_PLUGINS=' GalaxyCSharpGlue.dll' # GalaxyCSharpGlue.dll requirement UNITY3D_PLUGINS="$UNITY3D_PLUGINS Galaxy64.dll" CONTENT_PATH_DEFAULT='.' # galacticare.exe requirements CONTENT_LIBS_BIN_FILES=' UnityPlayer.dll' # Prevent a mono loading failure on launch. CONTENT_LIBS0_BIN_FILES=' MonoBleedingEdge/EmbedRuntime/mono-2.0-bdwgc.dll' # Prevent a failure to load actual gameplay. CONTENT_LIBS1_BIN_FILES=' MonoBleedingEdge/EmbedRuntime/MonoPosixHelper.dll' CONTENT_GAME_DATA_CHARACTERS_FILES=' galacticare_data/streamingassets/assetbundles/characters-*' CONTENT_GAME_DATA_ENVIRONMENT_FILES=' galacticare_data/streamingassets/assetbundles/environment-*' CONTENT_GAME_DATA_ROOMS_FILES=' galacticare_data/streamingassets/assetbundles/rooms-* galacticare_data/streamingassets/assetbundles/props-*' WINE_PERSISTENT_DIRECTORIES=' users/${USER}/AppData/LocalLow/Brightrock Games/Galacticare' PACKAGES_LIST=' PKG_BIN PKG_DATA_CHARACTERS PKG_DATA_ENVIRONMENT PKG_DATA_ROOMS PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' PKG_DATA_DEPENDENCIES_SIBLINGS=' PKG_DATA_CHARACTERS PKG_DATA_ENVIRONMENT PKG_DATA_ROOMS' PKG_DATA_CHARACTERS_ID="${PKG_DATA_ID}-characters" PKG_DATA_CHARACTERS_DESCRIPTION="$PKG_DATA_DESCRIPTION - characters" PKG_DATA_ENVIRONMENT_ID="${PKG_DATA_ID}-environment" PKG_DATA_ENVIRONMENT_DESCRIPTION="$PKG_DATA_DESCRIPTION - environment" PKG_DATA_ROOMS_ID="${PKG_DATA_ID}-rooms" PKG_DATA_ROOMS_DESCRIPTION="$PKG_DATA_DESCRIPTION - rooms and props" # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' # Include Unity3D plugins. unity3d_plugins_inclusion 'PKG_BIN' "$(unity3d_name)_Data/Plugins/x86_64" "$(path_libraries)/$(unity3d_name)_Data/Plugins" content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --symbolic "$dll_source" "$dll_destination" done EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-ghost-master.sh0000755000000000000000000000723614471751340014605 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec set -o errexit ### # Ghost Master # send your bug reports to vv221@dotslashplay.it ### script_version=20260129.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='ghost-master' GAME_NAME='Ghost Master' ARCHIVE_BASE_1_NAME='setup_ghost_master_20171020_(15806).exe' ARCHIVE_BASE_1_MD5='bbc7b8d6ed9b08c54cba6f2b1048a0fd' ARCHIVE_BASE_1_TYPE='innosetup' ARCHIVE_BASE_1_SIZE='658670' ARCHIVE_BASE_1_VERSION='1.1-gog15806' ARCHIVE_BASE_1_URL='https://www.gog.com/game/ghost_master' ARCHIVE_BASE_0_NAME='setup_ghost_master_2.0.0.3.exe' ARCHIVE_BASE_0_MD5='f581e0e08d7d9dfc89838c3ac892611a' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_SIZE='650000' ARCHIVE_BASE_0_VERSION='1.1-gog2.0.0.3' CONTENT_PATH_DEFAULT='app/ghostdata' CONTENT_FONTS_DATA_RELATIVE_PATH='fonts' CONTENT_FONTS_DATA_FILES=' newfont.ttf' CONTENT_GAME_BIN_FILES=' spdrv.cfg ghost.exe' CONTENT_GAME_DATA_FILES=' characters cursors fonts/newfont0.tga fonts/newfont1.tga fonts/newfont2.tga fonts/newfont.txt icons levels movies/slideshows music new_animations otherobjects psparams pstextures scenarios screenshots scripts sound text ui voice lsize.txt' CONTENT_GAME_MOVIES_FILES=' movies/english movies/*.wmv' CONTENT_DOC_DATA_PATH='app' CONTENT_DOC_DATA_FILES=' manual.pdf readme.txt' WINE_PERSISTENT_DIRECTORIES=' users/Public/Documents/Ghost Master/SaveGames' USER_PERSISTENT_DIRECTORIES=' screenshots' USER_PERSISTENT_FILES=' *.cfg' APP_MAIN_EXE='ghost.exe' PACKAGES_LIST=' PKG_BIN PKG_DATA PKG_MOVIES PKG_MOVIES_LIBS' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Even with all the required decoders available, # the introduction movie only shows still frames. # cf. https://bugs.winehq.org/show_bug.cgi?id=53734 PKG_MOVIES_ID="${GAME_ID}-movies" PKG_MOVIES_DESCRIPTION='movies' PKG_MOVIES_DEPENDENCIES_SIBLINGS=' PKG_BIN PKG_MOVIES_LIBS' PKG_MOVIES_LIBS_ARCH='32' PKG_MOVIES_LIBS_ID="${PKG_MOVIES_ID}-libs" PKG_MOVIES_LIBS_DESCRIPTION="$PKG_MOVIES_DESCRIPTION - libraries" PKG_MOVIES_LIBS_DEPENDENCIES_GSTREAMER_PLUGINS=' deinterlace video/x-ms-asf audio/x-wma, wmaversion=(int)1 video/x-wmv, wmvversion=(int)1' # Load common functions. # Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Scan library paths used by ./play.it < 2.35. # This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-gibbous-a-cthulhu-adventure.sh0000755000000000000000000000526414471751340017504 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2020 Antoine Le Gonidec set -o errexit ### # Gibbous - A Cthulhu Adventure # send your bug reports to vv221@dotslashplay.it ### script_version=20251224.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='gibbous-a-cthulhu-adventure' GAME_NAME='Gibbous - A Cthulhu Adventure' ARCHIVE_BASE_0_NAME='gibbous_a_cthulhu_adventure_x86_64_1_8_35773.sh' ARCHIVE_BASE_0_MD5='c92315690df34ee8affa24f184486ccb' ARCHIVE_BASE_0_SIZE='9478807' ARCHIVE_BASE_0_VERSION='1.8-gog35773' ARCHIVE_BASE_0_URL='https://www.gog.com/game/gibbous_a_cthulhu_adventure' UNITY3D_NAME='Gibbous - A Cthulhu Adventure' UNITY3D_PLUGINS=' ScreenSelector.so' ## If libsteam_api.so is not included, ## the game crashes after the new game opening video. UNITY3D_PLUGINS="${UNITY3D_PLUGINS:-}"' libsteam_api.so' CONTENT_PATH_DEFAULT='data/noarch/game' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libgcc_s.so.1 libgdk_pixbuf-2.0.so.0 libglib-2.0.so.0 libgobject-2.0.so.0 libgtk-x11-2.0.so.0 libm.so.6 libpthread.so.0 librt.so.1 libstdc++.so.6 libz.so.1' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-goblins-5.sh0000755000000000000000000001160014471751340013755 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2024 Antoine Le Gonidec set -o errexit ### # Gobliiins 5: L'invasion des Morglotons # send your bug reports to vv221@dotslashplay.it ### script_version=20250111.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='goblins-5' GAME_ID_PART1="${GAME_ID}-part-1" GAME_ID_PART2="${GAME_ID}-part-2" GAME_ID_PART3="${GAME_ID}-part-3" GAME_ID_PART4="${GAME_ID}-part-4" GAME_NAME='Gobliiins 5: L’invasion des Morglotons' GAME_NAME_PART1="$GAME_NAME - Part 1" GAME_NAME_PART2="$GAME_NAME - Part 2" GAME_NAME_PART3="$GAME_NAME - Part 3" GAME_NAME_PART4="$GAME_NAME - Part 4" ARCHIVE_BASE_0_NAME='Gobliiins5.zip' ARCHIVE_BASE_0_MD5='9ec74c3b393736b3e7ea3b345355d537' ARCHIVE_BASE_0_SIZE='939801' ARCHIVE_BASE_0_VERSION='1.0-itch.2023.11.17' ARCHIVE_BASE_0_URL='https://pierre-gilhodes.itch.io/gobliiins5' ARCHIVE_BASE_DEMO_0_NAME='Gobliiins5-Part1.zip' ARCHIVE_BASE_DEMO_0_MD5='814a2e01fbf5a253fa56dd51c2e4d206' ARCHIVE_BASE_DEMO_0_SIZE='182592' ARCHIVE_BASE_DEMO_0_VERSION='1.0-itch.2023.11.17' ARCHIVE_BASE_DEMO_0_URL='https://pierre-gilhodes.itch.io/gobliiins5' AGS_NAME_PART1='gobliiins5-1' AGS_NAME_PART2='gobliiins5-2' AGS_NAME_PART3='gobliiins5-3' AGS_NAME_PART4='gobliiins5-4' CONTENT_PATH_DEFAULT='.' CONTENT_GAME_COMMON_FILES=' acsetup.cfg *.ags *.tra *.vox' CONTENT_GAME_PART1_FILES="$CONTENT_GAME_COMMON_FILES" CONTENT_GAME_PART2_FILES="$CONTENT_GAME_COMMON_FILES" CONTENT_GAME_PART3_FILES="$CONTENT_GAME_COMMON_FILES" CONTENT_GAME_PART4_FILES="$CONTENT_GAME_COMMON_FILES" APP_MAIN_ICON_PART1='Gobliiins5-Part1.exe' APP_MAIN_ICON_PART2='Gobliiins5-Part2.exe' APP_MAIN_ICON_PART3='Gobliiins5-Part3.exe' APP_MAIN_ICON_PART4='Gobliiins5-Part4.exe' PACKAGES_LIST=' PKG_PART1 PKG_PART2 PKG_PART3 PKG_PART4' PACKAGES_LIST_DEMO=' PKG_PART1' # Load common functions PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run the default initialization actions initialization_default "$@" # Extract and include data archive_extraction_default ## Each game part is handled one at a time to prevent unwanted file overwrites. case "$(current_archive)" in ('ARCHIVE_BASE_DEMO_'*) ## The game demo only includes the first part of the game. content_inclusion_icons 'PKG_PART1' content_inclusion 'GAME_PART1' 'PKG_PART1' "$( set_current_package 'PKG_PART1' path_game_data )" ;; (*) ## Allow the content inclusion message to be shown multiple times information_content_inclusion() { local messages_language message messages_language=$(messages_language) case "$messages_language" in ('fr') message='Inclusion des fichiers du jeu…\n' ;; ('en'|*) message='Including game files…\n' ;; esac print_message 'info' "$message" } ARCHIVE_PART1_PATH="${PLAYIT_WORKDIR}/gamedata/Gobliiins5-Part1.zip" archive_extraction 'ARCHIVE_PART1' content_inclusion_icons 'PKG_PART1' content_inclusion 'GAME_PART1' 'PKG_PART1' "$( set_current_package 'PKG_PART1' path_game_data )" rm "$ARCHIVE_PART1_PATH" ARCHIVE_PART2_PATH="${PLAYIT_WORKDIR}/gamedata/Gobliiins5-Part2.zip" archive_extraction 'ARCHIVE_PART2' content_inclusion_icons 'PKG_PART2' content_inclusion 'GAME_PART2' 'PKG_PART2' "$( set_current_package 'PKG_PART2' path_game_data )" rm "$ARCHIVE_PART2_PATH" ARCHIVE_PART3_PATH="${PLAYIT_WORKDIR}/gamedata/Gobliiins5-Part3.zip" archive_extraction 'ARCHIVE_PART3' content_inclusion_icons 'PKG_PART3' content_inclusion 'GAME_PART3' 'PKG_PART3' "$( set_current_package 'PKG_PART3' path_game_data )" rm "$ARCHIVE_PART3_PATH" ARCHIVE_PART4_PATH="${PLAYIT_WORKDIR}/gamedata/Gobliiins5-Part4.zip" archive_extraction 'ARCHIVE_PART4' content_inclusion_icons 'PKG_PART4' content_inclusion 'GAME_PART4' 'PKG_PART4' "$( set_current_package 'PKG_PART4' path_game_data )" rm "$ARCHIVE_PART4_PATH" ;; esac rm --force --recursive "${PLAYIT_WORKDIR}/gamedata" # Write launchers case "$(current_archive)" in ('ARCHIVE_BASE_DEMO_'*) ## The game demo only includes the first part of the game. launchers_generation 'PKG_PART1' ;; (*) launchers_generation 'PKG_PART1' launchers_generation 'PKG_PART2' launchers_generation 'PKG_PART3' launchers_generation 'PKG_PART4' ;; esac # Build packages packages_generation ## Ensure that the generic game name is shown, not a package-specific one. unset GAME_NAME_PART1 print_instructions # Clean up working_directory_cleanup exit 0 games/play-goblins-6.sh0000755000000000000000000000447314471751340013770 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2026 Antoine Le Gonidec set -o errexit ### # Gobliins 6 # send your bug reports to vv221@dotslashplay.it ### script_version=20260325.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='goblins-6' GAME_NAME='Gobliins 6: Le Prince Bouffon - Les Fous de l’An 1000' # DRM-free build sent by the developer to backers ARCHIVE_BASE_DIRECT_0_NAME='Windows.rar' ARCHIVE_BASE_DIRECT_0_MD5='357f615a8542dcaa52a1c16907a95b02' ARCHIVE_BASE_DIRECT_0_SIZE='1411322' ARCHIVE_BASE_DIRECT_0_VERSION='1.0-1' ARCHIVE_BASE_ITCH_3_NAME='gobliins6-windows.zip' ARCHIVE_BASE_ITCH_3_MD5='e4c20da15f7295ab33998eaad5b017b0' ARCHIVE_BASE_ITCH_3_SIZE='1411328' ARCHIVE_BASE_ITCH_3_VERSION='1.0-itch.2026.03.20' ARCHIVE_BASE_ITCH_3_URL='https://pierre-gilhodes.itch.io/gobliins6' ARCHIVE_BASE_ITCH_2_NAME='gobliins6-windows.zip' ARCHIVE_BASE_ITCH_2_MD5='4a4e22e258f10ed820e05440e29d01b1' ARCHIVE_BASE_ITCH_2_SIZE='1411326' ARCHIVE_BASE_ITCH_2_VERSION='1.0-itch.2026.02.27' ARCHIVE_BASE_ITCH_1_NAME='gobliins6-windows.zip' ARCHIVE_BASE_ITCH_1_MD5='2101a3a8164c9a87569f5bd12ab6df0d' ARCHIVE_BASE_ITCH_1_SIZE='1411323' ARCHIVE_BASE_ITCH_1_VERSION='1.0-itch.2026.02.12' ARCHIVE_BASE_ITCH_0_NAME='gobliins6-windows.zip' ARCHIVE_BASE_ITCH_0_MD5='08ae2a6bc2874d2ff867c8d584ed1826' ARCHIVE_BASE_ITCH_0_SIZE='1411322' ARCHIVE_BASE_ITCH_0_VERSION='1.0-itch.2026.02.10' GAME_ENGINE='ags' CONTENT_PATH_DEFAULT='.' APP_MAIN_SCUMMID='ags' APP_MAIN_ICON='Gobliins6.exe' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons content_inclusion_default # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-goblins-trilogy.sh0000755000000000000000000002151314471751340015306 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2015 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2020 macaron set -o errexit ### # Goblins original series: # - Gobliiins # - Gobliins 2 # - Goblins 3 # send your bug reports to vv221@dotslashplay.it ### script_version=20260226.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID_GOB1='goblins-1' GAME_ID_GOB1_FLOPPY="${GAME_ID_GOB1}-floppy" GAME_ID_GOB1_CDROM="${GAME_ID_GOB1}-cdrom" GAME_NAME_GOB1='Gobliiins' GAME_NAME_GOB1_FLOPPY="${GAME_NAME_GOB1} (floppy)" GAME_NAME_GOB1_CDROM="${GAME_NAME_GOB1} (CD-ROM)" GAME_ID_GOB2='goblins-2' GAME_ID_GOB2_FLOPPY="${GAME_ID_GOB2}-floppy" GAME_ID_GOB2_CDROM="${GAME_ID_GOB2}-cdrom" GAME_NAME_GOB2='Gobliins 2: Le Prince Bouffon' GAME_NAME_GOB2_FLOPPY="${GAME_NAME_GOB2} (floppy)" GAME_NAME_GOB2_CDROM="${GAME_NAME_GOB2} (CD-ROM)" GAME_ID_GOB3='goblins-3' GAME_ID_GOB3_FLOPPY="${GAME_ID_GOB3}-floppy" GAME_ID_GOB3_CDROM="${GAME_ID_GOB3}-cdrom" GAME_NAME_GOB3='Goblins 3' GAME_NAME_GOB3_FLOPPY="${GAME_NAME_GOB3} (floppy)" GAME_NAME_GOB3_CDROM="${GAME_NAME_GOB3} (CD-ROM)" # Gobliiins (GOG.com) ARCHIVE_BASE_GOG_GOB1_0_NAME='setup_gobliiins_1.02_(20270).exe' ARCHIVE_BASE_GOG_GOB1_0_MD5='dd4fa52b7ed43b964d82f2056c18b681' ARCHIVE_BASE_GOG_GOB1_0_TYPE='innosetup' ARCHIVE_BASE_GOG_GOB1_0_SIZE='99000' ARCHIVE_BASE_GOG_GOB1_0_VERSION='1.02-gog20270' ARCHIVE_BASE_GOG_GOB1_0_URL='https://www.gog.com/game/gobliiins_pack' # Gobliins 2 (GOG.com) ARCHIVE_BASE_GOG_GOB2_0_NAME='setup_gobliins_2_-_the_prince_buffoon_1.02_(20270).exe' ARCHIVE_BASE_GOG_GOB2_0_MD5='3607f4ab042fea51e3b6544775955701' ARCHIVE_BASE_GOG_GOB2_0_TYPE='innosetup' ARCHIVE_BASE_GOG_GOB2_0_SIZE='110000' ARCHIVE_BASE_GOG_GOB2_0_VERSION='1.02-gog20270' ARCHIVE_BASE_GOG_GOB2_0_URL='https://www.gog.com/game/gobliiins_pack' # Goblins 3 (GOG.com) ARCHIVE_BASE_GOG_GOB3_FR_0_NAME='setup_goblins_quest_3_1.02_(french)_(20270).exe' ARCHIVE_BASE_GOG_GOB3_FR_0_MD5='52649e08b57d8edfdbb4b72bc032e625' ARCHIVE_BASE_GOG_GOB3_FR_0_TYPE='innosetup' ARCHIVE_BASE_GOG_GOB3_FR_0_SIZE='200000' ARCHIVE_BASE_GOG_GOB3_FR_0_VERSION='1.02-gog20270' ARCHIVE_BASE_GOG_GOB3_FR_0_URL='https://www.gog.com/game/gobliiins_pack' ARCHIVE_BASE_GOG_GOB3_EN_0_NAME='setup_goblins_quest_3_1.02_(20270).exe' ARCHIVE_BASE_GOG_GOB3_EN_0_MD5='9d98b9f643dad9c793416d50bcbd9f17' ARCHIVE_BASE_GOG_GOB3_EN_0_TYPE='innosetup' ARCHIVE_BASE_GOG_GOB3_EN_0_SIZE='210000' ARCHIVE_BASE_GOG_GOB3_EN_0_VERSION='1.02-gog20270' ARCHIVE_BASE_GOG_GOB3_EN_0_URL='https://www.gog.com/game/gobliiins_pack' # Adi 4 Collège CD-ROM ARCHIVE_BASE_ADI4COLLEGE_0_NAME='ADI4_COLLEGE_2.iso' ARCHIVE_BASE_ADI4COLLEGE_0_MD5='21c03f5cb4d7debfd50de31ee4fdf07a' ARCHIVE_BASE_ADI4COLLEGE_0_SIZE='631210' # TODO: Support for contextual version would allow setting a distinct version for each package/game. ARCHIVE_BASE_ADI4COLLEGE_0_VERSION='1.0-adi4.21' CONTENT_PATH_DEFAULT_GOG='.' CONTENT_PATH_DEFAULT_ADI4COLLEGE='Games' CONTENT_GAME_GOB1_FLOPPY_RELATIVE_PATH_GOG='fdd' CONTENT_GAME_GOB1_FLOPPY_RELATIVE_PATH_ADI4COLLEGE='Gob1' CONTENT_GAME_GOB1_FLOPPY_FILES=' *.FNT *.MID *.STK' CONTENT_GAME_GOB2_FLOPPY_RELATIVE_PATH_GOG='fdd' CONTENT_GAME_GOB2_FLOPPY_RELATIVE_PATH_ADI4COLLEGE='Gob2' CONTENT_GAME_GOB2_FLOPPY_FILES=' *.MID *.STK' CONTENT_GAME_GOB3_FLOPPY_RELATIVE_PATH_GOG='fdd' CONTENT_GAME_GOB3_FLOPPY_RELATIVE_PATH_ADI4COLLEGE='Gob3' CONTENT_GAME_GOB3_FLOPPY_FILES=' IMD.ITK *.MID *.STK' CONTENT_GAME_GOB1_CDROM_FILES=' GOB.LIC Track1.mp3 *.STK' CONTENT_GAME_GOB2_CDROM_FILES=' GOBNEW.LIC Track1.mp3 *.STK' CONTENT_GAME_GOB3_CDROM_FILES=' MDOS.IMD IMD.ITK MUS_GOB3.LIC *.STK' CONTENT_GAME_GOB3_L10N_FILES=' ??GOB3.ITK' CONTENT_GOB1_DOC_DOC_FILES=' *.pdf' CONTENT_GOB2_DOC_DOC_FILES=' *.pdf' CONTENT_GOB3_DOC_DOC_FILES=' *.pdf' APP_GOB1_SCUMMID='gob:gob1' APP_GOB1_ICON='goggame-1207662273.ico' APP_GOB2_SCUMMID='gob:gob2' APP_GOB2_ICON='goggame-1207662293.ico' APP_GOB3_SCUMMID='gob:gob3' APP_GOB3_ICON='goggame-1207662313.ico' PACKAGES_LIST_GOG_GOB1=' PKG_GOB1_DOC PKG_GOB1_FLOPPY PKG_GOB1_CDROM' PACKAGES_LIST_GOG_GOB2=' PKG_GOB2_DOC PKG_GOB2_FLOPPY PKG_GOB2_CDROM' PACKAGES_LIST_GOG_GOB3=' PKG_GOB3_DOC PKG_GOB3_FLOPPY PKG_GOB3_CDROM PKG_GOB3_L10N' PACKAGES_LIST_ADI4COLLEGE=' PKG_GOB1_FLOPPY PKG_GOB2_FLOPPY PKG_GOB3_FLOPPY' PKG_GOB1_DOC_ID="${GAME_ID_GOB1}-doc" PKG_GOB2_DOC_ID="${GAME_ID_GOB2}-doc" PKG_GOB3_DOC_ID="${GAME_ID_GOB3}-doc" # Easier upgrades from pre-20260226.1 packages PKG_GOB1_DOC_PROVIDES=' goblins-1-common' PKG_GOB2_DOC_PROVIDES=' goblins-2-common' PKG_GOB3_DOC_PROVIDES=' goblins-3-common' PKG_GOB3_CDROM_DEPENDENCIES_SIBLINGS=' PKG_GOB3_L10N_BASE' PKG_GOB3_L10N_BASE_ID="${GAME_ID_GOB3}-l10n" PKG_GOB3_L10N_ID_GOG_GOB3_FR="${PKG_GOB3_L10N_BASE_ID}-fr" PKG_GOB3_L10N_ID_GOG_GOB3_EN="${PKG_GOB3_L10N_BASE_ID}-en" PKG_GOB3_L10N_PROVIDES_GOB3=" $PKG_GOB3_L10N_BASE_ID" PKG_GOB3_L10N_DESCRIPTION_GOG_GOB3_FR='French localisation' PKG_GOB3_L10N_DESCRIPTION_GOG_GOB3_EN='English localisation' # Load common functions. # Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Scan library paths used by ./play.it < 2.35. # This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. case "$(current_archive)" in ('ARCHIVE_BASE_GOG_GOB1_'*) content_inclusion_icons 'PKG_GOB1_FLOPPY' 'APP_GOB1' content_inclusion_icons 'PKG_GOB1_CDROM' 'APP_GOB1' ;; ('ARCHIVE_BASE_GOG_GOB2_'*) content_inclusion_icons 'PKG_GOB2_FLOPPY' 'APP_GOB2' content_inclusion_icons 'PKG_GOB2_CDROM' 'APP_GOB2' ;; ('ARCHIVE_BASE_GOG_GOB3_'*) content_inclusion_icons 'PKG_GOB3_FLOPPY' 'APP_GOB3' content_inclusion_icons 'PKG_GOB3_CDROM' 'APP_GOB3' ;; ('ARCHIVE_BASE_ADI4COLLEGE_'*) # No icon is provided with the Adi 4 CD-ROM. # TODO: Provide icons through an optional archive. ;; esac content_inclusion_default # Write launchers. case "$(current_archive)" in ('ARCHIVE_BASE_GOG_GOB1_'*) launchers_generation 'PKG_GOB1_FLOPPY' 'APP_GOB1' launchers_generation 'PKG_GOB1_CDROM' 'APP_GOB1' ;; ('ARCHIVE_BASE_GOG_GOB2_'*) launchers_generation 'PKG_GOB2_FLOPPY' 'APP_GOB2' launchers_generation 'PKG_GOB2_CDROM' 'APP_GOB2' ;; ('ARCHIVE_BASE_GOG_GOB3_'*) launchers_generation 'PKG_GOB3_FLOPPY' 'APP_GOB3' APP_GOB3_PRERUN=' # Set game language. SCUMMVM_LANGUAGE=$( basename "${PATH_GAME_DATA}"/??gob3.itk | grep --only-matching --regexp="^.." ) ' game_exec_line() { cat <<- 'EOF' scummvm --language="$SCUMMVM_LANGUAGE" --path="$PATH_GAME_DATA" "$@" gob:gob3 EOF } launchers_generation 'PKG_GOB3_CDROM' 'APP_GOB3' ;; ('ARCHIVE_BASE_ADI4COLLEGE_'*) launchers_generation 'PKG_GOB1_FLOPPY' 'APP_GOB1' launchers_generation 'PKG_GOB2_FLOPPY' 'APP_GOB2' launchers_generation 'PKG_GOB3_FLOPPY' 'APP_GOB3' ;; esac # Build packages. packages_generation case "$(current_archive)" in ('ARCHIVE_BASE_GOG_GOB1_'*) ( set_current_package 'PKG_GOB1_FLOPPY' print_instructions 'PKG_GOB1_DOC' 'PKG_GOB1_FLOPPY' set_current_package 'PKG_GOB1_CDROM' print_instructions 'PKG_GOB1_DOC' 'PKG_GOB1_CDROM' ) ;; ('ARCHIVE_BASE_GOG_GOB2_'*) ( set_current_package 'PKG_GOB2_FLOPPY' print_instructions 'PKG_GOB2_DOC' 'PKG_GOB2_FLOPPY' set_current_package 'PKG_GOB2_CDROM' print_instructions 'PKG_GOB2_DOC' 'PKG_GOB2_CDROM' ) ;; ('ARCHIVE_BASE_GOG_GOB3_'*) ( set_current_package 'PKG_GOB3_FLOPPY' print_instructions 'PKG_GOB3_DOC' 'PKG_GOB3_FLOPPY' set_current_package 'PKG_GOB3_CDROM' print_instructions 'PKG_GOB3_DOC' 'PKG_GOB3_CDROM' 'PKG_GOB3_L10N' ) ;; ('ARCHIVE_BASE_ADI4COLLEGE_'*) ( # TODO: print_instructions should set the context to the first package in its arguments list. # (that would be the default package with the implicit list, keeping the current behaviour) for PLAYIT_CONTEXT_PACKAGE in \ 'PKG_GOB1_FLOPPY' \ 'PKG_GOB2_FLOPPY' \ 'PKG_GOB3_FLOPPY' do print_instructions "$PLAYIT_CONTEXT_PACKAGE" done ) ;; esac # Clean up. working_directory_cleanup exit 0 games/play-grim-dawn-expansions.sh0000755000000000000000000001025514471751340016235 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2023 Antoine Le Gonidec set -o errexit ### # Grim Dawn expansions: # - Ashes of Malmouth # - Forgotten Gods # send your bug reports to vv221@dotslashplay.it ### script_version=20260321.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='grim-dawn' GAME_NAME='Grim Dawn' EXPANSION_ID_ASHES='ashes-of-malmouth' EXPANSION_NAME_ASHES='Ashes of Malmouth' EXPANSION_ID_GODS='forgotten-gods' EXPANSION_NAME_GODS='Forgotten Gods' # Ashes of Malmouth ARCHIVE_BASE_ASHES_2_NAME='setup_grim_dawn_-_ashes_of_malmouth_1.2.1.6_(83443).exe' ARCHIVE_BASE_ASHES_2_MD5='a864a83f2cb516a61447b863ddb9cba2' ARCHIVE_BASE_ASHES_2_TYPE='innosetup' ARCHIVE_BASE_ASHES_2_PART1_NAME='setup_grim_dawn_-_ashes_of_malmouth_1.2.1.6_(83443)-1.bin' ARCHIVE_BASE_ASHES_2_PART1_MD5='7606fc0c108f29903f7f345cc2104f54' ARCHIVE_BASE_ASHES_2_SIZE='2510736' ARCHIVE_BASE_ASHES_2_VERSION='1.2.1.6-gog83443' ARCHIVE_BASE_ASHES_2_URL='https://www.gog.com/game/grim_dawn_ashes_of_malmouth' ARCHIVE_BASE_ASHES_1_NAME='setup_grim_dawn_-_ashes_of_malmouth_1.2.0.5a_(71558).exe' ARCHIVE_BASE_ASHES_1_MD5='459923324f4f32779885fe03f192fe3a' ARCHIVE_BASE_ASHES_1_TYPE='innosetup' ARCHIVE_BASE_ASHES_1_PART1_NAME='setup_grim_dawn_-_ashes_of_malmouth_1.2.0.5a_(71558)-1.bin' ARCHIVE_BASE_ASHES_1_PART1_MD5='11d3e5371bb3b9ecceb0a72b99671a24' ARCHIVE_BASE_ASHES_1_SIZE='2508049' ARCHIVE_BASE_ASHES_1_VERSION='1.2.0.5a-gog71558' ARCHIVE_BASE_ASHES_0_NAME='setup_grim_dawn_-_ashes_of_malmouth_1.1.9.8_(65199).exe' ARCHIVE_BASE_ASHES_0_MD5='0754f567005ecc7d758d905992e5d7f7' ARCHIVE_BASE_ASHES_0_TYPE='innosetup' ARCHIVE_BASE_ASHES_0_PART1_NAME='setup_grim_dawn_-_ashes_of_malmouth_1.1.9.8_(65199)-1.bin' ARCHIVE_BASE_ASHES_0_PART1_MD5='49bc0c617d4ab9415298994ba4a085b8' ARCHIVE_BASE_ASHES_0_SIZE='2506744' ARCHIVE_BASE_ASHES_0_VERSION='1.1.9.8-gog65199' # Forgotten Gods ARCHIVE_BASE_GODS_2_NAME='setup_grim_dawn_-_forgotten_gods_1.2.1.6_(83443).exe' ARCHIVE_BASE_GODS_2_MD5='e5d06e83f98bc4ed5b72bb7cb26dc0e7' ARCHIVE_BASE_GODS_2_TYPE='innosetup' ARCHIVE_BASE_GODS_2_PART1_NAME='setup_grim_dawn_-_forgotten_gods_1.2.1.6_(83443)-1.bin' ARCHIVE_BASE_GODS_2_PART1_MD5='db9410df05b03a5f682e62660fbafc7b' ARCHIVE_BASE_GODS_2_SIZE='3221530' ARCHIVE_BASE_GODS_2_VERSION='1.2.1.6-gog83443' ARCHIVE_BASE_GODS_2_URL='https://www.gog.com/game/grim_dawn_forgotten_gods' ARCHIVE_BASE_GODS_1_NAME='setup_grim_dawn_-_forgotten_gods_1.2.0.5a_(71558).exe' ARCHIVE_BASE_GODS_1_MD5='f4e80fca2102e244a47a218171c0f336' ARCHIVE_BASE_GODS_1_TYPE='innosetup' ARCHIVE_BASE_GODS_1_PART1_NAME='setup_grim_dawn_-_forgotten_gods_1.2.0.5a_(71558)-1.bin' ARCHIVE_BASE_GODS_1_PART1_MD5='3199f7442939194091a2d534553b8007' ARCHIVE_BASE_GODS_1_SIZE='3220483' ARCHIVE_BASE_GODS_1_VERSION='1.2.0.5a-gog71558' ARCHIVE_BASE_GODS_0_NAME='setup_grim_dawn_-_forgotten_gods_1.1.9.8_(65199).exe' ARCHIVE_BASE_GODS_0_MD5='6615eb32a355092c4d0173457f701e31' ARCHIVE_BASE_GODS_0_TYPE='innosetup' ARCHIVE_BASE_GODS_0_PART1_NAME='setup_grim_dawn_-_forgotten_gods_1.1.9.8_(65199)-1.bin' ARCHIVE_BASE_GODS_0_PART1_MD5='55ac480dee30aa6cfa6a8b466f521406' ARCHIVE_BASE_GODS_0_SIZE='3220672' ARCHIVE_BASE_GODS_0_VERSION='1.1.9.8-gog65199' CONTENT_PATH_DEFAULT='.' CONTENT_GAME_MAIN_FILES=' gdx? survivalmode?' PKG_PARENT_ID="$GAME_ID" PKG_ASH_ID="${GAME_ID}-${EXPANSION_ID_ASHES}" PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_PARENT' PKG_MAIN_DEPENDENCIES_SIBLINGS_GODS="$PKG_MAIN_DEPENDENCIES_SIBLINGS PKG_ASH" # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_default # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-grim-dawn.sh0000755000000000000000000001024514471751340014047 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2023 Antoine Le Gonidec set -o errexit ### # Grim Dawn # send your bug reports to vv221@dotslashplay.it ### script_version=20260321.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='grim-dawn' GAME_NAME='Grim Dawn' ARCHIVE_BASE_2_NAME='setup_grim_dawn_1.2.1.6_(64bit)_(83443).exe' ARCHIVE_BASE_2_MD5='21763dfc1938de2acac61415dd701e3d' ARCHIVE_BASE_2_TYPE='innosetup' ARCHIVE_BASE_2_PART1_NAME='setup_grim_dawn_1.2.1.6_(64bit)_(83443)-1.bin' ARCHIVE_BASE_2_PART1_MD5='494304bc1238d6825124ec84dd5b36d1' ARCHIVE_BASE_2_PART2_NAME='setup_grim_dawn_1.2.1.6_(64bit)_(83443)-2.bin' ARCHIVE_BASE_2_PART2_MD5='089131ce2805e00a1059d28fb1e81b2a' ARCHIVE_BASE_2_SIZE='4829597' ARCHIVE_BASE_2_VERSION='1.2.1.6-gog83443' ARCHIVE_BASE_2_URL='https://www.gog.com/game/grim_dawn' ARCHIVE_BASE_1_NAME='setup_grim_dawn_1.2.0.5a_(64bit)_(71558).exe' ARCHIVE_BASE_1_MD5='f232c25a9c69a5776dd4ce65b40df6df' ARCHIVE_BASE_1_TYPE='innosetup' ARCHIVE_BASE_1_PART1_NAME='setup_grim_dawn_1.2.0.5a_(64bit)_(71558)-1.bin' ARCHIVE_BASE_1_PART1_MD5='c78a59aa61b124030e6d96cabaaabd2d' ARCHIVE_BASE_1_SIZE='4768460' ARCHIVE_BASE_1_VERSION='1.2.0.5a-gog71558' ARCHIVE_BASE_0_NAME='setup_grim_dawn_1.1.9.8_(64bit)_(65199).exe' ARCHIVE_BASE_0_MD5='c0fb173132b21833052d1496f6ab832e' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_PART1_NAME='setup_grim_dawn_1.1.9.8_(64bit)_(65199)-1.bin' ARCHIVE_BASE_0_PART1_MD5='d97de2b8cd7ae7aa723e720ec2fa21f5' ARCHIVE_BASE_0_SIZE='4332472' ARCHIVE_BASE_0_VERSION='1.1.9.8-gog65199' CONTENT_PATH_DEFAULT='.' CONTENT_GAME_BIN_FILES=' x64/Grim Dawn.exe' # Grim Dawn.exe requirements CONTENT_LIBS_BIN_FILES=' x64/StatReport.dll x64/CrashReport.dll x64/lua51.dll x64/Galaxy64.dll x64/Engine.dll x64/Game.dll' # Engine.dll requirements CONTENT_LIBS0_BIN_FILES=' x64/FreeImage.dll x64/zlibwapi.dll' # The game is stuck to a black screen on launch if any of the following libraries is missing. CONTENT_LIBS1_BIN_FILES=' x64/Direct3D.dll x64/DirectInput.dll' # The game is stuck to a black screen right after showing the game cursor if the following library is missing. CONTENT_LIBS2_BIN_FILES=' x64/DS8Sound.dll' # ds8sound.dll requirements CONTENT_LIBS3_BIN_FILES=' x64/libvorbisfile.dll' # libvorbisfile.dll requirements CONTENT_LIBS4_BIN_FILES=' x64/libogg.dll x64/libvorbis.dll' # TODO: Check if this binary is required. CONTENT_GAME0_BIN_FILES=' x64/crashreporter.exe' CONTENT_GAME_DATA_FILES=' database resources video minimap.atn GDMapStitch_x64_v2.zip' # TODO: Modding stuff should be moved to a dedicated package. CONTENT_GAME0_DATA_FILES=' ModdingTutorial.zip' CONTENT_DOC_DATA_FILES=' Grim Dawn Modding Guide.pdf' WINE_PERSISTENT_DIRECTORIES=' users/${USER}/Documents/My Games/Grim Dawn' APP_MAIN_EXE='x64/Grim Dawn.exe' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --symbolic "$dll_source" "$dll_destination" done EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-heroes-of-might-and-magic-4.sh0000755000000000000000000001763314471751340017146 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec set -o errexit ### # Heroes of Might and Magic 4 # send your bug reports to vv221@dotslashplay.it ### script_version=20260301.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='heroes-of-might-and-magic-4' GAME_NAME='Heroes of Might and Magic IV' ARCHIVE_BASE_EN_4_NAME='setup_heroes_of_might_and_magic_4_complete_3.0_win11_gog_0.2_(76223).exe' ARCHIVE_BASE_EN_4_MD5='7737a4617848cb701f6577128b17fdc4' ARCHIVE_BASE_EN_4_TYPE='innosetup' ARCHIVE_BASE_EN_4_PART1_NAME='setup_heroes_of_might_and_magic_4_complete_3.0_win11_gog_0.2_(76223)-1.bin' ARCHIVE_BASE_EN_4_PART1_MD5='fb953df444f1716b856db53d4c08520a' ARCHIVE_BASE_EN_4_SIZE='1126546' ARCHIVE_BASE_EN_4_VERSION='3.0-gog76223' ARCHIVE_BASE_EN_4_URL='https://www.gog.com/game/heroes_of_might_and_magic_4_complete' ARCHIVE_BASE_FR_4_NAME='setup_heroes_of_might_and_magic_4_complete_3.0_win11_gog_0.2_(french)_(76223).exe' ARCHIVE_BASE_FR_4_MD5='d87e74674382d446332cf257ef6cbf74' ARCHIVE_BASE_FR_4_TYPE='innosetup' ARCHIVE_BASE_FR_4_PART1_NAME='setup_heroes_of_might_and_magic_4_complete_3.0_win11_gog_0.2_(french)_(76223)-1.bin' ARCHIVE_BASE_FR_4_PART1_MD5='00c24ec39905f65ed033d8dc2a77e7b3' ARCHIVE_BASE_FR_4_SIZE='1173753' ARCHIVE_BASE_FR_4_VERSION='3.0-gog76223' ARCHIVE_BASE_FR_4_URL='https://www.gog.com/game/heroes_of_might_and_magic_4_complete' ARCHIVE_BASE_EN_3_NAME='setup_heroes_of_might_and_magic_4_complete_3.0_win11_(58571).exe' ARCHIVE_BASE_EN_3_MD5='4f342558b1f93f4057666bc510127a3b' ARCHIVE_BASE_EN_3_TYPE='innosetup' ARCHIVE_BASE_EN_3_PART1_NAME='setup_heroes_of_might_and_magic_4_complete_3.0_win11_(58571)-1.bin' ARCHIVE_BASE_EN_3_PART1_MD5='c82afd73219eb772ce21f5ab43ef34ce' ARCHIVE_BASE_EN_3_SIZE='1200000' ARCHIVE_BASE_EN_3_VERSION='3.0-gog58571' ARCHIVE_BASE_FR_3_NAME='setup_heroes_of_might_and_magic_4_complete_3.0_win11_(french)_(58571).exe' ARCHIVE_BASE_FR_3_MD5='27d3987a5001beff61176d39199b9284' ARCHIVE_BASE_FR_3_TYPE='innosetup' ARCHIVE_BASE_FR_3_PART1_NAME='setup_heroes_of_might_and_magic_4_complete_3.0_win11_(french)_(58571)-1.bin' ARCHIVE_BASE_FR_3_PART1_MD5='588b0ecacc6b91df76042af7a7667d24' ARCHIVE_BASE_FR_3_SIZE='1200000' ARCHIVE_BASE_FR_3_VERSION='3.0-gog58571' ARCHIVE_BASE_EN_2_NAME='setup_heroes_of_might_and_magic_4_complete_3.0_(25023).exe' ARCHIVE_BASE_EN_2_MD5='2694dfef6827142866fb778588966d8e' ARCHIVE_BASE_EN_2_TYPE='innosetup' ARCHIVE_BASE_EN_2_PART1_NAME='setup_heroes_of_might_and_magic_4_complete_3.0_(25023)-1.bin' ARCHIVE_BASE_EN_2_PART1_MD5='54bfa42a4e23236729f8b0724216ee83' ARCHIVE_BASE_EN_2_SIZE='1100000' ARCHIVE_BASE_EN_2_VERSION='3.0-gog25023' ARCHIVE_BASE_FR_2_NAME='setup_heroes_of_might_and_magic_4_complete_3.0_(french)_(25023).exe' ARCHIVE_BASE_FR_2_MD5='4a90a92d637bc7d1af5354565ae5cd70' ARCHIVE_BASE_FR_2_TYPE='innosetup' ARCHIVE_BASE_FR_2_PART1_NAME='setup_heroes_of_might_and_magic_4_complete_3.0_(french)_(25023)-1.bin' ARCHIVE_BASE_FR_2_PART1_MD5='46d1239b8491d3adec647a7526f763b2' ARCHIVE_BASE_FR_2_SIZE='1100000' ARCHIVE_BASE_FR_2_VERSION='3.0-gog25023' ARCHIVE_BASE_EN_1_NAME='setup_heroes_of_might_and_magic_4_complete_3.0_(22812).exe' ARCHIVE_BASE_EN_1_MD5='d5e0a55e2bba4f0ac643ec1fb2ba17cc' ARCHIVE_BASE_EN_1_TYPE='innosetup' ARCHIVE_BASE_EN_1_PART1_NAME='setup_heroes_of_might_and_magic_4_complete_3.0_(22812)-1.bin' ARCHIVE_BASE_EN_1_PART1_MD5='3457ead5c208a3d40498d6e1f08bf588' ARCHIVE_BASE_EN_1_SIZE='1100000' ARCHIVE_BASE_EN_1_VERSION='3.0-gog22812' ARCHIVE_BASE_FR_1_NAME='setup_heroes_of_might_and_magic_4_complete_3.0_(french)_(22812).exe' ARCHIVE_BASE_FR_1_MD5='e15ec7a308ea442bfeeb3410314b39d7' ARCHIVE_BASE_FR_1_TYPE='innosetup' ARCHIVE_BASE_FR_1_PART1_NAME='setup_heroes_of_might_and_magic_4_complete_3.0_(french)_(22812)-1.bin' ARCHIVE_BASE_FR_1_PART1_MD5='7abff7182f6bed3199d2b71cdd60d926' ARCHIVE_BASE_FR_1_SIZE='1100000' ARCHIVE_BASE_FR_1_VERSION='3.0-gog22812' ARCHIVE_BASE_EN_0_NAME='setup_homm4_complete_2.0.0.12.exe' ARCHIVE_BASE_EN_0_MD5='74de66eb408bb2916dd0227781ba96dc' ARCHIVE_BASE_EN_0_TYPE='innosetup' ARCHIVE_BASE_EN_0_SIZE='1100000' ARCHIVE_BASE_EN_0_VERSION='3.0-gog2.0.0.12' ARCHIVE_BASE_FR_0_NAME='setup_homm4_complete_french_2.1.0.14.exe' ARCHIVE_BASE_FR_0_MD5='2af96eb28226e563bbbcd62771f3a319' ARCHIVE_BASE_FR_0_TYPE='innosetup' ARCHIVE_BASE_FR_0_SIZE='1100000' ARCHIVE_BASE_FR_0_VERSION='3.0-gog2.1.0.14' CONTENT_PATH_DEFAULT='.' CONTENT_PATH_DEFAULT_EN_0='app' CONTENT_PATH_DEFAULT_FR_0='app' CONTENT_LIBS_BIN_FILES=' binkw32.dll mss32.dll' # heroes4.exe is not strictly identical for the French and English localisation of the game, # but it seems one can be used in place of the other. CONTENT_GAME_BIN_FILES=' heroes4.exe' CONTENT_GAME0_BIN_FILES=' mp3dec.asi campaign_editor.exe' CONTENT_GAME_DATA_FILES=' maps data/high_scores.dat data/default.aop data/heroes4.h4r data/movies.h4r data/storm.h4r data/text.h4r data/updates.h4r data/x2.h4r data/x2_override.h4r' CONTENT_GAME_DATA_COMMON_FILES=' data/current.aop data/storm.aop data/winds.aop data/music.h4r data/storm_override.h4r data/default.pbg' CONTENT_DOC_DATA_FILES=' campaign_editor_help.chm h4gsmanual.pdf h4manual.pdf h4qref.pdf h4towntrees.pdf h4wwmanual.pdf multiplayer.txt readme.txt' USER_PERSISTENT_DIRECTORIES=' games' USER_PERSISTENT_FILES=' data/high_scores.dat' # Run the game in full screen mode, in a virtual desktop. # The native windowed mode cause problems with some setups. # (WINE 10.0) WINE_VIRTUAL_DESKTOP='1280x1024' WINE_REGISTRY_INIT=' [HKEY_CURRENT_USER\Software\New World Computing\Heroes of Might and Magic IV] "full_screen"=dword:00000001 ' APP_MAIN_EXE='heroes4.exe' APP_MAIN_ICON='heroes4.exe' APP_EDITOR_ID="${GAME_ID}-campaign-editor" APP_EDITOR_EXE='campaign_editor.exe' APP_EDITOR_ICON='campaign_editor.exe' APP_EDITOR_NAME="$GAME_NAME - campaign editor" PACKAGES_LIST=' PKG_BIN PKG_DATA PKG_DATA_COMMON' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA_BASE' PKG_DATA_BASE_ID="${GAME_ID}-data" PKG_DATA_ID_EN="${PKG_DATA_BASE_ID}-en" PKG_DATA_ID_FR="${PKG_DATA_BASE_ID}-fr" PKG_DATA_PROVIDES=" $PKG_DATA_BASE_ID" PKG_DATA_DESCRIPTION='data' PKG_DATA_DESCRIPTION_EN="${PKG_DATA_DESCRIPTION} - English version" PKG_DATA_DESCRIPTION_FR="${PKG_DATA_DESCRIPTION} - French version" PKG_DATA_DEPENDENCIES_SIBLINGS=' PKG_DATA_COMMON' PKG_DATA_COMMON_ID="${PKG_DATA_BASE_ID}-common" PKG_DATA_COMMON_DESCRIPTION="${PKG_DATA_DESCRIPTION} - common files" # Load common functions. # Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Scan library paths used by ./play.it < 2.35. # This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA_COMMON' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. ln --force --symbolic $(path_libraries)/* "\${PATH_PREFIX}" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-heroes-of-might-and-magic-5.sh0000755000000000000000000004626714471751340017154 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2015 Antoine Le Gonidec set -o errexit ### # Heroes of Might and Magic 5: # - Heroes of Might and Magic 5 + Hammers of Fate # - Tribes of the East # send your bug reports to vv221@dotslashplay.it ### script_version=20260326.2 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='heroes-of-might-and-magic-5' GAME_NAME='Heroes of Might and Magic V' GAME_ID_HOMM5="$GAME_ID" GAME_NAME_HOMM5="$GAME_NAME" GAME_ID_TOTE="${GAME_ID}-tribes-of-the-east" GAME_NAME_TOTE="${GAME_NAME} - Tribes of the East" EXPANSION_ID_HOF='hammers-of-fate' EXPANSION_NAME_HOF='Hammers of Fate' EXPANSION_ID_DM='dark-messiah' EXPANSION_NAME_DM='Dark Messiah' EXPANSION_ID_SKILLS='skill-wheel' EXPANSION_NAME_SKILLS='SkillWheel' # Heroes of Might and Magic 5 + Hammers of Fate ARCHIVE_BASE_HOMM5_FR_2_NAME='setup_heroes_of_might_and_magic_v_2.1_v3_gog_(french)_(83649).exe' ARCHIVE_BASE_HOMM5_FR_2_MD5='d2c94ae2a26d86f9a6be45ea9c29a5ca' ARCHIVE_BASE_HOMM5_FR_2_TYPE='innosetup' ARCHIVE_BASE_HOMM5_FR_2_PART1_NAME='setup_heroes_of_might_and_magic_v_2.1_v3_gog_(french)_(83649)-1.bin' ARCHIVE_BASE_HOMM5_FR_2_PART1_MD5='dd17be763ec6f481dac5c6d1f8e7195c' ARCHIVE_BASE_HOMM5_FR_2_SIZE='2502839' ARCHIVE_BASE_HOMM5_FR_2_VERSION='2.1-gog83649' ARCHIVE_BASE_HOMM5_FR_2_URL='https://www.gog.com/game/heroes_of_might_and_magic_5_bundle' ARCHIVE_BASE_HOMM5_EN_2_NAME='setup_heroes_of_might_and_magic_v_2.1_v3_gog_(83649).exe' ARCHIVE_BASE_HOMM5_EN_2_MD5='4d2f8ca3b0363e1e10c9cae967bae133' ARCHIVE_BASE_HOMM5_EN_2_TYPE='innosetup' ARCHIVE_BASE_HOMM5_EN_2_PART1_NAME='setup_heroes_of_might_and_magic_v_2.1_v3_gog_(83649)-1.bin' ARCHIVE_BASE_HOMM5_EN_2_PART1_MD5='5080cc5e93f4c5091c5f7c590880c805' ARCHIVE_BASE_HOMM5_EN_2_SIZE='2503743' ARCHIVE_BASE_HOMM5_EN_2_VERSION='2.1-gog83649' ARCHIVE_BASE_HOMM5_EN_2_URL='https://www.gog.com/game/heroes_of_might_and_magic_5_bundle' # Required with GOG.com build 83649, to prevent a crash of the base game # during the loading time supposed to lead to actual gameplay. # (Hammers of Fate is not affected) ARCHIVE_REQUIRED_GOGFIX_NAME='heroes-of-might-and-magic-5.tar.xz' ARCHIVE_REQUIRED_GOGFIX_MD5='a43368f367de935f914431a01ba35737' ARCHIVE_REQUIRED_GOGFIX_SIZE='12591' ARCHIVE_REQUIRED_GOGFIX_URL='http://downloads.dotslashplay.it/games/heroes-of-might-and-magic-5/' ARCHIVE_BASE_HOMM5_FR_1_NAME='setup_heroes_of_might_and_magic_v_2.1_v2_(french)_(28567).exe' ARCHIVE_BASE_HOMM5_FR_1_MD5='78e860af17d9ce220d8c60c1e594cf40' ARCHIVE_BASE_HOMM5_FR_1_TYPE='innosetup' ARCHIVE_BASE_HOMM5_FR_1_PART1_NAME='setup_heroes_of_might_and_magic_v_2.1_v2_(french)_(28567)-1.bin' ARCHIVE_BASE_HOMM5_FR_1_PART1_MD5='9e8017cc5d84231bf8eb9c8c757631f8' ARCHIVE_BASE_HOMM5_FR_1_SIZE='2600000' ARCHIVE_BASE_HOMM5_FR_1_VERSION='2.1-gog28567' ARCHIVE_BASE_HOMM5_EN_1_NAME='setup_heroes_of_might_and_magic_v_2.1_v2_(28567).exe' ARCHIVE_BASE_HOMM5_EN_1_MD5='657775b4eb545150f5895e61e67eda73' ARCHIVE_BASE_HOMM5_EN_1_TYPE='innosetup' ARCHIVE_BASE_HOMM5_EN_1_PART1_NAME='setup_heroes_of_might_and_magic_v_2.1_v2_(28567)-1.bin' ARCHIVE_BASE_HOMM5_EN_1_PART1_MD5='bb4dd38f472fd94f82aa22cb256f4b9c' ARCHIVE_BASE_HOMM5_EN_1_SIZE='2600000' ARCHIVE_BASE_HOMM5_EN_1_VERSION='2.1-gog28567' ARCHIVE_BASE_HOMM5_FR_0_NAME='setup_heroes_of_might_and_magic_v_2.1_(french)_(25025).exe' ARCHIVE_BASE_HOMM5_FR_0_MD5='b9e278ee60d574b89068479a4e6c84c1' ARCHIVE_BASE_HOMM5_FR_0_TYPE='innosetup' ARCHIVE_BASE_HOMM5_FR_0_PART1_NAME='setup_heroes_of_might_and_magic_v_2.1_(french)_(25025)-1.bin' ARCHIVE_BASE_HOMM5_FR_0_PART1_MD5='57ca61178fca9ed2e50a5dc667f6d565' ARCHIVE_BASE_HOMM5_FR_0_SIZE='2600000' ARCHIVE_BASE_HOMM5_FR_0_VERSION='2.1-gog25025' ARCHIVE_BASE_HOMM5_EN_0_NAME='setup_heroes_of_might_and_magic_v_2.1_(25025).exe' ARCHIVE_BASE_HOMM5_EN_0_MD5='6e36b7fb9f1e8362326688d383e4bdb9' ARCHIVE_BASE_HOMM5_EN_0_TYPE='innosetup' ARCHIVE_BASE_HOMM5_EN_0_PART1_NAME='setup_heroes_of_might_and_magic_v_2.1_(25025)-1.bin' ARCHIVE_BASE_HOMM5_EN_0_PART1_MD5='3e38f48f450f58833728cd73e9266d2d' ARCHIVE_BASE_HOMM5_EN_0_SIZE='2600000' ARCHIVE_BASE_HOMM5_EN_0_VERSION='2.1-gog25025' # Tribes of the East ARCHIVE_BASE_TOTE_FR_2_NAME='setup_heroes_of_might_and_magic_v_-_tribes_of_the_east_3.1_v3_gog_(french)_(83650).exe' ARCHIVE_BASE_TOTE_FR_2_MD5='9ce0709d5e873e386cddd46fe89c3d92' ARCHIVE_BASE_TOTE_FR_2_TYPE='innosetup' ARCHIVE_BASE_TOTE_FR_2_PART1_NAME='setup_heroes_of_might_and_magic_v_-_tribes_of_the_east_3.1_v3_gog_(french)_(83650)-1.bin' ARCHIVE_BASE_TOTE_FR_2_PART1_MD5='afe312964bdebe966bf81d2dfb4c00ec' ARCHIVE_BASE_TOTE_FR_2_SIZE='2286756' ARCHIVE_BASE_TOTE_FR_2_VERSION='3.1-gog83650' ARCHIVE_BASE_TOTE_FR_2_URL='https://www.gog.com/game/heroes_of_might_and_magic_5_bundle' ARCHIVE_BASE_TOTE_EN_2_NAME='setup_heroes_of_might_and_magic_v_-_tribes_of_the_east_3.1_v3_gog_(83650).exe' ARCHIVE_BASE_TOTE_EN_2_MD5='77a1eaedb5139409e0f6a4c163927a84' ARCHIVE_BASE_TOTE_EN_2_TYPE='innosetup' ARCHIVE_BASE_TOTE_EN_2_PART1_NAME='setup_heroes_of_might_and_magic_v_-_tribes_of_the_east_3.1_v3_gog_(83650)-1.bin' ARCHIVE_BASE_TOTE_EN_2_PART1_MD5='2c1dfe395fa5dbb1d652428b88a4ca11' ARCHIVE_BASE_TOTE_EN_2_SIZE='2273833' ARCHIVE_BASE_TOTE_EN_2_VERSION='3.1-gog83650' ARCHIVE_BASE_TOTE_EN_2_URL='https://www.gog.com/game/heroes_of_might_and_magic_5_bundle' ARCHIVE_BASE_TOTE_FR_1_NAME='setup_heroes_of_might_and_magic_v_-_tribes_of_the_east_3.1_v2_(french)_(28569).exe' ARCHIVE_BASE_TOTE_FR_1_MD5='6a1a915180d1cee32e78419f6917be87' ARCHIVE_BASE_TOTE_FR_1_TYPE='innosetup' ARCHIVE_BASE_TOTE_FR_1_PART1_NAME='setup_heroes_of_might_and_magic_v_-_tribes_of_the_east_3.1_v2_(french)_(28569)-1.bin' ARCHIVE_BASE_TOTE_FR_1_PART1_MD5='f48ed6725126696bf3e67ce327db6263' ARCHIVE_BASE_TOTE_FR_1_SIZE='2300000' ARCHIVE_BASE_TOTE_FR_1_VERSION='3.1-gog28569' ARCHIVE_BASE_TOTE_EN_1_NAME='setup_heroes_of_might_and_magic_v_-_tribes_of_the_east_3.1_v2_(28569).exe' ARCHIVE_BASE_TOTE_EN_1_MD5='9593ad538a39638bacb4d7ef45368ce2' ARCHIVE_BASE_TOTE_EN_1_TYPE='innosetup' ARCHIVE_BASE_TOTE_EN_1_PART1_NAME='setup_heroes_of_might_and_magic_v_-_tribes_of_the_east_3.1_v2_(28569)-1.bin' ARCHIVE_BASE_TOTE_EN_1_PART1_MD5='8e03271dc4aff5834110664b5d6eefde' ARCHIVE_BASE_TOTE_EN_1_SIZE='2300000' ARCHIVE_BASE_TOTE_EN_1_VERSION='3.1-gog28569' ARCHIVE_BASE_TOTE_FR_0_NAME='setup_heroes_of_might_and_magic_v_-_tribes_of_the_east_3.1_(french)_(25025).exe' ARCHIVE_BASE_TOTE_FR_0_MD5='a2b5d18f34d3fa1a760de4fa63aa3819' ARCHIVE_BASE_TOTE_FR_0_TYPE='innosetup' ARCHIVE_BASE_TOTE_FR_0_PART1_NAME='setup_heroes_of_might_and_magic_v_-_tribes_of_the_east_3.1_(french)_(25025)-1.bin' ARCHIVE_BASE_TOTE_FR_0_PART1_MD5='08a5ec9aaf674235db4d96072bf373fc' ARCHIVE_BASE_TOTE_FR_0_SIZE='2300000' ARCHIVE_BASE_TOTE_FR_0_VERSION='3.1-gog25025' ARCHIVE_BASE_TOTE_EN_0_NAME='setup_heroes_of_might_and_magic_v_-_tribes_of_the_east_3.1_(25025).exe' ARCHIVE_BASE_TOTE_EN_0_MD5='3096f296d5d8b6cb0b4ab479fc06474b' ARCHIVE_BASE_TOTE_EN_0_TYPE='innosetup' ARCHIVE_BASE_TOTE_EN_0_PART1_NAME='setup_heroes_of_might_and_magic_v_-_tribes_of_the_east_3.1_(25025)-1.bin' ARCHIVE_BASE_TOTE_EN_0_PART1_MD5='5f4840b0105bd6b4228ff9b707bc0434' ARCHIVE_BASE_TOTE_EN_0_SIZE='2300000' ARCHIVE_BASE_TOTE_EN_0_VERSION='3.1-gog25025' CONTENT_PATH_DEFAULT='.' CONTENT_GAME_MAIN_FILES=' bin/H5_Game.exe' # H5_Game.exe requirements (base game + Tribes of the East) CONTENT_LIBS_MAIN_FILES=' bin/UbiStats.dll bin/libcurl.dll bin/fmod.dll bin/granny2.dll bin/zlib1.dll' # H5_Game.exe extra requirements (Tribes of the East) CONTENT_LIBS_MAIN_FILES_TOTE="$CONTENT_LIBS_MAIN_FILES bin/um.dll" # libcurl.dll requirements CONTENT_LIBS0_MAIN_FILES=' bin/zlibwapi.dll' CONTENT_GAME_HOF_FILES=' bina1/H5_Game.exe' # H5_Game.exe requirements (Hammers of Fate) CONTENT_LIBS_HOF_FILES=' bina1/UbiStats.dll bina1/libcurl.dll bina1/fmod.dll bina1/granny2.dll bina1/zlib1.dll' # libcurl.dll requirements CONTENT_LIBS0_HOF_FILES=' bina1/zlibwapi.dll' CONTENT_GAME_DM_FILES=' binDM/H5_Game.exe' # H5_Game.exe requirements (Dark Messiah) CONTENT_LIBS_DM_FILES=' binDM/UbiStats.dll binDM/libcurl.dll binDM/fmod.dll binDM/granny2.dll binDM/zlib1.dll' # libcurl.dll requirements CONTENT_LIBS0_DM_FILES=' binDM/zlibwapi.dll' CONTENT_GAME_EDITOR_FILES=' bin/H5_MapEditor.exe profile/editor.cfg' CONTENT_GAME_EDITOR_FILES_TOTE="$CONTENT_GAME_EDITOR_FILES profile/editor_a2.cfg" # H5_MapEditor.exe requirements CONTENT_LIBS_EDITOR_FILES=' bin/MFC71.DLL' CONTENT_GAME_HOF_EDITOR_FILES=' bina1/H5_MapEditor.exe profile/editor_a1.cfg' # H5_MapEditor.exe requirements CONTENT_LIBS_HOF_EDITOR_FILES=' bina1/MFC71.DLL' CONTENT_GAME_SKILLS_RELATIVE_PATH='FanDocuments' CONTENT_GAME_SKILLS_FILES=' Skillwheel.exe' CONTENT_GAME_L10N_FILES=' music/cs/death-berein.ogg music/cs/death-nico.ogg music/cs/heart-griffin.ogg music/cs/isabel-trap.ogg music/cs/nico-vampire.ogg music/cs/ritual-isabel.ogg video/intro.ogg video/outro.ogg data/sound.pak data/texts.pak data/*-texts.pak datals/*-texts.pak' CONTENT_GAME_L10N_HOF_FILES=' dataa1/texts.pak dataa1/*-sound.pak dataa1/*-texts.pak' # TODO: Some content is duplicated between the base game and Tribes of the East, # and could be moved to a common package. CONTENT_GAME_DATA_FILES=' hwcursors data/data.pak data/*-data.pak music/advmap-campaign music/advmap-heroes music/advmap-terrain music/ai-themes music/battle-themes music/credits music/cs music/ds music/dwellings music/grail-theme music/lose-battle music/lose-campaign music/mainmenu music/retreat-battle music/siege-battle music/tavern-themes music/town-themes music/win-battle music/win-campaign profiles/default_profile profiles/autoexec.cfg profiles/p2pdir.cfg profiles/start.cfg video/logo-nival.ogg video/logo-ubi6.ogg' CONTENT_GAME_DATA_FILES_HOMM5="${CONTENT_GAME_DATA_FILES} duelpresets data/lights data/maps datals/*-data.pak video/intro.xml video/outro.xml splash.bmp" CONTENT_GAME_DATA_FILES_TOTE="${CONTENT_GAME_DATA_FILES} data/soundsfx.pak music/a1 music/a2 music/dm profiles/autoexec_a2.cfg video/intro_a1.xml video/outro_a1.xml splasha2.bmp" CONTENT_GAME_DATA_HOF_FILES=' dataa1/*-data.pak hwcursors/a1_* music/a1 profiles/autoexec_a1.cfg video/intro_a1.xml video/outro_a1.xml splasha1.bmp' CONTENT_GAME_DATA_DM_FILES=' customcontentdm/dm.map profiles/autoexec_a2_dm.cfg' CONTENT_GAME_EDITOR_DATA_FILES=' Editor' CONTENT_DOC_L10N_FILES=' *.pdf *.txt' CONTENT_DOC_EDITOR_L10N_FILES=' Editor Documentation' APPLICATIONS_LIST_HOMM5=' APP_MAIN APP_EDITOR APP_HOF APP_HOF_EDITOR' APPLICATIONS_LIST_TOTE=' APP_MAIN APP_EDITOR APP_DM APP_SKILLS' USER_PERSISTENT_DIRECTORIES=' Maps Editor/H5MMods' WINE_PERSISTENT_DIRECTORIES=' users/${USER}/Documents/My Games/Heroes of Might and Magic V' WINE_PERSISTENT_DIRECTORIES_TOTE=' users/${USER}/Documents/My Games/Heroes of Might and Magic V - Tribes of the East' APP_MAIN_EXE='bin/H5_Game.exe' # The map editor is not really usable with current WINE, because of the following bug: # "HOMMV Map Editor pane shrinks on every refresh (Unhandled query type 4)" # https://bugs.winehq.org/show_bug.cgi?id=20190 # (WINE 10.0) APP_EDITOR_ID="${GAME_ID}-editor" APP_EDITOR_ID_TOTE="${GAME_ID_TOTE}-editor" APP_EDITOR_NAME="${GAME_NAME} - Map Editor" APP_EDITOR_NAME_TOTE="${GAME_NAME_TOTE} - Map Editor" APP_EDITOR_EXE='bin/H5_MapEditor.exe' APP_EDITOR_ICON_WRESTOOL_OPTIONS='--type=14 --name=128' # Hammers of Fate APP_HOF_ID="${GAME_ID}-${EXPANSION_ID_HOF}" APP_HOF_NAME="${GAME_NAME} - ${EXPANSION_NAME_HOF}" APP_HOF_EXE='bina1/H5_Game.exe' # The map editor is not really usable with current WINE, because of the following bug: # "HOMMV Map Editor pane shrinks on every refresh (Unhandled query type 4)" # https://bugs.winehq.org/show_bug.cgi?id=20190 # (WINE 10.0) APP_HOF_EDITOR_ID="${GAME_ID}-${EXPANSION_ID_HOF}-editor" APP_HOF_EDITOR_NAME="${GAME_NAME} - ${EXPANSION_NAME_HOF} - Map Editor" APP_HOF_EDITOR_EXE='bina1/H5_MapEditor.exe' APP_HOF_EDITOR_ICON_WRESTOOL_OPTIONS='--type=14 --name=128' # Tribes of the East APP_DM_ID="${GAME_ID}-${EXPANSION_ID_DM}" APP_DM_NAME="${GAME_NAME} - ${EXPANSION_NAME_DM}" APP_DM_EXE='binDM/H5_Game.exe' APP_DM_ICON_WRESTOOL_OPTIONS='--type=14 --name=101' APP_SKILLS_ID="${GAME_ID}-${EXPANSION_ID_SKILLS}" APP_SKILLS_NAME="${GAME_NAME} - ${EXPANSION_NAME_SKILLS}" APP_SKILLS_EXE='Skillwheel.exe' APP_SKILLS_ICON='FanDocuments/Skillwheel.exe' APP_SKILLS_ICON_WRESTOOL_OPTIONS='--type=14 --name=200' # PKG_DATA_HOF must be listed before PKG_DATA, # to ensure correct hwcursors split between packages. PACKAGES_LIST_HOMM5=' PKG_MAIN PKG_EDITOR PKG_EDITOR_L10N PKG_EDITOR_DATA PKG_HOF PKG_HOF_EDITOR PKG_L10N PKG_L10N_HOF PKG_DATA_HOF PKG_DATA' PACKAGES_LIST_TOTE=' PKG_MAIN PKG_EDITOR PKG_EDITOR_L10N PKG_EDITOR_DATA PKG_DM PKG_SKILLS PKG_L10N PKG_DATA PKG_DATA_DM' PKG_MAIN_ARCH='32' PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_L10N_BASE PKG_DATA' PKG_EDITOR_ID_HOMM5="${GAME_ID_HOMM5}-editor" PKG_EDITOR_ID_TOTE="${GAME_ID_TOTE}-editor" PKG_EDITOR_DESCRIPTION='Map Editor (binaries)' PKG_EDITOR_ARCH='32' PKG_EDITOR_DEPENDENCIES_SIBLINGS=' PKG_MAIN PKG_EDITOR_L10N PKG_EDITOR_DATA' PKG_EDITOR_L10N_BASE_ID_HOMM5="${PKG_EDITOR_ID_HOMM5}-l10n" PKG_EDITOR_L10N_BASE_ID_TOTE="${PKG_EDITOR_ID_TOTE}-l10n" PKG_EDITOR_L10N_ID_HOMM5_FR="${PKG_EDITOR_L10N_BASE_ID_HOMM5}-fr" PKG_EDITOR_L10N_ID_HOMM5_EN="${PKG_EDITOR_L10N_BASE_ID_HOMM5}-en" PKG_EDITOR_L10N_ID_TOTE_FR="${PKG_EDITOR_L10N_BASE_ID_TOTE}-fr" PKG_EDITOR_L10N_ID_TOTE_EN="${PKG_EDITOR_L10N_BASE_ID_TOTE}-en" PKG_EDITOR_L10N_PROVIDES_HOMM5=" $PKG_EDITOR_L10N_BASE_ID_HOMM5" PKG_EDITOR_L10N_PROVIDES_TOTE=" $PKG_EDITOR_L10N_BASE_ID_TOTE" PKG_EDITOR_L10N_DESCRIPTION_FR='Map Editor (French documentation)' PKG_EDITOR_L10N_DESCRIPTION_EN='Map Editor (English documentation)' PKG_EDITOR_L10N_DESCRIPTION_HOMM5_FR="$PKG_EDITOR_L10N_DESCRIPTION_FR" PKG_EDITOR_L10N_DESCRIPTION_HOMM5_EN="$PKG_EDITOR_L10N_DESCRIPTION_EN" PKG_EDITOR_L10N_DESCRIPTION_TOTE_FR="$PKG_EDITOR_L10N_DESCRIPTION_FR" PKG_EDITOR_L10N_DESCRIPTION_TOTE_EN="$PKG_EDITOR_L10N_DESCRIPTION_EN" PKG_EDITOR_DATA_ID_HOMM5="${PKG_EDITOR_ID_HOMM5}-data" PKG_EDITOR_DATA_ID_TOTE="${PKG_EDITOR_ID_TOTE}-data" PKG_EDITOR_DATA_DESCRIPTION='Map Editor (data)' PKG_HOF_ID="${GAME_ID}-${EXPANSION_ID_HOF}" PKG_HOF_DESCRIPTION="${EXPANSION_HOF_DM}" PKG_HOF_ARCH='32' # TODO: Try to drop the dependency on the base game, # maybe using a common data package. PKG_HOF_DEPENDENCIES_SIBLINGS=' PKG_MAIN PKG_L10N_HOF_BASE PKG_DATA_HOF' PKG_HOF_EDITOR_ID="${GAME_ID}-${EXPANSION_ID_HOF}-editor" PKG_HOF_EDITOR_DESCRIPTION="${EXPANSION_ID_HOF} - Map Editor (binaries)" PKG_HOF_EDITOR_ARCH='32' PKG_HOF_EDITOR_DEPENDENCIES_SIBLINGS=' PKG_HOF PKG_EDITOR_L10N PKG_EDITOR_DATA' PKG_DM_ID="${GAME_ID}-${EXPANSION_ID_DM}" PKG_DM_DESCRIPTION="${EXPANSION_NAME_DM}" PKG_DM_ARCH='32' # TODO: Try to drop the dependency on the base game, # maybe using a common data package. PKG_DM_DEPENDENCIES_SIBLINGS=' PKG_MAIN PKG_DATA_DM' PKG_SKILLS_ID="${GAME_ID}-${EXPANSION_ID_SKILLS}" PKG_SKILLS_DESCRIPTION="${EXPANSION_NAME_SKILLS}" PKG_SKILLS_ARCH='32' PKG_L10N_BASE_ID_HOMM5="${GAME_ID_HOMM5}-l10n" PKG_L10N_BASE_ID_TOTE="${GAME_ID_TOTE}-l10n" PKG_L10N_ID_HOMM5_EN="${PKG_L10N_BASE_ID_HOMM5}-en" PKG_L10N_ID_HOMM5_FR="${PKG_L10N_BASE_ID_HOMM5}-fr" PKG_L10N_ID_TOTE_EN="${PKG_L10N_BASE_ID_TOTE}-en" PKG_L10N_ID_TOTE_FR="${PKG_L10N_BASE_ID_TOTE}-fr" PKG_L10N_PROVIDES_HOMM5=" $PKG_L10N_BASE_ID_HOMM5" PKG_L10N_PROVIDES_TOTE=" $PKG_L10N_BASE_ID_TOTE" PKG_L10N_DESCRIPTION_EN='English localisation' PKG_L10N_DESCRIPTION_FR='French localisation' PKG_L10N_DESCRIPTION_HOMM5_EN="$PKG_L10N_DESCRIPTION_EN" PKG_L10N_DESCRIPTION_HOMM5_FR="$PKG_L10N_DESCRIPTION_FR" PKG_L10N_DESCRIPTION_TOTE_EN="$PKG_L10N_DESCRIPTION_EN" PKG_L10N_DESCRIPTION_TOTE_FR="$PKG_L10N_DESCRIPTION_FR" PKG_L10N_HOF_BASE_ID="${GAME_ID}-${EXPANSION_ID_HOF}-l10n" PKG_L10N_HOF_ID_HOMM5_EN="${PKG_L10N_HOF_BASE_ID}-en" PKG_L10N_HOF_ID_HOMM5_FR="${PKG_L10N_HOF_BASE_ID}-fr" PKG_L10N_HOF_PROVIDES=" $PKG_L10N_HOF_BASE_ID" PKG_L10N_HOF_DESCRIPTION_HOMM5_EN="${EXPANSION_NAME_HOF} - English localisation" PKG_L10N_HOF_DESCRIPTION_HOMM5_FR="${EXPANSION_NAME_HOF} - French localisation" PKG_DATA_ID_HOMM5="${GAME_ID_HOMM5}-data" PKG_DATA_ID_TOTE="${GAME_ID_TOTE}-data" PKG_DATA_DESCRIPTION='data' PKG_DATA_HOF_ID="${GAME_ID}-${EXPANSION_ID_HOF}-data" PKG_DATA_HOF_DESCRIPTION="${EXPANSION_NAME_HOF} - data" PKG_DATA_DM_ID="${GAME_ID}-${EXPANSION_ID_DM}-data" PKG_DATA_DM_DESCRIPTION="${EXPANSION_NAME_DM} - data" # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # GOG.com build 83649 - Check for presence of fixed .exe. case "$(current_archive)" in ('ARCHIVE_BASE_HOMM5_'??'_2') archive_initialize_required \ 'ARCHIVE_GOGFIX' \ 'ARCHIVE_REQUIRED_GOGFIX' ;; esac # Extract game data. archive_extraction_default if archive_is_available 'ARCHIVE_GOGFIX'; then archive_extraction 'ARCHIVE_GOGFIX' path_archive_contents="${PLAYIT_WORKDIR}/gamedata/$(content_path_default)" mv \ "${path_archive_contents}/h5_game.exe" \ "${path_archive_contents}/bin/H5_Game.exe" fi # Include game data. content_inclusion_icons 'PKG_DATA' 'APP_MAIN' content_inclusion_icons 'PKG_EDITOR_DATA' 'APP_EDITOR' case "$(current_archive)" in ('ARCHIVE_BASE_HOMM5_'*) content_inclusion_icons 'PKG_DATA_HOF' 'APP_HOF' content_inclusion_icons 'PKG_EDITOR_DATA' 'APP_HOF_EDITOR' ;; ('ARCHIVE_BASE_TOTE_'*) content_inclusion_icons 'PKG_SKILLS' 'APP_SKILLS' content_inclusion_icons 'PKG_DATA_DM' 'APP_DM' ;; esac content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' if [ -d "$PATH_LIBRARIES_SYSTEM" ]; then find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --symbolic "$dll_source" "$dll_destination" done fi EOF } # Run the game binary from its parent directory. # Work around choppy animations on high uptime. game_exec_line() { # shellcheck disable=SC2086 local application=$1 local application_exe application_exe=$(application_exe "$application") cat <<- EOF # Run the game binary from its parent directory. cd "$(dirname "$application_exe")" # Work around choppy animations on high uptime. unshare --map-current-user --time --monotonic -\$((\$(cut --delimiter=. --fields=1 /proc/uptime)-42)) -- \\ \$(wine_command) "$(basename "$application_exe")" "\$@" EOF } launchers_generation 'PKG_MAIN' 'APP_MAIN' launchers_generation 'PKG_EDITOR' 'APP_EDITOR' case "$(current_archive)" in ('ARCHIVE_BASE_HOMM5_'*) launchers_generation 'PKG_HOF' 'APP_HOF' launchers_generation 'PKG_HOF_EDITOR' 'APP_HOF_EDITOR' ;; ('ARCHIVE_BASE_TOTE_'*) launchers_generation 'PKG_SKILLS' 'APP_SKILLS' launchers_generation 'PKG_DM' 'APP_DM' ;; esac # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-human-resource-machine.sh0000755000000000000000000000615614471751340016527 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2018 BetaRays set -o errexit ### # Human Resource Machine # send your bug reports to vv221@dotslashplay.it ### script_version=20250429.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='human-resource-machine' GAME_NAME='Human Resource Machine' ARCHIVE_BASE_HUMBLE_0_NAME='HumanResourceMachine-Linux-2016-03-23.sh' ARCHIVE_BASE_HUMBLE_0_MD5='ac6013284194203c4732e713dcc0f543' ARCHIVE_BASE_HUMBLE_0_SIZE='73000' ARCHIVE_BASE_HUMBLE_0_VERSION='1.0.8262-humble.2016.03.23' ARCHIVE_BASE_HUMBLE_0_URL='https://www.humblebundle.com/store/human-resource-machine' ARCHIVE_BASE_GOG_1_NAME='gog_human_resource_machine_2.0.0.3.sh' ARCHIVE_BASE_GOG_1_MD5='4670105392afc503b880c78d56a2f1ad' ARCHIVE_BASE_GOG_1_SIZE='74000' ARCHIVE_BASE_GOG_1_VERSION='1.0.8262-gog2.0.0.3' ARCHIVE_BASE_GOG_1_URL='https://www.gog.com/game/human_resource_machine' ARCHIVE_BASE_GOG_0_NAME='gog_human_resource_machine_2.0.0.2.sh' ARCHIVE_BASE_GOG_0_MD5='35bc19839c73ddf4b503c58a0a887f98' ARCHIVE_BASE_GOG_0_SIZE='74000' ARCHIVE_BASE_GOG_0_VERSION='1.0.8262-gog2.0.0.2' CONTENT_PATH_DEFAULT_HUMBLE='data' CONTENT_PATH_DEFAULT_GOG='data/noarch/game' CONTENT_GAME_BIN64_RELATIVE_PATH_HUMBLE='x86_64' CONTENT_GAME_BIN64_FILES=' HumanResourceMachine.bin.x86_64' CONTENT_GAME_BIN32_RELATIVE_PATH_HUMBLE='x86' CONTENT_GAME_BIN32_FILES=' HumanResourceMachine.bin.x86' CONTENT_GAME_DATA_RELATIVE_PATH_HUMBLE='noarch' CONTENT_GAME_DATA_FILES=' shaders resource.pak icon.png' CONTENT_DOC_DATA_RELATIVE_PATH_HUMBLE='noarch' CONTENT_DOC_DATA_FILES=' LICENSE.txt README.linux' APP_MAIN_EXE_BIN64='HumanResourceMachine.bin.x86_64' APP_MAIN_EXE_BIN32='HumanResourceMachine.bin.x86' APP_MAIN_ICON_HUMBLE='noarch/icon.png' APP_MAIN_ICON_GOG='icon.png' PACKAGES_LIST=' PKG_BIN64 PKG_BIN32 PKG_DATA' PKG_BIN64_ARCH='64' PKG_BIN32_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libgcc_s.so.1 libGL.so.1 libm.so.6 libopenal.so.1 libpthread.so.0 libSDL2-2.0.so.0 libstdc++.so.6 libz.so.1' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run the default initialization actions initialization_default "$@" # Extract game data archive_extraction_default # Include game data content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers launchers_generation 'PKG_BIN64' launchers_generation 'PKG_BIN32' # Build packages packages_generation print_instructions # Clean up working_directory_cleanup exit 0 games/play-impression-games-city-builders.sh0000755000000000000000000001217514471751340020225 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2015 Antoine Le Gonidec set -o errexit ### # Impression Games city builders: # - Zeus: Master of Olympus # - Emperor: Rise of the Middle Kingdom # send your bug reports to vv221@dotslashplay.it ### script_version=20260329.2 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID_ZEUS='zeus-master-of-olympus' GAME_NAME_ZEUS='Zeus: Master of Olympus' GAME_ID_EMPEROR='emperor-rise-of-the-middle-kingdom' GAME_NAME_EMPEROR='Emperor: Rise of the Middle Kingdom' ARCHIVE_BASE_ZEUS_0_NAME='setup_zeus_and_poseidon_2.1.0.10.exe' ARCHIVE_BASE_ZEUS_0_MD5='f26f9ed5ecaa4e58fca64acb88255107' # Convert file paths to lower case, for easier installation of localisations. ARCHIVE_BASE_ZEUS_0_EXTRACTOR='innoextract' ARCHIVE_BASE_ZEUS_0_EXTRACTOR_OPTIONS='--lowercase' ARCHIVE_BASE_ZEUS_0_SIZE='800000' ARCHIVE_BASE_ZEUS_0_VERSION='2.1-gog2.1.0.10' ARCHIVE_BASE_ZEUS_0_URL='https://www.gog.com/game/zeus_poseidon' ARCHIVE_BASE_EMPEROR_0_NAME='setup_emperor_rise_of_the_middle_kingdom_2.0.0.2.exe' ARCHIVE_BASE_EMPEROR_0_MD5='5e50e84c028a85eafe5dd5f2aa277fea' # Convert file paths to lower case, for easier installation of localisations. ARCHIVE_BASE_EMPEROR_0_EXTRACTOR='innoextract' ARCHIVE_BASE_EMPEROR_0_EXTRACTOR_OPTIONS='--lowercase' ARCHIVE_BASE_EMPEROR_0_SIZE='820000' ARCHIVE_BASE_EMPEROR_0_VERSION='1.0.1.0-gog2.0.0.2' ARCHIVE_BASE_EMPEROR_0_URL='https://www.gog.com/game/emperor_rise_of_the_middle_kingdom' CONTENT_PATH_DEFAULT='app' CONTENT_GAME_BIN_FILES_ZEUS=' Zeus.exe Zeus.ini Zeus.inf' CONTENT_GAME_BIN_FILES_EMPEROR=' Emperor.exe Emperor.ini Emperor.inf' # Zeus.exe / Emperor.exe requirements CONTENT_LIBS_BIN_FILES=' mss32.dll binkw32.dll ijl10.dll' CONTENT_GAME0_BIN_FILES=' mp3dec.asi mssrsx.m3d mssds3dh.m3d' CONTENT_GAME_EDITOR_FILES_EMPEROR=' EmperorEdit.exe EmperorEdit.inf' CONTENT_GAME_DATA_FILES=' Audio Binks DATA Model' CONTENT_GAME0_DATA_FILES_ZEUS=' Adventures zeus_mm.eng zeus_text.eng zeusmap.inf' CONTENT_GAME0_DATA_FILES_EMPEROR=' Campaigns Cities Res emperormm.eng emperortext.eng emperormap.inf' CONTENT_DOC_EDITOR_FILES_EMPEROR=' emperorcampaigncreator.pdf' CONTENT_DOC_DATA_FILES_ZEUS=' zeus - manual.pdf zeus - poseidon - manual.pdf zeus - quick reference card.pdf readme.txt' CONTENT_DOC_DATA_FILES_EMPEROR=' emperormanual.pdf readme.txt bonuscampreadme.txt' USER_PERSISTENT_DIRECTORIES=' Save' USER_PERSISTENT_FILES=' *.ini' # Prevent graphics flickering. # cf. https://bugs.winehq.org/show_bug.cgi?id=39351 # (WINE 11.5) WINE_WINETRICKS_VERBS='csmt=off' # The game window fails to render anything unless the game runs in a WINE virtual desktop. # (WINE 11.5) WINE_VIRTUAL_DESKTOP='1024x768' # Without an explicit list, APP_EDIT would be picked up for both games. APPLICATIONS_LIST_ZEUS=' APP_MAIN' APPLICATIONS_LIST_EMPEROR=' APP_MAIN APP_EDIT' APP_MAIN_EXE_ZEUS='zeus.exe' APP_MAIN_EXE_EMPEROR='emperor.exe' APP_MAIN_ICON_ZEUS='poseidon.ico' APP_MAIN_ICON_EMPEROR='dragon.ico' APP_EDITOR_ID_EMPEROR="${GAME_ID_EMPEROR}-editor" APP_EDITOR_NAME_EMPEROR="$GAME_NAME_EMPEROR - Editor" APP_EDITOR_EXE_EMPEROR='emperoredit.exe' PACKAGES_LIST_ZEUS=' PKG_BIN PKG_DATA' PACKAGES_LIST_EMPEROR=' PKG_BIN PKG_EDITOR PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_EDITOR_ID_EMPEROR="${GAME_ID_EMPEROR}-editor" PKG_EDITOR_ARCH='32' PKG_EDITOR_DEPENDENCIES_SIBLINGS=' PKG_BIN' PKG_DATA_ID_ZEUS="${GAME_ID_ZEUS}-data" PKG_DATA_ID_EMPEROR="${GAME_ID_EMPEROR}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' 'APP_MAIN' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. ln --force --symbolic $(path_libraries)/* "\${PATH_PREFIX}" EOF } # Work around missing animations on high uptime. game_exec_line() { # shellcheck disable=SC2086 local application=$1 local application_exe application_exe=$(application_exe "$application") cat <<- EOF # Work around missing animations on high uptime. unshare --map-current-user --time --boottime -\$((\$(cut --delimiter=. --fields=1 /proc/uptime)-42)) -- \\ \$(wine_command) "$application_exe" "\$@" EOF } launchers_generation 'PKG_BIN' 'APP_MAIN' # Emperor - Generate a launcher for the editor. case "$(current_archive)" in ('ARCHIVE_BASE_EMPEROR_'*) # Use the main game icon. desktop_field_icon() { printf '%s' "$(game_id)"; } launchers_generation 'PKG_EDITOR' 'APP_EDITOR' ;; esac # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-infinity-engine-enhanced-edition-expansions.sh0000755000000000000000000000767214471751340022651 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2018 Dawnmist # SPDX-FileCopyrightText: © 2018 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2021 Anna Lea set -o errexit ### # Infinity Engine Enhanced Edition expansions: # - Baldur's Gate Enhanced Edition - Siege of Dragonspear # - Baldur's Gate Enhanced Edition - Faces of Good and Evil # send your bug reports to vv221@dotslashplay.it ### script_version=20260104.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID_DRAGONSPEAR='baldurs-gate-1-enhanced-edition' GAME_NAME_DRAGONSPEAR='Baldurʼs Gate Enhanced Edition' GAME_ID_FACES='baldurs-gate-1-enhanced-edition' GAME_NAME_FACES='Baldurʼs Gate Enhanced Edition' EXPANSION_ID_DRAGONSPEAR='siege-of-dragonspear' EXPANSION_NAME_DRAGONSPEAR='Siege of Dragonspear' EXPANSION_ID_FACES='faces-of-good-and-evil' EXPANSION_NAME_FACES='Faces of Good and Evil' ## Siege of Dragonspear ARCHIVE_BASE_DRAGONSPEAR_2_NAME='baldur_s_gate_siege_of_dragonspear_2_6_6_0_p_81762.sh' ARCHIVE_BASE_DRAGONSPEAR_2_MD5='2bb1b6eaefb2744f9bbb32f82a30e60c' ARCHIVE_BASE_DRAGONSPEAR_2_SIZE='1887043' ARCHIVE_BASE_DRAGONSPEAR_2_VERSION='2.6.6.0-gog81762' ARCHIVE_BASE_DRAGONSPEAR_2_URL='https://www.gog.com/game/baldurs_gate_siege_of_dragonspear' ARCHIVE_BASE_DRAGONSPEAR_1_NAME='baldur_s_gate_siege_of_dragonspear_2_6_6_0_47291.sh' ARCHIVE_BASE_DRAGONSPEAR_1_MD5='36d275f6822b3cd2946ca606c0ebdb67' ARCHIVE_BASE_DRAGONSPEAR_1_SIZE='1900000' ARCHIVE_BASE_DRAGONSPEAR_1_VERSION='2.6.6.0-gog47291' ARCHIVE_BASE_DRAGONSPEAR_0_NAME='baldur_s_gate_siege_of_dragonspear_2_6_5_0_46477.sh' ARCHIVE_BASE_DRAGONSPEAR_0_MD5='27970876d9252fcb3174df8201db3ca3' ARCHIVE_BASE_DRAGONSPEAR_0_SIZE='1900000' ARCHIVE_BASE_DRAGONSPEAR_0_VERSION='2.6.5.0-gog46477' ## Faces of Good and Evil ARCHIVE_BASE_FACES_2_NAME='baldur_s_gate_faces_of_good_and_evil_2_6_6_0_p_81762.sh' ARCHIVE_BASE_FACES_2_MD5='6289884d62f5b9726c52050787be8099' ARCHIVE_BASE_FACES_2_SIZE='2119' ARCHIVE_BASE_FACES_2_VERSION='2.6.6.0-gog81762' ARCHIVE_BASE_FACES_2_URL='https://www.gog.com/game/baldurs_gate_faces_of_good_and_evil' ARCHIVE_BASE_FACES_1_NAME='baldur_s_gate_faces_of_good_and_evil_2_6_6_0_47291.sh' ARCHIVE_BASE_FACES_1_MD5='5bcc622e44bdf9b03af64f5fe0a83d38' ARCHIVE_BASE_FACES_1_SIZE='2500' ARCHIVE_BASE_FACES_1_VERSION='2.6.6.0-gog47291' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME_MAIN_FILES_DRAGONSPEAR=' sod-dlc.zip' CONTENT_GAME_MAIN_FILES_FACES=' override/yanner2?.bmp override/M_YANN2.lua' PKG_PARENT_ID_DRAGONSPEAR="$GAME_ID_DRAGONSPEAR" PKG_PARENT_ID_FACES="$GAME_ID_FACES" PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_PARENT' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_default # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-infinity-engine-enhanced-edition-games.sh0000755000000000000000000002227114471751340021546 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2017 Mopi set -o errexit ### # Infinity Engine games (Enhanced Edition): # - Baldur's Gate Enhanced Edition # - Baldur's Gate 2 Enhanced Edition # - Icewind Dale Enhanced Edition # - Planescape: Torment Enhanced Edition # send your bug reports to vv221@dotslashplay.it ### script_version=20260310.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID_BG1='baldurs-gate-1-enhanced-edition' GAME_NAME_BG1='Baldurʼs Gate Enhanced Edition' GAME_ID_BG2='baldurs-gate-2-enhanced-edition' GAME_NAME_BG2='Baldurʼs Gate II Enhanced Edition' GAME_ID_IWD1='icewind-dale-1-enhanced-edition' GAME_NAME_IWD1='Icewind Dale Enhanced Edition' GAME_ID_PST='planescape-torment-enhanced-edition' GAME_NAME_PST='Planescape: Torment Enhanced Edition' # Baldur's Gate Enhanced Edition ARCHIVE_BASE_BG1_2_NAME='baldur_s_gate_enhanced_edition_2_6_6_0_p_81762.sh' ARCHIVE_BASE_BG1_2_MD5='69a65780f1fe8292e47e922f9b16a4be' ARCHIVE_BASE_BG1_2_SIZE='3263827' ARCHIVE_BASE_BG1_2_VERSION='2.6.6.0-gog81762' ARCHIVE_BASE_BG1_2_URL='https://www.gog.com/game/baldurs_gate_enhanced_edition' ARCHIVE_BASE_BG1_1_NAME='baldur_s_gate_enhanced_edition_2_6_6_0_47291.sh' ARCHIVE_BASE_BG1_1_MD5='6f7be163ebb80a0fbc9d6331f9c6f09c' ARCHIVE_BASE_BG1_1_SIZE='3300000' ARCHIVE_BASE_BG1_1_VERSION='2.6.6.0-gog47291' ARCHIVE_BASE_BG1_0_NAME='baldur_s_gate_enhanced_edition_2_6_5_0_46477.sh' ARCHIVE_BASE_BG1_0_MD5='a87444f36602b5059e3c885ec2ff50e1' ARCHIVE_BASE_BG1_0_SIZE='3300000' ARCHIVE_BASE_BG1_0_VERSION='2.6.5.0-gog46477' ARCHIVE_OPTIONAL_ICONS_NAME_BG1='baldurs-gate-1-enhanced-edition_icons.tar.gz' ARCHIVE_OPTIONAL_ICONS_MD5_BG1='58401cf80bc9f1a9e9a0896f5d74b02a' ARCHIVE_OPTIONAL_ICONS_URL_BG1='https://downloads.dotslashplay.it/resources/baldurs-gate-1-enhanced-edition/' CONTENT_ICONS_PATH_BG1='.' CONTENT_ICONS_FILES_BG1=' 16x16 24x42 32x32 48x48 64x64 256x256' # Baldur's Gate 2 Enhanced Edition ARCHIVE_BASE_BG2_2_NAME='baldur_s_gate_ii_enhanced_edition_2_6_6_0_p_81762.sh' ARCHIVE_BASE_BG2_2_MD5='55a058ab9fbc40f78ce1d89bac7370a0' ARCHIVE_BASE_BG2_2_SIZE='3721955' ARCHIVE_BASE_BG2_2_VERSION='2.6.6.0-gog81762' ARCHIVE_BASE_BG2_2_URL='https://www.gog.com/game/baldurs_gate_2_enhanced_edition' ARCHIVE_BASE_BG2_1_NAME='baldur_s_gate_ii_enhanced_edition_2_6_6_0_47292.sh' ARCHIVE_BASE_BG2_1_MD5='43b37a554ffb712176ea8709fc98ed84' ARCHIVE_BASE_BG2_1_SIZE='380000' ARCHIVE_BASE_BG2_1_VERSION='2.6.6.0-gog47292' ARCHIVE_BASE_BG2_0_NAME='baldur_s_gate_ii_enhanced_edition_2_6_5_0_46477.sh' ARCHIVE_BASE_BG2_0_MD5='aa62efd4b1c69f074a784e637234e7c4' ARCHIVE_BASE_BG2_0_SIZE='3800000' ARCHIVE_BASE_BG2_0_VERSION='2.6.5.0-gog46477' ARCHIVE_OPTIONAL_ICONS_NAME_BG2='baldurs-gate-2-enhanced-edition_icons.tar.gz' ARCHIVE_OPTIONAL_ICONS_MD5_BG2='36055600f9461793995a318e74b133e8' ARCHIVE_OPTIONAL_ICONS_URL_BG2='https://downloads.dotslashplay.it/games/baldurs-gate-2-enhanced-edition/' CONTENT_ICONS_PATH_BG2='.' CONTENT_ICONS_FILES_BG2=' 16x16 32x32 48x48 64x64 128x128 256x256' # Icewind Dale Enhanced Edition ARCHIVE_BASE_IWD1_1_NAME='icewind_dale_enhanced_edition_2_6_6_0_47290.sh' ARCHIVE_BASE_IWD1_1_MD5='fd7721f10a6d39c545ef46c58d80e2cc' ARCHIVE_BASE_IWD1_1_SIZE='3000000' ARCHIVE_BASE_IWD1_1_VERSION='2.6.6.0-gog47290' ARCHIVE_BASE_IWD1_1_URL='https://www.gog.com/game/icewind_dale_enhanced_edition' ARCHIVE_BASE_IWD1_0_NAME='icewind_dale_enhanced_edition_2_6_5_0_46474.sh' ARCHIVE_BASE_IWD1_0_MD5='7fa481705b5d5b7f5d714a6a19c856e0' ARCHIVE_BASE_IWD1_0_SIZE='3000000' ARCHIVE_BASE_IWD1_0_VERSION='2.6.5.0-gog46474' ARCHIVE_OPTIONAL_ICONS_NAME_IWD1='icewind-dale-1-enhanced-edition_icons.tar.gz' ARCHIVE_OPTIONAL_ICONS_MD5_IWD1='2e7db406aca79f9182c4efa93df80bf4' ARCHIVE_OPTIONAL_ICONS_URL_IWD1='https://downloads.dotslashplay.it/resources/icewind-dale-1-enhanced-edition/' CONTENT_ICONS_PATH_IWD1='.' CONTENT_ICONS_FILES_IWD1=' 16x16 32x32 48x48 64x64 128x128 256x256' # Planescape: Torment ARCHIVE_BASE_PST_1_NAME='planescape_torment_enhanced_edition_3_1_4_26532.sh' ARCHIVE_BASE_PST_1_MD5='7d42ae99df8c0a4ff460235ae406f2d6' ARCHIVE_BASE_PST_1_SIZE='1800000' ARCHIVE_BASE_PST_1_VERSION='3.1.4-gog26532' ARCHIVE_BASE_PST_1_URL='https://www.gog.com/game/planescape_torment_enhanced_edition' ARCHIVE_BASE_PST_0_NAME='gog_planescape_torment_enhanced_edition_2.1.0.3.sh' ARCHIVE_BASE_PST_0_MD5='649c1bf9d7ccd81553c574ff1bec2cef' ARCHIVE_BASE_PST_0_SIZE='1800000' ARCHIVE_BASE_PST_0_VERSION='3.1.3-gog2.1.0.3' ARCHIVE_OPTIONAL_ICONS_NAME_PST='planescape-torment-enhanced-edition_icons.tar.gz' ARCHIVE_OPTIONAL_ICONS_MD5_PST='ed1c9961e2ecfa401af825d75723fe9c' ARCHIVE_OPTIONAL_ICONS_URL_PST='https://downloads.dotslashplay.it/games/planescape-torment-enhanced-edition/' CONTENT_ICONS_PATH_PST='.' CONTENT_ICONS_FILES_PST=' 16x16 32x32 48x48 64x64 96x96 128x128 256x256' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME_BIN_FILES_BG1=' BaldursGate' CONTENT_GAME_BIN_FILES_BG2=' BaldursGateII' CONTENT_GAME_BIN_FILES_IWD1=' IcewindDale' CONTENT_GAME_BIN_FILES_PST=' Torment64' CONTENT_GAME_L10N_FR_FILES=' lang/fr_FR' CONTENT_GAME_L10N_DE_FILES=' lang/de_DE' CONTENT_GAME_DATA_FILES=' chitin.key engine.lua Manuals movies music scripts data' # The English localisation files are always included, # so they can be used as a fallback for incomplete localisations. CONTENT_GAME0_DATA_FILES=' lang/en_US' APP_MAIN_EXE_BG1='BaldursGate' APP_MAIN_EXE_BG2='BaldursGateII' APP_MAIN_EXE_IWD1='IcewindDale' APP_MAIN_EXE_PST='Torment64' APP_MAIN_ICON='../support/icon.png' PACKAGES_LIST=' PKG_BIN PKG_L10N_FR PKG_L10N_DE PKG_L10N_EN PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_L10N PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libexpat.so.1 libgcc_s.so.1 libGL.so.1 libm.so.6 libopenal.so.1 libpthread.so.0 librt.so.1 libssl.so.1.0.0 libstdc++.so.6 libX11.so.6' PKG_L10N_ID_BG1="${GAME_ID_BG1}-l10n" PKG_L10N_ID_BG2="${GAME_ID_BG2}-l10n" PKG_L10N_ID_IWD1="${GAME_ID_IWD1}-l10n" PKG_L10N_ID_PST="${GAME_ID_PST}-l10n" PKG_L10N_FR_ID_BG1="${PKG_L10N_ID_BG1}-fr" PKG_L10N_FR_ID_BG2="${PKG_L10N_ID_BG2}-fr" PKG_L10N_FR_ID_IWD1="${PKG_L10N_ID_IWD1}-fr" PKG_L10N_FR_ID_PST="${PKG_L10N_ID_PST}-fr" PKG_L10N_DE_ID_BG1="${PKG_L10N_ID_BG1}-de" PKG_L10N_DE_ID_BG2="${PKG_L10N_ID_BG2}-de" PKG_L10N_DE_ID_IWD1="${PKG_L10N_ID_IWD1}-de" PKG_L10N_DE_ID_PST="${PKG_L10N_ID_PST}-de" PKG_L10N_EN_ID_BG1="${PKG_L10N_ID_BG1}-en" PKG_L10N_EN_ID_BG2="${PKG_L10N_ID_BG2}-en" PKG_L10N_EN_ID_IWD1="${PKG_L10N_ID_IWD1}-en" PKG_L10N_EN_ID_PST="${PKG_L10N_ID_PST}-en" PKG_L10N_PROVIDES_BG1=" $PKG_L10N_ID_BG1" PKG_L10N_PROVIDES_BG2=" $PKG_L10N_ID_BG2" PKG_L10N_PROVIDES_IWD1=" $PKG_L10N_ID_IWD1" PKG_L10N_PROVIDES_PST=" $PKG_L10N_ID_PST" PKG_L10N_DE_DESCRIPTION='German localisation' PKG_L10N_FR_DESCRIPTION='French localisation' PKG_L10N_EN_DESCRIPTION='English localisation' PKG_DATA_ID_BG1="${GAME_ID_BG1}-data" PKG_DATA_ID_BG2="${GAME_ID_BG2}-data" PKG_DATA_ID_IWD1="${GAME_ID_IWD1}-data" PKG_DATA_ID_PST="${GAME_ID_PST}-data" PKG_DATA_DESCRIPTION='data' # Easier upgrades from pre-20250103.1 packages PKG_DATA_PROVIDES_BG1="${PKG_DATA_PROVIDES_BG1:-} baldurs-gate-1-enhanced-edition-l10n-en" PKG_DATA_PROVIDES_BG2="${PKG_DATA_PROVIDES_BG2:-} baldurs-gate-2-enhanced-edition-l10n-en" PKG_DATA_PROVIDES_IWD1="${PKG_DATA_PROVIDES_IWD1:-} icewind-dale-1-enhanced-edition-l10n-en" PKG_DATA_PROVIDES_PST="${PKG_DATA_PROVIDES_PST:-} planescape-torment-enhanced-edition-l10n-en" # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Force the use of system-provided SDL. # Prevent a segmentation fault on wayland: # #0 0x00005555558d999f in DrawInit_GL(void*) () # #1 0x00005555559188ee in CVidMode::SetDisplayMode() () # #2 0x00005555558f9585 in CChitin::InitializeServices() () # #3 0x00005555558fd75d in CChitin::WinMain() () # #4 0x00005555554988d8 in main () # (sdl2-compat 2.32.64 + SDL 3.4.2) APP_MAIN_PRERUN="$(application_prerun 'APP_MAIN') $(launcher_tweak_sdl_override) $(launcher_tweak_sdl_force_x11)" dependencies_add_native_libraries 'PKG_BIN' 'libSDL2-2.0.so.0' launchers_generation # Build packages. packages_generation case "$(messages_language)" in ('fr') lang_string='version %s :' lang_fr='française' lang_de='allemande' lang_en='anglaise' ;; ('en'|*) lang_string='%s version:' lang_fr='French' lang_de='German' lang_en='English' ;; esac printf '\n' printf "$lang_string" "$lang_fr" print_instructions 'PKG_BIN' 'PKG_DATA' 'PKG_L10N_FR' printf "$lang_string" "$lang_de" print_instructions 'PKG_BIN' 'PKG_DATA' 'PKG_L10N_DE' printf "$lang_string" "$lang_en" print_instructions 'PKG_BIN' 'PKG_DATA' 'PKG_L10N_EN' # Clean up. working_directory_cleanup exit 0 games/play-infinity-engine-games.sh0000755000000000000000000005235414471751340016357 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2015 Antoine Le Gonidec set -o errexit ### # Infinity Engine games: # - Baldur's Gate # - Baldur's Gate 2 # - Icewind Dale # - Icewind Dale 2 # - Planescape: Torment # send your bug reports to vv221@dotslashplay.it ### script_version=20260328.2 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID_BG1='baldurs-gate-1' GAME_NAME_BG1='Baldurʼs Gate' GAME_ID_BG2='baldurs-gate-2' GAME_NAME_BG2='Baldurʼs Gate II' GAME_ID_IWD1='icewind-dale-1' GAME_NAME_IWD1='Icewind Dale' GAME_ID_IWD2='icewind-dale-2' GAME_NAME_IWD2='Icewind Dale II' GAME_ID_PST='planescape-torment' GAME_NAME_PST='Planescape: Torment' # Baldur's Gate ARCHIVE_BASE_BG1_DE_1_NAME='baldur_s_gate_the_original_saga_german_gog_3_23532.sh' ARCHIVE_BASE_BG1_DE_1_MD5='0d81f1e8b62828e8a253df032b7f24f3' ARCHIVE_BASE_BG1_DE_1_VERSION='1.3.5521-gog23532' ARCHIVE_BASE_BG1_DE_1_SIZE='3369373' ARCHIVE_BASE_BG1_DE_1_URL='https://www.gog.com/game/baldurs_gate_enhanced_edition' ARCHIVE_BASE_BG1_FR_1_NAME='baldur_s_gate_the_original_saga_french_gog_3_23532.sh' ARCHIVE_BASE_BG1_FR_1_MD5='09073e75602383c2c90d7c82436a8d91' ARCHIVE_BASE_BG1_FR_1_VERSION='1.3.5521-gog23532' ARCHIVE_BASE_BG1_FR_1_SIZE='3369868' ARCHIVE_BASE_BG1_FR_1_URL='https://www.gog.com/game/baldurs_gate_enhanced_edition' ARCHIVE_BASE_BG1_PL_1_NAME='baldur_s_gate_the_original_saga_polish_gog_3_23532.sh' ARCHIVE_BASE_BG1_PL_1_MD5='9db5d4dd953e4bc7b42fbb6d0680437a' ARCHIVE_BASE_BG1_PL_1_SIZE='3367441' ARCHIVE_BASE_BG1_PL_1_VERSION='1.3.5521-gog23532' ARCHIVE_BASE_BG1_PL_1_URL='https://www.gog.com/game/baldurs_gate_enhanced_edition' ARCHIVE_BASE_BG1_EN_1_NAME='baldur_s_gate_the_original_saga_gog_3_23532.sh' ARCHIVE_BASE_BG1_EN_1_MD5='f1750a05b52a5c8bb4810f0dbdb92091' ARCHIVE_BASE_BG1_EN_1_SIZE='3342753' ARCHIVE_BASE_BG1_EN_1_VERSION='1.3.5521-gog23532' ARCHIVE_BASE_BG1_EN_1_URL='https://www.gog.com/game/baldurs_gate_enhanced_edition' ARCHIVE_BASE_BG1_EN_0_NAME='gog_baldur_s_gate_the_original_saga_2.1.0.10.sh' ARCHIVE_BASE_BG1_EN_0_MD5='6810388ef67960dded254db5750f9aa5' ARCHIVE_BASE_BG1_EN_0_SIZE='3100000' ARCHIVE_BASE_BG1_EN_0_VERSION='1.3.5521-gog2.1.0.10' ARCHIVE_BASE_BG1_FR_0_NAME='gog_baldur_s_gate_the_original_saga_french_2.1.0.10.sh' ARCHIVE_BASE_BG1_FR_0_MD5='87ed67decb79e497b8c0ce9e0b16ac4c' ARCHIVE_BASE_BG1_FR_0_SIZE='3100000' ARCHIVE_BASE_BG1_FR_0_VERSION='1.3.5521-gog2.1.0.10' # Baldur's Gate 2 ARCHIVE_BASE_BG2_DE_1_NAME='baldur_s_gate_2_complete_german_gog_3_23651.sh' ARCHIVE_BASE_BG2_DE_1_MD5='466b79a4dedd5ab142c7baa3e7554d89' ARCHIVE_BASE_BG2_DE_1_SIZE='3365425' ARCHIVE_BASE_BG2_DE_1_VERSION='2.5.26498-gog23651' ARCHIVE_BASE_BG2_DE_1_URL='https://www.gog.com/game/baldurs_gate_2_enhanced_edition' ARCHIVE_BASE_BG2_FR_1_NAME='baldur_s_gate_2_complete_french_gog_3_23651.sh' ARCHIVE_BASE_BG2_FR_1_MD5='c72eb1b9bae7109de6a7005b3dc44e2c' ARCHIVE_BASE_BG2_FR_1_SIZE='3295642' ARCHIVE_BASE_BG2_FR_1_VERSION='2.5.26498-gog23651' ARCHIVE_BASE_BG2_FR_1_URL='https://www.gog.com/game/baldurs_gate_2_enhanced_edition' ARCHIVE_BASE_BG2_EN_1_NAME='baldur_s_gate_2_complete_gog_3_23651.sh' ARCHIVE_BASE_BG2_EN_1_MD5='030a61ce961ac88cd9506f1fd42135d6' ARCHIVE_BASE_BG2_EN_1_SIZE='3305036' ARCHIVE_BASE_BG2_EN_1_VERSION='2.5.26498-gog23651' ARCHIVE_BASE_BG2_EN_1_URL='https://www.gog.com/game/baldurs_gate_2_enhanced_edition' ARCHIVE_BASE_BG2_FR_0_NAME='gog_baldur_s_gate_2_complete_french_2.1.0.7.sh' ARCHIVE_BASE_BG2_FR_0_MD5='6551bda3d8c7330b7ad66842ac1d4ed4' ARCHIVE_BASE_BG2_FR_0_SIZE='3000000' ARCHIVE_BASE_BG2_FR_0_VERSION='2.5.26498-gog2.1.0.7' ARCHIVE_BASE_BG2_EN_0_NAME='gog_baldur_s_gate_2_complete_2.1.0.7.sh' ARCHIVE_BASE_BG2_EN_0_MD5='e92161d7fc0a2eea234b2c93760c9cdb' ARCHIVE_BASE_BG2_EN_0_SIZE='3000000' ARCHIVE_BASE_BG2_EN_0_VERSION='2.5.26498-gog2.1.0.7' # Icewind Dale ARCHIVE_BASE_IWD1_DE_0_NAME='setup_icewind_dale_complete_german_2.0.0.11.exe' ARCHIVE_BASE_IWD1_DE_0_MD5='a43f9dc153f56de8f5891dcb8ccb4f46' ARCHIVE_BASE_IWD1_DE_0_TYPE='innosetup' ARCHIVE_BASE_IWD1_DE_0_SIZE='2115009' ARCHIVE_BASE_IWD1_DE_0_VERSION='1.42.062714-gog2.0.0.11' ARCHIVE_BASE_IWD1_DE_0_URL='https://www.gog.com/game/icewind_dale_enhanced_edition' ARCHIVE_BASE_IWD1_EN_0_NAME='setup_icewind_dale_complete_2.0.0.11.exe' ARCHIVE_BASE_IWD1_EN_0_MD5='b1395109232aac8d7f8455dad418b084' ARCHIVE_BASE_IWD1_EN_0_TYPE='innosetup' ARCHIVE_BASE_IWD1_EN_0_SIZE='2088514' ARCHIVE_BASE_IWD1_EN_0_VERSION='1.42.062714-gog2.0.0.11' ARCHIVE_BASE_IWD1_EN_0_URL='https://www.gog.com/game/icewind_dale_enhanced_edition' # Icewind Dale 2 ARCHIVE_BASE_IWD2_DE_1_NAME='setup_icewind_dale_2_2.01_fixes_(german)_(77030).exe' ARCHIVE_BASE_IWD2_DE_1_MD5='0421b0482f9cd8a7cbeb846c0c3628a0' ARCHIVE_BASE_IWD2_DE_1_TYPE='innosetup' ARCHIVE_BASE_IWD2_DE_1_PART1_NAME='setup_icewind_dale_2_2.01_fixes_(german)_(77030)-1.bin' ARCHIVE_BASE_IWD2_DE_1_PART1_MD5='a6d2c460bfa37df5935a7ee0e92a2728' ARCHIVE_BASE_IWD2_DE_1_SIZE='1582269' ARCHIVE_BASE_IWD2_DE_1_VERSION='2.01.101615-gog77030' ARCHIVE_BASE_IWD2_DE_1_URL='https://www.gog.com/game/icewind_dale_2' ARCHIVE_BASE_IWD2_FR_1_NAME='setup_icewind_dale_2_2.01_fixes_(french)_(77030).exe' ARCHIVE_BASE_IWD2_FR_1_MD5='8b25fcc3e12641efd79d6c2780f3cc03' ARCHIVE_BASE_IWD2_FR_1_TYPE='innosetup' ARCHIVE_BASE_IWD2_FR_1_PART1_NAME='setup_icewind_dale_2_2.01_fixes_(french)_(77030)-1.bin' ARCHIVE_BASE_IWD2_FR_1_PART1_MD5='0d25ffba9a37471185327d0beedd7aaf' ARCHIVE_BASE_IWD2_FR_1_SIZE='1552369' ARCHIVE_BASE_IWD2_FR_1_VERSION='2.01.101615-gog77030' ARCHIVE_BASE_IWD2_FR_1_URL='https://www.gog.com/game/icewind_dale_2' ARCHIVE_BASE_IWD2_EN_1_NAME='setup_icewind_dale_2_2.01_fixes_(77030).exe' ARCHIVE_BASE_IWD2_EN_1_MD5='7579f564757a6d9261a29b599a11f335' ARCHIVE_BASE_IWD2_EN_1_TYPE='innosetup' ARCHIVE_BASE_IWD2_EN_1_PART1_NAME='setup_icewind_dale_2_2.01_fixes_(77030)-1.bin' ARCHIVE_BASE_IWD2_EN_1_PART1_MD5='79a7e58ea11380bbbf7329a97d522e3f' ARCHIVE_BASE_IWD2_EN_1_SIZE='1555964' ARCHIVE_BASE_IWD2_EN_1_VERSION='2.01.101615-gog77030' ARCHIVE_BASE_IWD2_EN_1_URL='https://www.gog.com/game/icewind_dale_2' ARCHIVE_BASE_IWD2_FR_0_NAME='setup_icewind_dale2_french_2.1.0.13.exe' ARCHIVE_BASE_IWD2_FR_0_MD5='04f25433d405671a8975be6540dd55fa' ARCHIVE_BASE_IWD2_FR_0_TYPE='innosetup' ARCHIVE_BASE_IWD2_FR_0_SIZE='1500000' ARCHIVE_BASE_IWD2_FR_0_VERSION='2.01.101615-gog2.1.0.13' ARCHIVE_BASE_IWD2_EN_0_NAME='setup_icewind_dale2_2.1.0.13.exe' ARCHIVE_BASE_IWD2_EN_0_MD5='9a68fdabdaff58bebc67092d47d4174e' ARCHIVE_BASE_IWD2_EN_0_TYPE='innosetup' ARCHIVE_BASE_IWD2_EN_0_SIZE='1500000' ARCHIVE_BASE_IWD2_EN_0_VERSION='2.01.101615-gog2.1.0.13' # Planescape: Torment ARCHIVE_BASE_PST_DE_1_NAME='planescape_torment_german_gog_3_23483.sh' ARCHIVE_BASE_PST_DE_1_MD5='fce317b1b81b903181f8e18c3dd967d6' ARCHIVE_BASE_PST_DE_1_SIZE='2630297' ARCHIVE_BASE_PST_DE_1_VERSION='1.1-gog23483' ARCHIVE_BASE_PST_DE_1_URL='https://www.gog.com/game/planescape_torment_enhanced_edition' ARCHIVE_BASE_PST_FR_1_NAME='planescape_torment_french_gog_3_23483.sh' ARCHIVE_BASE_PST_FR_1_MD5='3374385ab6c5ca8aa489ee8de6161637' ARCHIVE_BASE_PST_FR_1_SIZE='2625754' ARCHIVE_BASE_PST_FR_1_VERSION='1.1-gog23483' ARCHIVE_BASE_PST_FR_1_URL='https://www.gog.com/game/planescape_torment_enhanced_edition' ARCHIVE_BASE_PST_RU_1_NAME='planescape_torment_russian_gog_3_23483.sh' ARCHIVE_BASE_PST_RU_1_MD5='6f6744e90691126c884dccf925423e2d' ARCHIVE_BASE_PST_RU_1_SIZE='2635240' ARCHIVE_BASE_PST_RU_1_VERSION='1.1-gog23483' ARCHIVE_BASE_PST_RU_1_URL='https://www.gog.com/game/planescape_torment_enhanced_edition' ARCHIVE_BASE_PST_EN_1_NAME='planescape_torment_gog_3_23483.sh' ARCHIVE_BASE_PST_EN_1_MD5='3eb98c2c34d628b7da6e4e914ac8e622' ARCHIVE_BASE_PST_EN_1_SIZE='2635378' ARCHIVE_BASE_PST_EN_1_VERSION='1.1-gog23483' ARCHIVE_BASE_PST_EN_1_URL='https://www.gog.com/game/planescape_torment_enhanced_edition' ARCHIVE_BASE_PST_FR_0_NAME='gog_planescape_torment_french_2.1.0.9.sh' ARCHIVE_BASE_PST_FR_0_MD5='c3af554300a90297d4fca0b591d9c3fd' ARCHIVE_BASE_PST_FR_0_SIZE='2400000' ARCHIVE_BASE_PST_FR_0_VERSION='1.1-gog2.1.0.9' ARCHIVE_BASE_PST_RU_0_NAME='gog_planescape_torment_russian_2.2.0.10.sh' ARCHIVE_BASE_PST_RU_0_MD5='d6fd52fe9946bcc067eed441945127f1' ARCHIVE_BASE_PST_RU_0_SIZE='2400000' ARCHIVE_BASE_PST_RU_0_VERSION='1.1-gog2.2.0.10' ARCHIVE_BASE_PST_EN_0_NAME='gog_planescape_torment_2.1.0.9.sh' ARCHIVE_BASE_PST_EN_0_MD5='a48bb772f60da3b5b2cac804b6e92670' ARCHIVE_BASE_PST_EN_0_SIZE='2400000' ARCHIVE_BASE_PST_EN_0_VERSION='1.1-gog2.1.0.9' # Baldur's Gate CONTENT_PATH_DEFAULT_BG1_DE="data/noarch/prefix/drive_c/GOG Games/Baldur's Gate (German)" CONTENT_PATH_DEFAULT_BG1_FR="data/noarch/prefix/drive_c/GOG Games/Baldur's Gate (French)" CONTENT_PATH_DEFAULT_BG1_PL="data/noarch/prefix/drive_c/GOG Games/Baldur's Gate (Polish)" CONTENT_PATH_DEFAULT_BG1_EN="data/noarch/prefix/drive_c/GOG Games/Baldur's Gate" CONTENT_GAME_BIN_FILES_BG1=' luaauto.cfg bgmain2.exe bgmain.exe mconvert.exe keymap.ini' # The following configuration file is generated by the current game script, # the shipped version is ignored. CONTENT_GAME0_BIN_FILES_BG1=' baldur.ini' CONTENT_GAME_L10N_FILES_BG1=' characters override movies mpsave save sounds baldur.exe config.exe chitin.key dialog.tlk dialogf.tlk data/areas.bif data/guimos.bif data/objanim.bif data/scripts.bif data/*sound*.bif' CONTENT_GAME_DATA_FILES_BG1=' data music scripts' CONTENT_DOC_L10N_PATH_BG1_DE='data/noarch/docs/german' CONTENT_DOC_L10N_PATH_BG1_FR='data/noarch/docs/french' CONTENT_DOC_L10N_PATH_BG1_PL='data/noarch/docs/polish' CONTENT_DOC_L10N_PATH_BG1_EN='data/noarch/docs/english' CONTENT_DOC_L10N_PATH_BG1_FR_0='data/noarch/docs' CONTENT_DOC_L10N_PATH_BG1_EN_0='data/noarch/docs' CONTENT_DOC_L10N_FILES_BG1=' *.pdf *.txt' # Baldur's Gate 2 CONTENT_PATH_DEFAULT_BG2_DE="data/noarch/prefix/drive_c/GOG Games/Baldur's Gate 2 (German)" CONTENT_PATH_DEFAULT_BG2_FR="data/noarch/prefix/drive_c/GOG Games/Baldur's Gate 2 (French)" CONTENT_PATH_DEFAULT_BG2_EN="data/noarch/prefix/drive_c/GOG Games/Baldur's Gate 2" CONTENT_GAME_BIN_FILES_BG2=' script compiler bgdxtest.exe bggltest.exe bgmain.exe charview.exe' # The following configuration file is generated by the current game script, # the shipped version is ignored. CONTENT_GAME0_BIN_FILES_BG2=' baldur.ini' CONTENT_GAME_L10N_FILES_BG2=' characters override sounds baldur.exe bgconfig.exe keymap.ini chitin.key dialog.tlk dialogf.tlk language.txt data/movies data/25npcso.bif data/areas.bif data/guimosc.bif data/npchd0so.bif data/objanim.bif data/scripts.bif data/npcsocd?.bif data/*sound*.bif' CONTENT_GAME_DATA_FILES_BG2=' data music scripts bgate2.mpi' CONTENT_DOC_L10N_PATH_BG2_DE='data/noarch/docs/german' CONTENT_DOC_L10N_PATH_BG2_FR='data/noarch/docs/french' CONTENT_DOC_L10N_PATH_BG2_EN='data/noarch/docs/english' CONTENT_DOC_L10N_PATH_BG2_FR_0='data/noarch/docs' CONTENT_DOC_L10N_PATH_BG2_EN_0='data/noarch/docs' CONTENT_DOC_L10N_FILES_BG2=' *.pdf *.txt' # Icewind Dale CONTENT_PATH_DEFAULT_IWD1='app' CONTENT_GAME_BIN_FILES_IWD1=' config.exe glsetup.exe idmain.exe keymap.ini' # The following configuration file is generated by the current game script, # the shipped version is ignored. CONTENT_GAME0_BIN_FILES_IWD1=' icewind.ini' CONTENT_GAME_L10N_FILES_IWD1=' characters override mpsave scripts sounds language.ini chitin.key dialog.tlk data/esfxvoh.bif data/sndvo.bif cd2/data/mvefile1.bif cd2/data/sndvo.bif cd3/data/emov1.bif cd3/data/emov2.bif cd3/data/esfxvo.bif' CONTENT_GAME_DATA_FILES_IWD1=' cd2 cd3 data music' CONTENT_DOC_L10N_FILES_IWD1=' manual.pdf patch_addon.txt patch_addon2.txt readme.txt readme_addon.txt readme_addon2.txt readme_eng.txt' # Icewind Dale 2 CONTENT_PATH_DEFAULT_IWD2='.' CONTENT_PATH_DEFAULT_IWD2_FR_0='app' CONTENT_PATH_DEFAULT_IWD2_EN_0='app' # The following library is required to play videos. CONTENT_LIBS_BIN_FILES_IWD2=' binkw32.dll' CONTENT_GAME_BIN_FILES_IWD2=' config.exe iwd2.exe keymap.ini' # The following configuration file is generated by the current game script, # the shipped version is ignored. CONTENT_GAME0_BIN_FILES_IWD2=' icewind2.ini' CONTENT_GAME1_BIN_RELATIVE_PATH_IWD2='__support/app' CONTENT_GAME1_BIN_FILES_IWD2=' iwd2.exe keymap.ini' CONTENT_GAME_L10N_FILES_IWD2=' characters override sounds language.ini party.ini chitin.key dialog.tlk dialogf.tlk cd2/data/sndvo.bif cd2/data/*.mve' CONTENT_GAME0_L10N_RELATIVE_PATH_IWD2='__support/app' CONTENT_GAME0_L10N_FILES_IWD2=' party.ini' CONTENT_GAME_DATA_FILES_IWD2=' cd2 data music scripts' CONTENT_DOC_L10N_FILES_IWD2=' readme.htm manual.pdf patch.txt' # Planescape: Torment CONTENT_PATH_DEFAULT_PST_DE='data/noarch/prefix/drive_c/GOG Games/Planescape Torment (German)' CONTENT_PATH_DEFAULT_PST_FR='data/noarch/prefix/drive_c/GOG Games/Planescape Torment (French)' CONTENT_PATH_DEFAULT_PST_RU='data/noarch/prefix/drive_c/GOG Games/Planescape Torment (Russian)' CONTENT_PATH_DEFAULT_PST_EN='data/noarch/prefix/drive_c/GOG Games/Planescape Torment' CONTENT_GAME_BIN_FILES_PST=' torment.exe autonote.ini beast.ini keymap.ini layout.ini quests.ini' # The following configuration file is generated by the current game script, # the shipped version is ignored. CONTENT_GAME0_BIN_FILES_PST=' torment.ini' CONTENT_GAME_L10N_FILES_PST=' override cachemos.bif crefiles.bif cs_0404.bif interface.bif sound.bif voice.bif chitin.key dialog.tlk dialogf.tlk data/genmova.bif data/movies?.bif' CONTENT_GAME_DATA_FILES_PST=' data music var.var *.bif' CONTENT_DOC_L10N_PATH_PST_DE='data/noarch/docs/german' CONTENT_DOC_L10N_PATH_PST_FR='data/noarch/docs/french' CONTENT_DOC_L10N_PATH_PST_RU='data/noarch/docs/russian' CONTENT_DOC_L10N_PATH_PST_EN='data/noarch/docs/english' CONTENT_DOC_L10N_PATH_PST_FR_0='data/noarch/docs' CONTENT_DOC_L10N_PATH_PST_RU_0='data/noarch/docs' CONTENT_DOC_L10N_PATH_PST_EN_0='data/noarch/docs' CONTENT_DOC_L10N_FILES_PST=' *.pdf *.txt' USER_PERSISTENT_FILES=' *.ini' USER_PERSISTENT_DIRECTORIES=' characters mpsave save' APPLICATIONS_LIST=' APP_MAIN APP_CONFIG' APPLICATIONS_LIST_PST=' APP_MAIN' APP_MAIN_EXE_BG1='bgmain2.exe' APP_MAIN_EXE_BG2='bgmain.exe' APP_MAIN_EXE_IWD1='idmain.exe' APP_MAIN_EXE_IWD2='iwd2.exe' APP_MAIN_EXE_PST='torment.exe' APP_MAIN_ICON_BG1='baldur.exe' APP_MAIN_ICON_BG2='baldur.exe' APP_MAIN_ICON_IWD2='__support/app/iwd2.exe' APP_MAIN_ICON_IWD2_FR_0='iwd2.exe' APP_MAIN_ICON_IWD2_EN_0='iwd2.exe' APP_CONFIG_ID_BG1="${GAME_ID_BG1}-config" APP_CONFIG_ID_BG2="${GAME_ID_BG2}-config" APP_CONFIG_ID_IWD1="${GAME_ID_IWD1}-config" APP_CONFIG_ID_IWD2="${GAME_ID_IWD2}-config" APP_CONFIG_NAME_BG1="$GAME_NAME_BG1 - configuration" APP_CONFIG_NAME_BG2="$GAME_NAME_BG2 - configuration" APP_CONFIG_NAME_IWD1="$GAME_NAME_IWD1 - configuration" APP_CONFIG_NAME_IWD2="$GAME_NAME_IWD2 - configuration" APP_CONFIG_EXE_BG1='config.exe' APP_CONFIG_EXE_BG2='bgconfig.exe' APP_CONFIG_EXE_IWD1='config.exe' APP_CONFIG_EXE_IWD2='config.exe' APP_CONFIG_CAT='Settings' PACKAGES_LIST=' PKG_BIN PKG_L10N PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_L10N_BASE PKG_DATA' PKG_L10N_BASE_ID_BG1="${GAME_ID_BG1}-l10n" PKG_L10N_BASE_ID_BG2="${GAME_ID_BG2}-l10n" PKG_L10N_BASE_ID_IWD1="${GAME_ID_IWD1}-l10n" PKG_L10N_BASE_ID_IWD2="${GAME_ID_IWD2}-l10n" PKG_L10N_BASE_ID_PST="${GAME_ID_PST}-l10n" PKG_L10N_ID_BG1_DE="${PKG_L10N_BASE_ID_BG1}-de" PKG_L10N_ID_BG1_FR="${PKG_L10N_BASE_ID_BG1}-fr" PKG_L10N_ID_BG1_PL="${PKG_L10N_BASE_ID_BG1}-pl" PKG_L10N_ID_BG1_EN="${PKG_L10N_BASE_ID_BG1}-en" PKG_L10N_ID_BG2_DE="${PKG_L10N_BASE_ID_BG2}-de" PKG_L10N_ID_BG2_FR="${PKG_L10N_BASE_ID_BG2}-fr" PKG_L10N_ID_BG2_EN="${PKG_L10N_BASE_ID_BG2}-en" PKG_L10N_ID_IWD1_DE="${PKG_L10N_BASE_ID_IWD1}-de" PKG_L10N_ID_IWD1_EN="${PKG_L10N_BASE_ID_IWD1}-en" PKG_L10N_ID_IWD2_DE="${PKG_L10N_BASE_ID_IWD2}-de" PKG_L10N_ID_IWD2_EN="${PKG_L10N_BASE_ID_IWD2}-en" PKG_L10N_ID_IWD2_FR="${PKG_L10N_BASE_ID_IWD2}-fr" PKG_L10N_ID_PST_DE="${PKG_L10N_BASE_ID_PST}-de" PKG_L10N_ID_PST_FR="${PKG_L10N_BASE_ID_PST}-fr" PKG_L10N_ID_PST_RU="${PKG_L10N_BASE_ID_PST}-ru" PKG_L10N_ID_PST_EN="${PKG_L10N_BASE_ID_PST}-en" PKG_L10N_PROVIDES_BG1=" $PKG_L10N_BASE_ID_BG1" PKG_L10N_PROVIDES_BG2=" $PKG_L10N_BASE_ID_BG2" PKG_L10N_PROVIDES_IWD1=" $PKG_L10N_BASE_ID_IWD1" PKG_L10N_PROVIDES_IWD2=" $PKG_L10N_BASE_ID_IWD2" PKG_L10N_PROVIDES_PST=" $PKG_L10N_BASE_ID_PST" PKG_L10N_DESCRIPTION_BG1_DE='German localisation' PKG_L10N_DESCRIPTION_BG1_FR='French localisation' PKG_L10N_DESCRIPTION_BG1_PL='Polish localisation' PKG_L10N_DESCRIPTION_BG1_EN='English localisation' PKG_L10N_DESCRIPTION_BG2_DE='German localisation' PKG_L10N_DESCRIPTION_BG2_FR='French localisation' PKG_L10N_DESCRIPTION_BG2_EN='English localisation' PKG_L10N_DESCRIPTION_IWD1_DE='German localisation' PKG_L10N_DESCRIPTION_IWD1_EN='English localisation' PKG_L10N_DESCRIPTION_IWD2_DE='German localisation' PKG_L10N_DESCRIPTION_IWD2_FR='French localisation' PKG_L10N_DESCRIPTION_IWD2_EN='English localisation' PKG_L10N_DESCRIPTION_PST_DE='German localisation' PKG_L10N_DESCRIPTION_PST_FR='French localisation' PKG_L10N_DESCRIPTION_PST_RU='Russian localisation' PKG_L10N_DESCRIPTION_PST_EN='English localisation' PKG_DATA_ID_BG1="${GAME_ID_BG1}-data" PKG_DATA_ID_BG2="${GAME_ID_BG2}-data" PKG_DATA_ID_IWD1="${GAME_ID_IWD1}-data" PKG_DATA_ID_IWD2="${GAME_ID_IWD2}-data" PKG_DATA_ID_PST="${GAME_ID_PST}-data" PKG_DATA_DESCRIPTION='data' # convmv is used to convert file paths to lower case. REQUIREMENTS_LIST=' convmv' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Convert all file paths to lower case, for easier mods support. tolower "$(path_archive_contents)" # Baldur's Gate 2 - Drop duplicated files. case "$(current_archive)" in ('ARCHIVE_BASE_BG2_'*) rm \ "$(path_archive_contents)/data/data/cd3crean.bif" \ "$(path_archive_contents)/data/data/cd4crea3.bif" if [ -e "$(path_archive_contents)/data/data/cdcreani.bif" ]; then mv \ "$(path_archive_contents)/data/data/cdcreani.bif" \ "$(path_archive_contents)/data/cdcreani.bif" fi ;; esac # Generate a minimal configuration file. case "$(current_archive)" in ('ARCHIVE_BASE_BG1_'*) config_name='baldur.ini' ;; ('ARCHIVE_BASE_BG2_'*) config_name='baldur.ini' ;; ('ARCHIVE_BASE_IWD1_'*) config_name='icewind.ini' ;; ('ARCHIVE_BASE_IWD2_'*) config_name='icewind2.ini' ;; ('ARCHIVE_BASE_PST_'*) config_name='torment.ini' ;; esac config_file="$(path_archive_contents)/${config_name}" game_path="C:\\$(game_id)" case "$(current_archive)" in ('ARCHIVE_BASE_BG1_'*) cat > "$config_file" <<- EOF [Alias] HD0:=${game_path}\\ CD1:=${game_path}\\data\\ CD2:=${game_path}\\data\\ CD3:=${game_path}\\data\\ CD4:=${game_path}\\data\\ CD5:=${game_path}\\data\\ CD6:=${game_path}\\data\\ EOF ;; ('ARCHIVE_BASE_BG2_'*) cat > "$config_file" <<- EOF [Alias] HD0:=${game_path}\\ CD1:=${game_path}\\data\\ CD2:=${game_path}\\data\\ CD3:=${game_path}\\data\\ CD4:=${game_path}\\data\\ CD5:=${game_path}\\data\\ CD6:=${game_path}\\data\\ EOF ;; ('ARCHIVE_BASE_IWD1_'*) cat > "$config_file" <<- EOF [Alias] HD0:=${game_path}\\ CD1:=${game_path}\\ CD2:=${game_path}\\cd2\\ CD3:=${game_path}\\cd3\\ EOF ;; ('ARCHIVE_BASE_IWD2_'*) cat > "$config_file" <<- EOF [Alias] HD0:=${game_path}\\ CD1:=${game_path}\\data\\ CD2:=${game_path}\\cd2\\ [Movies] INTRO=1 EOF ;; ('ARCHIVE_BASE_PST_'*) cat > "$config_file" <<- EOF [Alias] HD0:=${game_path}\\ CD1:=${game_path}\\data\\ CD2:=${game_path}\\data\\ CD3:=${game_path}\\data\\ CD4:=${game_path}\\data\\ CD5:=${game_path}\\data\\ EOF ;; esac # Run the game in a window by default. case "$(current_archive)" in ('ARCHIVE_BASE_PST_'*) # For Planescape: Torment a virtual desktop is used, # because the native windowed mode prevent the introduction movie from playing. # It is no affected by the flickering cursor bug described below. WINE_VIRTUAL_DESKTOP='640x480' full_screen='1' ;; (*) # The native windowed mode is used instead of a WINE virtual desktop, # as using a WINE virtual desktop would cause cursor flickering. # cf. https://bugs.winehq.org/show_bug.cgi?id=56986 # (WINE 9.13) # The lack of a WINE virtual desktop can cause loss of display and input on loss of focus, # but only when the game is running in fullscreen. # At least with Baldur's Gate 2, the cursor flickering can be avoided by enabling 3D acceleration. # (WINE 9.13) full_screen='0' ;; esac cat >> "$config_file" <<- EOF [Program Options] Full Screen=${full_screen} EOF # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Icewind Dale 2 - Install shipped libraries. case "$(current_archive)" in ('ARCHIVE_BASE_IWD2_'*) wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --symbolic "$dll_source" "$dll_destination" done EOF } ;; esac launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-jazz-jackrabbit-2-expansions.sh0000755000000000000000000001516414471751340017563 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2020 Antoine Le Gonidec set -o errexit ### # Jazz Jackrabbit 2 expansions: # - The Christmas Chronicles # - JJ2+ # send your bug reports to vv221@dotslashplay.it ### script_version=20260206.2 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='jazz-jackrabbit-2' GAME_NAME='Jazz Jackrabbit 2' EXPANSION_ID_CHRISTMAS='the-christmas-chronicles' EXPANSION_NAME_CHRISTMAS='The Christmas Chronicles' EXPANSION_ID_JJ2PLUS='jj2plus' EXPANSION_NAME_JJ2PLUS='JJ2+' ARCHIVE_BASE_CHRISTMAS_1_NAME='setup_jazz_jackrabbit_2_the_christmas_chronicles_1.2x_(16742).exe' ARCHIVE_BASE_CHRISTMAS_1_MD5='7ef514ecfdbbe321665b507b47f55fc5' ARCHIVE_BASE_CHRISTMAS_1_TYPE='innosetup' ARCHIVE_BASE_CHRISTMAS_1_SIZE='71308' ARCHIVE_BASE_CHRISTMAS_1_VERSION='1.2x-gog16742' ARCHIVE_BASE_CHRISTMAS_1_URL='https://www.gog.com/game/jazz_jackrabbit_2_collection' ARCHIVE_BASE_CHRISTMAS_0_NAME='setup_jazz_jackrabbit_2_cc_1.2x_(16742).exe' ARCHIVE_BASE_CHRISTMAS_0_MD5='3289263ea6bad8bc35f02176e22109f2' ARCHIVE_BASE_CHRISTMAS_0_TYPE='innosetup' ARCHIVE_BASE_CHRISTMAS_0_SIZE='70000' ARCHIVE_BASE_CHRISTMAS_0_VERSION='1.2x-gog16742' ARCHIVE_BASE_JJ2PLUS_1_NAME='setup_jazz_jackrabbit_2_1.24_jj2_(5.12)_(66703).exe' ARCHIVE_BASE_JJ2PLUS_1_MD5='e76181591367d1ad986a6dec22fa6f9f' ARCHIVE_BASE_JJ2PLUS_1_TYPE='innosetup' ARCHIVE_BASE_JJ2PLUS_1_SIZE='76618' ARCHIVE_BASE_JJ2PLUS_1_VERSION='1.24-gog66703' ARCHIVE_BASE_JJ2PLUS_1_URL='https://www.gog.com/game/jazz_jackrabbit_2_collection' ARCHIVE_BASE_JJ2PLUS_0_NAME='setup_jazz_jackrabbit_2_1.24_jj2_(5.9)_(46861).exe' ARCHIVE_BASE_JJ2PLUS_0_MD5='94f8477d51e35b4cdc6b3d999b502580' ARCHIVE_BASE_JJ2PLUS_0_TYPE='innosetup' ARCHIVE_BASE_JJ2PLUS_0_SIZE='78000' ARCHIVE_BASE_JJ2PLUS_0_VERSION='1.24-gog46861' CONTENT_PATH_DEFAULT='.' CONTENT_PATH_DEFAULT_CHRISTMAS_0='app' CONTENT_SOURCE_FILES_CHRISTMAS=' html/vssver.scc j2lc_easter.j2t j2lc_snoweaster.j2t tiles/haunt1.anm tiles/haunt1m.anm tiles/townhs1.anm tiles/townhs2.anm tiles/xmas1.anm tiles/xmas1m.anm tiles/xmas2.anm tiles/xmas3.anm xb-beaster.j2l xb-easter-d.j2l xb-kings-ea.j2l xb-wacky-ea.j2l xc-frightni.j2l xe-carrotiz.j2l xe-easter09.j2l xe-easter2.j2l xe-easter-b.j2l xe-easter.j2l xe-elves.j2l xmas1.j2l xmas1.j2m xmas2.j2l xmas2.j2m xmas3.j2l xmas3.j2m xmas99.j2e xmbattle1.j2l xmbattle2.j2l' CONTENT_SOURCE_FILES_JJ2PLUS=' 3rabi.j2s afrikaans.j2s allshields.mut doubledom.mut forcenormalpalette.mut jcshelp/atproperties.gif jcshelp/atproperties.htm jcshelp/backspace.gif jcshelp/b.gif jcshelp/c.gif jcshelp/control.gif jcshelp/delete.gif jcshelp/edestscenbare.gif jcshelp/edestscenery.htm jcshelp/edestscen.gif jcshelp/e.gif jcshelp/eight.gif jcshelp/eleven.gif jcshelp/enter.gif jcshelp/etriggerscenery.htm jcshelp/f.gif jcshelp/five.gif jcshelp/four.gif jcshelp/glossary.htm jcshelp/i.gif jcshelp/index.htm jcshelp/jazz2pal.gif jcshelp/key.gif jcshelp/layerproperties.htm jcshelp/layerprop.gif jcshelp/levelproperties.htm jcshelp/levelprop.gif jcshelp/nine.gif jcshelp/one.gif jcshelp/plus.gif jcshelp/setevent.gif jcshelp/setevent.htm jcshelp/seven.gif jcshelp/shift.gif jcshelp/six.gif jcshelp/space.gif jcshelp/srevents.gif jcshelp/srevents.htm jcshelp/tbanimtiles.gif jcshelp/tblayer.gif jcshelp/tbparallax.gif jcshelp/tbtiles.gif jcshelp/ten.gif jcshelp/t.gif jcshelp/three.gif jcshelp/tsbuildex.gif jcshelp/tsbuild.gif jcshelp/tsbuild.htm jcshelp/tsmanual.htm jcshelp/tsmask.gif jcshelp/tsorganizer.gif jcshelp/tsorganizer.htm jcshelp/tspal.htm jcshelp/tsproperties.gif jcshelp/tsproperties.htm jcshelp/tsstencil.gif jcshelp/tstiles.gif jcshelp/two.gif jcshelp/view_animtiles.htm jcshelp/view_layer.htm jcshelp/view_parallax.htm jcshelp/views.htm jcshelp/view_tiles.htm plus52scripting.j2as plus52scripting.j2l plusbutterfly.j2as plusbutterfly.j2l pluscharjump.j2as pluscharjump.j2l plusdomlevel.j2l plusfrlevel.j2l plus.j2a plus.j2d plusjblevel.j2l pluslayers.j2as pluslayers.j2l plusmusic.j2as plusmusic.j2l plusmusic.mo3 pluspalettes.j2as pluspalettes.j2l pluspixelmapex.j2as pluspixelmapex.j2l plusseasonsautumn.pal plusseasons.j2as plusseasons.j2l plusseasonssummer.pal plusseasonswinter.pal plustimerex.j2as plustimerex.j2l polski.j2s seenergyblast.asc seenergyblast.j2a seenergyblast.wav sefirework1.wav sefirework2.wav sefirework.asc sefirework.j2a sejtf.mut seroller.asc seroller.j2a seroller.wav seweapon.asc share1.j2m share2.j2m share3.j2m swedish.j2s tiles/readme.txt wsf01.j2t' CONTENT_DOC_MAIN_FILES_CHRISTMAS=' deutsch.pdf english.pdf espanol.pdf francois.pdf italiano.pdf nederlnd.pdf' CONTENT_DOC_MAIN_FILES_JJ2PLUS=' license.doc order.doc order_uk.doc plus-angelscript.html plus-readme.html' PKG_PARENT_ID="$GAME_ID" PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_PARENT' # Easier upgrades from pre-20250812.4 packages PKG_MAIN_PROVIDES_CHRISTMAS="${PKG_MAIN_PROVIDES_CHRISTMAS:-} jazz-jackrabbit-2-the-christmas-chronicles-bin jazz-jackrabbit-2-the-christmas-chronicles-data" PKG_MAIN_PROVIDES_JJ2PLUS="${PKG_MAIN_PROVIDES_JJ2PLUS:-} jazz-jackrabbit-2-jj2plus-bin jazz-jackrabbit-2-jj2plus-data" # Load common functions. # Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Scan library paths used by ./play.it < 2.35. # This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. option_package=$(option_value 'package') case "$option_package" in ('deb') PATH_JAZZ2='/usr/share/games/jazz2-native' ;; ('gentoo') PATH_JAZZ2='/usr/share/jazz2' ;; (*) PATH_JAZZ2='/usr/share/Jazz² Resurrection' ;; esac content_inclusion 'SOURCE' 'PKG_MAIN' "${PATH_JAZZ2}/Source" content_inclusion_default # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-jazz-jackrabbit-2.sh0000755000000000000000000000612114471751340015367 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2020 Antoine Le Gonidec set -o errexit ### # Jazz Jackrabbit 2 # send your bug reports to vv221@dotslashplay.it ### script_version=20260224.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='jazz-jackrabbit-2' GAME_NAME='Jazz Jackrabbit 2' ARCHIVE_BASE_2_NAME='setup_jazz_jackrabbit_2_1.24hf_(16886).exe' ARCHIVE_BASE_2_MD5=' 25a730c0813eb006555e6bbaf9613487 45be80bad040ea821bc6096abe6f3196 48a48258ed60b24068cbbb2f110b049b' ARCHIVE_BASE_2_TYPE='innosetup' ARCHIVE_BASE_2_SIZE='66354' ARCHIVE_BASE_2_VERSION='1.24-gog16886' ARCHIVE_BASE_2_URL='https://www.gog.com/game/jazz_jackrabbit_2_collection' CONTENT_PATH_DEFAULT='.' CONTENT_PATH_DEFAULT_0='app' CONTENT_SOURCE_FILES=' html jcshelp tiles userlevels *.asc *.it *.j2? *.j2as *.mo3 *.mod *.mut *.pal *.s3m *.wav' CONTENT_DOC_MAIN_FILES=' license.txt readme.txt' APPLICATIONS_PREFIX_TYPE='none' APP_MAIN_TYPE='custom' APP_MAIN_ICON='jazz2.exe' PKG_MAIN_DEPENDENCIES_COMMANDS=' jazz2' # Easier upgrades from pre-20250812.1 packages PKG_MAIN_PROVIDES="${PKG_MAIN_PROVIDES:-} jazz-jackrabbit-2-bin jazz-jackrabbit-2-data" # Load common functions. # Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Scan library paths used by ./play.it < 2.35. # This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Prevent inclusion of a file that would break The Christmas Chronicles expansion. rm "${PLAYIT_WORKDIR}/gamedata/$(content_path_default)/xmas1.j2l" # Include game data. content_inclusion_icons option_package=$(option_value 'package') case "$option_package" in ('deb') PATH_JAZZ2='/usr/share/games/jazz2-native' ;; ('gentoo') PATH_JAZZ2='/usr/share/jazz2' ;; (*) PATH_JAZZ2='/usr/share/Jazz² Resurrection' ;; esac content_inclusion 'SOURCE' 'PKG_MAIN' "${PATH_JAZZ2}/Source" content_inclusion_default # Write launchers. custom_launcher() { launcher_headers cat <<- 'EOF' jazz2 "$@" EOF launcher_exit } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-kathy-rain-series.sh0000755000000000000000000000755014471751340015526 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2023 Antoine Le Gonidec set -o errexit ### # Kathy Rain series: # - Kathy Rain # - Kathy Rain 2: Soothsayer # send your bug reports to vv221@dotslashplay.it ### script_version=20260104.2 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID_ORIGINAL='kathy-rain-1' GAME_NAME_ORIGINAL='Kathy Rain' GAME_ID_SOOTHSAYER='kathy-rain-2' GAME_NAME_SOOTHSAYER='Kathy Rain 2: Soothsayer' ARCHIVE_BASE_ORIGINAL_1_NAME='kathy_rain_director_s_cut_v_1_0_3_5273_85596.sh' ARCHIVE_BASE_ORIGINAL_1_MD5='9be4eefbedfcabc50ce385661a84b3f1' ARCHIVE_BASE_ORIGINAL_1_SIZE='842602' ARCHIVE_BASE_ORIGINAL_1_VERSION='1.0.3.5273-gog85596' ARCHIVE_BASE_ORIGINAL_1_URL='https://www.gog.com/game/kathy_rain_directors_cut' ARCHIVE_BASE_ORIGINAL_0_NAME='kathy_rain_director_s_cut_v_1_0_3_5225_53868.sh' ARCHIVE_BASE_ORIGINAL_0_MD5='0bcbe5aa3508431c685b8ecd1617d560' ARCHIVE_BASE_ORIGINAL_0_SIZE='842486' ARCHIVE_BASE_ORIGINAL_0_VERSION='1.0.3.5225-gog53868' ARCHIVE_BASE_SOOTHSAYER_0_NAME='kathy_rain_2_soothsayer_4089_82456.sh' ARCHIVE_BASE_SOOTHSAYER_0_MD5='886b73b2d10088df60ed5102adb32a56' ARCHIVE_BASE_SOOTHSAYER_0_SIZE='3224799' ARCHIVE_BASE_SOOTHSAYER_0_VERSION='1.0.3.4089-gog82456' ARCHIVE_BASE_SOOTHSAYER_0_URL='https://www.gog.com/game/kathy_rain_2_soothsayer' UNITY3D_NAME_ORIGINAL='KathyRainDirectorsCut' UNITY3D_NAME_SOOTHSAYER='KathyRain2' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME0_BIN_FILES_ORIGINAL=" ${UNITY3D_NAME_ORIGINAL}.x64" CONTENT_GAME0_BIN_FILES_SOOTHSAYER=" ${UNITY3D_NAME_SOOTHSAYER}.x64" ## These games use a non-standard binary name. APP_MAIN_EXE_ORIGINAL="${UNITY3D_NAME_ORIGINAL}.x64" APP_MAIN_EXE_SOOTHSAYER="${UNITY3D_NAME_SOOTHSAYER}.x64" PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libgcc_s.so.1 libm.so.6 libpthread.so.0 librt.so.1 libz.so.1' ## Easier upgrades from pre-20250531.1 packages PKG_BIN_PROVIDES_ORIGINAL="${PKG_BIN_PROVIDES_ORIGINAL:-} kathy-rain" PKG_DATA_ID_ORIGINAL="${GAME_ID_ORIGINAL}-data" PKG_DATA_ID_SOOTHSAYER="${GAME_ID_SOOTHSAYER}-data" PKG_DATA_DESCRIPTION='data' ## Easier upgrades from pre-20250531.1 packages PKG_DATA_PROVIDES_ORIGINAL="${PKG_DATA_PROVIDES_ORIGINAL:-} kathy-rain-data" # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. ## Prevent inclusion of shipped Steam library. rm --recursive "${PLAYIT_WORKDIR}/gamedata/$(content_path_default)/$(unity3d_name)_Data/Plugins" content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-kingdom-rush-series.sh0000755000000000000000000001053214471751340016060 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec set -o errexit ### # Kingdom Rush series: # - Kingdom Rush # - Kingdom Rush: Frontiers # - Kingdom Rush: Origins # send your bug reports to vv221@dotslashplay.it ### script_version=20251231.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID_ORIGINAL='kingdom-rush' GAME_NAME_ORIGINAL='Kingdom Rush' GAME_ID_FRONTIERS='kingdom-rush-frontiers' GAME_NAME_FRONTIERS='Kingdom Rush: Frontiers' GAME_ID_ORIGINS='kingdom-rush-origins' GAME_NAME_ORIGINS='Kingdom Rush: Origins' ## Kingdom Rush (original game) ARCHIVE_BASE_ORIGINAL_2_NAME='kingdom_rush_5_6_12_52189.sh' ARCHIVE_BASE_ORIGINAL_2_MD5='ca0bd3ede3d5768d51b66c366d4c68cb' ARCHIVE_BASE_ORIGINAL_2_SIZE='378545' ARCHIVE_BASE_ORIGINAL_2_VERSION='5.6.12-gog52189' ARCHIVE_BASE_ORIGINAL_2_URL='https://www.gog.com/game/kingdom_rush' ARCHIVE_BASE_ORIGINAL_1_NAME='kingdom_rush_4_2_33_43930.sh' ARCHIVE_BASE_ORIGINAL_1_MD5='1423a27078042c5fc9d7ee45d06a5744' ARCHIVE_BASE_ORIGINAL_1_SIZE='380000' ARCHIVE_BASE_ORIGINAL_1_VERSION='4.2.33-gog43930' ARCHIVE_BASE_ORIGINAL_0_NAME='kingdom_rush_4_2_15_40260.sh' ARCHIVE_BASE_ORIGINAL_0_MD5='025031489b81493e3816e077ab62214a' ARCHIVE_BASE_ORIGINAL_0_SIZE='380000' ARCHIVE_BASE_ORIGINAL_0_VERSION='4.2.15-gog40260' ## Kingdom Rush: Frontiers ARCHIVE_BASE_FRONTIERS_0_NAME='kingdom_rush_frontiers_4_2_33_43930.sh' ARCHIVE_BASE_FRONTIERS_0_MD5='6e00968ec07cec1bbafd8c43ed4416cb' ARCHIVE_BASE_FRONTIERS_0_SIZE='449652' ARCHIVE_BASE_FRONTIERS_0_VERSION='4.2.33-gog43930' ARCHIVE_BASE_FRONTIERS_0_URL='https://www.gog.com/game/kingdom_rush_frontiers' ## Kingdom Rush: Origins ARCHIVE_BASE_ORIGINS_0_NAME='kingdom_rush_origins_4_2_15_40260.sh' ARCHIVE_BASE_ORIGINS_0_MD5='864fb8a387081304df1d0674c40d718e' ARCHIVE_BASE_ORIGINS_0_SIZE='497827' ARCHIVE_BASE_ORIGINS_0_VERSION='4.2.15-gog40260' ARCHIVE_BASE_ORIGINS_0_URL='https://www.gog.com/game/kingdom_rush_origins' CONTENT_PATH_DEFAULT='data/noarch/game' ## System-provided love2d runtime can not be used, it crashes on launch with the following error: ## Error: [love "boot.lua"]:276: Syntax error: conf.lua: cannot load incompatible bytecode CONTENT_LIBS_MAIN_FILES=' liblove.so.0' ## System-provided libluajit-5.1.so.2 can not be used, as it triggers a crash on launch. CONTENT_LIBS0_MAIN_FILES=' libluajit-5.1.so.2' CONTENT_GAME_MAIN_FILES=' icon.png Kingdom Rush Kingdom Rush Frontiers Kingdom Rush Origins' CONTENT_DOC_MAIN_PATH=' license-kr-desktop.txt' APP_MAIN_EXE_ORIGINAL='Kingdom Rush' APP_MAIN_EXE_FRONTIERS='Kingdom Rush Frontiers' APP_MAIN_EXE_ORIGINS='Kingdom Rush Origins' APP_MAIN_ICON='icon.png' PKG_MAIN_ARCH='64' PKG_MAIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libfreetype.so.6 libgcc_s.so.1 libmodplug.so.1 libmpg123.so.0 libm.so.6 libogg.so.0 libopenal.so.1 libphysfs.so.1 libpthread.so.0 librt.so.1 libSDL2-2.0.so.0 libstdc++.so.6 libtheoradec.so.1 libvorbisfile.so.3 libvorbis.so.0 libz.so.1' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons content_inclusion_default # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-little-inferno-expansions.sh0000755000000000000000000000443414471751340017305 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2017 Antoine Le Gonidec set -o errexit ### # Little Inferno expansions: # - Ho Ho Holiday # send your bug reports to vv221@dotslashplay.it ### script_version=20251231.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='little-inferno' GAME_NAME='Little Inferno' EXPANSION_ID_HOHOHOLIDAY='ho-ho-holiday' EXPANSION_NAME_HOHOHOLIDAY='Ho Ho Holiday' ## Ho Ho Holiday ARCHIVE_BASE_HOHOHOLIDAY_0_NAME='LittleInfernoHoHoHoliday-Linux-2022-12-07.sh' ARCHIVE_BASE_HOHOHOLIDAY_0_MD5='7124105953b1a899f239a0fdbd492458' ARCHIVE_BASE_HOHOHOLIDAY_0_SIZE='381' ARCHIVE_BASE_HOHOHOLIDAY_0_VERSION='1.0-humble.2022.12.07' ARCHIVE_BASE_HOHOHOLIDAY_0_URL='http://tomorrowcorporation.com/littleinferno#hohoholiday' CONTENT_PATH_DEFAULT='data/noarch' CONTENT_GAME_MAIN_FILES=' .tcgame-4097.info' PKG_PARENT_ID="$GAME_ID" PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_PARENT' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_default # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-little-inferno.sh0000755000000000000000000000733614471751340015124 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2018 VA # SPDX-FileCopyrightText: © 2022 Antoine Le Gonidec set -o errexit ### # Little Inferno # send your bug reports to vv221@dotslashplay.it ### script_version=20260322.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='little-inferno' GAME_NAME='Little Inferno' ARCHIVE_BASE_LINUX_0_NAME='LittleInferno_Linux_v2.0.3.sh' ARCHIVE_BASE_LINUX_0_MD5='2d104de7966405f905d36bfbc7722808' ARCHIVE_BASE_LINUX_0_SIZE='274737' ARCHIVE_BASE_LINUX_0_VERSION='2.0.3-humble.2022.12.08' ARCHIVE_BASE_LINUX_0_URL='https://www.humblebundle.com/store/little-inferno' # Support for the Windows build is provided as a workaround for the following Mesa bug: # https://gitlab.freedesktop.org/mesa/mesa/-/issues/7903 ARCHIVE_BASE_WINDOWS_0_NAME='LittleInferno_Windows_2.0.3.msi' ARCHIVE_BASE_WINDOWS_0_MD5='09c79a41f0796642cc2c3e87d99b131e' ARCHIVE_BASE_WINDOWS_0_SIZE='320837' ARCHIVE_BASE_WINDOWS_0_VERSION='2.0.3-humble.2022.12.08' ARCHIVE_BASE_WINDOWS_0_URL='https://www.humblebundle.com/store/little-inferno' CONTENT_PATH_DEFAULT_LINUX='data' CONTENT_PATH_DEFAULT_WINDOWS='program files/little inferno' CONTENT_GAME_BIN_RELATIVE_PATH_LINUX='x86_64' CONTENT_GAME_BIN_FILES_LINUX=' LittleInferno.bin.x86_64' CONTENT_GAME_BIN_FILES_WINDOWS=' Little Inferno.exe' CONTENT_GAME_DATA_RELATIVE_PATH_LINUX='noarch' CONTENT_GAME_DATA_FILES_LINUX=' shaders .tc-edition icon.png *.pak' CONTENT_DOC_DATA_RELATIVE_PATH_LINUX='noarch' CONTENT_DOC_DATA_FILES_LINUX=' LICENSE.txt README.linux' CONTENT_DOC_DATA_FILES_WINDOWS=' readme.html' WINE_PERSISTENT_DIRECTORIES=' users/${USER}/AppData/Roaming/Little Inferno' # When playing the Linux native build with Mesa, the game might be shown as a black screen or be full of black artifacts. # Switching out of fullscreen then back to it with the F key might help in mitigating the rendering issues. # A bug report has been sent to Mesa developers: https://gitlab.freedesktop.org/mesa/mesa/-/issues/7903 APP_MAIN_EXE_LINUX='LittleInferno.bin.x86_64' APP_MAIN_EXE_WINDOWS='little inferno.exe' APP_MAIN_ICON_LINUX='noarch/icon.png' PACKAGES_LIST_LINUX=' PKG_BIN PKG_DATA' PACKAGES_LIST_WINDOWS=' PKG_BIN' PKG_BIN_ID="$GAME_ID" PKG_BIN_ID_LINUX="${PKG_BIN_ID}-linux" PKG_BIN_ID_WINDOWS="${PKG_BIN_ID}-windows" PKG_BIN_PROVIDES=" $PKG_BIN_ID" PKG_BIN_ARCH_LINUX='64' PKG_BIN_ARCH_WINDOWS='32' PKG_BIN_DEPENDENCIES_SIBLINGS_LINUX=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES_LINUX=' libc.so.6 libgcc_s.so.1 libm.so.6 libopenal.so.1 libpthread.so.0 libSDL2-2.0.so.0 libstdc++.so.6' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_ID_LINUX="${PKG_DATA_ID}-linux" PKG_DATA_PROVIDES=" $PKG_DATA_ID" PKG_DATA_DESCRIPTION='data' # The Windows build is handled as a single package. PKG_BIN_PROVIDES_WINDOWS="$PKG_BIN_PROVIDES $PKG_DATA_ID" # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. case "$(current_archive)" in ('ARCHIVE_BASE_LINUX_'*) content_inclusion_icons 'PKG_DATA' ;; ('ARCHIVE_BASE_WINDOWS_'*) content_inclusion_icons ;; esac content_inclusion_default # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-loop-hero.sh0000755000000000000000000000576314471751340014077 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2021 Antoine Le Gonidec set -o errexit ### # Loop Hero # send your bug reports to vv221@dotslashplay.it ### script_version=20260103.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='loop-hero' GAME_NAME='Loop Hero' ARCHIVE_BASE_2_NAME='loop_hero_1_1054_55873.sh' ARCHIVE_BASE_2_MD5='28197c34cb00548770b6878f95f69b89' ARCHIVE_BASE_2_SIZE='220000' ARCHIVE_BASE_2_VERSION='1.1054-gog55873' ARCHIVE_BASE_2_URL='https://www.gog.com/game/loop_hero' ARCHIVE_BASE_1_NAME='loop_hero_1_105_50560.sh' ARCHIVE_BASE_1_MD5='7ce0680d3dc6d945b0db0e3719addb21' ARCHIVE_BASE_1_SIZE='160000' ARCHIVE_BASE_1_VERSION='1.105-gog50560' ARCHIVE_BASE_0_NAME='loop_hero_1_102_48813.sh' ARCHIVE_BASE_0_MD5='fc860d85d59d02360d2d6aeb57cc8538' ARCHIVE_BASE_0_SIZE='160000' ARCHIVE_BASE_0_VERSION='1.102-gog48813' GAME_ENGINE='gamemaker' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME_BIN_FILES=' Loop_Hero' APP_MAIN_EXE='Loop_Hero' PKG_BIN_ARCH='64' ## The default list for GameMaker can not be used: ## + libcurl.so.4 ## + libssl.so.1.1 ## - libssl.so.1.0.0 PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libcurl.so.4 libdl.so.2 libgcc_s.so.1 libGL.so.1 libGLU.so.1 libm.so.6 libopenal.so.1 libpthread.so.0 librt.so.1 libssl.so.1.1 libstdc++.so.6 libX11.so.6 libXext.so.6 libXrandr.so.2 libXxf86vm.so.1 libz.so.1' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. ## Prevent inclusion of shipped libraries. rm --recursive \ "${PLAYIT_WORKDIR}/gamedata/$(content_path_default)/assets/linuxlibs" \ "${PLAYIT_WORKDIR}/gamedata/$(content_path_default)/assets/drago.dll" content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-mask-of-the-rose-expansions.sh0000755000000000000000000000641414471751340017433 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2017 Antoine Le Gonidec set -o errexit ### # Mask of the Rose expansions: # - The Murder Crow # send your bug reports to vv221@dotslashplay.it ### script_version=20251223.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='mask-of-the-rose' GAME_NAME='Mask of the Rose' EXPANSION_ID_CROW='murder-crow' EXPANSION_NAME_CROW='The Murder Crow' ## The Murder Crow ARCHIVE_BASE_CROW_5_NAME='mask_of_the_rose_the_murder_crow_1_6_1043_linux_70837.sh' ARCHIVE_BASE_CROW_5_MD5='1e492aad8f1b246055c485c924fb607b' ARCHIVE_BASE_CROW_5_SIZE='999' ARCHIVE_BASE_CROW_5_VERSION='1.6.1043-gog70837' ARCHIVE_BASE_CROW_4_NAME='mask_of_the_rose_the_murder_crow_1_6_1024_linux_70649.sh' ARCHIVE_BASE_CROW_4_MD5='f6b9cd36e7c57a775170d6953eeff7e2' ARCHIVE_BASE_CROW_4_SIZE='999' ARCHIVE_BASE_CROW_4_VERSION='1.6.1024-gog70649' ARCHIVE_BASE_CROW_3_NAME='mask_of_the_rose_the_murder_crow_1_5_943_linux_68850.sh' ARCHIVE_BASE_CROW_3_MD5='d528ab03cbfb76463b5c49774de1be0e' ARCHIVE_BASE_CROW_3_SIZE='1300' ARCHIVE_BASE_CROW_3_VERSION='1.5.943-gog68850' ARCHIVE_BASE_CROW_2_NAME='mask_of_the_rose_the_murder_crow_1_4_835_linux_66472.sh' ARCHIVE_BASE_CROW_2_MD5='1141e6eb61e618486cfe01d78bc2db90' ARCHIVE_BASE_CROW_2_SIZE='1300' ARCHIVE_BASE_CROW_2_VERSION='1.4.835-gog66472' ARCHIVE_BASE_CROW_1_NAME='mask_of_the_rose_the_murder_crow_1_3_765_linux_65488.sh' ARCHIVE_BASE_CROW_1_MD5='93ea92a56956663cd42b66ea9b04820a' ARCHIVE_BASE_CROW_1_SIZE='1300' ARCHIVE_BASE_CROW_1_VERSION='1.3.765-gog65488' ARCHIVE_BASE_CROW_0_NAME='mask_of_the_rose_the_murder_crow_1_2_666_linux_65143.sh' ARCHIVE_BASE_CROW_0_MD5='43b3b6e5025d8b2521f4d72c337aff3c' ARCHIVE_BASE_CROW_0_SIZE='1300' ARCHIVE_BASE_CROW_0_VERSION='1.2.666-gog65143' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME_MAIN_FILES=' goggame-1879903382.info' PKG_PARENT_ID="$GAME_ID" PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_PARENT' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_default # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-mask-of-the-rose.sh0000755000000000000000000000754714471751340015256 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2022 Mopi # SPDX-FileCopyrightText: © 2023 Antoine Le Gonidec set -o errexit ### # Mask of the Rose # send your bug reports to vv221@dotslashplay.it ### script_version=20260104.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='mask-of-the-rose' GAME_NAME='Mask of the Rose' GAME_ID_DEMO="${GAME_ID}-demo" GAME_NAME_DEMO="$GAME_NAME (demo)" ARCHIVE_BASE_5_NAME='mask_of_the_rose_1_6_1043_linux_70837.sh' ARCHIVE_BASE_5_MD5='f7fc5f6adb0621cc0c3560658de3f372' ARCHIVE_BASE_5_SIZE='2674740' ARCHIVE_BASE_5_VERSION='1.6.1043-gog70837' ARCHIVE_BASE_5_URL='https://www.gog.com/game/mask_of_the_rose' ARCHIVE_BASE_4_NAME='mask_of_the_rose_1_6_1024_linux_70649.sh' ARCHIVE_BASE_4_MD5='6342815fe4de7b9e2998d6563e27ec6f' ARCHIVE_BASE_4_SIZE='2674723' ARCHIVE_BASE_4_VERSION='1.6.1024-gog70649' ARCHIVE_BASE_3_NAME='mask_of_the_rose_1_5_943_linux_68850.sh' ARCHIVE_BASE_3_MD5='950ad3b9a759c4c21fd31b155cb85f2c' ARCHIVE_BASE_3_SIZE='2676548' ARCHIVE_BASE_3_VERSION='1.5.943-gog68850' ARCHIVE_BASE_2_NAME='mask_of_the_rose_1_4_835_linux_66472.sh' ARCHIVE_BASE_2_MD5='2b132223cfe6558d100b1edc410be00a' ARCHIVE_BASE_2_SIZE='2700000' ARCHIVE_BASE_2_VERSION='1.4.835-gog66472' ARCHIVE_BASE_1_NAME='mask_of_the_rose_1_3_765_linux_65488.sh' ARCHIVE_BASE_1_MD5='d793ec177ee72e9ea04c025775896842' ARCHIVE_BASE_1_SIZE='2700000' ARCHIVE_BASE_1_VERSION='1.3.765-gog65488' ARCHIVE_BASE_0_NAME='mask_of_the_rose_1_2_666_linux_65143.sh' ARCHIVE_BASE_0_MD5='5c9b396ead2343237ff588f9ad784cff' ARCHIVE_BASE_0_SIZE='2700000' ARCHIVE_BASE_0_VERSION='1.2.666-gog65143' ## This game demo is no longer available from GOG. ARCHIVE_BASE_DEMO_0_NAME='mask_of_the_rose_demo_0_1_94_56552.sh' ARCHIVE_BASE_DEMO_0_MD5='81da92a188178423523e0d1f1251e094' ARCHIVE_BASE_DEMO_0_SIZE='1500000' ARCHIVE_BASE_DEMO_0_VERSION='0.1.94-gog56552' UNITY3D_NAME='Mask of the Rose' UNITY3D_NAME_DEMO='Mask of the Rose Demo' CONTENT_PATH_DEFAULT='data/noarch/game' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libgcc_s.so.1 libm.so.6 libpthread.so.0 librt.so.1 libz.so.1' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_ID_DEMO="${GAME_ID_DEMO}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. ## Prevent inclusion of unused shipped libraries. rm --force --recursive "${PLAYIT_WORKDIR}/gamedata/$(content_path_default)/$(unity3d_name)_Data/Plugins" content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-monkey-island-3.sh0000755000000000000000000001124514471751340015075 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2018 Mopi # SPDX-FileCopyrightText: © 2018 Antoine Le Gonidec set -o errexit ### # Monkey Island 3 # send your bug reports to vv221@dotslashplay.it ### script_version=20260104.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='monkey-island-3' GAME_NAME='Monkey Island 3: The Curse of Monkey Island' ARCHIVE_BASE_FR_2_NAME='setup_the_curse_of_monkey_islandtm_1.0l_(french)_(20627).exe' ARCHIVE_BASE_FR_2_MD5='2999c1f94902ce2093347f4f53adb14f' ARCHIVE_BASE_FR_2_TYPE='innosetup' ARCHIVE_BASE_FR_2_PART1_NAME='setup_the_curse_of_monkey_islandtm_1.0l_(french)_(20627)-1.bin' ARCHIVE_BASE_FR_2_PART1_MD5='9431d663d5264b41e03118cdad24f217' ARCHIVE_BASE_FR_2_SIZE='1238398' ARCHIVE_BASE_FR_2_VERSION='1.0l-gog20627' ARCHIVE_BASE_FR_2_URL='https://www.gog.com/game/the_curse_of_monkey_island' ARCHIVE_BASE_EN_2_NAME='setup_the_curse_of_monkey_islandtm_1.0l_(20627).exe' ARCHIVE_BASE_EN_2_MD5='42de5e8ca7f26eb8350db318430d24a1' ARCHIVE_BASE_EN_2_TYPE='innosetup' ARCHIVE_BASE_EN_2_PART1_NAME='setup_the_curse_of_monkey_islandtm_1.0l_(20627)-1.bin' ARCHIVE_BASE_EN_2_PART1_MD5='1f89d0a37bd2e82361b11cff176daf90' ARCHIVE_BASE_EN_2_SIZE='1224692' ARCHIVE_BASE_EN_2_VERSION='1.0l-gog20627' ARCHIVE_BASE_EN_2_URL='https://www.gog.com/game/the_curse_of_monkey_island' ARCHIVE_BASE_FR_1_NAME='setup_the_curse_of_monkey_islandtm_1.0l_(french)_(20628).exe' ARCHIVE_BASE_FR_1_MD5='a0ebaa26154de4a76d20b0ef882445cf' ARCHIVE_BASE_FR_1_TYPE='innosetup' ARCHIVE_BASE_FR_1_PART1_NAME='setup_the_curse_of_monkey_islandtm_1.0l_(french)_(20628)-1.bin' ARCHIVE_BASE_FR_1_PART1_MD5='10356610b119b917dbba13df9ed207a5' ARCHIVE_BASE_FR_1_SIZE='1200000' ARCHIVE_BASE_FR_1_VERSION='1.0l-gog20628' ARCHIVE_BASE_EN_1_NAME='setup_the_curse_of_monkey_islandtm_1.0l_(20628).exe' ARCHIVE_BASE_EN_1_MD5='fcd4a7cd9c0304c15a0a059f6eb299e8' ARCHIVE_BASE_EN_1_TYPE='innosetup' ARCHIVE_BASE_EN_1_PART1_NAME='setup_the_curse_of_monkey_islandtm_1.0l_(20628)-1.bin' ARCHIVE_BASE_EN_1_PART1_MD5='931e6e35fdc7e0a14f2559984620f8f3' ARCHIVE_BASE_EN_1_SIZE='1200000' ARCHIVE_BASE_EN_1_VERSION='1.0l-gog20628' ARCHIVE_BASE_EN_0_NAME='setup_the_curse_of_monkey_island_1.0_(18253).exe' ARCHIVE_BASE_EN_0_MD5='20c74e5f60bd724182ec2bdbae6d9a49' ARCHIVE_BASE_EN_0_TYPE='innosetup' ARCHIVE_BASE_EN_0_SIZE='1200000' ARCHIVE_BASE_EN_0_VERSION='1.0-gog18253' CONTENT_PATH_DEFAULT='.' CONTENT_PATH_DEFAULT_EN_0='app' CONTENT_GAME_L10N_FILES=' resource/bbsan.san resource/curserng.san resource/finale.san resource/language.tab resource/lavaride.san resource/liftcrse.san resource/moreslaw.san resource/newboots.san resource/opening.san resource/sinkshp.san resource/voxdisk1.bun resource/voxdisk2.bun resource/wrecksan.san' CONTENT_GAME_MAIN_FILES=' comi.la? resource' CONTENT_DOC_L10N_FILES=' *.pdf' APP_MAIN_SCUMMID='scumm:comi' APP_MAIN_ICON='app/goggame-1528148981.ico' APP_MAIN_ICON_EN_0='goggame-1528148981.ico' PACKAGES_LIST=' PKG_L10N PKG_MAIN' PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_L10N_BASE' PKG_L10N_BASE_ID="${GAME_ID}-l10n" PKG_L10N_ID_FR="${PKG_L10N_BASE_ID}-fr" PKG_L10N_ID_EN="${PKG_L10N_BASE_ID}-en" PKG_L10N_PROVIDES=" $PKG_L10N_BASE_ID" PKG_L10N_DESCRIPTION_FR='French localisation' PKG_L10N_DESCRIPTION_EN='English localisation' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" set_default_package 'PKG_MAIN' # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons content_inclusion_default # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-monkey-island-4.sh0000755000000000000000000001357114471751340015102 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2020 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2020 macaron set -o errexit ### # Monkey Island 4 # send your bug reports to vv221@dotslashplay.it ### script_version=20260322.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='monkey-island-4' GAME_NAME='Monkey Island 4: Escape from Monkey Island' # Monkey Island 4 (game installer) ARCHIVE_BASE_FR_0_NAME='setup_escape_from_monkey_islandtm_1.1_(french)_(20987).exe' ARCHIVE_BASE_FR_0_MD5='5ca039d42d53ad7fe206b289abe15deb' ARCHIVE_BASE_FR_0_TYPE='innosetup' ARCHIVE_BASE_FR_0_PART1_NAME='setup_escape_from_monkey_islandtm_1.1_(french)_(20987)-1.bin' ARCHIVE_BASE_FR_0_PART1_MD5='c5bf233f09cca2a8e33d78d25cf58329' ARCHIVE_BASE_FR_0_SIZE='1300000' ARCHIVE_BASE_FR_0_VERSION='1.1-gog20987' ARCHIVE_BASE_FR_0_URL='https://www.gog.com/game/escape_from_monkey_island' ARCHIVE_BASE_EN_0_NAME='setup_escape_from_monkey_islandtm_1.1_(20987).exe' ARCHIVE_BASE_EN_0_MD5='54978965b60294d5c1639b71c0a8159a' ARCHIVE_BASE_EN_0_TYPE='innosetup' ARCHIVE_BASE_EN_0_PART1_NAME='setup_escape_from_monkey_islandtm_1.1_(20987)-1.bin' ARCHIVE_BASE_EN_0_PART1_MD5='21bc4e362f73b76e6808649167ee9d20' ARCHIVE_BASE_EN_0_SIZE='1300000' ARCHIVE_BASE_EN_0_VERSION='1.1-gog20987' ARCHIVE_BASE_EN_0_URL='https://www.gog.com/game/escape_from_monkey_island' # ScummVM patches ARCHIVE_REQUIRED_PATCH_FR_NAME='MonkeyUpdate_FRA.exe' ARCHIVE_REQUIRED_PATCH_FR_MD5='cc5ff3bb8f78a0eb4b8e0feb9cdd2e87' ARCHIVE_REQUIRED_PATCH_FR_URL='https://downloads.scummvm.org/frs/extras/patches/' ARCHIVE_REQUIRED_PATCH_EN_NAME='MonkeyUpdate.exe' ARCHIVE_REQUIRED_PATCH_EN_MD5='7c7dbd2349d49e382a2dea40bed448e0' ARCHIVE_REQUIRED_PATCH_EN_URL='https://downloads.scummvm.org/frs/extras/patches/' CONTENT_PATH_DEFAULT='.' # TODO: Check if all these binaries are required. CONTENT_GAME_BIN_WINE_FILES=' Monkey.exe Monkey4.exe syscheck.exe' # monkey4.exe requirements CONTENT_LIBS_BIN_WINE_FILES=' Mss32.dll binkw32.dll' CONTENT_GAME0_BIN_WINE_FILES=' Mp3dec.asi Chorus.flt Reverb3.flt Sdelay.flt' CONTENT_GAME1_BIN_WINE_PATH='__support/save' CONTENT_GAME1_BIN_WINE_FILES=' Saves' CONTENT_GAME_L10N_FILES=' Movies art???.m4b i9n.m4b lip.m4b voice???.m4b' CONTENT_GAME_DATA_FILES=' Textures local.m4b patch.m4b sfx.m4b' CONTENT_DOC_L10N_FILES=' HintBook.pdf Manual.pdf license.txt readme.txt Update1_1.txt' USER_PERSISTENT_DIRECTORIES=' Saves' install_path="C:\\\\${GAME_ID}" WINE_REGISTRY_INIT=' [HKEY_LOCAL_MACHINE\Software\LucasArts Entertainment Company LLC\Monkey4\Retail] "Install path"="'"${install_path}"'" ' # TODO: Check if/why a virtual desktop is required. WINE_VIRTUAL_DESKTOP='auto' APP_SCUMMVM_SCUMMID='grim:monkey4' APP_SCUMMVM_ICON='Monkey4.exe' APP_WINE_EXE='Monkey4.exe' PACKAGES_LIST=' PKG_BIN_SCUMMVM PKG_BIN_WINE PKG_L10N PKG_DATA' PKG_BIN_BASE_ID="$GAME_ID" PKG_BIN_SCUMMVM_BASE_ID="${PKG_BIN_BASE_ID}-scummvm" PKG_BIN_SCUMMVM_ID_FR="${PKG_BIN_SCUMMVM_BASE_ID}-fr" PKG_BIN_SCUMMVM_ID_EN="${PKG_BIN_SCUMMVM_BASE_ID}-en" PKG_BIN_SCUMMVM_PROVIDES=" $PKG_BIN_BASE_ID" PKG_BIN_SCUMMVM_DESCRIPTION_FR='ScummVM integration (French localisation)' PKG_BIN_SCUMMVM_DESCRIPTION_EN='ScummVM integration (English localisation)' PKG_BIN_SCUMMVM_DEPENDENCIES_SIBLINGS=' PKG_L10N PKG_DATA' PKG_BIN_WINE_ARCH='32' PKG_BIN_WINE_BASE_ID="${PKG_BIN_BASE_ID}-wine" PKG_BIN_WINE_ID_FR="${PKG_BIN_WINE_BASE_ID}-fr" PKG_BIN_WINE_ID_EN="${PKG_BIN_WINE_BASE_ID}-en" PKG_BIN_WINE_PROVIDES=" $PKG_BIN_BASE_ID" PKG_BIN_WINE_DESCRIPTION_FR='Windows binaries (French localisation)' PKG_BIN_WINE_DESCRIPTION_EN='Windows binaries (English localisation)' PKG_BIN_WINE_DEPENDENCIES_SIBLINGS=' PKG_L10N PKG_DATA' PKG_L10N_BASE_ID="${GAME_ID}-l10n" PKG_L10N_ID_FR="${PKG_L10N_BASE_ID}-fr" PKG_L10N_ID_EN="${PKG_L10N_BASE_ID}-en" PKG_L10N_PROVIDES=" $PKG_L10N_BASE_ID" PKG_L10N_DESCRIPTION_FR='French localisation' PKG_L10N_DESCRIPTION_EN='English localisation' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Check for the presence of the ScummVM patch. case "$(current_archive)" in ('ARCHIVE_BASE_EN_'*) archive_initialize_required \ 'ARCHIVE_PATCH' \ 'ARCHIVE_REQUIRED_PATCH_EN' ;; ('ARCHIVE_BASE_FR_'*) archive_initialize_required \ 'ARCHIVE_PATCH' \ 'ARCHIVE_REQUIRED_PATCH_FR' ;; esac # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # ScummVM - Include required patch. install -D --mode=644 \ "$(archive_path 'ARCHIVE_PATCH')" \ "$(package_path 'PKG_BIN_SCUMMVM')$(path_game_data)/$(archive_name 'ARCHIVE_PATCH')" # Write launchers. # WINE - Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --symbolic "$dll_source" "$dll_destination" done EOF } launchers_generation 'PKG_BIN_SCUMMVM' 'APP_SCUMMVM' launchers_generation 'PKG_BIN_WINE' 'APP_WINE' # Build packages. packages_generation printf '\n' printf 'ScummVM:' print_instructions 'PKG_DATA' 'PKG_L10N' 'PKG_BIN_SCUMMVM' printf 'WINE:' print_instructions 'PKG_DATA' 'PKG_L10N' 'PKG_BIN_WINE' # Clean up. working_directory_cleanup exit 0 games/play-monkey-island-special-edition.sh0000755000000000000000000001033014471751340017776 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: BSD-2-Clause # SPDX-FileCopyrightText: © 2020 macaron # SPDX-FileCopyrightText: © 2023 Antoine Le Gonidec set -o errexit ### # Monkey Island Special Edition: # - The Secret of Monkey Island # - Monkey Island 2: LeChuck's Revenge # send your bug reports to vv221@dotslashplay.it ### script_version=20260330.3 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID_MONKEY1='monkey-island-1-special-edition' GAME_NAME_MONKEY1='The Secret of Monkey Island' GAME_ID_MONKEY2='monkey-island-2-special-edition' GAME_NAME_MONKEY2='Monkey Island 2: LeChuck’s Revenge' # The Secret of Monkey Island ARCHIVE_BASE_MONKEY1_1_NAME='setup_the_secret_of_monkey_islandtm_special_edition_1.0_(18587).exe' ARCHIVE_BASE_MONKEY1_1_MD5='dc463e4d640e417df53684afb9921dd1' ARCHIVE_BASE_MONKEY1_1_TYPE='innosetup' ARCHIVE_BASE_MONKEY1_1_SIZE='2594611' ARCHIVE_BASE_MONKEY1_1_VERSION='1.0-gog18587' ARCHIVE_BASE_MONKEY1_1_URL='https://www.gog.com/game/the_secret_of_monkey_island_special_edition' ARCHIVE_BASE_MONKEY1_0_NAME='setup_monkey_island_1_se_1.0_(18587).exe' ARCHIVE_BASE_MONKEY1_0_MD5='ff2eaa21af8f59371583b007b439b873' ARCHIVE_BASE_MONKEY1_0_TYPE='innosetup' ARCHIVE_BASE_MONKEY1_0_PART1_NAME='setup_monkey_island_1_se_1.0_(18587)-1.bin' ARCHIVE_BASE_MONKEY1_0_PART1_MD5='6a3ca78328b99ae0d9d0a3d7a4fb3cd9' ARCHIVE_BASE_MONKEY1_0_SIZE='2600000' ARCHIVE_BASE_MONKEY1_0_VERSION='1.0-gog18587' # Monkey Island 2: LeChuck's Revenge ARCHIVE_BASE_MONKEY2_0_NAME='setup_monkey_island2_se_2.0.0.10.exe' ARCHIVE_BASE_MONKEY2_0_MD5='20a0bc39dcf543856f0d463649c482c4' ARCHIVE_BASE_MONKEY2_0_TYPE='innosetup' ARCHIVE_BASE_MONKEY2_0_SIZE='2300000' ARCHIVE_BASE_MONKEY2_0_VERSION='1.0-gog2.0.0.10' ARCHIVE_BASE_MONKEY2_0_URL='https://www.gog.com/game/monkey_island_2_special_edition_lechucks_revenge' CONTENT_PATH_DEFAULT_MONKEY1='.' CONTENT_PATH_DEFAULT_MONKEY1_0='app' CONTENT_PATH_DEFAULT_MONKEY2='app' CONTENT_GAME_BIN_FILES_MONKEY1=' MISE.exe' CONTENT_GAME_BIN_FILES_MONKEY2=' Monkey2.exe' CONTENT_GAME_DATA_FILES=' audio' # No need for dedicated localisation packages, # language selection is done in-game. CONTENT_GAME0_DATA_FILES_MONKEY1=' localization Monkey1.pak' CONTENT_GAME0_DATA_FILES_MONKEY2=' monkey2.pak' # TODO: Build dedicated packages for localisations. CONTENT_GAME1_DATA_FILES_MONKEY2=' lang.ini' CONTENT_DOC_DATA_FILES=' *.pdf' # The following file includes the saved games, # the AppData path set below only includes settings. USER_PERSISTENT_FILES_MONKEY2=' monkey2.bin' WINE_PERSISTENT_DIRECTORIES_MONKEY1=' users/${USER}/AppData/Roaming/LucasArts/The Secret of Monkey Island Special Edition' WINE_PERSISTENT_DIRECTORIES_MONKEY2=' users/${USER}/AppData/Roaming/LucasArts/Monkey Island 2 Special Edition' # Native D3DCompiler is required to prevent a crash on launch. # - https://bugs.winehq.org/show_bug.cgi?id=37676 # - https://bugs.winehq.org/show_bug.cgi?id=42026 # (WINE 11.5) # TODO: Check if d3dcompiler_42 could work for both games. WINE_WINETRICKS_VERBS_MONKEY1='d3dcompiler_47' WINE_WINETRICKS_VERBS_MONKEY2='d3dcompiler_42' APP_MAIN_EXE_MONKEY1='MISE.exe' APP_MAIN_EXE_MONKEY2='Monkey2.exe' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_GSTREAMER_PLUGINS=' audioconvert audio/x-wma, wmaversion=(int)1' PKG_DATA_ID_MONKEY1="${GAME_ID_MONKEY1}-data" PKG_DATA_ID_MONKEY2="${GAME_ID_MONKEY2}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-morrowind.sh0000755000000000000000000001473614471751340014213 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Mopi # SPDX-FileCopyrightText: © 2018 Antoine Le Gonidec set -o errexit ### # Morrowind # send your bug reports to vv221@dotslashplay.it ### script_version=20260310.2 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='morrowind' GAME_NAME='The Elder Scrolls III: Morrowind' ARCHIVE_BASE_EN_1_NAME='setup_the_elder_scrolls_iii_morrowind_goty_1.6.0.1820_gog_0.1_(77582).exe' ARCHIVE_BASE_EN_1_MD5='c3ea7739b81d457e4c7d91758b762f4e' ARCHIVE_BASE_EN_1_TYPE='innosetup' ARCHIVE_BASE_EN_1_PART1_NAME='setup_the_elder_scrolls_iii_morrowind_goty_1.6.0.1820_gog_0.1_(77582)-1.bin' ARCHIVE_BASE_EN_1_PART1_MD5='1158ea779b50c704c17bedee0ad2612c' ARCHIVE_BASE_EN_1_SIZE='2209531' ARCHIVE_BASE_EN_1_VERSION='1.6.0.1820-gog77582' ARCHIVE_BASE_EN_1_URL='https://www.gog.com/game/the_elder_scrolls_iii_morrowind_goty_edition' ARCHIVE_BASE_FR_1_NAME='setup_the_elder_scrolls_iii_morrowind_goty_1.6.0.1820_gog_0.1_(french)_(77582).exe' ARCHIVE_BASE_FR_1_MD5='5f56a00e9256d930f63ab677c43c8b75' ARCHIVE_BASE_FR_1_TYPE='innosetup' ARCHIVE_BASE_FR_1_PART1_NAME='setup_the_elder_scrolls_iii_morrowind_goty_1.6.0.1820_gog_0.1_(french)_(77582)-1.bin' ARCHIVE_BASE_FR_1_PART1_MD5='38571e142c67f9c8edd433902abe1454' ARCHIVE_BASE_FR_1_SIZE='2239754' ARCHIVE_BASE_FR_1_VERSION='1.6.0.1820-gog77582' ARCHIVE_BASE_FR_1_URL='https://www.gog.com/game/the_elder_scrolls_iii_morrowind_goty_edition' ARCHIVE_BASE_EN_0_NAME='setup_tes_morrowind_goty_2.0.0.7.exe' ARCHIVE_BASE_EN_0_MD5='3a027504a0e4599f8c6b5b5bcc87a5c6' ARCHIVE_BASE_EN_0_TYPE='innosetup' ARCHIVE_BASE_EN_0_SIZE='2300000' ARCHIVE_BASE_EN_0_VERSION='1.6.1820-gog2.0.0.7' ARCHIVE_BASE_FR_0_NAME='setup_tes_morrowind_goty_french_2.0.0.7.exe' ARCHIVE_BASE_FR_0_MD5='2aee024e622786b2cb5454ff074faf9b' ARCHIVE_BASE_FR_0_TYPE='innosetup' ARCHIVE_BASE_FR_0_SIZE='2300000' ARCHIVE_BASE_FR_0_VERSION='1.6.1820-gog2.0.0.7' CONTENT_PATH_DEFAULT='.' CONTENT_PATH_DEFAULT_EN_0='app' CONTENT_PATH_DEFAULT_FR_0='app' CONTENT_GAME_MAIN_FILES=' Data Files/Fonts Data Files/Icons Data Files/Meshes Data Files/Music Data Files/Sound Data Files/Textures Knife.ico' CONTENT_GAME_L10N_FILES=' Morrowind.ini Data Files/BookArt/MagicStoneMap4.dds Data Files/BookArt/Morrowind Books HTML.htm Data Files/BookArt/*.bmp Data Files/BookArt/*.tga Data Files/Sound/Vo Data Files/Splash Data Files/Video/bethesda logo.bik Data Files/Video/mw_*.bik Data Files/Morrowind.bsa Data Files/Morrowind.esm' CONTENT_GAME_EXPANSION_TRIBUNAL_FILES=' Data Files/Tribunal.bsa Data Files/Tribunal.esm' CONTENT_GAME_EXPANSION_BLOODMOON_FILES=' Data Files/Video/bm_*.bik Data Files/Bloodmoon.bsa Data Files/Bloodmoon.esm' CONTENT_DATAFILES_RELATIVE_PATH='_OfficialPlugins/_unpacked_files' CONTENT_DATAFILES_FILES=' Icons Meshes Sound Textures *.esp *.txt' CONTENT_DOC_L10N_FILES=' *.txt' CONTENT_DOC_DATA_FILES=' *.pdf' APP_MAIN_TYPE='custom' APP_MAIN_ICON='Morrowind.exe' PACKAGES_LIST=' PKG_MAIN PKG_L10N PKG_EXPANSION_TRIBUNAL PKG_EXPANSION_BLOODMOON' PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_L10N_BASE' PKG_MAIN_DEPENDENCIES_COMMANDS=' openmw-iniimporter openmw-launcher' # Easier upgrades from pre-20260106.2 packages PKG_MAIN_PROVIDES="${PKG_MAIN_PROVIDES:-} the-elder-scrolls-3 the-elder-scrolls-3-data" PKG_L10N_BASE_ID="${GAME_ID}-l10n" PKG_L10N_ID_EN="${PKG_L10N_BASE_ID}-en" PKG_L10N_ID_FR="${PKG_L10N_BASE_ID}-fr" PKG_L10N_PROVIDES=" $PKG_L10N_BASE_ID" PKG_L10N_DESCRIPTION_EN='English localization' PKG_L10N_DESCRIPTION_FR='French localization' # Easier upgrades from pre-20260106.2 packages PKG_L10N_PROVIDES="${PKG_L10N_PROVIDES:-} the-elder-scrolls-3-l10n" PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Easier upgrades from pre-20260106.2 packages PKG_DATA_PROVIDES="${PKG_DATA_PROVIDES:-} the-elder-scrolls-3-data" PKG_EXPANSION_TRIBUNAL_ID="${GAME_ID}-tribunal" PKG_EXPANSION_TRIBUNAL_ID_FR="${PKG_EXPANSION_TRIBUNAL_ID}-fr" PKG_EXPANSION_TRIBUNAL_ID_EN="${PKG_EXPANSION_TRIBUNAL_ID}-en" PKG_EXPANSION_TRIBUNAL_PROVIDES=" $PKG_EXPANSION_TRIBUNAL_ID" PKG_EXPANSION_TRIBUNAL_DESCRIPTION='Tribunal expansion' PKG_EXPANSION_TRIBUNAL_DEPENDENCIES_SIBLINGS=' PKG_MAIN PKG_L10N' # Easier upgrades from pre-20260106.2 packages PKG_EXPANSION_TRIBUNAL_PROVIDES="${PKG_EXPANSION_TRIBUNAL_PROVIDES:-} the-elder-scrolls-3-tribunal" PKG_EXPANSION_BLOODMOON_ID="${GAME_ID}-bloodmoon" PKG_EXPANSION_BLOODMOON_ID_FR="${PKG_EXPANSION_BLOODMOON_ID}-fr" PKG_EXPANSION_BLOODMOON_ID_EN="${PKG_EXPANSION_BLOODMOON_ID}-en" PKG_EXPANSION_BLOODMOON_PROVIDES=" $PKG_EXPANSION_BLOODMOON_ID" PKG_EXPANSION_BLOODMOON_DESCRIPTION='Bloodmoon expansion' PKG_EXPANSION_BLOODMOON_DEPENDENCIES_SIBLINGS=' PKG_MAIN PKG_L10N' # Easier upgrades from pre-20260106.2 packages PKG_EXPANSION_BLOODMOON_PROVIDES="${PKG_EXPANSION_BLOODMOON_PROVIDES:-} the-elder-scrolls-3-bloodmoon" # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons content_inclusion 'DATAFILES' 'PKG_MAIN' "$(path_game_data)/Data Files" content_inclusion_default # Write launchers. custom_launcher() { launcher_headers cat <<- EOF PATH_GAME_DATA="$(path_game_data)" EOF cat <<- 'OUTEREOF' OPENMW_CONFIG_PATH="${XDG_CONFIG_HOME:=${HOME}/.config}/openmw" OPENMW_CONFIG_FILE="${OPENMW_CONFIG_PATH}/openmw.cfg" OPENMW_CONFIG_LAUNCHER_FILE="${OPENMW_CONFIG_PATH}/launcher.cfg" # Initialize OpenMW configuration on first launch if [ ! -e "$OPENMW_CONFIG_FILE" ]; then mkdir --parents "$OPENMW_CONFIG_PATH" cat > "$OPENMW_CONFIG_FILE" <<- EOF data="${PATH_GAME_DATA}/Data Files" content=Morrowind.esm EOF openmw-iniimporter --ini "${PATH_GAME_DATA}/Morrowind.ini" --cfg "$OPENMW_CONFIG_FILE" if [ ! -e "$OPENMW_CONFIG_LAUNCHER_FILE" ]; then cat > "$OPENMW_CONFIG_LAUNCHER_FILE" <<- EOF [General] firstrun=false EOF fi fi openmw-launcher exit 0 OUTEREOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-myst-1-realmyst-masterpiece-edition.sh0000755000000000000000000000512614471751340021104 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2018 Mopi # SPDX-FileCopyrightText: © 2020 Fabien Givors set -o errexit ### # realMyst: Masterpiece Edition # send your bug reports to vv221@dotslashplay.it ### script_version=20260326.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='myst-1-realmyst-masterpiece-edition' GAME_NAME='realMyst: Masterpiece Edition' ARCHIVE_BASE_0_NAME='setup_real_myst_masterpiece_edition_2.2_rev_10535_(64bit)_(23829).exe' ARCHIVE_BASE_0_MD5='fcb23e0256ab826e9a2ba9cad00d9a66' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_PART1_NAME='setup_real_myst_masterpiece_edition_2.2_rev_10535_(64bit)_(23829)-1.bin' ARCHIVE_BASE_0_PART1_MD5='038b24ec51a18b325574293d7f2d0ec2' ARCHIVE_BASE_0_VERSION='2.2.10535-gog23829' ARCHIVE_BASE_0_SIZE='2800000' ARCHIVE_BASE_0_URL='https://www.gog.com/game/real_myst_masterpiece_edition' UNITY3D_NAME='realMyst' CONTENT_PATH_DEFAULT='.' # Prevent a fatal error on launch. CONTENT_LIBS_BIN_FILES=" ${UNITY3D_NAME}_Data/Mono/mono.dll" WINE_PERSISTENT_DIRECTORIES=' users/${USER}/AppData/LocalLow/Cyan Worlds/realMyst' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --symbolic "$dll_source" "$dll_destination" done EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-myst-1-realmyst.sh0000755000000000000000000000771514471751340015162 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2025 Antoine Le Gonidec set -o errexit ### # realMyst # send your bug reports to vv221@dotslashplay.it ### script_version=20260326.6 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='myst-1-realmyst' GAME_NAME='realMyst' # This game is no longer available for sale from gog.com. ARCHIVE_BASE_0_NAME='setup_realmyst_1.11_(21511).exe' ARCHIVE_BASE_0_MD5='30bf7206c397ea3a3c3e8b5e73817dcc' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_SIZE='774727' ARCHIVE_BASE_0_VERSION='1.1.1-gog21511' # Native Indeo video decoder is required to play linking books videos. ARCHIVE_REQUIRED_INDEO_NAME='iv5setup.exe' ARCHIVE_REQUIRED_INDEO_MD5='359afe192360a11e6bd94611a473687c' ARCHIVE_REQUIRED_INDEO_EXTRACTOR='unar' ARCHIVE_REQUIRED_INDEO_SIZE='6315' ARCHIVE_REQUIRED_INDEO_URL='https://download.civforum.de/civ2/iv5setup.exe' # This archive is a self-extracting InstallShield installer. REQUIREMENTS_LIST=' unshield' CONTENT_PATH_DEFAULT='.' CONTENT_GAME_BIN_FILES=' RealMYST.exe realMYSTSetup.exe' # RealMYST.exe triggers an explicit error if binkw32.dll is missing. CONTENT_LIBS_BIN_FILES=' binkw32.dll' # Some puzzles are broken if the following libraries are missing. CONTENT_LIBS0_BIN_FILES=' XCmd/M3D_LibraryXCmd.dll XCmd/M3D_MazeXcmd.dll XCmd/M3D_Xcmd.dll' # Native Indeo video decoder is required to play linking books videos. CONTENT_LIBS1_BIN_PATH='indeo_5_codec' CONTENT_LIBS1_BIN_FILES=' ir50_32.dll' CONTENT_GAME_DATA_FILES=' FNT INIT Scn mara.dni pera.dni sho.dni' CONTENT_DOC_DATA_FILES=' readme.txt' USER_PERSISTENT_DIRECTORIES=' INIT sav' # Crashes happen on some age transitions if the following directory is missing. USER_PERSISTENT_DIRECTORIES="$USER_PERSISTENT_DIRECTORIES swp" # Native Indeo video decoder is required to play linking books videos. # (WINE 11.5) WINE_DLLOVERRIDES_DEFAULT='winemenubuilder.exe,mscoree,mshtml=' WINE_DLLOVERRIDES_DEFAULT="${WINE_DLLOVERRIDES_DEFAULT};ir50_32.dll=n" APP_MAIN_EXE='RealMYST.exe' APP_MAIN_ICON='app/goggame-1207658824.ico' APP_SETUP_ID="${GAME_ID}-setup" APP_SETUP_NAME="${GAME_NAME} - Setup" APP_SETUP_CAT='Settings' APP_SETUP_EXE='realMYSTSetup.exe' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Check for the presence of the Indeo video decoder installer. archive_initialize_required \ 'ARCHIVE_INDEO' \ 'ARCHIVE_REQUIRED_INDEO' # Extract game data. archive_extraction_default # Extract the required video decoding library. archive_extraction 'ARCHIVE_INDEO' ARCHIVE_INDEO_INNER_PATH="${PLAYIT_WORKDIR}/gamedata/data1.cab" ARCHIVE_INDEO_INNER_TYPE='installshield' archive_extraction 'ARCHIVE_INDEO_INNER' rm "$ARCHIVE_INDEO_INNER_PATH" # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --symbolic "$dll_source" "$dll_destination" done EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-myst-1.sh0000755000000000000000000001306314471751340013315 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2018 Mopi # SPDX-FileCopyrightText: © 2020 Fabien Givors set -o errexit ### # Myst (Masterpiece Edition) # send your bug reports to vv221@dotslashplay.it ### script_version=20260104.3 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='myst-1' GAME_NAME='Myst' ARCHIVE_BASE_4_NAME='setup_myst_masterpiece_edition_2.0.5_(64bit)_(83079).exe' ARCHIVE_BASE_4_MD5='3da8caf76c12e66fac4cedd945127c2e' ARCHIVE_BASE_4_TYPE='innosetup' ARCHIVE_BASE_4_SIZE='1885140' ARCHIVE_BASE_4_VERSION='2.0.5-gog83079' ARCHIVE_BASE_4_URL='https://www.gog.com/game/myst_masterpiece_edition' ARCHIVE_BASE_3_NAME='setup_myst_masterpiece_edition_2.0.3_(64bit)_(82361).exe' ARCHIVE_BASE_3_MD5='1c72d6dd734478aba521c8764449c94e' ARCHIVE_BASE_3_TYPE='innosetup' ARCHIVE_BASE_3_SIZE='1885314' ARCHIVE_BASE_3_VERSION='2.0.3-gog82361' ARCHIVE_BASE_2_NAME='setup_myst_masterpiece_edition_1.0_svm_update_4_(22597).exe' ARCHIVE_BASE_2_MD5='cee43afef96ec781a18c578a1cc8bdcc' ARCHIVE_BASE_2_TYPE='innosetup' ARCHIVE_BASE_2_PART1_NAME='setup_myst_masterpiece_edition_1.0_svm_update_4_(22597)-1.bin' ARCHIVE_BASE_2_PART1_MD5='1417de6ceaaaac67064529c3afab6792' ARCHIVE_BASE_2_SIZE='1409531' ARCHIVE_BASE_2_VERSION='1.0.4-gog22597' ARCHIVE_BASE_1_NAME='setup_myst_masterpiece_edition_1.0_svm_update_4_(22598).exe' ARCHIVE_BASE_1_MD5='e3c62eeb19abd2c9a947aee8300e995d' ARCHIVE_BASE_1_TYPE='innosetup' ARCHIVE_BASE_1_PART1_NAME='setup_myst_masterpiece_edition_1.0_svm_update_4_(22598)-1.bin' ARCHIVE_BASE_1_PART1_MD5='4b84a68ec57e55bcc9b522c6333c669c' ARCHIVE_BASE_1_SIZE='1500000' ARCHIVE_BASE_1_VERSION='1.0.4-gog22598' CONTENT_PATH_DEFAULT='.' CONTENT_GAME_L10N_FILES=' qtw/channel/holoalgh.mov qtw/channel/holoamth.mov qtw/channel/holoasir.mov qtw/channel/holosmsg.mov qtw/channel/monalgh.mov qtw/channel/monamth.mov qtw/channel/monasirs.mov qtw/channel/monsmsg.mov qtw/dunny/atr1nopg.mov qtw/dunny/atr1page.mov qtw/dunny/atrmidc2.mov qtw/dunny/atrus2.mov qtw/intro/broder.mov qtw/intro/intro.mov qtw/mech/holoon.mov qtw/myst/aextra.mov qtw/myst/alose.mov qtw/myst/apage1.mov qtw/myst/apage2.mov qtw/myst/apage3.mov qtw/myst/apage4.mov qtw/myst/apage5.mov qtw/myst/atrusbk1.mov qtw/myst/atrusbk2.mov qtw/myst/sextra.mov qtw/myst/slose.mov qtw/myst/spage1.mov qtw/myst/spage2.mov qtw/myst/spage3.mov qtw/myst/spage4.mov qtw/myst/spage5.mov qtw/myst/vltatrus.mov' CONTENT_GAME_L10N_FR_PATH='french' CONTENT_GAME_L10N_FR_FILES="$CONTENT_GAME_L10N_FILES" CONTENT_GAME_L10N_EN_FILES="$CONTENT_GAME_L10N_FILES" CONTENT_GAME0_L10N_FR_FILES=' channel_french.dat credits_french.dat help_french.dat mechan_french.dat myst_french.dat selen_french.dat stone_french.dat' CONTENT_GAME_MAIN_FILES=' channel.dat credits.dat dunny.dat help.dat intro.dat mechan.dat menu.dat myst.dat selen.dat stone.dat qtw' CONTENT_DOC_MAIN_FILES=' manual.pdf readme.txt' APP_MAIN_SCUMMID='mohawk:myst' APP_MAIN_ICON='app/goggame-1207658818.ico' PACKAGES_LIST=' PKG_L10N_FR PKG_L10N_EN PKG_MAIN' PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_L10N' ## Easier upgrades from pre-20260104.3 packages PKG_MAIN_PROVIDES="${PKG_MAIN_PROVIDES:-} myst-1-common" PKG_L10N_ID="${GAME_ID}-l10n" PKG_L10N_FR_ID="${PKG_L10N_ID}-fr" PKG_L10N_EN_ID="${PKG_L10N_ID}-en" PKG_L10N_PROVIDES=" $PKG_L10N_ID" PKG_L10N_FR_DESCRIPTION='French localisation' PKG_L10N_EN_DESCRIPTION='English localisation' ## Easier upgrades from pre-20260104.3 packages PKG_L10N_PROVIDES="${PKG_L10N_PROVIDES:-} myst-1-fr myst-1-en" # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" set_default_package 'PKG_MAIN' # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons content_inclusion_default # Write launchers. ## Set game language. game_exec_line() { cat <<- 'EOF' # Set game language if [ -e "${PATH_GAME_DATA}/myst_french.dat" ]; then language=fr else language=en fi scummvm --language="$language" --path="$PATH_GAME_DATA" "$@" mohawk:myst EOF } launchers_generation # Build packages. packages_generation case "$(messages_language)" in ('fr') lang_string='version %s :' lang_fr='française' lang_en='anglaise' ;; ('en'|*) lang_string='%s version:' lang_fr='French' lang_en='English' ;; esac printf '\n' printf "$lang_string" "$lang_fr" print_instructions 'PKG_MAIN' 'PKG_L10N_FR' printf "$lang_string" "$lang_en" print_instructions 'PKG_MAIN' 'PKG_L10N_EN' # Clean up. working_directory_cleanup exit 0 games/play-myst-3.sh0000755000000000000000000000707214471751340013322 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2018 Mopi # SPDX-FileCopyrightText: © 2020 Fabien Givors set -o errexit ### # Myst 3: Exile # send your bug reports to vv221@dotslashplay.it ### script_version=20260104.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='myst-3-exile' GAME_NAME='Myst III: Exile' ARCHIVE_BASE_2_NAME='setup_myst_iii_exile_2.0.5_(64bit)_(83079).exe' ARCHIVE_BASE_2_MD5='596d1683253f8c2111b20d23e8c320ed' ARCHIVE_BASE_2_TYPE='innosetup' ARCHIVE_BASE_2_PART1_NAME='setup_myst_iii_exile_2.0.5_(64bit)_(83079)-1.bin' ARCHIVE_BASE_2_PART1_MD5='d0e247e34be60a4040653193a586b394' ARCHIVE_BASE_2_SIZE='2946948' ARCHIVE_BASE_2_VERSION='2.0.5-gog83079' ARCHIVE_BASE_2_URL='https://www.gog.com/game/myst_3_exile' ARCHIVE_BASE_1_NAME='setup_myst_iii_exile_2.0.3_(64bit)_(82361).exe' ARCHIVE_BASE_1_MD5='fed3b0b13eee6fa6969c5235bdab122f' ARCHIVE_BASE_1_TYPE='innosetup' ARCHIVE_BASE_1_PART1_NAME='setup_myst_iii_exile_2.0.3_(64bit)_(82361)-1.bin' ARCHIVE_BASE_1_PART1_MD5='d3c1bd80c58b50345fd9ab84e98374e5' ARCHIVE_BASE_1_SIZE='2947141' ARCHIVE_BASE_1_VERSION='2.0.3-gog82361' ARCHIVE_BASE_0_NAME='setup_myst_3_exile_1.27_rvm_(21807).exe' ARCHIVE_BASE_0_MD5='e2b8e962326b8802009d3e30b9e4c8ff' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_PART1_NAME='setup_myst_3_exile_1.27_rvm_(21807)-1.bin' ARCHIVE_BASE_0_PART1_MD5='c69e2780274f2830ab210d230889e5bb' ARCHIVE_BASE_0_SIZE='2422163' ARCHIVE_BASE_0_VERSION='1.27-gog21807' CONTENT_PATH_DEFAULT='.' CONTENT_GAME_MAIN_FILES=' data m3data' CONTENT_DOC_MAIN_FILES=' manual.pdf' CONTENT_DOC_L10N_FILES=' manual.pdf readme.txt' CONTENT_DOC_L10N_EN_RELATIVE_PATH='myst iii english' CONTENT_DOC_L10N_EN_FILES="$CONTENT_DOC_L10N_FILES" CONTENT_DOC_L10N_FR_RELATIVE_PATH='myst iii french' CONTENT_DOC_L10N_FR_FILES="$CONTENT_DOC_L10N_FILES" APP_MAIN_SCUMMID='myst3:myst3' APP_MAIN_ICON='myst iii english/m3.exe' APP_MAIN_ICON_0='app/goggame-1766899243.ico' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons content_inclusion 'DOC_L10N_EN' 'PKG_MAIN' "$(path_documentation)/en" content_inclusion 'DOC_L10N_FR' 'PKG_MAIN' "$(path_documentation)/fr" content_inclusion_default # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-near-mage-expansions.sh0000755000000000000000000000540714471751340016207 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2025 Antoine Le Gonidec set -o errexit ### # Near-Mage expansions: # - Clothes & Hair Pack # send your bug reports to vv221@dotslashplay.it ### script_version=20260104.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='near-mage' GAME_NAME='Near-Mage' EXPANSION_ID_CLOTHESANDHAIR='clothes-and-hair' EXPANSION_NAME_CLOTHESANDHAIR='Clothes & Hair Pack' ARCHIVE_BASE_CLOTHESANDHAIR_3_NAME='near_mage_clothes_hair_pack_1_1_4_83077.sh' ARCHIVE_BASE_CLOTHESANDHAIR_3_MD5='500cf750790e1e9d176fd1910d92f335' ARCHIVE_BASE_CLOTHESANDHAIR_3_SIZE='45829' ARCHIVE_BASE_CLOTHESANDHAIR_3_VERSION='1.1.4-gog83077' ARCHIVE_BASE_CLOTHESANDHAIR_3_URL='https://www.gog.com/game/nearmage_clothes_hair_pack' ARCHIVE_BASE_CLOTHESANDHAIR_1_NAME='near_mage_clothes_hair_pack_1_1_0c_82721.sh' ARCHIVE_BASE_CLOTHESANDHAIR_1_MD5='8bf42f8553c5715fbc88a64a37d539e0' ARCHIVE_BASE_CLOTHESANDHAIR_1_SIZE='45829' ARCHIVE_BASE_CLOTHESANDHAIR_1_VERSION='1.1.0c-gog82721' ARCHIVE_BASE_CLOTHESANDHAIR_0_NAME='near_mage_clothes_hair_pack_1_0_1_82443.sh' ARCHIVE_BASE_CLOTHESANDHAIR_0_MD5='d0cebff002280f7292af44d5be4b72cb' ARCHIVE_BASE_CLOTHESANDHAIR_0_SIZE='45829' ARCHIVE_BASE_CLOTHESANDHAIR_0_VERSION='1.0.1-gog82443' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME_MAIN_FILES=' Near-Mage_Data' PKG_PARENT_ID="$GAME_ID" PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_PARENT' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_default # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-near-mage.sh0000755000000000000000000000542014471751340014015 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2025 Antoine Le Gonidec set -o errexit ### # Near-Mage # send your bug reports to vv221@dotslashplay.it ### script_version=20260104.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='near-mage' GAME_NAME='Near-Mage' ARCHIVE_BASE_3_NAME='near_mage_1_1_4_83077.sh' ARCHIVE_BASE_3_MD5='61888c75eb3253b84081e67cda59830e' ARCHIVE_BASE_3_SIZE='9249571' ARCHIVE_BASE_3_VERSION='1.1.4-gog83077' ARCHIVE_BASE_3_URL='https://www.gog.com/game/nearmage' ARCHIVE_BASE_1_NAME='near_mage_1_1_0c_82721.sh' ARCHIVE_BASE_1_MD5='bc67408fced128913aff39f6065eeba7' ARCHIVE_BASE_1_SIZE='9249077' ARCHIVE_BASE_1_VERSION='1.1.0c-gog82721' ARCHIVE_BASE_0_NAME='near_mage_1_0_1_82443.sh' ARCHIVE_BASE_0_MD5='ccbb2228270b80e9a110419f0819d7f9' ARCHIVE_BASE_0_SIZE='9370785' ARCHIVE_BASE_0_VERSION='1.0.1-gog82443' UNITY3D_NAME='Near-Mage' CONTENT_PATH_DEFAULT='data/noarch/game' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libgcc_s.so.1 libm.so.6 libpthread.so.0 librt.so.1 libz.so.1' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' ## Prevent inclusion of shipped Steam library. rm --recursive "${PLAYIT_WORKDIR}/gamedata/$(content_path_default)/$(unity3d_name)_Data/Plugins" content_inclusion_default # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-off-world-resource-base.sh0000755000000000000000000000556314471751340016625 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2021 Antoine Le Gonidec set -o errexit ### # Off-World Resource Base # send your bug reports to vv221@dotslashplay.it ### script_version=20260321.3 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='off-world-resource-base' GAME_NAME='O.R.B.: Off-World Resource Base' ARCHIVE_BASE_0_NAME='setup_orb_2.0.0.5.exe' ARCHIVE_BASE_0_MD5='b1cab44f6fe398ed008dda23e1538c03' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_SIZE='651435' ARCHIVE_BASE_0_VERSION='1.04-gog2.0.0.5' ARCHIVE_BASE_0_URL='https://www.gog.com/game/orb_offworld_resource_base' CONTENT_PATH_DEFAULT='app' CONTENT_GAME_BIN_FILES=' orb.exe Orb.ini Orbsetup.exe orbsetup.ini' # orb.exe requirements CONTENT_LIBS_BIN_FILES=' binkw32.dll mss32.dll C4dll-D.dll' CONTENT_GAME0_BIN_FILES=' bobo.dat lensflares.ini NetColors.ini *.asi *.flt *.m3d' # TODO: Move the editor to a dedicated package. CONTENT_GAME1_BIN_FILES=' OrbScenarioEditor.exe' CONTENT_GAME_DATA_FILES=' orbdata cdkey Seq.flg Game.positions Default.SUP orb.SUP Credits.txt *.bmp' CONTENT_DOC_DATA_FILES=' manual.pdf Units.pdf Readme.txt scen_eula.txt' # Work around display glitches if not running at the desktop resolution. # (WINE 11.4) WINE_VIRTUAL_DESKTOP='auto' APP_MAIN_EXE='orb.exe' APP_SETUP_ID="${GAME_ID}-setup" APP_SETUP_NAME="$GAME_NAME - Settings" APP_SETUP_CAT='Settings' APP_SETUP_EXE='Orbsetup.exe' # TODO: Move the editor to a dedicated package. APP_EDITOR_ID="${GAME_ID}-editor" APP_EDITOR_NAME="$GAME_NAME - Scenario editor" APP_EDITOR_EXE='OrbScenarioEditor.exe' USER_PERSISTENT_DIRECTORIES=' orbdata/players orbdata/scenarios' USER_PERSISTENT_FILES=' orb.ini orbdata/frontend/players.dat orbdata/language/Current.lang' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. ln --force --symbolic $(path_libraries)/* "\${PATH_PREFIX}" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-oil-rush.sh0000755000000000000000000001045014471751340013722 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2023 Antoine Le Gonidec set -o errexit ### # Oil Rush # send your bug reports to vv221@dotslashplay.it ### script_version=20250429.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='oil-rush' GAME_NAME='Oil Rush' ## This archive used to be provided by Humble Bundle, ## but it is no longer available for sale. ARCHIVE_BASE_0_NAME='OilRush_1.35_Linux_1370041755.run' ARCHIVE_BASE_0_MD5='5a38d0545a64e0d21ddfe4afc15253a8' ARCHIVE_BASE_0_SIZE='1351677' ARCHIVE_BASE_0_VERSION='1.35-humble1' CONTENT_PATH_DEFAULT='.' CONTENT_LIBS_BIN64_RELATIVE_PATH='bin' CONTENT_LIBS_BIN64_FILES=' libOilRush_x64.so libQtCoreUnigine_x64.so.4 libQtGuiUnigine_x64.so.4 libQtNetworkUnigine_x64.so.4 libQtWebKitUnigine_x64.so.4 libQtXmlUnigine_x64.so.4 libRakNet_x64.so libUnigine_x64.so' CONTENT_LIBS_BIN32_RELATIVE_PATH='bin' CONTENT_LIBS_BIN32_FILES=' libOilRush_x86.so libQtCoreUnigine_x86.so.4 libQtGuiUnigine_x86.so.4 libQtNetworkUnigine_x86.so.4 libQtWebKitUnigine_x86.so.4 libQtXmlUnigine_x86.so.4 libRakNet_x86.so libUnigine_x86.so' CONTENT_GAME_BIN64_FILES=' bin/launcher_x64 bin/OilRush_x64' CONTENT_GAME_BIN32_FILES=' bin/launcher_x86 bin/OilRush_x86' CONTENT_GAME_DATA_FILES=' data oilrush.cfg' CONTENT_DOC_DATA_PATH='documentation' CONTENT_DOC_DATA_FILES=' user_manual.pdf' USER_PERSISTENT_FILES=' oilrush.cfg data/launcher/launcher*.xml' APP_MAIN_EXE_BIN64='bin/launcher_x64' APP_MAIN_EXE_BIN32='bin/launcher_x86' APP_MAIN_OPTIONS='-config ../data/launcher/launcher.xml' APP_MAIN_ICON='data/launcher/oilrush.png' PACKAGES_LIST=' PKG_BIN64 PKG_BIN32 PKG_DATA' PKG_BIN64_ARCH='64' PKG_BIN32_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libfontconfig.so.1 libfreetype.so.6 libgcc_s.so.1 libm.so.6 libpthread.so.0 librt.so.1 libstdc++.so.6 libX11.so.6 libXext.so.6 libXinerama.so.1 libXrandr.so.2 libXrender.so.1' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run the default initialization actions initialization_default "$@" # Extract game data archive_extraction_default ( cd "${PLAYIT_WORKDIR}/gamedata/$(content_path_default)" # Set the execution bit on the game binaries chmod 755 'bin/OilRush_x86' 'bin/OilRush_x64' ) # Include game data content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers ## Run the game binary from its parent directory game_exec_line() { local application application="$1" local application_exe application_options application_exe=$(application_exe "$application") application_options=$(application_options "$application") cat <<- EOF cd "$(dirname "$application_exe")" "./$(basename "$application_exe")" $application_options "\$@" EOF } ## Copy the real game binary into the game prefix. ## (bin/OilRush_x64 instead of bin/launcher_x64) native_launcher_binary_copy() { cat <<- 'EOF' # Copy the game binary into the user prefix exe_destination="${PATH_PREFIX}/bin/OilRush_x64" if [ -h "$exe_destination" ]; then exe_source=$(realpath "$exe_destination") cp --remove-destination "$exe_source" "$exe_destination" fi unset exe_destination exe_source EOF } launchers_generation 'PKG_BIN64' ## Copy the real game binary into the game prefix. ## (bin/OilRush_x86 instead of bin/launcher_x86) native_launcher_binary_copy() { cat <<- 'EOF' # Copy the game binary into the user prefix exe_destination="${PATH_PREFIX}/bin/OilRush_x86" if [ -h "$exe_destination" ]; then exe_source=$(realpath "$exe_destination") cp --remove-destination "$exe_source" "$exe_destination" fi unset exe_destination exe_source EOF } launchers_generation 'PKG_BIN32' # Build packages packages_generation print_instructions # Clean up working_directory_cleanup exit 0 games/play-old-skies.sh0000755000000000000000000000756014471751340014062 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2025 Antoine Le Gonidec set -o errexit ### # Old Skies # send your bug reports to vv221@dotslashplay.it ### script_version=20260104.3 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='old-skies' GAME_NAME='Old Skies' ARCHIVE_BASE_0_NAME='old_skies_v2_0a_82221.sh' ARCHIVE_BASE_0_MD5='ccc4e578bf71a86a70dca8b4c12bab73' ARCHIVE_BASE_0_SIZE='4406691' ARCHIVE_BASE_0_VERSION='2.0a-gog82221' ARCHIVE_BASE_0_URL='https://www.gog.com/game/old_skies' ## Optional icons pack ARCHIVE_OPTIONAL_ICONS_NAME='old-skies_icons.tar.xz' ARCHIVE_OPTIONAL_ICONS_MD5='6994d258c4a03bc48a91b89e515dca9c' ARCHIVE_OPTIONAL_ICONS_URL='https://downloads.dotslashplay.it/games/old-skies/' CONTENT_ICONS_PATH='.' CONTENT_ICONS_FILES=' 16x16 32x32 48x48 64x64 128x128 256x256' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_LIBS_BIN_AGS_RELATIVE_PATH='lib64' CONTENT_LIBS_BIN_AGS_FILES=' alleg-alsadigi.so alleg-alsamidi.so alleg-sdl2digi.so libagscontrollerpulp.so libagsshell.so libaldmb.so.1 liballeg.so.4.4 libdumb.so.1' CONTENT_GAME_MAIN_FILES=' OldSkies.ags acsetup.cfg vernum.osk winsetup *.vox' CONTENT_GAME_BIN_AGS_FILES=' ags64' CONTENT_DOC_MAIN_FILES=' licenses' APP_MAIN_ICON='../support/icon.png' ## Dedicated Old Skies support is not available from ScummVM. ## (ScummVM 2.9.1) APP_SCUMMVM_SCUMMID='ags:ags' ## With ScummVM animation is slowed down, ## support for the shipped engine is provided as a workaround. ## (ScummVM 2.9.1) APP_AGS_EXE='ags64' PACKAGES_LIST=' PKG_MAIN PKG_BIN_SCUMMVM PKG_BIN_AGS' PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_BIN' PKG_BIN_ID="${GAME_ID}-bin" PKG_BIN_PROVIDES=" $PKG_BIN_ID" PKG_BIN_SCUMMVM_ID="${PKG_BIN_ID}-scummvm" PKG_BIN_SCUMMVM_PROVIDES="$PKG_BIN_PROVIDES" PKG_BIN_SCUMMVM_DESCRIPTION='Run with ScummVM' PKG_BIN_AGS_ID="${PKG_BIN_ID}-ags" PKG_BIN_AGS_PROVIDES="$PKG_BIN_PROVIDES" PKG_BIN_AGS_DESCRIPTION='Run with shipped AGS binaries' PKG_BIN_AGS_ARCH='64' PKG_BIN_AGS_DEPENDENCIES_LIBRARIES=' libasound.so.2 libc.so.6 libdl.so.2 libgcc_s.so.1 libICE.so.6 libm.so.6 libogg.so.0 libpthread.so.0 librt.so.1 libSDL2-2.0.so.0 libSM.so.6 libstdc++.so.6 libtheora.so.0 libvorbis.so.0 libX11.so.6 libXcursor.so.1 libXext.so.6 libXxf86vm.so.1' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_MAIN' 'APP_MAIN' content_inclusion_default # Write launchers. launchers_generation 'PKG_BIN_SCUMMVM' 'APP_SCUMMVM' launchers_generation 'PKG_BIN_AGS' 'APP_AGS' # Build packages. packages_generation printf '\n' printf 'ScummVM:' print_instructions 'PKG_MAIN' 'PKG_BIN_SCUMMVM' printf 'Adventure Game Studio:' print_instructions 'PKG_MAIN' 'PKG_BIN_AGS' # Clean up. working_directory_cleanup exit 0 games/play-orwell-series.sh0000755000000000000000000001232214471751340014754 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2017 Mopi # SPDX-FileCopyrightText: © 2018 Antoine Le Gonidec set -o errexit ### # Orwell series: # - Orwell: Keeping an Eye on You # - Orwell: Ignorance is Strength # send your bug reports to vv221@dotslashplay.it ### script_version=20260103.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID_ORWELL1='orwell-1' GAME_NAME_ORWELL1='Orwell: Keeping an Eye on You' GAME_ID_ORWELL2='orwell-2' GAME_NAME_ORWELL2='Orwell: Ignorance is Strength' ## Orwell: Keeping an Eye on You ARCHIVE_BASE_ORWELL1_ITCH_0_NAME='orwell_eye_v1_4_9208_linux_drm_free.zip' ARCHIVE_BASE_ORWELL1_ITCH_0_MD5='225102f2ba1d765efc47f44834aa72c9' ARCHIVE_BASE_ORWELL1_ITCH_0_SIZE='647393' ARCHIVE_BASE_ORWELL1_ITCH_0_VERSION='1.4.9208-itch.2025.03.27' ARCHIVE_BASE_ORWELL1_ITCH_0_URL='https://osmoticstudios.itch.io/orwell-keeping-an-eye-on-you' ARCHIVE_BASE_ORWELL1_GOG_3_NAME='orwell_1_4_9208_80802.sh' ARCHIVE_BASE_ORWELL1_GOG_3_MD5='d2e4e194d5f1eed3d02fe5466e534a89' ARCHIVE_BASE_ORWELL1_GOG_3_SIZE='648793' ARCHIVE_BASE_ORWELL1_GOG_3_VERSION='1.4.9208-gog80802' ARCHIVE_BASE_ORWELL1_GOG_3_URL='https://www.gog.com/game/orwell' ARCHIVE_BASE_ORWELL1_GOG_2_NAME='orwell_1_4_7424_39231.sh' ARCHIVE_BASE_ORWELL1_GOG_2_MD5='8ac1915d9de7532717730b7f33a544b9' ARCHIVE_BASE_ORWELL1_GOG_2_SIZE='570000' ARCHIVE_BASE_ORWELL1_GOG_2_VERSION='1.4.7424-gog39231' ARCHIVE_BASE_ORWELL1_GOG_2_URL='https://www.gog.com/game/orwell' ARCHIVE_BASE_ORWELL1_GOG_1_NAME='orwell_en_1_21_21014.sh' ARCHIVE_BASE_ORWELL1_GOG_1_MD5='8fcd84cd3989175d1da377c78e1b4ff2' ARCHIVE_BASE_ORWELL1_GOG_1_SIZE='360000' ARCHIVE_BASE_ORWELL1_GOG_1_VERSION='1.21-gog21014' ARCHIVE_BASE_ORWELL1_GOG_0_NAME='gog_orwell_2.0.0.1.sh' ARCHIVE_BASE_ORWELL1_GOG_0_MD5='471470546952015fce024bdcb5431a07' ARCHIVE_BASE_ORWELL1_GOG_0_SIZE='630000' ARCHIVE_BASE_ORWELL1_GOG_0_VERSION='1.1-gog2.0.0.1' ## Optional icons pack ARCHIVE_OPTIONAL_ICONS_NAME_ORWELL1='orwell-1_icons.tar.gz' ARCHIVE_OPTIONAL_ICONS_MD5_ORWELL1='acb6711e5f6b26828097b2828f74e522' ARCHIVE_OPTIONAL_ICONS_URL_ORWELL1='https://downloads.dotslashplay.it/games/orwell-1/' CONTENT_ICONS_PATH_ORWELL1='.' CONTENT_ICONS_FILES_ORWELL1=' 128x128' ## Orwell: Ignorance is Strength ARCHIVE_BASE_ORWELL2_1_NAME='orwell_ignorance_is_strength_en_1_1_6771_23686_22333.sh' ARCHIVE_BASE_ORWELL2_1_MD5='a69fb6e02fdce982cb3a56b2b32a70e6' ARCHIVE_BASE_ORWELL2_1_SIZE='730000' ARCHIVE_BASE_ORWELL2_1_VERSION='1.1.6771-gog22333' ARCHIVE_BASE_ORWELL2_1_URL='https://www.gog.com/game/orwell_ignorance_is_strength' ARCHIVE_BASE_ORWELL2_0_NAME='orwell_ignorance_is_strength_en_1_11_21014.sh' ARCHIVE_BASE_ORWELL2_0_MD5='3d50e953ad7029ac9a292bcc9b137426' ARCHIVE_BASE_ORWELL2_0_SIZE='730000' ARCHIVE_BASE_ORWELL2_0_VERSION='1.1.6717-gog21014' UNITY3D_NAME_ORWELL1='Orwell' UNITY3D_NAME_ORWELL2='Ignorance' UNITY3D_PLUGINS_ORWELL1=' ScreenSelector.so' CONTENT_PATH_DEFAULT_ORWELL1_ITCH='.' CONTENT_PATH_DEFAULT_ORWELL1_GOG='data/noarch/game' CONTENT_PATH_DEFAULT_ORWELL2='data/noarch/game' CONTENT_DOC_DATA_FILES=' *.txt' ## Both games use the same path. FAKE_HOME_PERSISTENT_DIRECTORIES=' My Games/Orwell' ## Orwell 1 - The original game icon is not provided by installers for Orwell 1.4. ## Other archives can use the default icon path for Unity3D games. APP_MAIN_ICON_ORWELL1_GOG_3='../support/icon.png' APP_MAIN_ICON_ORWELL1_GOG_2='../support/icon.png' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libgcc_s.so.1 libgdk_pixbuf-2.0.so.0 libglib-2.0.so.0 libgobject-2.0.so.0 libgtk-x11-2.0.so.0 libm.so.6 libpthread.so.0 librt.so.1 libstdc++.so.6 libz.so.1' PKG_DATA_ID_ORWELL1="${GAME_ID_ORWELL1}-data" PKG_DATA_ID_ORWELL2="${GAME_ID_ORWELL2}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-pandora-first-contact.sh0000755000000000000000000001501214471751340016361 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2017 Antoine Le Gonidec set -o errexit ### # Pandora: First Contact # send your bug reports to vv221@dotslashplay.it ### script_version=20260101.4 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='pandora-first-contact' GAME_NAME='Pandora: First Contact' ARCHIVE_BASE_0_NAME='pandora_first_contact_en_1_6_7_16815.sh' ARCHIVE_BASE_0_MD5='0d9343d1693fc561823811a0cd3e279c' ARCHIVE_BASE_0_SIZE='720000' ARCHIVE_BASE_0_VERSION='1.6.7-gog16815' ARCHIVE_BASE_0_URL='https://www.gog.com/game/pandora' ## Optional icons pack ARCHIVE_OPTIONAL_ICONS_NAME='pandora-first-contact_icons.tar.gz' ARCHIVE_OPTIONAL_ICONS_MD5='66b1d99166b738b2130449a49b9cd58c' ARCHIVE_OPTIONAL_ICONS_URL='http://downloads.dotslashplay.it/games/pandora-first-contact/' CONTENT_ICONS_PATH='.' CONTENT_ICONS_FILES=' 256x256' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_LIBS_BIN_RELATIVE_PATH='Binaries' CONTENT_LIBS_BIN_FILES=' libavcodec.so.53 libavformat.so.53 libavutil.so.51 libboost_date_time.so.1.58.0 libboost_filesystem.so.1.58.0 libboost_locale.so.1.58.0 libboost_regex.so.1.58.0 libboost_system.so.1.58.0 libboost_thread.so.1.58.0 libGLEW.so.1.6 libjpeg.so.8 libpng15.so.15 libswscale.so.2' CONTENT_GAME_BIN_FILES=' Binaries/Pandora.bin Binaries/PandoraServer.bin' CONTENT_GAME_L10N_FR_FILES=' Data/Core/Languages/French Data/Cinematics/Clips/Languages/French/Intro.mkv' CONTENT_GAME_L10N_DE_FILES=' Data/Core/Languages/German Data/Cinematics/Clips/Languages/German/Intro.mkv' CONTENT_GAME_L10N_EN_FILES=' Data/Cinematics/Clips/Languages/English/Intro.mkv' CONTENT_GAME_L10N_VOICES_DE_FILES=' Data/Audio/Sounds/Languages/German Data/Cinematics/Clips/Languages/German/Intro.ogg' CONTENT_GAME_L10N_VOICES_EN_FILES=' Data/Audio/Sounds/Languages/English Data/Cinematics/Clips/Languages/English/Intro.ogg' CONTENT_GAME_DATA_FILES=' Data/GUI Data/Scene Data/Video Data/World Data/Audio/Music Data/Audio/Sounds/Ambient Data/Audio/Sounds/Explosions Data/Audio/Sounds/Interface Data/Audio/Sounds/Operations Data/Audio/Sounds/Units Data/Audio/Sounds/Weapons Data/Cinematics/Clips/Factions Data/Cinematics/Clips/Invasion.mkv Data/Cinematics/Clips/Invasion.ogg Data/Cinematics/Clips/MenuScreenFirstContact.mkv Data/Cinematics/Clips/MenuScreen.mkv' ## English texts must be included to prevent a crash on launch. CONTENT_GAME0_DATA_FILES=' Data/Core/Languages/English' CONTENT_DOC_DATA_RELATIVE_PATH='Documents' CONTENT_DOC_DATA_FILES=' Licenses PandoraWebsite.url' CONTENT_DOC0_DATA_RELATIVE_PATH='Documents/English' CONTENT_DOC0_DATA_FILES=' Manual.pdf ManualPrinterFriendly.pdf ChangeLog.txt' CONTENT_DOC_L10N_FR_RELATIVE_PATH='Documents/French' CONTENT_DOC_DATA_FILES=' Intro.txt ReadMe.txt' CONTENT_DOC_L10N_DE_RELATIVE_PATH='Documents/German' CONTENT_DOC_DATA_FILES=' Intro.txt ReadMe.txt' CONTENT_DOC_L10N_EN_RELATIVE_PATH='Documents/English' CONTENT_DOC_DATA_FILES=' Intro.txt ReadMe.txt' APP_MAIN_EXE='Binaries/Pandora.bin' APP_MAIN_ICON='../support/icon.png' PACKAGES_LIST=' PKG_BIN PKG_L10N_FR PKG_L10N_DE PKG_L10N_EN PKG_L10N_VOICES_DE PKG_L10N_VOICES_EN PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_L10N PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libbz2.so.1 libc.so.6 libcurl.so.4 libfreetype.so.6 libgcc_s.so.1 libglfw.so.3 libGL.so.1 libGLU.so.1 libm.so.6 libopenal.so.1 libpthread.so.0 librt.so.1 libstdc++.so.6 libvorbisfile.so.3 libX11.so.6 libXi.so.6 libXrandr.so.2 libXxf86vm.so.1 libz.so.1' PKG_L10N_ID="${GAME_ID}-l10n" PKG_L10N_FR_ID="${PKG_L10N_ID}-fr" PKG_L10N_DE_ID="${PKG_L10N_ID}-de" PKG_L10N_EN_ID="${PKG_L10N_ID}-en" PKG_L10N_PROVIDES=" $PKG_L10N_ID" PKG_L10N_DESCRIPTION_FR='French localisation' PKG_L10N_DESCRIPTION_DE='German localisation' PKG_L10N_DESCRIPTION_EN='English localisation' PKG_L10N_DEPENDENCIES_SIBLINGS=' PKG_L10N_VOICES' PKG_L10N_VOICES_ID="${PKG_L10N_ID}-voices" PKG_L10N_VOICES_DE_ID="${PKG_L10N_VOICES_ID}-de" PKG_L10N_VOICES_EN_ID="${PKG_L10N_VOICES_ID}-en" PKG_L10N_VOICES_PROVIDES=" $PKG_L10N_VOICES_ID" PKG_L10N_VOICES_DE_PROVIDES="$PKG_L10N_VOICES_PROVIDES" PKG_L10N_VOICES_EN_PROVIDES="$PKG_L10N_VOICES_PROVIDES" PKG_L10N_VOICES_DESCRIPTION_DE='German voices' PKG_L10N_VOICES_DESCRIPTION_EN='English voices' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default ## Set the required execution permissions on the server binary. chmod 755 "${PLAYIT_WORKDIR}/gamedata/$(content_path_default)/Binaries/PandoraServer.bin" # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. ## Run the game binary from its parent directory. game_exec_line() { cat <<- 'EOF' # Run the game binary from its parent directory. cd Binaries ./Pandora.bin "$@" EOF } launchers_generation # Build packages. packages_generation case "$(messages_language)" in ('fr') lang_string='version %s :' lang_fr='française' lang_de='allemande' lang_en='anglaise' ;; ('en'|*) lang_string='%s version:' lang_fr='French' lang_de='German' lang_en='English' ;; esac printf '\n' printf "$lang_string" "$lang_fr" print_instructions 'PKG_BIN' 'PKG_DATA' 'PKG_L10N_FR' 'PKG_L10N_VOICES_EN' printf "$lang_string" "$lang_de" print_instructions 'PKG_BIN' 'PKG_DATA' 'PKG_L10N_DE' 'PKG_L10N_VOICES_DE' printf "$lang_string" "$lang_en" print_instructions 'PKG_BIN' 'PKG_DATA' 'PKG_L10N_EN' 'PKG_L10N_VOICES_EN' # Clean up. working_directory_cleanup exit 0 games/play-pharaoh.sh0000755000000000000000000001206114471751340013602 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2015 Antoine Le Gonidec set -o errexit ### # Pharaoh # send your bug reports to vv221@dotslashplay.it ### script_version=20260325.6 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='pharaoh' GAME_NAME='Pharaoh' # Pharaoh + Cleopatra ARCHIVE_BASE_0_NAME='setup_pharaoh_gold_2.1.0.15.exe' ARCHIVE_BASE_0_MD5='62298f00f1f2268c8d5004f5b2e9fc93' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_SIZE='804849' ARCHIVE_BASE_0_VERSION='2.1-gog2.1.0.15' ARCHIVE_BASE_0_URL='https://www.gog.com/game/pharaoh_cleopatra' # Akhenaten # cf. https://github.com/dalerank/Akhenaten ARCHIVE_OPTIONAL_AKHENATEN_1_NAME='akhenaten.linux' # In that order: # - release 1638 (0.2.6) # - release 1466 (0.2.5) # - release 1036 # - release 784 # - release 205 ARCHIVE_OPTIONAL_AKHENATEN_1_MD5=' b670df5972c9d189f2eebf1df5f2bc96 a7e38f4e0863065754817285e193752b d35934a08420b82d55ed41405d5bea61 eebce8cd3a284399d271b1f9e2b02461 cdd40aa1ab541035b1a2c5e02cbe5064' ARCHIVE_OPTIONAL_AKHENATEN_1_SIZE='177630' ARCHIVE_OPTIONAL_AKHENATEN_1_URL='https://dalerank.itch.io/akhenaten' # release 108 (still called "Ozyamandias") ARCHIVE_OPTIONAL_AKHENATEN_0_NAME='ozymandias.linux' ARCHIVE_OPTIONAL_AKHENATEN_0_MD5='7e52e2e90f5b00069cd312507d55c518' ARCHIVE_OPTIONAL_AKHENATEN_0_SIZE='31820' CONTENT_PATH_DEFAULT='app' CONTENT_GAME_BIN_WINE_FILES=' Pharaoh.exe Pharaoh.ini' # Pharaoh.exe requirements CONTENT_LIBS_BIN_WINE_FILES=' smackw32.dll mss32.dll binkw32.dll' CONTENT_GAME0_BIN_WINE_FILES=' MP3DEC.ASI mssb16.tsk *.M3D' CONTENT_GAME_DATA_FILES=' AUDIO BINKS Data Maps auto reason phrases.txt campaign.txt eventmsg.txt Figure_model.txt Figure_model_*.txt music.txt Pharaoh_MM.txt Pharaoh_Model_*.txt Pharaoh_Text.txt Tax_Sentiment_Model_*.txt trade_recommends.txt Pharaoh2.emp Pharaoh_MM.eng Pharaoh_Text.eng mission1.pak *.inf' CONTENT_DOC_DATA_FILES=' Mission Editor Guide.txt Readme.txt *.pdf' USER_PERSISTENT_DIRECTORIES=' Save' USER_PERSISTENT_FILES=' *.ini' # WINE - Without a virtual desktop, the game menu is rendered as a black screen after the introduction movie. # https://bugs.winehq.org/show_bug.cgi?id=59562 # (WINE 11.5) WINE_VIRTUAL_DESKTOP='auto' APP_MAIN_EXE_BIN_LINUX='akhenaten.linux' APP_MAIN_EXE_BIN_WINE='Pharaoh.exe' APP_MAIN_ICON='cleoicon.ico' PACKAGES_LIST=' PKG_BIN_WINE PKG_DATA' PACKAGES_LIST_AKHENATEN=" PKG_BIN_LINUX $PACKAGES_LIST" PKG_BIN_ID="$GAME_ID" PKG_BIN_PROVIDES=" $PKG_BIN_ID" PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_LINUX_ID="${PKG_BIN_ID}-akhenaten" PKG_BIN_LINUX_PROVIDES="$PKG_BIN_PROVIDES" PKG_BIN_LINUX_DESCRIPTION='using the Akhenaten engine' PKG_BIN_LINUX_ARCH='64' PKG_BIN_LINUX_DEPENDENCIES_SIBLINGS="$PKG_BIN_DEPENDENCIES_SIBLINGS" PKG_BIN_LINUX_DEPENDENCIES_LIBRARIES=' libc.so.6 libm.so.6 libSDL2-2.0.so.0 libSDL2_mixer-2.0.so.0 libz.so.1' # Easier upgrades from pre-20231105.3 packages PKG_BIN_LINUX_PROVIDES="$PKG_BIN_LINUX_PROVIDES pharaoh-ozymandias" PKG_BIN_WINE_ID="${PKG_BIN_ID}-wine" PKG_BIN_WINE_PROVIDES="$PKG_BIN_PROVIDES" PKG_BIN_WINE_DESCRIPTION='using WINE' PKG_BIN_WINE_ARCH='32' PKG_BIN_WINE_DEPENDENCIES_SIBLINGS="$PKG_BIN_DEPENDENCIES_SIBLINGS" PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Check for the presence of the Akhenaten native engine binary (optional). archive_initialize_optional \ 'ARCHIVE_AKHENATEN' \ 'ARCHIVE_OPTIONAL_AKHENATEN_1' \ 'ARCHIVE_OPTIONAL_AKHENATEN_0' if archive_is_available 'ARCHIVE_AKHENATEN'; then export PACKAGES_LIST="$PACKAGES_LIST_AKHENATEN" fi # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default if archive_is_available 'ARCHIVE_AKHENATEN'; then application_exe=$( set_current_package 'PKG_BIN_LINUX' application_exe 'APP_MAIN' ) install -D --mode=755 \ "$(archive_path 'ARCHIVE_AKHENATEN')" \ "$(package_path 'PKG_BIN_LINUX')$(path_game_data)/${application_exe}" fi # Write launchers. # WINE - Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. ln --force --symbolic $(path_libraries)/* "\${PATH_PREFIX}" EOF } launchers_generation 'PKG_BIN_WINE' if archive_is_available 'ARCHIVE_AKHENATEN'; then launchers_generation 'PKG_BIN_LINUX' fi # Build packages. packages_generation if archive_is_available 'ARCHIVE_AKHENATEN'; then printf '\n' printf 'Akhenaten:' print_instructions 'PKG_DATA' 'PKG_BIN_LINUX' printf 'WINE:' print_instructions 'PKG_DATA' 'PKG_BIN_WINE' else print_instructions fi # Clean up. working_directory_cleanup exit 0 games/play-pillars-of-eternity-1-expansions.sh0000755000000000000000000002575114471751340020426 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec set -o errexit ### # Pillars of Eternity expansions: # - Kickstarter item # - Kickstarter pet # - Pre-order item and pet # - The White March, Part 1 # - The White March, Part 2 # - Deadfire Pack # send your bug reports to vv221@dotslashplay.it ### script_version=20260411.2 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='pillars-of-eternity-1' GAME_NAME='Pillars of Eternity' EXPANSION_ID_TIER1BACKER='kickstarter-item' EXPANSION_NAME_TIER1BACKER='Kickstarter item' EXPANSION_ID_TIER2BACKER='kickstarter-pet' EXPANSION_NAME_TIER2BACKER='Kickstarter pet' EXPANSION_ID_PREORDER='preorder-content' EXPANSION_NAME_PREORDER='Pre-order item and pet' EXPANSION_ID_TWM1='the-white-march-part-1' EXPANSION_NAME_TWM1='The White March Part Ⅰ' EXPANSION_ID_TWM2='the-white-march-part-2' EXPANSION_NAME_TWM2='The White March Part Ⅱ' EXPANSION_ID_DEADFIRE='deadfire-pack' EXPANSION_NAME_DEADFIRE='Deadfire Pack' # Kickstarter item ARCHIVE_BASE_TIER1BACKER_3_NAME='pillars_of_eternity_kickstarter_item_3_9_3_88783_89970.sh' ARCHIVE_BASE_TIER1BACKER_3_MD5='90ebb0616bf13c8840ecd7026b700fc9' ARCHIVE_BASE_TIER1BACKER_3_SIZE='971' ARCHIVE_BASE_TIER1BACKER_3_VERSION='3.9.3.88783-gog89970' ARCHIVE_BASE_TIER1BACKER_2_NAME='pillars_of_eternity_kickstarter_item_3_8_0_88149_85633.sh' ARCHIVE_BASE_TIER1BACKER_2_MD5='89b14ee2a9497afc1a546192b3de5b5b' ARCHIVE_BASE_TIER1BACKER_2_SIZE='971' ARCHIVE_BASE_TIER1BACKER_2_VERSION='3.8.0.88149-gog85633' ARCHIVE_BASE_TIER1BACKER_1_NAME='pillars_of_eternity_kickstarter_item_3_8_0_87535_80946.sh' ARCHIVE_BASE_TIER1BACKER_1_MD5='67b7ae65b7c1502e37110b7f4402a19f' ARCHIVE_BASE_TIER1BACKER_1_SIZE='971' ARCHIVE_BASE_TIER1BACKER_1_VERSION='3.8.0.87535-gog80946' ARCHIVE_BASE_TIER1BACKER_0_NAME='gog_pillars_of_eternity_kickstarter_item_dlc_2.0.0.2.sh' ARCHIVE_BASE_TIER1BACKER_0_MD5='b4c29ae17c87956471f2d76d8931a4e5' ARCHIVE_BASE_TIER1BACKER_0_SIZE='924' ARCHIVE_BASE_TIER1BACKER_0_VERSION='1.0-gog2.0.0.2' # Kickstarter pet ARCHIVE_BASE_TIER2BACKER_3_NAME='pillars_of_eternity_kickstarter_pet_3_9_3_88783_89970.sh' ARCHIVE_BASE_TIER2BACKER_3_MD5='887303d0d464d61750fb9de9169c8f00' ARCHIVE_BASE_TIER2BACKER_3_SIZE='978' ARCHIVE_BASE_TIER2BACKER_3_VERSION='3.9.3.88783-gog89970' ARCHIVE_BASE_TIER2BACKER_2_NAME='pillars_of_eternity_kickstarter_pet_3_8_0_88149_85633.sh' ARCHIVE_BASE_TIER2BACKER_2_MD5='4011745c101d3df071e6a359ff6f499b' ARCHIVE_BASE_TIER2BACKER_2_SIZE='978' ARCHIVE_BASE_TIER2BACKER_2_VERSION='3.8.0.88149-gog85633' ARCHIVE_BASE_TIER2BACKER_1_NAME='pillars_of_eternity_kickstarter_pet_3_8_0_87535_80946.sh' ARCHIVE_BASE_TIER2BACKER_1_MD5='f5ee7919aaf466d45c12689a4de327e9' ARCHIVE_BASE_TIER2BACKER_1_SIZE='978' ARCHIVE_BASE_TIER2BACKER_1_VERSION='3.8.0.87535-gog80946' ARCHIVE_BASE_TIER2BACKER_0_NAME='gog_pillars_of_eternity_kickstarter_pet_dlc_2.0.0.2.sh' ARCHIVE_BASE_TIER2BACKER_0_MD5='3653fc2a98ef578335f89b607f0b7968' ARCHIVE_BASE_TIER2BACKER_0_SIZE='924' ARCHIVE_BASE_TIER2BACKER_0_VERSION='1.0-gog2.0.0.2' # Pre-order item and pet ARCHIVE_BASE_PREORDER_3_NAME='pillars_of_eternity_preorder_item_and_pet_3_9_3_88783_89970.sh' ARCHIVE_BASE_PREORDER_3_MD5='7d9272afbb052137d1e3f0efc5c2ad6e' ARCHIVE_BASE_PREORDER_3_SIZE='963' ARCHIVE_BASE_PREORDER_3_VERSION='3.9.3.88783-gog89970' ARCHIVE_BASE_PREORDER_2_NAME='pillars_of_eternity_preorder_item_and_pet_3_8_0_88149_85633.sh' ARCHIVE_BASE_PREORDER_2_MD5='7bced964b41788b3c066fd58a9fbb58d' ARCHIVE_BASE_PREORDER_2_SIZE='963' ARCHIVE_BASE_PREORDER_2_VERSION='3.8.0.88149-gog85633' ARCHIVE_BASE_PREORDER_1_NAME='pillars_of_eternity_preorder_item_and_pet_3_8_0_87535_80946.sh' ARCHIVE_BASE_PREORDER_1_MD5='ad7a6c20a937f76a356e1613495c43c0' ARCHIVE_BASE_PREORDER_1_SIZE='963' ARCHIVE_BASE_PREORDER_1_VERSION='3.8.0.87535-gog80946' ARCHIVE_BASE_PREORDER_0_NAME='gog_pillars_of_eternity_preorder_item_and_pet_dlc_2.0.0.2.sh' ARCHIVE_BASE_PREORDER_0_MD5='b86ad866acb62937d2127407e4beab19' ARCHIVE_BASE_PREORDER_0_SIZE='924' ARCHIVE_BASE_PREORDER_0_VERSION='1.0-gog2.0.0.2' # The White March, Part 1 ARCHIVE_BASE_TWM1_6_NAME='pillars_of_eternity_the_white_march_part_1_3_9_3_88783_89970.sh' ARCHIVE_BASE_TWM1_6_MD5='d49032f5f7233f83173dace17a4d7c1d' ARCHIVE_BASE_TWM1_6_SIZE='7569365' ARCHIVE_BASE_TWM1_6_VERSION='3.9.3.88783-gog89970' ARCHIVE_BASE_TWM1_6_URL='https://www.gog.com/game/pillars_of_eternity_the_white_march_part_1' ARCHIVE_BASE_TWM1_5_NAME='pillars_of_eternity_the_white_march_part_1_3_8_0_88149_85633.sh' ARCHIVE_BASE_TWM1_5_MD5='13a423d8622a3251aefc0a6254e1421c' ARCHIVE_BASE_TWM1_5_SIZE='7564726' ARCHIVE_BASE_TWM1_5_VERSION='3.8.0.88149-gog85633' ARCHIVE_BASE_TWM1_4_NAME='pillars_of_eternity_the_white_march_part_1_3_8_0_87535_80946.sh' ARCHIVE_BASE_TWM1_4_MD5='ad2218672a0aba7ee0a30b73eefc81dd' ARCHIVE_BASE_TWM1_4_SIZE='7564726' ARCHIVE_BASE_TWM1_4_VERSION='3.8.0.87535-gog80946' ARCHIVE_BASE_TWM1_3_NAME='pillars_of_eternity_white_march_part_1_dlc_en_3_07_0_1318_17464.sh' ARCHIVE_BASE_TWM1_3_MD5='cc72f59ee20238ff05c47646b4618f01' ARCHIVE_BASE_TWM1_3_SIZE='5507108' ARCHIVE_BASE_TWM1_3_VERSION='3.7.0.1318-gog17464' ARCHIVE_BASE_TWM1_2_NAME='pillars_of_eternity_white_march_part_1_dlc_en_3_07_16598.sh' ARCHIVE_BASE_TWM1_2_MD5='054b6af430da1ed2635b9c6b4ed56866' ARCHIVE_BASE_TWM1_2_SIZE='5500000' ARCHIVE_BASE_TWM1_2_VERSION='3.7.0.1284-gog16598' ARCHIVE_BASE_TWM1_1_NAME='gog_pillars_of_eternity_white_march_part_1_dlc_2.10.0.12.sh' ARCHIVE_BASE_TWM1_1_MD5='8fafcb549fffd2de24f381a85e859622' ARCHIVE_BASE_TWM1_1_SIZE='5500000' ARCHIVE_BASE_TWM1_1_VERSION='3.06.0.1254-gog2.10.0.12' ARCHIVE_BASE_TWM1_0_NAME='gog_pillars_of_eternity_white_march_part_1_dlc_2.9.0.11.sh' ARCHIVE_BASE_TWM1_0_MD5='98424615626c82ed723860d421f187b6' ARCHIVE_BASE_TWM1_0_SIZE='5500000' ARCHIVE_BASE_TWM1_0_VERSION='3.05.0.1186-gog2.9.0.11' # The White March, Part 2 ARCHIVE_BASE_TWM2_6_NAME='pillars_of_eternity_the_white_march_part_2_3_9_3_88783_89970.sh' ARCHIVE_BASE_TWM2_6_MD5='f0637dfad49a2033540187c11d31066b' ARCHIVE_BASE_TWM2_6_SIZE='6849256' ARCHIVE_BASE_TWM2_6_VERSION='3.9.3.88783-gog89970' ARCHIVE_BASE_TWM2_6_URL='https://www.gog.com/game/pillars_of_eternity_the_white_march_part_2' ARCHIVE_BASE_TWM2_5_NAME='pillars_of_eternity_the_white_march_part_2_3_8_0_88149_85633.sh' ARCHIVE_BASE_TWM2_5_MD5='90a7c82b7dab1939af91110b87248015' ARCHIVE_BASE_TWM2_5_SIZE='6845084' ARCHIVE_BASE_TWM2_5_VERSION='3.8.0.88149-gog85633' ARCHIVE_BASE_TWM2_4_NAME='pillars_of_eternity_the_white_march_part_2_3_8_0_87535_80946.sh' ARCHIVE_BASE_TWM2_4_MD5='b64f8528243197aaec1a6a99fb43e728' ARCHIVE_BASE_TWM2_4_SIZE='6845084' ARCHIVE_BASE_TWM2_4_VERSION='3.8.0.87535-gog80946' ARCHIVE_BASE_TWM2_3_NAME='pillars_of_eternity_white_march_part_2_dlc_en_3_07_0_1318_17464.sh' ARCHIVE_BASE_TWM2_3_MD5='03067ebdd878cc16c283f63ddf015e90' ARCHIVE_BASE_TWM2_3_SIZE='4360158' ARCHIVE_BASE_TWM2_3_VERSION='3.7.0.1318-gog17464' ARCHIVE_BASE_TWM2_2_NAME='pillars_of_eternity_white_march_part_2_dlc_en_3_07_16598.sh' ARCHIVE_BASE_TWM2_2_MD5='db3a345b2b2782e2ad075dd32567f303' ARCHIVE_BASE_TWM2_2_SIZE='4300000' ARCHIVE_BASE_TWM2_2_VERSION='3.7.0.1284-gog16598' ARCHIVE_BASE_TWM2_1_NAME='gog_pillars_of_eternity_white_march_part_2_dlc_2.6.0.7.sh' ARCHIVE_BASE_TWM2_1_MD5='fdc1446661a358961379fbec24c44680' ARCHIVE_BASE_TWM2_1_SIZE='4400000' ARCHIVE_BASE_TWM2_1_VERSION='3.06.1254-gog2.6.0.7' ARCHIVE_BASE_TWM2_0_NAME='gog_pillars_of_eternity_white_march_part_2_dlc_2.5.0.6.sh' ARCHIVE_BASE_TWM2_0_MD5='483d4b8cc046a07ec91a6306d3409e23' ARCHIVE_BASE_TWM2_0_SIZE='4400000' ARCHIVE_BASE_TWM2_0_VERSION='3.05.1186-gog2.5.0.6' # Deadfire Pack ARCHIVE_BASE_DEADFIRE_5_NAME='pillars_of_eternity_deadfire_pack_3_9_3_88783_89970.sh' ARCHIVE_BASE_DEADFIRE_5_MD5='be6ba4a581039eb765c5900edfe547c7' ARCHIVE_BASE_DEADFIRE_5_SIZE='74014' ARCHIVE_BASE_DEADFIRE_5_VERSION='3.9.3.88783-gog89970' ARCHIVE_BASE_DEADFIRE_5_URL='https://www.gog.com/game/pillars_of_eternity_deadfire_pack' ARCHIVE_BASE_DEADFIRE_4_NAME='pillars_of_eternity_deadfire_pack_3_8_0_88149_85633.sh' ARCHIVE_BASE_DEADFIRE_4_MD5='5cb48dd4e262a46c9fc74ee760d0325e' ARCHIVE_BASE_DEADFIRE_4_SIZE='73988' ARCHIVE_BASE_DEADFIRE_4_VERSION='3.8.0.88149-gog85633' ARCHIVE_BASE_DEADFIRE_3_NAME='pillars_of_eternity_deadfire_pack_3_8_0_87535_80946.sh' ARCHIVE_BASE_DEADFIRE_3_MD5='ece6e59bc5bd1f59498140d3a4f1fb74' ARCHIVE_BASE_DEADFIRE_3_SIZE='73988' ARCHIVE_BASE_DEADFIRE_3_VERSION='3.8.0.87535-gog80946' ARCHIVE_BASE_DEADFIRE_2_NAME='pillars_of_eternity_deadfire_pack_dlc_en_3_07_0_1318_20099.sh' ARCHIVE_BASE_DEADFIRE_2_MD5='da315aba26784e55aa51139cebb7f9d2' ARCHIVE_BASE_DEADFIRE_2_SIZE='922' ARCHIVE_BASE_DEADFIRE_2_VERSION='3.07.0.1318-gog20099' ARCHIVE_BASE_DEADFIRE_1_NAME='pillars_of_eternity_deadfire_pack_dlc_en_3_07_0_1318_17462.sh' ARCHIVE_BASE_DEADFIRE_1_MD5='021362da5912dc8a3e47473e97726f7f' ARCHIVE_BASE_DEADFIRE_1_SIZE='1300' ARCHIVE_BASE_DEADFIRE_1_VERSION='3.07.0.1318-gog17462' ARCHIVE_BASE_DEADFIRE_0_NAME='pillars_of_eternity_deadfire_pack_dlc_en_3_07_16380.sh' ARCHIVE_BASE_DEADFIRE_0_MD5='2fc0dc21648953be1c571e28b1e3d002' ARCHIVE_BASE_DEADFIRE_0_SIZE='1300' ARCHIVE_BASE_DEADFIRE_0_VERSION='3.07-gog16380' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME_MAIN_FILES=' PillarsOfEternity_Data' CONTENT_GAME_MAIN_FILES_TIER1BACKER=' PillarsOfEternity_Data/assetbundles/prefabs/objectbundle/tier1backer*' CONTENT_GAME_MAIN_FILES_TIER2BACKER=' PillarsOfEternity_Data/assetbundles/prefabs/objectbundle/tier2backer*' CONTENT_GAME_MAIN_FILES_PREORDER=' PillarsOfEternity_Data/assetbundles/prefabs/objectbundle/tier1preorder*' PKG_PARENT_ID="$GAME_ID" PKG_TWM1_ID="${GAME_ID}-${EXPANSION_ID_TWM1}" PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_PARENT' PKG_MAIN_DEPENDENCIES_SIBLINGS_TWM2="$PKG_MAIN_DEPENDENCIES_SIBLINGS PKG_TWM1" # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default case "$(current_archive)" in # The White March, Part 2 - Remove files already provided by a dependency. ('ARCHIVE_BASE_TWM2_'*) rm --force \ "$(path_archive_contents)/PillarsOfEternity_Data/assetbundles/prefabs/objectbundle/px1_cre_blight_ice_terror" \ "$(path_archive_contents)/PillarsOfEternity_Data/assetbundles/prefabs/objectbundle/px1_cre_blight_ice_terror.unity3d" ;; # Deadfire Pack - Fix a typo in a file path. ('ARCHIVE_BASE_DEADFIRE_'*) if [ -e "$(path_archive_contents)/PillarsOfEternity_data" ]; then mv \ "$(path_archive_contents)/PillarsOfEternity_data" \ "$(path_archive_contents)/PillarsOfEternity_Data" fi ;; esac # Include game data. content_inclusion_default # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-pillars-of-eternity-1.sh0000755000000000000000000000755314471751340016241 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2017 Mopi set -o errexit ### # Pillars of Eternity # send your bug reports to vv221@dotslashplay.it ### script_version=20260411.3 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='pillars-of-eternity-1' GAME_NAME='Pillars of Eternity' ARCHIVE_BASE_2_NAME='pillars_of_eternity_3_9_3_88783_89970.sh' ARCHIVE_BASE_2_MD5='13967d58c100a63625c428a34faef359' ARCHIVE_BASE_2_SIZE='17103656' ARCHIVE_BASE_2_VERSION='3.9.3.88783-gog89970' ARCHIVE_BASE_2_URL='https://www.gog.com/game/pillars_of_eternity_hero_edition' ARCHIVE_BASE_1_NAME='pillars_of_eternity_3_8_0_88149_85633.sh' ARCHIVE_BASE_1_MD5='a705c83007448bf33941924be2c3ac57' ARCHIVE_BASE_1_SIZE='17022011' ARCHIVE_BASE_1_VERSION='3.8.0.88149-gog85633' ARCHIVE_BASE_0_NAME='pillars_of_eternity_3_8_0_87535_80946.sh' ARCHIVE_BASE_0_MD5='805f0a9f9d467937ae52cb33c5aa7515' ARCHIVE_BASE_0_SIZE='17022011' ARCHIVE_BASE_0_VERSION='3.8.0.87535-gog80946' ARCHIVE_BASE_OLD_3_NAME='pillars_of_eternity_en_3_07_0_1318_17461.sh' ARCHIVE_BASE_OLD_3_MD5='57164ad0cbc53d188dde0b38e7491916' ARCHIVE_BASE_OLD_3_SIZE='14801525' ARCHIVE_BASE_OLD_3_VERSION='3.7.0.1318-gog17461' ARCHIVE_BASE_OLD_2_NAME='pillars_of_eternity_en_3_07_16405.sh' ARCHIVE_BASE_OLD_2_MD5='e4271b5e72f1ecc9fbbc4d90937ede05' ARCHIVE_BASE_OLD_2_SIZE='15000000' ARCHIVE_BASE_OLD_2_VERSION='3.7.0.1284-gog16405' ARCHIVE_BASE_OLD_1_NAME='gog_pillars_of_eternity_2.16.0.20.sh' ARCHIVE_BASE_OLD_1_MD5='0d21cf95bda070bdbfbe3e79f8fc32d6' ARCHIVE_BASE_OLD_1_SIZE='15000000' ARCHIVE_BASE_OLD_1_VERSION='3.06.1254-gog2.16.0.20' ARCHIVE_BASE_OLD_0_NAME='gog_pillars_of_eternity_2.15.0.19.sh' ARCHIVE_BASE_OLD_0_MD5='2000052541abb1ef8a644049734e8526' ARCHIVE_BASE_OLD_0_SIZE='15000000' ARCHIVE_BASE_OLD_0_VERSION='3.05.1186-gog2.15.0.19' UNITY3D_NAME='PillarsOfEternity' UNITY3D_PLUGINS_OLD=' ScreenSelector.so' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME_DATA_AREAS_FILES=" ${UNITY3D_NAME}_Data/assetbundles/st_ar_*" CONTENT_DOC_DATA_RELATIVE_PATH='Docs' CONTENT_DOC_DATA_FILES=' pe-game-manual.pdf OFL.TXT readme.txt' PACKAGES_LIST=' PKG_BIN PKG_DATA_AREAS PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libgcc_s.so.1 libm.so.6 libpthread.so.0 librt.so.1 libz.so.1' PKG_BIN_DEPENDENCIES_LIBRARIES_OLD=' libc.so.6 libdl.so.2 libgcc_s.so.1 libgdk_pixbuf-2.0.so.0 libglib-2.0.so.0 libGL.so.1 libGLU.so.1 libgobject-2.0.so.0 libgtk-x11-2.0.so.0 libm.so.6 libpthread.so.0 librt.so.1 libstdc++.so.6 libX11.so.6 libXcursor.so.1' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' PKG_DATA_DEPENDENCIES_SIBLINGS=' PKG_DATA_AREAS' PKG_DATA_AREAS_ID="${PKG_DATA_ID}-areas" PKG_DATA_AREAS_DESCRIPTION="$PKG_DATA_DESCRIPTION - areas" # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Prevent inclusion of Steam library. case "$(current_archive)" in ('ARCHIVE_BASE_OLD_'*) # These builds already rely on UNITY3D_PLUGINS. ;; (*) rm --recursive "$(path_archive_contents)/$(unity3d_name)_Data/Plugins" ;; esac # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-primordia.sh0000755000000000000000000001066414471751340014155 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2021 Antoine Le Gonidec set -o errexit ### # Primordia # send your bug reports to vv221@dotslashplay.it ### script_version=20260310.2 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='primordia' GAME_NAME='Primordia' ARCHIVE_BASE_15_NAME='primordia_5_3_83777.sh' ARCHIVE_BASE_15_MD5='1ccae367747d21fd378247ee9627c848' ARCHIVE_BASE_15_SIZE='1410139' ARCHIVE_BASE_15_VERSION='5.3-gog83777' ARCHIVE_BASE_15_URL='https://www.gog.com/game/primordia' ARCHIVE_BASE_14_NAME='primordia_5_2b_80906.sh' ARCHIVE_BASE_14_MD5='accf027b4f322dfea11d0ccb5514285d' ARCHIVE_BASE_14_SIZE='1404856' ARCHIVE_BASE_14_VERSION='5.2b-gog80906' ARCHIVE_BASE_13_NAME='primordia_5_2a_79719.sh' ARCHIVE_BASE_13_MD5='ce24004eaf34646660a01eaf8b3315ee' ARCHIVE_BASE_13_SIZE='1426939' ARCHIVE_BASE_13_VERSION='5.2a-gog79719' ARCHIVE_BASE_12_NAME='primordia_4_0b_79076.sh' ARCHIVE_BASE_12_MD5='34d1bb696c4ff865a76ba0d06f978def' ARCHIVE_BASE_12_SIZE='1426936' ARCHIVE_BASE_12_VERSION='4.0b-gog79076' ARCHIVE_BASE_11_NAME='primordia_4_0a_77194.sh' ARCHIVE_BASE_11_MD5='75efd6a2e3344a3bc22cbf69459ea79f' ARCHIVE_BASE_11_SIZE='1426936' ARCHIVE_BASE_11_VERSION='4.0a-gog77194' ARCHIVE_BASE_10_NAME='primordia_4_0_75697.sh' ARCHIVE_BASE_10_MD5='cbe5608e47f6bf70364208f686e55161' ARCHIVE_BASE_10_SIZE='1426935' ARCHIVE_BASE_10_VERSION='4.0-gog75697' ARCHIVE_BASE_9_NAME='primordia_3_9_75550.sh' ARCHIVE_BASE_9_MD5='d28470e41889897e45d0f6f400517499' ARCHIVE_BASE_9_SIZE='1426932' ARCHIVE_BASE_9_VERSION='3.9-gog75550' ARCHIVE_BASE_8_NAME='primordia_3_8_75071.sh' ARCHIVE_BASE_8_MD5='6f184b62fb442f7e6f0f791bc51717f0' ARCHIVE_BASE_8_SIZE='1426930' ARCHIVE_BASE_8_VERSION='3.8-gog75071' ARCHIVE_BASE_7_NAME='primordia_3_7_73438.sh' ARCHIVE_BASE_7_MD5='8bae6792e72a9ac69263b6eb4f0e03e6' ARCHIVE_BASE_7_SIZE='1426929' ARCHIVE_BASE_7_VERSION='3.7-gog73438' ARCHIVE_BASE_6_NAME='primordia_3_6_70667.sh' ARCHIVE_BASE_6_MD5='dc254ed674114e4776a91454e35d3741' ARCHIVE_BASE_6_SIZE='1426928' ARCHIVE_BASE_6_VERSION='3.6-gog70667' ARCHIVE_BASE_5_NAME='primordia_3_6_70159.sh' ARCHIVE_BASE_5_MD5='d1f9eeec2084933463d1b43b5466f5f1' ARCHIVE_BASE_5_SIZE='1426928' ARCHIVE_BASE_5_VERSION='3.6-gog70159' ARCHIVE_BASE_4_NAME='primordia_3_5b_69802.sh' ARCHIVE_BASE_4_MD5='b3ca4bfa8341f68ec6eb2d6c36f36e0f' ARCHIVE_BASE_4_SIZE='1426833' ARCHIVE_BASE_4_VERSION='3.5b-gog69802' ARCHIVE_BASE_3_NAME='primordia_3_5a_69504.sh' ARCHIVE_BASE_3_MD5='62d64492018c9b7fe020303040c5dbe9' ARCHIVE_BASE_3_SIZE='1427316' ARCHIVE_BASE_3_VERSION='3.5a-gog69504' ARCHIVE_BASE_2_NAME='primordia_3_0a_65125.sh' ARCHIVE_BASE_2_MD5='5b096e36b814c16c0ce067046e194c94' ARCHIVE_BASE_2_SIZE='1500000' ARCHIVE_BASE_2_VERSION='3.0a-gog65125' ARCHIVE_BASE_1_NAME='primordia_3_58594.sh' ARCHIVE_BASE_1_MD5='3cd92a7767d561f2d982014117ee0576' ARCHIVE_BASE_1_SIZE='1500000' ARCHIVE_BASE_1_VERSION='3.0-gog58594' ARCHIVE_BASE_0_NAME='primordia_italian_53699.sh' ARCHIVE_BASE_0_MD5='812917de017fde37b1c448f156e4ae7d' ARCHIVE_BASE_0_SIZE='1500000' ARCHIVE_BASE_0_VERSION='2.6-gog53699' ARCHIVE_OPTIONAL_ICONS_NAME='primordia_icons.tar.xz' ARCHIVE_OPTIONAL_ICONS_MD5='66c1d186075708574ee870a9015b4ff6' ARCHIVE_OPTIONAL_ICONS_URL='https://downloads.dotslashplay.it/games/primordia/' CONTENT_ICONS_PATH='.' CONTENT_ICONS_FILES=' 16x16 24x24 32x32 48x48 256x256' AGS_NAME='primordia' CONTENT_PATH_DEFAULT='data/noarch/game' # This file is required for correct display of the main menu. CONTENT_GAME0_MAIN_FILES=' ENGV.tmp' CONTENT_DOC_MAIN_FILES=' licenses' APP_MAIN_ICON='../support/icon.png' APP_MAIN_ICON_2='Primordia.exe' APP_MAIN_ICON_1='Primordia.exe' APP_MAIN_ICON_0='Primordia.exe' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run the default initialization actions initialization_default "$@" # Extract game data archive_extraction_default # Include game data content_inclusion_icons content_inclusion_default # Write launchers launchers_generation # Build packages packages_generation print_instructions # Clean up working_directory_cleanup exit 0 games/play-prince-of-persia-the-sands-of-time.sh0000755000000000000000000001252114471751340020546 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2021 Antoine Le Gonidec set -o errexit ### # Prince of Persia: The Sands of Time # send your bug reports to vv221@dotslashplay.it ### script_version=20260322.2 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='prince-of-persia-the-sands-of-time' GAME_NAME='Prince of Persia: The Sands of Time' ARCHIVE_BASE_FR_0_NAME='setup_prince_of_persia_-_the_sands_of_time_181_(french)_(28548).exe' ARCHIVE_BASE_FR_0_MD5='b71ed96b13461f56c8a47e16fbecadbb' ARCHIVE_BASE_FR_0_TYPE='innosetup' ARCHIVE_BASE_FR_0_PART1_NAME='setup_prince_of_persia_-_the_sands_of_time_181_(french)_(28548)-1.bin' ARCHIVE_BASE_FR_0_PART1_MD5='691e5144e34bf71ab15d45de11089b34' ARCHIVE_BASE_FR_0_SIZE='1408358' ARCHIVE_BASE_FR_0_VERSION='1.00.181-gog28548' ARCHIVE_BASE_FR_0_URL='https://www.gog.com/game/prince_of_persia_the_sands_of_time' ARCHIVE_BASE_EN_0_NAME='setup_prince_of_persia_-_the_sands_of_time_181_(28548).exe' ARCHIVE_BASE_EN_0_MD5='008b4359cafb21dd4e437860dc23e2cf' ARCHIVE_BASE_EN_0_TYPE='innosetup' ARCHIVE_BASE_EN_0_PART1_NAME='setup_prince_of_persia_-_the_sands_of_time_181_(28548)-1.bin' ARCHIVE_BASE_EN_0_PART1_MD5='639fd428677dc8fb52e864422cbfe26d' ARCHIVE_BASE_EN_0_SIZE='1413339' ARCHIVE_BASE_EN_0_VERSION='1.00.181-gog28548' ARCHIVE_BASE_EN_0_URL='https://www.gog.com/game/prince_of_persia_the_sands_of_time' CONTENT_PATH_DEFAULT='.' # TODO: Check why these libraries are required. CONTENT_LIBS_BIN_FILES=' binkw32.dll eax.dll MFC71.DLL' # Required for hardware detection on launch CONTENT_LIBS0_BIN_FILES=' detectionapi.dll directx9tests.dll' # Localised error messages are included in this library. CONTENT_LIBS_L10N_LIBS_FILES=' poplauncherres.dll' CONTENT_GAME_BIN_FILES=' POP.EXE PrinceOfPersia.EXE directxtests.tst systemtests.tst' CONTENT_GAME0_BIN_PATH='__support/app' CONTENT_GAME0_BIN_FILES=' Hardware.ini Sound/DARE.INI' CONTENT_GAME_L10N_FILES=' POPData.BF Sound/soundlocal.big Sound/soundlocal.fat Video/loading.int' CONTENT_GAME_DATA_FILES=' Profiles Sound Video prince.bf' CONTENT_DOC_L10N_FILES=' manual.pdf Licence.txt readme.txt' USER_PERSISTENT_FILES=' Hardware.ini Sound/DARE.INI' USER_PERSISTENT_DIRECTORIES=' Profiles' APP_MAIN_EXE='PrinceOfPersia.EXE' # Work around fog rendering problems. # On first launch, the game runs with display problems related to fog rendering. # Quit the game and launch it again, it should automatically be fixed on the second launch. APP_MAIN_PRERUN=' # Work around fog rendering problems. # On first launch, the game runs with display problems related to fog rendering. # Quit the game and launch it again, it should automatically be fixed on the second launch. config_file="Hardware.ini" dos2unix --quiet "$config_file" sed \ --in-place \ --expression="s/InvertFogRange=.*/InvertFogRange=0/" \ "$config_file" unix2dos --quiet "$config_file" ' # Work around an override of configuration file. APP_MAIN_POSTRUN=' # Work around an override of configuration file. config_file="Hardware.ini" config_file_persistent="${PATH_PERSISTENT}/${config_file}" if \ [ -f "$config_file" ] \ && [ ! -h "$config_file" ] then cp --remove-destination "$config_file" "$config_file_persistent" ln --symbolic --force "$config_file_persistent" "$config_file" fi ' PACKAGES_LIST=' PKG_BIN PKG_L10N PKG_L10N_LIBS PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_L10N_BASE PKG_DATA' # Work around fog rendering problems. PKG_BIN_DEPENDENCIES_COMMANDS=' dos2unix' # Easier upgrades from pre-20231018.1 packages PKG_BIN_PROVIDES=' prince-of-persia' PKG_L10N_BASE_ID="${GAME_ID}-l10n" PKG_L10N_ID_FR="${PKG_L10N_BASE_ID}-fr" PKG_L10N_ID_EN="${PKG_L10N_BASE_ID}-en" PKG_L10N_PROVIDES=" $PKG_L10N_BASE_ID" PKG_L10N_DESCRIPTION_FR='French localisation' PKG_L10N_DESCRIPTION_EN='English localisation' PKG_L10N_DEPENDENCIES_SIBLINGS=' PKG_L10N_LIBS' # Easier upgrades from pre-20231018.1 packages PKG_L10N_PROVIDES="$PKG_L10N_PROVIDES prince-of-persia-l10n" PKG_L10N_LIBS_ID_FR="${PKG_L10N_ID_FR}-libs" PKG_L10N_LIBS_ID_EN="${PKG_L10N_ID_EN}-libs" PKG_L10N_LIBS_PROVIDES=" ${PKG_L10N_BASE_ID}-libs" PKG_L10N_LIBS_ARCH='32' PKG_L10N_LIBS_DESCRIPTION_FR="$PKG_L10N_DESCRIPTION_FR - libraries" PKG_L10N_LIBS_DESCRIPTION_EN="$PKG_L10N_DESCRIPTION_EN - libraries" PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Easier upgrades from pre-20231018.1 packages PKG_DATA_PROVIDES=' prince-of-persia-data' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Install shipped libraries wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. ln --force --symbolic $(path_libraries)/* "\${PATH_PREFIX}" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-pyre.sh0000755000000000000000000001047114471751340013142 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2018 Antoine Le Gonidec set -o errexit ### # Pyre # send your bug reports to vv221@dotslashplay.it ### script_version=20250731.2 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='pyre' GAME_NAME='Pyre' ARCHIVE_BASE_ITCH_1_NAME='pyre-linux.zip' ARCHIVE_BASE_ITCH_1_MD5='44e0fe30a9d8bcf73c4fa288dd4324ab' ARCHIVE_BASE_ITCH_1_SIZE='8051755' ARCHIVE_BASE_ITCH_1_VERSION='1.50476-itch.2019.03.19' ARCHIVE_BASE_ITCH_1_URL='https://supergiant-games.itch.io/pyre' ARCHIVE_BASE_GOG_1_NAME='pyre_1_50427_11957_23366.sh' ARCHIVE_BASE_GOG_1_MD5='ae34d8b4c069ffd7a98f295af4596e1f' ARCHIVE_BASE_GOG_1_SIZE='8104850' ARCHIVE_BASE_GOG_1_VERSION='1.50427-gog23366' ARCHIVE_BASE_GOG_1_URL='https://www.gog.com/game/pyre' ARCHIVE_BASE_GOG_0_NAME='pyre_en_1_0_18732.sh' ARCHIVE_BASE_GOG_0_MD5='83ea264e95e2519aba72078d35290d49' ARCHIVE_BASE_GOG_0_SIZE='8100000' ARCHIVE_BASE_GOG_0_VERSION='1.0-gog18732' CONTENT_PATH_DEFAULT_ITCH='.' CONTENT_PATH_DEFAULT_GOG='data/noarch/game' CONTENT_LIBS_FILES=' libBink2.so libFModPlugins.so libfmod.so.8 libfmodstudio.so.8 liblua52.so libMonoPosixHelper.so' CONTENT_LIBS_BIN64_RELATIVE_PATH='lib64' CONTENT_LIBS_BIN64_FILES="$CONTENT_LIBS_FILES" CONTENT_LIBS_BIN32_RELATIVE_PATH='lib' CONTENT_LIBS_BIN32_FILES="$CONTENT_LIBS_FILES" CONTENT_GAME_BIN64_FILES=' Pyre.bin.x86_64' CONTENT_GAME_BIN32_FILES=' Pyre.bin.x86' CONTENT_GAME_DATA_FILES=' gamecontrollerdb.txt monoconfig monomachineconfig Content *.bmp *.config *.cur *.dll *.exe *.pdb *.xml' CONTENT_DOC_DATA_FILES=' Linux.README ReadMe.txt' ## Using system-provided Mono 6.8.0.105, the game crashes at the end of the initial loading phase, ## right before showing the game menu, with the following trace: ## ## [FMOD] d:\Jenkins\workspace\Ursa_SDL2\GSGE\GSGE\Code\Audio\AudioManager.cs:ln - 597 Unsupported file or audio format. Failed to create VO sound bank: Content/Audio/FMOD/Build/Desktop/VO.fsb ## at GSGE.AudioManager.LoadVoiceBank () [0x0034a] in <160751e4f5c141ae8efac1285e76459f>:0 ## at GSGE.AudioManager.Preload () [0x00021] in <160751e4f5c141ae8efac1285e76459f>:0 ## at GSGE.Code.GUI.LaunchScreen+<>c__DisplayClassc.b__9 () [0x00040] in <160751e4f5c141ae8efac1285e76459f>:0 ## at System.Threading.Tasks.Task.InnerInvoke () [0x00012] in <12b418a7818c4ca0893feeaaf67f1e7f>:0 ## at System.Threading.Tasks.Task.Execute () [0x00000] in <12b418a7818c4ca0893feeaaf67f1e7f>:0 ## ## To work around it, we use the shipped Mono binaries instead of system-provided Mono. APP_MAIN_EXE_BIN64='Pyre.bin.x86_64' APP_MAIN_EXE_BIN32='Pyre.bin.x86' APP_MAIN_ICON='PyreIcon.bmp' PACKAGES_LIST=' PKG_BIN64 PKG_BIN32 PKG_DATA' PKG_BIN64_ARCH='64' PKG_BIN32_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libgcc_s.so.1 libGL.so.1 libm.so.6 libopenal.so.1 libpthread.so.0 librt.so.1 libSDL2-2.0.so.0 libSDL2_image-2.0.so.0 libstdc++.so.6 libudev.so.1 libz.so.1' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run the default initialization actions initialization_default "$@" # Extract game data archive_extraction_default # Include game data content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers ## Apply common Mono tweaks. APP_MAIN_PRERUN="$(application_prerun 'APP_MAIN') $(mono_launcher_tweaks)" ## This game expects an executable stack through dynamically loaded libraries. game_exec_line() { local application="$1" application_exe application_exe=$(application_exe "$application") cat <<- EOF GLIBC_TUNABLES=glibc.rtld.execstack=2 "./${application_exe}" "\$@" EOF } launchers_generation 'PKG_BIN64' launchers_generation 'PKG_BIN32' # Build packages packages_generation print_instructions # Clean up working_directory_cleanup exit 0 games/play-rayman-1.sh0000755000000000000000000000641314471751340013611 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec set -o errexit ### # Rayman # send your bug reports to vv221@dotslashplay.it ### script_version=20250722.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='rayman-1' GAME_NAME='Rayman' ARCHIVE_BASE_1_NAME='setup_rayman_forever_1.21_(28045).exe' ARCHIVE_BASE_1_MD5='304cca5f14923730c76bb61f669be575' ARCHIVE_BASE_1_TYPE='innosetup' ARCHIVE_BASE_1_SIZE='279703' ARCHIVE_BASE_1_VERSION='1.21-gog28045' ARCHIVE_BASE_1_URL='https://www.gog.com/game/rayman_forever' ARCHIVE_BASE_0_NAME='setup_rayman_forever_2.0.0.15.exe' ARCHIVE_BASE_0_MD5='96e71ea03261646f7f5ce4cb27d6a222' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_SIZE='290000' ARCHIVE_BASE_0_VERSION='1.21-gog2.0.0.15' CONTENT_PATH_DEFAULT='.' CONTENT_PATH_DEFAULT_0='app' CONTENT_GAME_MAIN_FILES=' game.gog game.ins music rayfan raykit rayman' CONTENT_DOC_DATA_FILES=' manual.pdf' DOSBOX_DISK_IMAGE_PATH='game.ins' USER_PERSISTENT_FILES=' rayman/vignet.dat *.cfg *.SAV' APP_MAIN_EXE='rayman/rayman.exe' APP_MAIN_OPTIONS='save=C:\rayman' APP_MAIN_ICON='goggame-1207658919.ico' APP_MAIN_ICON_0='gfw_high.ico' ## Use fixed cpu cycles, to improve performances APP_MAIN_DOSBOX_PRERUN=' config -set cpu cycles=fixed 80000 ' APP_FAN_ID="${GAME_ID}-rayfan" APP_FAN_NAME="$GAME_NAME - Rayman by his Fans" APP_FAN_EXE='rayfan/rayfan.exe' APP_FAN_OPTIONS='ver=usa' APP_FAN_ICON='rayfan/rayfan.ico' ## Use fixed cpu cycles, to improve performances APP_FAN_DOSBOX_PRERUN=' config -set cpu cycles=fixed 20000 ' APP_KIT_ID="${GAME_ID}-raykit" APP_KIT_NAME="$GAME_NAME - Rayman Designer" APP_KIT_EXE='raykit/raykit.exe' APP_KIT_OPTIONS='ver=usa' APP_KIT_ICON='raykit/raykit.ico' ## Use fixed cpu cycles, to improve performances APP_KIT_DOSBOX_PRERUN=' config -set cpu cycles=fixed 20000 ' # Load common functions PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run the default initialization actions initialization_default "$@" # Extract game data archive_extraction_default ( cd "${PLAYIT_WORKDIR}/gamedata/$(content_path_default)" ## Enforce consistent name for the disk image table of content. if [ -e 'game.inst' ]; then mv 'game.inst' "$(dosbox_disk_image_path)" fi ) # Include game data content_inclusion_icons content_inclusion_default # Write launchers ## Run the game binary from its parent directory game_exec_line() { local application application="$1" local application_exe application_options application_exe=$(application_exe "$application") application_options=$(application_options "$application") cat <<- EOF cd $(dirname "$application_exe") $(basename "$application_exe") $application_options \$@ EOF } launchers_generation # Build packages packages_generation print_instructions # Clean up working_directory_cleanup exit 0 games/play-rayman-origins.sh0000755000000000000000000001330214471751340015116 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2020 Antoine Le Gonidec set -o errexit ### # Rayman Origins # send your bug reports to vv221@dotslashplay.it ### script_version=20260329.2 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='rayman-origins' GAME_NAME='Rayman Origins' ARCHIVE_BASE_HUMBLE_0_NAME='RaymanOrigins_windows.zip' ARCHIVE_BASE_HUMBLE_0_MD5='f9e657afbfac436fe2aea720cdc72196' ARCHIVE_BASE_HUMBLE_0_VERSION='1.0.32504-humble' ARCHIVE_BASE_HUMBLE_0_SIZE='2400000' ARCHIVE_BASE_HUMBLE_0_URL='https://www.humblebundle.com/store/rayman-origins' ARCHIVE_BASE_GOG_0_NAME='setup_rayman_origins_1.0.32504_(18757).exe' ARCHIVE_BASE_GOG_0_MD5='a1021275180a433cd26ccb708c03dde4' ARCHIVE_BASE_GOG_0_TYPE='innosetup' ARCHIVE_BASE_GOG_0_PART1_NAME='setup_rayman_origins_1.0.32504_(18757)-1.bin' ARCHIVE_BASE_GOG_0_PART1_MD5='813c51f290371869157b62b26abad411' ARCHIVE_BASE_GOG_0_SIZE='2500000' ARCHIVE_BASE_GOG_0_VERSION='1.0.32504-gog18757' ARCHIVE_BASE_GOG_0_URL='https://www.gog.com/game/rayman_origins' CONTENT_PATH_DEFAULT_GOG='app' CONTENT_PATH_DEFAULT_HUMBLE='game' # rayman origins.exe requirements CONTENT_LIBS_BIN_FILES=' binkw32.dll' CONTENT_GAME_BIN_FILES=' rayman origins.exe' CONTENT_GAME_DATA_FILES=' gamedata/bundle_pc.ipk gamedata/*.bik' CONTENT_DOC_DATA_RELATIVE_PATH_GOG='support' CONTENT_DOC_DATA_FILES_GOG=' *.pdf *.txt' WINE_PERSISTENT_DIRECTORIES=' users/${USER}/Documents/My Games/Rayman Origins' WINE_REGISTRY_INIT_L10N_FR=' [HKEY_LOCAL_MACHINE\Software\Ubisoft\RaymanOrigins\Settings] "Language"=dword:00000001 ' WINE_REGISTRY_INIT_L10N_EN=' [HKEY_LOCAL_MACHINE\Software\Ubisoft\RaymanOrigins\Settings] "Language"=dword:00000000 ' APP_MAIN_EXE='rayman origins.exe' PACKAGES_LIST=' PKG_BIN PKG_L10N_FR PKG_L10N_EN PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_L10N PKG_DATA' PKG_L10N_ID="${GAME_ID}-l10n" PKG_L10N_FR_ID="${PKG_L10N_ID}-fr" PKG_L10N_EN_ID="${PKG_L10N_ID}-en" PKG_L10N_PROVIDES=" $PKG_L10N_ID" PKG_L10N_FR_PROVIDES="$PKG_L10N_PROVIDES" PKG_L10N_EN_PROVIDES="$PKG_L10N_PROVIDES" PKG_L10N_FR_DESCRIPTION='French localisation' PKG_L10N_EN_DESCRIPTION='English localisation' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Set extra tools required to extract data from the Humble Bundle archive. REQUIREMENTS_LIST_HUMBLE=' dd truncate unshield' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default case "$(current_archive)" in ('ARCHIVE_BASE_HUMBLE'*) # Extract cabinet archives from from Rayman Origins.exe. ARCHIVE_INNER_1_PATH="${PLAYIT_WORKDIR}/gamedata/RaymondOrigins_windows/Rayman Origins.exe" information_archive_data_extraction 'Rayman Origins.exe' extraction_log=$(archive_extraction_log_path) { dd_output="${PLAYIT_WORKDIR}/gamedata/data1.hdr" printf 'dd if="%s" of="%s" bs=3 skip=7740856 count=11107\n' "$ARCHIVE_INNER_1_PATH" "$dd_output" dd if="$ARCHIVE_INNER_1_PATH" of="$dd_output" bs=3 skip=7740856 count=11107 2>&1 dd_output="${PLAYIT_WORKDIR}/gamedata/data1.cab" printf 'dd if="%s" of="%s" bs=8 skip=2655105 count=247706\n' "$ARCHIVE_INNER_1_PATH" "$dd_output" dd if="$ARCHIVE_INNER_1_PATH" of="$dd_output" bs=8 skip=2655105 count=247706 2>&1 # The extraction of data2.cab is done in two steps with big block size values. # This is a big file that would take a lot of time to read/write using a small block size. dd_output="${PLAYIT_WORKDIR}/gamedata/data2.cab" printf 'dd if="%s" of="%s" bs=567219 skip=41\n' "$ARCHIVE_INNER_1_PATH" "$dd_output" dd if="$ARCHIVE_INNER_1_PATH" of="$dd_output" bs=567219 skip=41 2>&1 rm "$ARCHIVE_INNER_1_PATH" printf 'truncate --io-blocks --size=2125482963 "%s"\n' "$dd_output" truncate --io-blocks --size=2125482963 "$dd_output" } >> "$extraction_log" # Extract game data from data1.cab + data2.cab. ARCHIVE_INNER_2_PATH="${PLAYIT_WORKDIR}/gamedata/data1.hdr" ARCHIVE_INNER_2_TYPE='installshield' archive_extraction 'ARCHIVE_INNER_2' rm \ "${PLAYIT_WORKDIR}/gamedata/data1.hdr" \ "${PLAYIT_WORKDIR}/gamedata/data1.cab" \ "${PLAYIT_WORKDIR}/gamedata/data2.cab" ;; esac # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Set localisation on first launch. for package in \ 'PKG_L10N_FR' \ 'PKG_L10N_EN' do ( set_current_package "$package" # shellcheck disable=SC2218 wine_registry_script_write "$package" ) done wine_registry_script_write() { return 0; } # A dummy value is set to trigger the integration of the registry script in the generated launcher. WINE_REGISTRY_INIT='whatever' # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. ln --force --symbolic $(path_libraries)/* "\${PATH_PREFIX}" EOF } launchers_generation # Build packages. packages_generation case "$(messages_language)" in ('fr') lang_string='version %s :' lang_fr='française' lang_en='anglaise' ;; ('en'|*) lang_string='%s version:' lang_fr='French' lang_en='English' ;; esac printf '\n' printf "$lang_string" "$lang_fr" print_instructions 'PKG_DATA' 'PKG_BIN' 'PKG_L10N_FR' printf "$lang_string" "$lang_en" print_instructions 'PKG_DATA' 'PKG_BIN' 'PKG_L10N_EN' # Clean up. working_directory_cleanup exit 0 games/play-renowned-explorers-expansions.sh0000755000000000000000000002122214471751340020206 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2017 Antoine Le Gonidec set -o errexit ### # Renowned Explorers: International Society expansions: # - More To Explore # - The Emperor's Challenge # send your bug reports to vv221@dotslashplay.it ### script_version=20260326.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='renowned-explorers' GAME_NAME='Renowned Explorers: International Society' EXPANSION_ID_MORETOEXPLORE='more-to-explore' EXPANSION_NAME_MORETOEXPLORE='More To Explore' EXPANSION_ID_EMPERORSCHALLENGE='emperors-challenge' EXPANSION_NAME_EMPERORSCHALLENGE='The Emperorʼs Challenge' # More To Explore ARCHIVE_BASE_MORETOEXPLORE_LINUX_7_NAME='renowned_explorers_international_society_more_to_explore_dlc_522_26056.sh' ARCHIVE_BASE_MORETOEXPLORE_LINUX_7_MD5='46b6534ff70a9efa4fc21b2ba139b52f' ARCHIVE_BASE_MORETOEXPLORE_LINUX_7_SIZE='68263' ARCHIVE_BASE_MORETOEXPLORE_LINUX_7_VERSION='522-gog26056' ARCHIVE_BASE_MORETOEXPLORE_LINUX_7_URL='https://www.gog.com/game/renowned_explorers_more_to_explore' ARCHIVE_BASE_MORETOEXPLORE_LINUX_6_NAME='renowned_explorers_international_society_more_to_explore_dlc_520_25983.sh' ARCHIVE_BASE_MORETOEXPLORE_LINUX_6_MD5='3d3e97fc73e63ac992c9afa9f620282e' ARCHIVE_BASE_MORETOEXPLORE_LINUX_6_SIZE='69000' ARCHIVE_BASE_MORETOEXPLORE_LINUX_6_VERSION='520-gog25983' ARCHIVE_BASE_MORETOEXPLORE_LINUX_5_NAME='renowned_explorers_international_society_more_to_explore_dlc_516_25864.sh' ARCHIVE_BASE_MORETOEXPLORE_LINUX_5_MD5='db21406827c77caecb92c96bb2f4e473' ARCHIVE_BASE_MORETOEXPLORE_LINUX_5_SIZE='69000' ARCHIVE_BASE_MORETOEXPLORE_LINUX_5_VERSION='516-gog25864' ARCHIVE_BASE_MORETOEXPLORE_LINUX_4_NAME='renowned_explorers_international_society_more_to_explore_dlc_512_25169.sh' ARCHIVE_BASE_MORETOEXPLORE_LINUX_4_MD5='94112f4cfc91fa67855a310618bdeacf' ARCHIVE_BASE_MORETOEXPLORE_LINUX_4_SIZE='69000' ARCHIVE_BASE_MORETOEXPLORE_LINUX_4_VERSION='512-gog25169' ARCHIVE_BASE_MORETOEXPLORE_LINUX_3_NAME='renowned_explorers_international_society_more_to_explore_dlc_508_23701.sh' ARCHIVE_BASE_MORETOEXPLORE_LINUX_3_MD5='5f43443fc81111bc27461e39145c6db6' ARCHIVE_BASE_MORETOEXPLORE_LINUX_3_SIZE='69000' ARCHIVE_BASE_MORETOEXPLORE_LINUX_3_VERSION='508-gog23701' ARCHIVE_BASE_MORETOEXPLORE_LINUX_2_NAME='renowned_explorers_international_society_more_to_explore_dlc_503_23529.sh' ARCHIVE_BASE_MORETOEXPLORE_LINUX_2_MD5='058fa329bbeeb0f8b3a3e7e60dc472bf' ARCHIVE_BASE_MORETOEXPLORE_LINUX_2_SIZE='69000' ARCHIVE_BASE_MORETOEXPLORE_LINUX_2_VERSION='503-gog23529' ARCHIVE_BASE_MORETOEXPLORE_LINUX_1_NAME='renowned_explorers_more_to_explore_dlc_en_489_20916.sh' ARCHIVE_BASE_MORETOEXPLORE_LINUX_1_MD5='cc51077bdcb04086349f81da8b1d19ff' ARCHIVE_BASE_MORETOEXPLORE_LINUX_1_SIZE='69000' ARCHIVE_BASE_MORETOEXPLORE_LINUX_1_VERSION='489-gog20916' ARCHIVE_BASE_MORETOEXPLORE_LINUX_0_NAME='renowned_explorers_more_to_explore_dlc_en_466_15616.sh' ARCHIVE_BASE_MORETOEXPLORE_LINUX_0_MD5='c99ca440cb312b90052939db49aeef03' ARCHIVE_BASE_MORETOEXPLORE_LINUX_0_SIZE='69000' ARCHIVE_BASE_MORETOEXPLORE_LINUX_0_VERSION='466-gog15616' ARCHIVE_BASE_MORETOEXPLORE_WINDOWS_0_NAME='setup_renowned_explorers_more_to_explore_525_(46550).exe' ARCHIVE_BASE_MORETOEXPLORE_WINDOWS_0_MD5='cad29861f3bd3a74e0f8848a31f56845' ARCHIVE_BASE_MORETOEXPLORE_WINDOWS_0_TYPE='innosetup' ARCHIVE_BASE_MORETOEXPLORE_WINDOWS_0_SIZE='74726' ARCHIVE_BASE_MORETOEXPLORE_WINDOWS_0_VERSION='525-gog46550' ARCHIVE_BASE_MORETOEXPLORE_WINDOWS_0_URL='https://www.gog.com/game/renowned_explorers_more_to_explore' # The Emperor's Challenge ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_7_NAME='renowned_explorers_international_society_the_emperors_challenge_dlc_522_26056.sh' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_7_MD5='e87af99e5a726b06ee5b94d7f94d9f5a' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_7_SIZE='21170' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_7_VERSION='522-gog26056' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_7_URL='https://www.gog.com/game/renowned_explorers_the_emperors_challenge' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_6_NAME='renowned_explorers_international_society_the_emperors_challenge_dlc_520_25983.sh' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_6_MD5='a2ea1ff34a78c9d3cb389373b6948604' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_6_SIZE='22000' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_6_VERSION='520-gog25983' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_5_NAME='renowned_explorers_international_society_the_emperors_challenge_dlc_516_25864.sh' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_5_MD5='cd76b4c9b334d5b859c4dff171ec4c0f' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_5_SIZE='22000' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_5_VERSION='516-gog25864' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_4_NAME='renowned_explorers_international_society_the_emperors_challenge_dlc_512_25169.sh' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_4_MD5='b402cec7fbc05fec42be3ae4ff1a26ec' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_4_SIZE='22000' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_4_VERSION='512-gog25169' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_3_NAME='renowned_explorers_international_society_the_emperors_challenge_dlc_508_23701.sh' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_3_MD5='7f0b5df5318af767bfb306bd4e3f1e13' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_3_SIZE='22000' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_3_VERSION='508-gog23701' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_2_NAME='renowned_explorers_international_society_the_emperors_challenge_dlc_503_23529.sh' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_2_MD5='fb2c6bc1201a3346c47e01f0e7aa136c' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_2_SIZE='22000' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_2_VERSION='503-gog23529' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_1_NAME='renowned_explorers_the_emperor_s_challenge_dlc_en_489_20916.sh' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_1_MD5='553e0fa1ffed73c9c99022c20cfff707' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_1_SIZE='23000' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_1_VERSION='489-gog20916' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_0_NAME='renowned_explorers_the_emperor_s_challenge_dlc_en_466_15616.sh' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_0_MD5='12baa49b557c92e2f5eae7ff99623d34' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_0_SIZE='23000' ARCHIVE_BASE_EMPERORSCHALLENGE_LINUX_0_VERSION='466-gog15616' ARCHIVE_BASE_EMPERORSCHALLENGE_WINDOWS_0_NAME='setup_renowned_explorers_the_emperors_challenge_525_(46550).exe' ARCHIVE_BASE_EMPERORSCHALLENGE_WINDOWS_0_MD5='13bb9e6b93eb98268f6a4be96d67c88a' ARCHIVE_BASE_EMPERORSCHALLENGE_WINDOWS_0_TYPE='innosetup' ARCHIVE_BASE_EMPERORSCHALLENGE_WINDOWS_0_SIZE='27910' ARCHIVE_BASE_EMPERORSCHALLENGE_WINDOWS_0_VERSION='525-gog46550' ARCHIVE_BASE_EMPERORSCHALLENGE_WINDOWS_0_URL='https://www.gog.com/game/renowned_explorers_the_emperors_challenge' CONTENT_PATH_DEFAULT_LINUX='data/noarch/game' CONTENT_PATH_DEFAULT_WINDOWS='.' CONTENT_PATH_DEFAULT_MORETOEXPLORE_LINUX="$CONTENT_PATH_DEFAULT_LINUX" CONTENT_PATH_DEFAULT_MORETOEXPLORE_WINDOWS="$CONTENT_PATH_DEFAULT_WINDOWS" CONTENT_PATH_DEFAULT_EMPERORSCHALLENGE_LINUX="$CONTENT_PATH_DEFAULT_LINUX" CONTENT_PATH_DEFAULT_EMPERORSCHALLENGE_WINDOWS="$CONTENT_PATH_DEFAULT_WINDOWS" CONTENT_GAME_MAIN_FILES=' data/dlc_???.tim' PKG_PARENT_ID_LINUX="${GAME_ID}-bin-linux" PKG_PARENT_ID_WINDOWS="${GAME_ID}-bin-windows" PKG_PARENT_ID_MORETOEXPLORE_LINUX="$PKG_PARENT_ID_LINUX" PKG_PARENT_ID_MORETOEXPLORE_WINDOWS="$PKG_PARENT_ID_WINDOWS" PKG_PARENT_ID_EMPERORSCHALLENGE_LINUX="$PKG_PARENT_ID_LINUX" PKG_PARENT_ID_EMPERORSCHALLENGE_WINDOWS="$PKG_PARENT_ID_WINDOWS" PKG_MAIN_ID_MORETOEXPLORE="${GAME_ID}-${EXPANSION_ID_MORETOEXPLORE}" PKG_MAIN_ID_MORETOEXPLORE_LINUX="${PKG_MAIN_ID_MORETOEXPLORE}-linux" PKG_MAIN_ID_MORETOEXPLORE_WINDOWS="${PKG_MAIN_ID_MORETOEXPLORE}-windows" PKG_MAIN_ID_EMPERORSCHALLENGE="${GAME_ID}-${EXPANSION_ID_EMPERORSCHALLENGE}" PKG_MAIN_ID_EMPERORSCHALLENGE_LINUX="${PKG_MAIN_ID_EMPERORSCHALLENGE}-linux" PKG_MAIN_ID_EMPERORSCHALLENGE_WINDOWS="${PKG_MAIN_ID_EMPERORSCHALLENGE}-windows" PKG_MAIN_PROVIDES_MORETOEXPLORE=" $PKG_MAIN_ID_MORETOEXPLORE" PKG_MAIN_PROVIDES_EMPERORSCHALLENGE=" $PKG_MAIN_ID_EMPERORSCHALLENGE" PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_PARENT' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_default # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-renowned-explorers.sh0000755000000000000000000001471014471751340016025 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2017 Mopi # SPDX-FileCopyrightText: © 2017 Antoine Le Gonidec set -o errexit ### # Renowned Explorers: International Society # send your bug reports to vv221@dotslashplay.it ### script_version=20260326.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='renowned-explorers' GAME_NAME='Renowned Explorers: International Society' ARCHIVE_BASE_LINUX_9_NAME='renowned_explorers_international_society_522_26056.sh' ARCHIVE_BASE_LINUX_9_MD5='fe38ae1c4dc2607923cc2a60019bff38' ARCHIVE_BASE_LINUX_9_SIZE='1107554' ARCHIVE_BASE_LINUX_9_VERSION='522-gog26056' ARCHIVE_BASE_LINUX_9_URL='https://www.gog.com/game/renowned_explorers' ARCHIVE_BASE_LINUX_8_NAME='renowned_explorers_international_society_520_25983.sh' ARCHIVE_BASE_LINUX_8_MD5='2af1dedb29ac1b929971cc0912722760' ARCHIVE_BASE_LINUX_8_SIZE='1200000' ARCHIVE_BASE_LINUX_8_VERSION='520-gog25983' ARCHIVE_BASE_LINUX_7_NAME='renowned_explorers_international_society_516_25864.sh' ARCHIVE_BASE_LINUX_7_MD5='d868d4b76613b93a94650b750a52752f' ARCHIVE_BASE_LINUX_7_SIZE='1200000' ARCHIVE_BASE_LINUX_7_VERSION='516-gog25864' ARCHIVE_BASE_LINUX_6_NAME='renowned_explorers_international_society_512_25169.sh' ARCHIVE_BASE_LINUX_6_MD5='3f2eb242da5200a78c53162d152a3cac' ARCHIVE_BASE_LINUX_6_SIZE='1100000' ARCHIVE_BASE_LINUX_6_VERSION='512-gog25169' ARCHIVE_BASE_LINUX_5_NAME='renowned_explorers_international_society_508_23701.sh' ARCHIVE_BASE_LINUX_5_MD5='247551613c7aba4b4b31f7a98fa31949' ARCHIVE_BASE_LINUX_5_SIZE='1100000' ARCHIVE_BASE_LINUX_5_VERSION='508-gog23701' ARCHIVE_BASE_LINUX_4_NAME='renowned_explorers_international_society_503_23529.sh' ARCHIVE_BASE_LINUX_4_MD5='6b7555749bc89cc3dda223e2d43bd838' ARCHIVE_BASE_LINUX_4_SIZE='1100000' ARCHIVE_BASE_LINUX_4_VERSION='503-gog23529' ARCHIVE_BASE_LINUX_3_NAME='renowned_explorers_international_society_en_489_21590.sh' ARCHIVE_BASE_LINUX_3_MD5='9fb2cbe095d437d788eb8ec6402db20b' ARCHIVE_BASE_LINUX_3_SIZE='1100000' ARCHIVE_BASE_LINUX_3_VERSION='489-gog21590' ARCHIVE_BASE_LINUX_2_NAME='renowned_explorers_international_society_en_489_20916.sh' ARCHIVE_BASE_LINUX_2_MD5='42d0ecb54d8302545e78f41ed43acef6' ARCHIVE_BASE_LINUX_2_SIZE='1100000' ARCHIVE_BASE_LINUX_2_VERSION='489-gog20916' ARCHIVE_BASE_LINUX_1_NAME='renowned_explorers_international_society_en_466_15616.sh' ARCHIVE_BASE_LINUX_1_MD5='fbad4b4d361a0e7d29b9781e3c5a5e85' ARCHIVE_BASE_LINUX_1_SIZE='1100000' ARCHIVE_BASE_LINUX_1_VERSION='466-gog15616' ARCHIVE_BASE_LINUX_0_NAME='renowned_explorers_international_society_en_459_14894.sh' ARCHIVE_BASE_LINUX_0_MD5='ff6b368b3919002d2db750213d33fcef' ARCHIVE_BASE_LINUX_0_SIZE='1100000' ARCHIVE_BASE_LINUX_0_VERSION='459-gog14894' ARCHIVE_BASE_WINDOWS_0_NAME='setup_renowned_explorers_international_society_525_(64bit)_(46550).exe' ARCHIVE_BASE_WINDOWS_0_MD5='dbb958ec50e3e39d282a92dac1b0953a' ARCHIVE_BASE_WINDOWS_0_TYPE='innosetup' ARCHIVE_BASE_WINDOWS_0_SIZE='1114877' ARCHIVE_BASE_WINDOWS_0_VERSION='525-gog46550' ARCHIVE_BASE_WINDOWS_0_URL='https://www.gog.com/game/renowned_explorers' CONTENT_PATH_DEFAULT_LINUX='data/noarch/game' CONTENT_PATH_DEFAULT_WINDOWS='.' # libc++.so.1 / libc++abi.so.1 ≥ 21.1.8 cause the following errors, # followed by a segmentation fault: # ./x86_64/abbeycore: Symbol `_ZNSt3__14coutE' has different size in shared object, consider re-linking # ./x86_64/abbeycore: Symbol `_ZNSt3__13cinE' has different size in shared object, consider re-linking # ./x86_64/abbeycore: Symbol `_ZNSt3__14cerrE' has different size in shared object, consider re-linking CONTENT_LIBS_BIN_RELATIVE_PATH_LINUX='x86_64' CONTENT_LIBS_BIN_FILES_LINUX=' libc++.so.1 libc++abi.so.1' # abbeycore_win32.exe requirements CONTENT_LIBS_BIN_FILES_WINDOWS=' win64/Galaxy64.dll win64/amd_ags_x64.dll' CONTENT_GAME_BIN_FILES_LINUX=' x86_64/abbeycore' CONTENT_GAME_BIN_FILES_WINDOWS=' win64/abbeycore_win32.exe' CONTENT_GAME_DATA_FILES=' data soundbanks settings.ini *.bni' WINE_PERSISTENT_DIRECTORIES=' users/${USER}/Documents/Renowned Explorers International Society' # The game seems to save files randomly in either "savedata" or "userdata". # We save both, even if it will probably end up using only one. USER_PERSISTENT_DIRECTORIES_LINUX=' savedata userdata' APP_MAIN_EXE_LINUX='x86_64/abbeycore' APP_MAIN_EXE_WINDOWS='win64/abbeycore_win32.exe' APP_MAIN_ICON_LINUX='../support/icon.png' APP_MAIN_ICON_WINDOWS='app/goggame-1435329098.ico' # Work around inconsistent behaviour with some locales. APP_MAIN_PRERUN=' # Work around inconsistent behaviour with some locales. export LANG=C ' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ID="${GAME_ID}-bin" PKG_BIN_ID_LINUX="${PKG_BIN_ID}-linux" PKG_BIN_ID_WINDOWS="${PKG_BIN_ID}-windows" PKG_BIN_PROVIDES=" $PKG_BIN_ID" PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES_LINUX=' libc.so.6 libdl.so.2 libgcc_s.so.1 libGL.so.1 libGLU.so.1 libm.so.6 libpthread.so.0 librt.so.1 libSDL2-2.0.so.0 libX11.so.6 libXcursor.so.1 libXrandr.so.2' # Easier upgrades from pre-20250104.1 packages PKG_BIN_PROVIDES="$PKG_BIN_PROVIDES renowned-explorers" PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_ID_LINUX="${PKG_DATA_ID}-linux" PKG_DATA_ID_WINDOWS="${PKG_DATA_ID}-windows" PKG_DATA_PROVIDES=" $PKG_DATA_ID" PKG_DATA_DESCRIPTION='data' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # WINE - Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --symbolic "$dll_source" "$dll_destination" done EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-return-to-monkey-island.sh0000755000000000000000000000523714471751340016676 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2024 Antoine Le Gonidec set -o errexit ### # Return to Monkey Island # send your bug reports to vv221@dotslashplay.it ### script_version=20251223.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='return-to-monkey-island' GAME_NAME='Return to Monkey Island' ARCHIVE_BASE_0_NAME='return_to_monkey_island_1_5_linux_60417.sh' ARCHIVE_BASE_0_MD5='ef405e58f99c56b69bdd1da811b79580' ARCHIVE_BASE_0_SIZE='4477001' ARCHIVE_BASE_0_VERSION='1.5-gog60417' ARCHIVE_BASE_0_URL='https://www.gog.com/game/return_to_monkey_island' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_LIBS_BIN_FILES=' libfmod.so.13 libfmodstudio.so.13' CONTENT_GAME_BIN_FILES=' Return to Monkey Island' CONTENT_GAME_DATA_FILES=' Resources ReturnToMonkeyIsland.png Weird.ggpack??' APP_MAIN_EXE='Return to Monkey Island' APP_MAIN_ICON='ReturnToMonkeyIsland.png' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libEGL.so.1 libgcc_s.so.1 libGL.so.1 libm.so.6 libpthread.so.0 librt.so.1 libstdc++.so.6 libuuid.so.1 libX11.so.6 libXi.so.6' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-reus-1.sh0000755000000000000000000001160614471751340013300 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2017 Antoine Le Gonidec set -o errexit ### # Reus # send your bug reports to vv221@dotslashplay.it ### script_version=20251128.4 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='reus-1' GAME_NAME='Reus' ARCHIVE_BASE_GOG_1_NAME='reus_en_1_6_5_20844.sh' ARCHIVE_BASE_GOG_1_MD5='a768dd2347ac7f6be16ffa9e3f0952c4' ARCHIVE_BASE_GOG_1_SIZE='480000' ARCHIVE_BASE_GOG_1_VERSION='1.6.5-gog20844' ARCHIVE_BASE_GOG_1_URL='https://www.gog.com/game/reus' ARCHIVE_BASE_GOG_0_NAME='gog_reus_2.0.0.2.sh' ARCHIVE_BASE_GOG_0_MD5='25fe7ec93305e804558e4ef8a31fbbf8' ARCHIVE_BASE_GOG_0_SIZE='480000' ARCHIVE_BASE_GOG_0_VERSION='1.5.1-gog2.0.0.2' ARCHIVE_BASE_HUMBLE_1_NAME='reus-linux-1.6.5.tar.gz' ARCHIVE_BASE_HUMBLE_1_MD5='2b61251f7aa41542db03a1fe637b57dc' ARCHIVE_BASE_HUMBLE_1_SIZE='480000' ARCHIVE_BASE_HUMBLE_1_VERSION='1.6.5-humble180612' ARCHIVE_BASE_HUMBLE_1_URL='https://www.humblebundle.com/store/reus' ARCHIVE_BASE_HUMBLE_0_NAME='reus_linux_1389636757-bin' ARCHIVE_BASE_HUMBLE_0_MD5='9914e7fcb5f3b761941169ae13ec205c' ARCHIVE_BASE_HUMBLE_0_SIZE='380000' ARCHIVE_BASE_HUMBLE_0_VERSION='0.beta-humble140113' CONTENT_PATH_DEFAULT_GOG='data/noarch/game' CONTENT_PATH_DEFAULT_HUMBLE='.' CONTENT_PATH_DEFAULT_HUMBLE_0='data' CONTENT_LIBS_LIBS_RELATIVE_PATH='lib64' CONTENT_LIBS_LIBS_FILES=' libFontNative.so libmojoshader.so libtheorafile.so libfmodevent64-4.44.00.so libfmodex64-4.44.00.so' CONTENT_FONTS_MAIN_RELATIVE_PATH='Fonts' CONTENT_FONTS_MAIN_FILES=' DjvCon_Zh_Bd.ttf DjvCon_Zh_Rg.ttf Djv_Zh_Bd.ttf Djv_Zh_Rg.ttf Lib_Zh_Bd.ttf Lib_Zh_It.ttf Lib_Zh_Rg.ttf' CONTENT_GAME_MAIN_FILES=' Audio Cursors Effects MainMenu Particles Settings Skeletons Textures UI Reus.exe Reus.bmp FNA.dll FNA.dll.config Game.*.dll Newtonsoft.Json.dll Reus.*.dll SpaceTech.dll SpaceTech.*.dll SpaceTech.*.dll.config SpaceTech2D.dll' CONTENT_DOC_MAIN_FILES=' Linux.README' APP_MAIN_EXE='Reus.exe' APP_MAIN_ICON='Reus.bmp' PACKAGES_LIST=' PKG_MAIN PKG_LIBS' PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_LIBS' PKG_MAIN_DEPENDENCIES_LIBRARIES=' libSDL2-2.0.so.0 libSDL2_image-2.0.so.0' PKG_MAIN_DEPENDENCIES_MONO_LIBRARIES=' mscorlib.dll Microsoft.CSharp.dll Mono.CSharp.dll Mono.Posix.dll Mono.Security.dll System.dll System.Configuration.dll System.Core.dll System.Data.dll System.Design.dll System.Drawing.dll System.Management.dll System.Numerics.dll System.Runtime.Serialization.dll System.Security.dll System.Transactions.dll System.Xml.dll System.Xml.Linq.dll' ## Easier upgrade from pre-20250429.2 packages PKG_MAIN_PROVIDES="${PKG_MAIN_PROVIDES:-} reus" PKG_LIBS_ID="${GAME_ID}-libs" PKG_LIBS_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libfreetype.so.6 libm.so.6 libogg.so.0 libpthread.so.0 libstdc++.so.6 libtheoradec.so.1 libvorbis.so.0' ## Easier upgrade from pre-20250429.2 packages PKG_LIBS_PROVIDES="${PKG_LIBS_PROVIDES:-} reus-libs" # Load common functions. PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons content_inclusion_default # Link the shipped fonts into the game directory. ## Without this link, the game fails on launch with: ## ## System.Exception: File not found: Fonts/Lib_Zh_Rg.ttf ## at SpaceTech.Font.Font.Initialize (System.String path, System.Single size, SpaceTech.Font.FontStyle style) [0x0003d] in :0 ## at SpaceTech.Font.Font..ctor (Microsoft.Xna.Framework.Graphics.GraphicsDevice device, System.String path, System.Single size) [0x0000f] in :0 ## at Reus.IntroScreen.LoadContent () [0x00083] in <7d85bd32d8144f9f80a86576868c4c84>:0 ## at Microsoft.Xna.Framework.DrawableGameComponent.Initialize () [0x0000f] in :0 ## at Reus.Application.Initialize () [0x0016a] in <7d85bd32d8144f9f80a86576868c4c84>:0 ## at Microsoft.Xna.Framework.Game.DoInitialize () [0x0000d] in :0 ## at Microsoft.Xna.Framework.Game.Run () [0x0000e] in :0 ## at Reus.Program.ActualMain () [0x00008] in <7d85bd32d8144f9f80a86576868c4c84>:0 ln --symbolic "$(path_fonts_ttf)" "$(package_path 'PKG_MAIN')$(path_game_data)/Fonts" # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-reus-2.sh0000755000000000000000000000740014471751340013276 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2025 Antoine Le Gonidec set -o errexit ### # Reus 2 # send your bug reports to vv221@dotslashplay.it ### script_version=20260314.3 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='reus-2' GAME_NAME='Reus 2' ARCHIVE_BASE_6_NAME='setup_reus_2_1.11.4_(89195).exe' ARCHIVE_BASE_6_MD5='1219d6f44042e7cd2cc810ed21dc4c46' ARCHIVE_BASE_6_TYPE='innosetup' ARCHIVE_BASE_6_SIZE='4396034' ARCHIVE_BASE_6_VERSION='1.11.4-gog89195' ARCHIVE_BASE_6_URL='https://www.gog.com/game/reus_2' ARCHIVE_BASE_5_NAME='setup_reus_2_1.11.2_(88356).exe' ARCHIVE_BASE_5_MD5='dd2f1d6b7c814928d16d7236723716bb' ARCHIVE_BASE_5_TYPE='innosetup' ARCHIVE_BASE_5_SIZE='4396802' ARCHIVE_BASE_5_VERSION='1.11.2-gog88356' ARCHIVE_BASE_4_NAME='setup_reus_2_1.10.3_(86943).exe' ARCHIVE_BASE_4_MD5='eb2a7f2cf69f4679a1bc1a628907c6a7' ARCHIVE_BASE_4_TYPE='innosetup' ARCHIVE_BASE_4_SIZE='3966786' ARCHIVE_BASE_4_VERSION='1.10.3-gog86943' ARCHIVE_BASE_3_NAME='setup_reus_2_1.10.0_(86675).exe' ARCHIVE_BASE_3_MD5='f36e26a1c47a8a6c6ff7b7423c772bf0' ARCHIVE_BASE_3_TYPE='innosetup' ARCHIVE_BASE_3_SIZE='4064054' ARCHIVE_BASE_3_VERSION='1.10.0-gog86675' ARCHIVE_BASE_2_NAME='setup_reus_2_1.8.3_(83845).exe' ARCHIVE_BASE_2_MD5='5384f9e5fdf5375219adf7f8b8643567' ARCHIVE_BASE_2_TYPE='innosetup' ARCHIVE_BASE_2_SIZE='3999785' ARCHIVE_BASE_2_VERSION='1.8.3-gog83845' ARCHIVE_BASE_1_NAME='setup_reus_2_1.8.0_(83653).exe' ARCHIVE_BASE_1_MD5='2ced0663287c4540efaffac336d42b88' ARCHIVE_BASE_1_TYPE='innosetup' ARCHIVE_BASE_1_SIZE='3858778' ARCHIVE_BASE_1_VERSION='1.8.0-gog83653' ARCHIVE_BASE_0_NAME='setup_reus_2_1.6.3_(80797).exe' ARCHIVE_BASE_0_MD5='7d8a3aa3d7f7457cf8ef4fba979e3a7e' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_SIZE='3234044' ARCHIVE_BASE_0_VERSION='1.6.3-gog80797' UNITY3D_NAME='Reus 2' # TODO: Experimental support for Windows Unity3D plugins, # no support in ./play.it library yet. # (./play.it 2.35) # Required to prevent a freeze on launch UNITY3D_PLUGINS=' GalaxyCSharpGlue.dll fmodstudio.dll' # GalaxyCSharpGlue.dll requirement UNITY3D_PLUGINS="$UNITY3D_PLUGINS Galaxy64.dll" CONTENT_PATH_DEFAULT='.' WINE_PERSISTENT_DIRECTORIES=' users/${USER}/AppData/LocalLow/Abbey Games/Reus 2' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' # Include Unity3D plugins. unity3d_plugins_inclusion 'PKG_BIN' "$(unity3d_name)_Data/Plugins/x86_64" "$(path_libraries)/$(unity3d_name)_Data/Plugins" content_inclusion_default # Write launchers. # Install Unity3D plugins. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --symbolic "$dll_source" "$dll_destination" done EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-riven.sh0000755000000000000000000001574014471751340013312 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2018 Mopi # SPDX-FileCopyrightText: © 2020 Fabien Givors set -o errexit ### # Riven: The Sequel to Myst # send your bug reports to vv221@dotslashplay.it ### script_version=20260224.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='riven' GAME_NAME='Riven: The Sequel to Myst' ARCHIVE_BASE_5_NAME='setup_riven_(1997)_2.0.5_(64bit)_(83079).exe' ARCHIVE_BASE_5_MD5='0c348854e43bdf6636521c1531bb8864' ARCHIVE_BASE_5_TYPE='innosetup' ARCHIVE_BASE_5_PART1_NAME='setup_riven_(1997)_2.0.5_(64bit)_(83079)-1.bin' ARCHIVE_BASE_5_PART1_MD5='1462cd4eaaccc833f640c10ddc3fc31e' ARCHIVE_BASE_5_PART2_NAME='setup_riven_(1997)_2.0.5_(64bit)_(83079)-2.bin' ARCHIVE_BASE_5_PART2_MD5='3fb3e2125a77c78d3bf76bd3b28f8684' ARCHIVE_BASE_5_SIZE='7402416' ARCHIVE_BASE_5_VERSION='2.0.5-gog83079' ARCHIVE_BASE_5_URL='https://www.gog.com/game/riven_the_sequel_to_myst' ARCHIVE_BASE_4_NAME='setup_riven_(1997)_2.0.3_(64bit)_(82361).exe' ARCHIVE_BASE_4_MD5='4cc4222f47dd95879c022a00b88a3265' ARCHIVE_BASE_4_TYPE='innosetup' ARCHIVE_BASE_4_PART1_NAME='setup_riven_(1997)_2.0.3_(64bit)_(82361)-1.bin' ARCHIVE_BASE_4_PART1_MD5='6d2287790cbbf147a37501be07f9d503' ARCHIVE_BASE_4_PART2_NAME='setup_riven_(1997)_2.0.3_(64bit)_(82361)-2.bin' ARCHIVE_BASE_4_PART2_MD5='0fb47e21468e9664a7d47b3b81200342' ARCHIVE_BASE_4_SIZE='7401427' ARCHIVE_BASE_4_VERSION='2.0.3-gog82361' ARCHIVE_BASE_3_NAME='setup_riven_(1997)_2.0.2_(64bit)_(82312).exe' ARCHIVE_BASE_3_MD5='22a6bb23b3ca1ae25fabc0e85c293519' ARCHIVE_BASE_3_TYPE='innosetup' ARCHIVE_BASE_3_PART1_NAME='setup_riven_(1997)_2.0.2_(64bit)_(82312)-1.bin' ARCHIVE_BASE_3_PART1_MD5='f04c236767db0f5fe4166afe01a7e811' ARCHIVE_BASE_3_PART2_NAME='setup_riven_(1997)_2.0.2_(64bit)_(82312)-2.bin' ARCHIVE_BASE_3_PART2_MD5='22ec68ce3002b0aaf7f637846aad975f' ARCHIVE_BASE_3_SIZE='7399203' ARCHIVE_BASE_3_VERSION='2.0.2-gog82312' ARCHIVE_BASE_2_NAME='setup_riven_-_the_sequel_to_myst_1.2_svm_no_launcher_(55114).exe' ARCHIVE_BASE_2_MD5=' e3bb9372a059a7284b0dc02f39aba929 879b8aaa724f4f422661634186ee2534' ARCHIVE_BASE_2_TYPE='innosetup' ARCHIVE_BASE_2_PART1_NAME='setup_riven_-_the_sequel_to_myst_1.2_svm_no_launcher_(55114)-1.bin' ARCHIVE_BASE_2_PART1_MD5=' 99921a49f1834af00e5f6dda7227d456 dd91f1256d819d6f26d9d0bcaa81548f' ARCHIVE_BASE_2_PART2_NAME='setup_riven_-_the_sequel_to_myst_1.2_svm_no_launcher_(55114)-2.bin' ARCHIVE_BASE_2_PART2_MD5=' 2db5912fc46865a8992cb32417674fca 2d03d82b784666472e1a3f436ed20924' ARCHIVE_BASE_2_SIZE='6946550' ARCHIVE_BASE_2_VERSION='1.2-gog55114' ARCHIVE_BASE_0_NAME='setup_riven_-_the_sequel_to_myst_1.2_svm_update3_(22594).exe' ARCHIVE_BASE_0_MD5='0520fac1f2ae966aa5c490850b51930f' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_PART1_NAME='setup_riven_-_the_sequel_to_myst_1.2_svm_update3_(22594)-1.bin' ARCHIVE_BASE_0_PART1_MD5='4ee339ad50203020e717a78ff95bb590' ARCHIVE_BASE_0_PART2_NAME='setup_riven_-_the_sequel_to_myst_1.2_svm_update3_(22594)-2.bin' ARCHIVE_BASE_0_PART2_MD5='2ff2d7d25f2e8c2995c17d8b122d672c' ARCHIVE_BASE_0_SIZE='6954413' ARCHIVE_BASE_0_VERSION='1.2-gog22594' CONTENT_PATH_DEFAULT='.' CONTENT_GAME_L10N_FR_FILES=' b_data_french.mhk j_data_french.mhk o_data_french.mhk p_data_french.mhk r_data_french.mhk t_data_french.mhk' CONTENT_FONTS_MAIN_FILES=' freesans.ttf mplus-2c-regular.ttf' CONTENT_GAME_MAIN_FILES=' riven.exe a_data.mhk b_data.mhk b2_data.mhk g_data.mhk j_data1.mhk j_data2.mhk o_data.mhk p_data.mhk r_data.mhk t_data1.mhk t_data2.mhk a_sounds.mhk b_sounds.mhk g_sounds.mhk j_sounds.mhk o_sounds.mhk p_sounds.mhk r_sounds.mhk t_sounds.mhk extras.mhk' ## The following localisation files must be included, ## or ScummVM fails to detect the correct game version. CONTENT_GAME0_MAIN_FILES=' a_data_french.mhk a_data_german.mhk a_data_italian.mhk a_data_japanese.mhk a_data_polish.mhk a_data_russian.mhk a_data_spanish.mhk' CONTENT_DOC_MAIN_FILES=' manual.pdf readme.txt' APP_MAIN_SCUMMID='mohawk:riven' APP_MAIN_ICON='riven.exe' APP_MAIN_ICON_WRESTOOL_OPTIONS='--type=14 --name=APPICON' PACKAGES_LIST=' PKG_L10N_FR PKG_L10N_EN PKG_MAIN' PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_L10N' ## Easier upgrades from pre-20260401.2 packages PKG_MAIN_PROVIDES="${PKG_MAIN_PROVIDES:-} myst-2-riven-data myst-2-riven-common" PKG_L10N_ID="${GAME_ID}-l10n" PKG_L10N_FR_ID="${PKG_L10N_ID}-fr" PKG_L10N_EN_ID="${PKG_L10N_ID}-en" PKG_L10N_PROVIDES=" $PKG_L10N_ID" PKG_L10N_FR_DESCRIPTION='French localisation' PKG_L10N_EN_DESCRIPTION='English localisation' ## Easier upgrades from pre-20260401.2 packages PKG_L10N_PROVIDES="${PKG_L10N_PROVIDES:-} myst-2-riven-fr myst-2-riven-en" # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" set_default_package 'PKG_MAIN' # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons content_inclusion_default # Link the fonts in the hardcoded path the game engine expects. fonts_source=$(path_fonts_ttf) fonts_destination="$(package_path 'PKG_MAIN')$(path_game_data)" mkdir --parents "$fonts_destination" ln --symbolic --target-directory="$fonts_destination" \ "${fonts_source}/freesans.ttf" \ "${fonts_source}/mplus-2c-regular.ttf" # Write launchers. ## Set game language. game_exec_line() { cat <<- 'EOF' # Set game language if [ -e "${PATH_GAME_DATA}/b_data_french.mhk" ]; then language=fr else language=en fi scummvm --language="$language" --path="$PATH_GAME_DATA" "$@" mohawk:riven EOF } launchers_generation # Build packages. packages_generation case "$(messages_language)" in ('fr') lang_string='version %s :' lang_fr='française' lang_en='anglaise' ;; ('en'|*) lang_string='%s version:' lang_fr='French' lang_en='English' ;; esac printf '\n' printf "$lang_string" "$lang_fr" print_instructions 'PKG_MAIN' 'PKG_L10N_FR' printf "$lang_string" "$lang_en" print_instructions 'PKG_MAIN' 'PKG_L10N_EN' # Clean up. working_directory_cleanup exit 0 games/play-roadwarden.sh0000755000000000000000000000714114471751340014311 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2023 Antoine Le Gonidec set -o errexit ### # Roadwarden # send your bug reports to vv221@dotslashplay.it ### script_version=20251223.2 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='roadwarden' GAME_NAME='Roadwarden' ARCHIVE_BASE_5_NAME='roadwarden_1_2_0_76262.sh' ARCHIVE_BASE_5_MD5='06d0662117d8372911e33841603e8151' ARCHIVE_BASE_5_SIZE='857757' ARCHIVE_BASE_5_VERSION='1.2.0-gog76262' ARCHIVE_BASE_5_URL='https://www.gog.com/game/roadwarden' ARCHIVE_BASE_4_NAME='roadwarden_1_1_31_67621.sh' ARCHIVE_BASE_4_MD5='c5ce0e6b2b92a0ca49ab0bd06e018957' ARCHIVE_BASE_4_SIZE='867056' ARCHIVE_BASE_4_VERSION='1.1.31-gog67621' ARCHIVE_BASE_3_NAME='roadwarden_1_1_2_67478.sh' ARCHIVE_BASE_3_MD5='f62eb9f3027ea9b6fb4f76b87cc71471' ARCHIVE_BASE_3_SIZE='867052' ARCHIVE_BASE_3_VERSION='1.1.2-gog67478' ARCHIVE_BASE_2_NAME='roadwarden_1_0_92_63495.sh' ARCHIVE_BASE_2_MD5='1808e2f215bdca65324b909f2706574b' ARCHIVE_BASE_2_SIZE='870000' ARCHIVE_BASE_2_VERSION='1.0.92-gog63495' ARCHIVE_BASE_1_NAME='roadwarden_1_0_9_62941.sh' ARCHIVE_BASE_1_MD5='4fa5f13a40a2ae3e287493298e326e96' ARCHIVE_BASE_1_SIZE='870000' ARCHIVE_BASE_1_VERSION='1.0.9-gog62941' ARCHIVE_BASE_1_URL='https://www.gog.com/game/roadwarden' ARCHIVE_BASE_0_NAME='roadwarden_1_0_8_61761.sh' ARCHIVE_BASE_0_MD5='659218d7803632a38f8e72e4f4f83a26' ARCHIVE_BASE_0_SIZE='870000' ARCHIVE_BASE_0_VERSION='1.0.8-gog61761' CONTENT_PATH_DEFAULT='data/noarch/game/game' CONTENT_FONTS_MAIN_FILES=' munro.ttf philosopher.ttf' CONTENT_GAME_MAIN_FILES=' areas audio cache gui images tl colorpalette.png presplash_background.png presplash_foreground.png script_version.txt *.rpy *.rpyc' APP_MAIN_TYPE='renpy' APP_MAIN_ICON='../../support/icon.png' ## Easier upgrades from pre-20240427.1 packages PKG_MAIN_PROVIDES="${PKG_MAIN_PROVIDES:-} roadwarden-data" # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons content_inclusion_default # Link the fonts in the hardcoded path the game engine expects. fonts_source=$(path_fonts_ttf) fonts_destination="$(package_path "$(current_package)")$(path_game_data)" mkdir --parents "$fonts_destination" for font_file in \ 'munro.ttf' \ 'philosopher.ttf' do ln --symbolic "${fonts_source}/${font_file}" "$fonts_destination" done # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-sam-and-max-hit-the-road.sh0000755000000000000000000000627714471751340016562 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2015 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2016 Mopi # SPDX-FileCopyrightText: © 2020 macaron set -o errexit ### # Sam and Max Hit the Road # send your bug reports to vv221@dotslashplay.it ### script_version=20260101.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='sam-and-max-hit-the-road' GAME_NAME='Sam & Max Hit the Road' ARCHIVE_BASE_EN_1_NAME='sam_and_max_hit_the_road_en_gog_2_20100.sh' ARCHIVE_BASE_EN_1_MD5='0771889c051c7e1cc6e6c8e8ca8fbe1f' ARCHIVE_BASE_EN_1_SIZE='390000' ARCHIVE_BASE_EN_1_VERSION='1.0-gog20100' ARCHIVE_BASE_EN_1_URL='https://www.gog.com/game/sam_max_hit_the_road' ARCHIVE_BASE_FR_1_NAME='sam_and_max_hit_the_road_fr_gog_2_20100.sh' ARCHIVE_BASE_FR_1_MD5='52b35282832b477c7f1bb06688ba3b95' ARCHIVE_BASE_FR_1_SIZE='280000' ARCHIVE_BASE_FR_1_VERSION='1.0-gog20100' ARCHIVE_BASE_FR_1_URL='https://www.gog.com/game/sam_max_hit_the_road' ARCHIVE_BASE_EN_0_NAME='gog_sam_max_hit_the_road_2.0.0.8.sh' ARCHIVE_BASE_EN_0_MD5='00e6de62115b581f01f49354212ce545' ARCHIVE_BASE_EN_0_SIZE='270000' ARCHIVE_BASE_EN_0_VERSION='1.0-gog2.0.0.1' ARCHIVE_BASE_FR_0_NAME='gog_sam_max_hit_the_road_french_2.0.0.8.sh' ARCHIVE_BASE_FR_0_MD5='127be643ebaa9af24ddd9f2618e4433e' ARCHIVE_BASE_FR_0_SIZE='160000' ARCHIVE_BASE_FR_0_VERSION='1.0-gog2.0.0.1' CONTENT_PATH_DEFAULT='data/noarch/data' CONTENT_GAME_MAIN_FILES=' samnmax.000 samnmax.001 monster.so[3fgu]' CONTENT_DOC_MAIN_PATH_EN='data/noarch/docs/english' CONTENT_DOC_MAIN_PATH_FR='data/noarch/docs/french' CONTENT_DOC_MAIN_FILES=' *.pdf' APP_MAIN_SCUMMID='scumm:samnmax' APP_MAIN_ICON='../support/icon.png' PKG_MAIN_ID="$GAME_ID" PKG_MAIN_ID_EN="${PKG_MAIN_ID}-en" PKG_MAIN_ID_FR="${PKG_MAIN_ID}-fr" PKG_MAIN_PROVIDES=" $PKG_MAIN_ID" # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons content_inclusion_default # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-scrapland.sh0000755000000000000000000001066314471751340014135 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2022 Antoine Le Gonidec set -o errexit ### # Scrapland # send your bug reports to vv221@dotslashplay.it ### script_version=20260321.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='scrapland' GAME_NAME='Scrapland' ARCHIVE_BASE_0_NAME='setup_scrapland_remastered_1.6.1_(52159).exe' ARCHIVE_BASE_0_MD5='5f1a6494309632a2536c46e2bf3226bc' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_PART1_NAME='setup_scrapland_remastered_1.6.1_(52159)-1.bin' ARCHIVE_BASE_0_PART1_MD5='93c07bedabd25a0d63c7ae36cf5abd47' ARCHIVE_BASE_0_PART2_NAME='setup_scrapland_remastered_1.6.1_(52159)-2.bin' ARCHIVE_BASE_0_PART2_MD5='8543d603b9c8eb6d666aec35387c311c' ARCHIVE_BASE_0_SIZE='8943631' ARCHIVE_BASE_0_VERSION='1.6.1-gog52159' ARCHIVE_BASE_0_URL='https://www.gog.com/game/scrapland_remastered' CONTENT_PATH_DEFAULT='.' CONTENT_GAME_BIN_FILES=' Bin/Scrap.exe Scrap.cfg' # TODO: Move server to a dedicated package. CONTENT_GAME0_BIN_FILES=' Bin/Dedicated.exe Dedicated' # TODO: Drop unused libraries. # TODO: Install libraries in a standard path. CONTENT_GAME1_BIN_FILES=' Bin/fmod.dll Bin/Galaxy.dll Bin/steam_api.dll' CONTENT_GAME_L10N_FR_FILES=' Language/French.txt French.packed' CONTENT_GAME_L10N_EN_FILES=' Language/English.txt English.packed' CONTENT_VIDEO_L10N_FR_PATH='Video/French' CONTENT_VIDEO_L10N_EN_PATH='Video' CONTENT_VIDEO_L10N_FILES=' Bishop.vds Intro.vds Mayor.vds Police.vds Viscous.vds' CONTENT_VIDEO_L10N_FR_FILES="$CONTENT_VIDEO_L10N_FILES" CONTENT_VIDEO_L10N_EN_FILES="$CONTENT_VIDEO_L10N_FILES" CONTENT_GAME_DATA_FILES=' Video/MSE.vds Video/MSE-Short.vds Data.packed data??.packed' WINE_PERSISTENT_DIRECTORIES=' users/${USER}/Documents/MercurySteam/Scrapland' APP_MAIN_EXE='Bin/Scrap.exe' PACKAGES_LIST=' PKG_BIN PKG_L10N_FR PKG_L10N_EN PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_L10N PKG_DATA' PKG_BIN_DEPENDENCIES_GSTREAMER_PLUGINS=' video/x-msvideo' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' PKG_L10N_ID="${GAME_ID}-l10n" PKG_L10N_FR_ID="${PKG_L10N_ID}-fr" PKG_L10N_EN_ID="${PKG_L10N_ID}-en" PKG_L10N_PROVIDES=" $PKG_L10N_ID" PKG_L10N_FR_DESCRIPTION='French localisation' PKG_L10N_EN_DESCRIPTION='English localisation' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include language setting file. language_file_name='goggame-1688988400.info' language_file_origin="$(path_archive_contents)/${language_file_name}" language_file_l10n_fr_destination="$(package_path 'PKG_L10N_FR')$(path_game_data)/${language_file_name}" language_file_l10n_en_destination="$(package_path 'PKG_L10N_EN')$(path_game_data)/${language_file_name}" mkdir --parents \ "$(dirname "$language_file_l10n_fr_destination")" \ "$(dirname "$language_file_l10n_en_destination")" sed --expression='s/"language": ".*",/"language": "French",/' \ "$language_file_origin" > "$language_file_l10n_fr_destination" sed --expression='s/"language": ".*",/"language": "English",/' \ "$language_file_origin" > "$language_file_l10n_en_destination" # Include game data. content_inclusion_icons 'PKG_DATA' # Include localised videos. content_inclusion 'VIDEO_L10N_FR' 'PKG_L10N_FR' "$(path_game_data)/Video" content_inclusion 'VIDEO_L10N_EN' 'PKG_L10N_EN' "$(path_game_data)/Video" content_inclusion_default # Write launchers. # Run the game binary from its parent directory. game_exec_line() { cat <<- 'EOF' cd Bin $(wine_command) Scrap.exe "$@" EOF } launchers_generation # Build packages. packages_generation case "$(messages_language)" in ('fr') lang_string='version %s :' lang_fr='française' lang_en='anglaise' ;; ('en'|*) lang_string='%s version:' lang_fr='French' lang_en='English' ;; esac printf '\n' printf "$lang_string" "$lang_fr" print_instructions 'PKG_BIN' 'PKG_DATA' 'PKG_L10N_FR' printf "$lang_string" "$lang_en" print_instructions 'PKG_BIN' 'PKG_DATA' 'PKG_L10N_EN' # Clean up. working_directory_cleanup exit 0 games/play-shadow-gambit-expansions.sh0000755000000000000000000000756214471751340017105 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2023 Antoine Le Gonidec set -o errexit ### # Shadow Gambit expansions: # - Yuki's Wish # - Zagan's Ritual # send your bug reports to vv221@dotslashplay.it ### script_version=20260128.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='shadow-gambit' GAME_NAME='Shadow Gambit: The Cursed Crew' EXPANSION_ID_YUKI='yukis-wish' EXPANSION_NAME_YUKI='Yuki’s Wish' EXPANSION_ID_ZAGAN='zagans-ritual' EXPANSION_NAME_ZAGAN='Zagan’s Ritual' # Yuki's Wish ARCHIVE_BASE_YUKI_2_NAME='setup_shadow_gambit_yukis_wish_1.2.133.f.r40893v3_(87352).exe' ARCHIVE_BASE_YUKI_2_MD5='24d6e120b615ed64daa7eb6d0dc74c9f' ARCHIVE_BASE_YUKI_2_TYPE='innosetup' ARCHIVE_BASE_YUKI_2_SIZE='7491' ARCHIVE_BASE_YUKI_2_VERSION='1.2.133.f.r40893v3-gog87352' ARCHIVE_BASE_YUKI_2_URL='https://www.gog.com/game/shadow_gambit_yukis_wish' ARCHIVE_BASE_YUKI_1_NAME='setup_shadow_gambit_yukis_wish_1.2.133.f.r40893v2_(86438).exe' ARCHIVE_BASE_YUKI_1_MD5='0b507bc3dccb5788a991440c396fb178' ARCHIVE_BASE_YUKI_1_TYPE='innosetup' ARCHIVE_BASE_YUKI_1_SIZE='6524' ARCHIVE_BASE_YUKI_1_VERSION='1.2.133.f.r40893v2-gog86438' ARCHIVE_BASE_YUKI_0_NAME='setup_shadow_gambit_the_cursed_crew__dlctrp_1.2.133.f.r40893_(64bit)_(69829).exe' ARCHIVE_BASE_YUKI_0_MD5='da9c4f3c92dc2eec996592f3e96acf33' ARCHIVE_BASE_YUKI_0_TYPE='innosetup' ARCHIVE_BASE_YUKI_0_SIZE='7198' ARCHIVE_BASE_YUKI_0_VERSION='1.2.133.f.r40893-gog69829' # Zagan's Ritual ARCHIVE_BASE_ZAGAN_2_NAME='setup_shadow_gambit_zagans_ritual_1.2.133.f.r40893v3_(87352).exe' ARCHIVE_BASE_ZAGAN_2_MD5='cf0611749e8f3a9a49d7fe4eb9bc3bc8' ARCHIVE_BASE_ZAGAN_2_TYPE='innosetup' ARCHIVE_BASE_ZAGAN_2_SIZE='6785' ARCHIVE_BASE_ZAGAN_2_VERSION='1.2.133.f.r40893v3-gog87352' ARCHIVE_BASE_ZAGAN_2_URL='https://www.gog.com/game/shadow_gambit_zagans_ritual' ARCHIVE_BASE_ZAGAN_1_NAME='setup_shadow_gambit_zagans_ritual_1.2.133.f.r40893v2_(86438).exe' ARCHIVE_BASE_ZAGAN_1_MD5='694c9b1f2cfa444ed8b93994312d7b18' ARCHIVE_BASE_ZAGAN_1_TYPE='innosetup' ARCHIVE_BASE_ZAGAN_1_SIZE='7608' ARCHIVE_BASE_ZAGAN_1_VERSION='1.2.133.f.r40893v2-gog86438' ARCHIVE_BASE_ZAGAN_0_NAME='setup_shadow_gambit_the_cursed_crew__dlcchc_1.2.133.f.r40893_(64bit)_(69829).exe' ARCHIVE_BASE_ZAGAN_0_MD5='a715770254fe1f451c616503c19ecb2e' ARCHIVE_BASE_ZAGAN_0_TYPE='innosetup' ARCHIVE_BASE_ZAGAN_0_SIZE='7058' ARCHIVE_BASE_ZAGAN_0_VERSION='1.2.133.f.r40893-gog69829' CONTENT_PATH_DEFAULT='.' CONTENT_GAME_MAIN_FILES=' goggame-*.info' PKG_PARENT_ID="$GAME_ID" PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_PARENT' # Load common functions. # Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Scan library paths used by ./play.it < 2.35. # This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_default # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-shadow-gambit.sh0000755000000000000000000002325414471751340014714 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2023 Antoine Le Gonidec set -o errexit ### # Shadow Gambit # send your bug reports to vv221@dotslashplay.it ### script_version=20260315.2 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='shadow-gambit' GAME_NAME='Shadow Gambit: The Cursed Crew' GAME_ID_DEMO="${GAME_ID}-demo" GAME_NAME_DEMO="$GAME_NAME (demo)" ARCHIVE_BASE_2_NAME='setup_shadow_gambit_the_cursed_crew_1.2.133.f.r40893v3_(64bit)_(87352).exe' ARCHIVE_BASE_2_MD5='c01bcb5a07d2fefce0104f95c124625a' ARCHIVE_BASE_2_TYPE='innosetup' ARCHIVE_BASE_2_PART1_NAME='setup_shadow_gambit_the_cursed_crew_1.2.133.f.r40893v3_(64bit)_(87352)-1.bin' ARCHIVE_BASE_2_PART1_MD5='2b59a0bc10ade138ef3f58dda56cd763' ARCHIVE_BASE_2_PART2_NAME='setup_shadow_gambit_the_cursed_crew_1.2.133.f.r40893v3_(64bit)_(87352)-2.bin' ARCHIVE_BASE_2_PART2_MD5='08b3c436b8abec44f81ac38a427837db' ARCHIVE_BASE_2_PART3_NAME='setup_shadow_gambit_the_cursed_crew_1.2.133.f.r40893v3_(64bit)_(87352)-3.bin' ARCHIVE_BASE_2_PART3_MD5='4f9de90dbdf8638aab95803741c5cf3b' ARCHIVE_BASE_2_PART4_NAME='setup_shadow_gambit_the_cursed_crew_1.2.133.f.r40893v3_(64bit)_(87352)-4.bin' ARCHIVE_BASE_2_PART4_MD5='658f0cd24abd7b16445c52cf52f7bf14' ARCHIVE_BASE_2_SIZE='28002952' ARCHIVE_BASE_2_VERSION='1.2.133.f.r40893v3-gog87352' ARCHIVE_BASE_2_URL='https://www.gog.com/game/shadow_gambit_the_cursed_crew' ARCHIVE_BASE_1_NAME='setup_shadow_gambit_the_cursed_crew_1.2.133.f.r40893v2_(64bit)_(86438).exe' ARCHIVE_BASE_1_MD5='9677874d7d448ff67c69b319c4862c09' ARCHIVE_BASE_1_TYPE='innosetup' ARCHIVE_BASE_1_PART1_NAME='setup_shadow_gambit_the_cursed_crew_1.2.133.f.r40893v2_(64bit)_(86438)-1.bin' ARCHIVE_BASE_1_PART1_MD5='daa2101dd1bf7b1bfbfc1399820b3eef' ARCHIVE_BASE_1_PART2_NAME='setup_shadow_gambit_the_cursed_crew_1.2.133.f.r40893v2_(64bit)_(86438)-2.bin' ARCHIVE_BASE_1_PART2_MD5='5cfaffe56930d2be956b651419009ae4' ARCHIVE_BASE_1_PART3_NAME='setup_shadow_gambit_the_cursed_crew_1.2.133.f.r40893v2_(64bit)_(86438)-3.bin' ARCHIVE_BASE_1_PART3_MD5='96600b962e5ebbf842cfc3cae9000d99' ARCHIVE_BASE_1_PART4_NAME='setup_shadow_gambit_the_cursed_crew_1.2.133.f.r40893v2_(64bit)_(86438)-4.bin' ARCHIVE_BASE_1_PART4_MD5='630e2e7effb43806f2738c0e48bc450e' ARCHIVE_BASE_1_PART5_NAME='setup_shadow_gambit_the_cursed_crew_1.2.133.f.r40893v2_(64bit)_(86438)-5.bin' ARCHIVE_BASE_1_PART5_MD5='374b8ceb48923a8928e43b925793e1f0' ARCHIVE_BASE_1_SIZE='28679515' ARCHIVE_BASE_1_VERSION='1.2.133.f.r40893v2-gog86438' ARCHIVE_BASE_0_NAME='setup_shadow_gambit_the_cursed_crew_1.2.133.f.r40893_(64bit)_(69829).exe' ARCHIVE_BASE_0_MD5='b394c7866b3e2106b8659f76dcf3b814' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_PART1_NAME='setup_shadow_gambit_the_cursed_crew_1.2.133.f.r40893_(64bit)_(69829)-1.bin' ARCHIVE_BASE_0_PART1_MD5='33d84cef13cae8cb1a27e03101cda2cc' ARCHIVE_BASE_0_PART2_NAME='setup_shadow_gambit_the_cursed_crew_1.2.133.f.r40893_(64bit)_(69829)-2.bin' ARCHIVE_BASE_0_PART2_MD5='aa475cf51a8a6b9f151a63e7f8acd226' ARCHIVE_BASE_0_PART3_NAME='setup_shadow_gambit_the_cursed_crew_1.2.133.f.r40893_(64bit)_(69829)-3.bin' ARCHIVE_BASE_0_PART3_MD5='8019f8a20edf33e894a49ccc84fdf867' ARCHIVE_BASE_0_PART4_NAME='setup_shadow_gambit_the_cursed_crew_1.2.133.f.r40893_(64bit)_(69829)-4.bin' ARCHIVE_BASE_0_PART4_MD5='d499dd2ab3f31e1ddb7c6b6c6f9d35c7' ARCHIVE_BASE_0_SIZE='27989056' ARCHIVE_BASE_0_VERSION='1.2.133.f.r40893-gog69829' ARCHIVE_BASE_DEMO_0_NAME='setup_shadow_gambit_the_cursed_crew_demo_1.0.46.r37840.d_(64bit)_(66564).exe' ARCHIVE_BASE_DEMO_0_MD5='ad6c5d562cb5166301b82311495eb4fc' ARCHIVE_BASE_DEMO_0_TYPE='innosetup' ARCHIVE_BASE_DEMO_0_PART1_NAME='setup_shadow_gambit_the_cursed_crew_demo_1.0.46.r37840.d_(64bit)_(66564)-1.bin' ARCHIVE_BASE_DEMO_0_PART1_MD5='2ed0f7c0fe3bcba3cfe562ff687743cc' ARCHIVE_BASE_DEMO_0_PART2_NAME='setup_shadow_gambit_the_cursed_crew_demo_1.0.46.r37840.d_(64bit)_(66564)-2.bin' ARCHIVE_BASE_DEMO_0_PART2_MD5='cf8746aaa4ff9b40366c562367155876' ARCHIVE_BASE_DEMO_0_PART3_NAME='setup_shadow_gambit_the_cursed_crew_demo_1.0.46.r37840.d_(64bit)_(66564)-3.bin' ARCHIVE_BASE_DEMO_0_PART3_MD5='190c8d547cd6f3217a10038079431c9c' ARCHIVE_BASE_DEMO_0_SIZE='15729374' ARCHIVE_BASE_DEMO_0_VERSION='1.0.46.r37840.d-gog66564' ARCHIVE_BASE_DEMO_0_URL='https://www.gog.com/game/shadow_gambit_the_cursed_crew_demo' UNITY3D_NAME='ShadowGambit_TCC' # TODO: Experimental support for Windows Unity3D plugins, # no support in ./play.it library yet. # (./play.it 2.35) # Required to prevent an unendin loading screen. UNITY3D_PLUGINS=' GalaxyCSharpGlue.dll' # GalaxyCSharpGlue.dll requirement UNITY3D_PLUGINS="$UNITY3D_PLUGINS Galaxy64.dll" CONTENT_PATH_DEFAULT='.' CONTENT_GAME_DATA_EXPANSION_YUKI_FILES=" ${UNITY3D_NAME}_Data/StreamingAssets/aa/StandaloneWindows64/dlctrp_content_00" CONTENT_GAME_DATA_EXPANSION_ZAGAN_FILES=" ${UNITY3D_NAME}_Data/StreamingAssets/aa/StandaloneWindows64/dlcchc_content_00" CONTENT_GAME_DATA_BUNDLES1_FILES=" ${UNITY3D_NAME}_Data/StreamingAssets/aa/StandaloneWindows64/mis_*" CONTENT_GAME_DATA_BUNDLES2_FILES=" ${UNITY3D_NAME}_Data/StreamingAssets/aa/StandaloneWindows64/main_*" CONTENT_GAME_DATA_BUNDLES3_FILES=" ${UNITY3D_NAME}_Data/StreamingAssets/aa/StandaloneWindows64" WINE_PERSISTENT_DIRECTORIES=' users/${USER}/AppData/Local/ShadowGambit_TCC' WINE_PERSISTENT_DIRECTORIES_DEMO=' users/${USER}/AppData/Local/ShadowGambit_TCC_Demo' PACKAGES_LIST=' PKG_BIN PKG_DATA_EXPANSION_YUKI PKG_DATA_EXPANSION_ZAGAN PKG_DATA_BUNDLES1 PKG_DATA_BUNDLES2 PKG_DATA_BUNDLES3 PKG_DATA' PACKAGES_LIST_DEMO=' PKG_BIN PKG_DATA_BUNDLES1 PKG_DATA_BUNDLES2 PKG_DATA_BUNDLES3 PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_GSTREAMER_PLUGINS=' video/quicktime, variant=(string)iso' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_ID_DEMO="${GAME_ID_DEMO}-data" PKG_DATA_DESCRIPTION='data' PKG_DATA_DEPENDENCIES_SIBLINGS=' PKG_DATA_EXPANSION_YUKI PKG_DATA_EXPANSION_ZAGAN PKG_DATA_BUNDLES1 PKG_DATA_BUNDLES2 PKG_DATA_BUNDLES3' PKG_DATA_DEPENDENCIES_SIBLINGS_DEMO=' PKG_DATA_BUNDLES1 PKG_DATA_BUNDLES2 PKG_DATA_BUNDLES3' PKG_DATA_EXPANSION_ID="${PKG_DATA_ID}-expansion" PKG_DATA_EXPANSION_YUKI_ID="${PKG_DATA_EXPANSION_ID}-yuki" PKG_DATA_EXPANSION_ZAGAN_ID="${PKG_DATA_EXPANSION_ID}-zagan" PKG_DATA_EXPANSION_DESCRIPTION="$PKG_DATA_DESCRIPTION - expansion" PKG_DATA_EXPANSION_YUKI_DESCRIPTION="$PKG_DATA_EXPANSION_DESCRIPTION - Yuki's Wish" PKG_DATA_EXPANSION_ZAGAN_DESCRIPTION="$PKG_DATA_EXPANSION_DESCRIPTION - Zagan's Ritual" PKG_DATA_BUNDLES_ID="${PKG_DATA_ID}-bundles" PKG_DATA_BUNDLES1_ID="${PKG_DATA_BUNDLES_ID}-1" PKG_DATA_BUNDLES2_ID="${PKG_DATA_BUNDLES_ID}-2" PKG_DATA_BUNDLES3_ID="${PKG_DATA_BUNDLES_ID}-3" PKG_DATA_BUNDLES_ID_DEMO="${PKG_DATA_ID_DEMO}-bundles" PKG_DATA_BUNDLES1_ID_DEMO="${PKG_DATA_BUNDLES_ID_DEMO}-1" PKG_DATA_BUNDLES2_ID_DEMO="${PKG_DATA_BUNDLES_ID_DEMO}-2" PKG_DATA_BUNDLES3_ID_DEMO="${PKG_DATA_BUNDLES_ID_DEMO}-3" PKG_DATA_BUNDLES_DESCRIPTION="$PKG_DATA_DESCRIPTION - bundles" PKG_DATA_BUNDLES1_DESCRIPTION="$PKG_DATA_BUNDLES_DESCRIPTION - 1" PKG_DATA_BUNDLES2_DESCRIPTION="$PKG_DATA_BUNDLES_DESCRIPTION - 2" PKG_DATA_BUNDLES3_DESCRIPTION="$PKG_DATA_BUNDLES_DESCRIPTION - 3" # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' # Include Unity3D plugins. unity3d_plugins_inclusion 'PKG_BIN' "$(unity3d_name)_Data/Plugins/x86_64" "$(path_libraries)/$(unity3d_name)_Data/Plugins" content_inclusion_default # Write launchers. # Store the game prefix into the WINE prefix, instead of using a symbolic link. # This is required for the expansions to be correctly detected. # The generated launchers will ignore $PLAYIT_PREFIX_PATH. launcher_path_prefix() { local game_id game_id=$(game_id) cat <<- EOF # Set the path to the volatile game prefix. # This launcher ignores \$PLAYIT_PREFIX_PATH. path_prefix() { # Store the game prefix into the WINE prefix, instead of using a symbolic link. # This is required for the expansions to be correctly detected. printf '%s/drive_c/%s' \\ "\$PATH_WINEPREFIX" \\ '$(game_id)' } PATH_PREFIX=\$(path_prefix) EOF } wine_wineprefix_init_actions() { cat <<- 'EOF' # Do not link the game prefix into the WINE prefix, as its real path is already there. # Remove most links pointing outside of the WINE prefix. rm "$WINEPREFIX/dosdevices/z:" find "$WINEPREFIX/drive_c/users/$(whoami)" -type l | while read -r directory; do rm "$directory" mkdir "$directory" done unset directory # Set symbolic links to the legacy paths. wineprefix_legacy_link 'AppData/Roaming' 'Application Data' wineprefix_legacy_link 'AppData/Local' 'Local Settings/Application Data' wineprefix_legacy_link 'Documents' 'My Documents' EOF wineprefix_init_custom } # Install Unity3D plugins. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --symbolic "$dll_source" "$dll_destination" done EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-shadow-tactics.sh0000755000000000000000000001413614471751340015102 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2018 Antoine Le Gonidec set -o errexit ### # Shadow Tactics: # - Shadow Tactics: Blades of the Shogun # - Aiko's Choice # send your bug reports to vv221@dotslashplay.it ### script_version=20260315.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID_BLADES='shadow-tactics' GAME_NAME_BLADES='Shadow Tactics: Blades of the Shogun' GAME_ID_BLADES_DEMO="${GAME_ID_BLADES}-demo" GAME_NAME_BLADES_DEMO="$GAME_NAME_BLADES (demo)" GAME_ID_AIKO='shadow-tactics-aikos-choice' GAME_NAME_AIKO='Shadow Tactics: Blades of the Shogun - Aikoʼs Choice' ARCHIVE_BASE_BLADES_1_NAME='shadow_tactics_blades_of_the_shogun_en_2_2_10_f_21297.sh' ARCHIVE_BASE_BLADES_1_MD5='e7772e7a5f4fee760e9311a9a899dbb3' ARCHIVE_BASE_BLADES_1_SIZE='7642154' ARCHIVE_BASE_BLADES_1_VERSION='2.2.10.f-gog21297' ARCHIVE_BASE_BLADES_1_URL='https://www.gog.com/game/shadow_tactics_blades_of_the_shogun' ARCHIVE_BASE_BLADES_0_NAME='shadow_tactics_blades_of_the_shogun_en_1_4_4_f_14723.sh' ARCHIVE_BASE_BLADES_0_MD5='93faa090d5bcaa22f0faabd1e32c5909' ARCHIVE_BASE_BLADES_0_SIZE='9600000' ARCHIVE_BASE_BLADES_0_VERSION='1.4.4.f-gog14723' ARCHIVE_BASE_BLADES_DEMO_0_NAME='shadow_tactics_blades_of_the_shogun_demo_en_1_4_4_d_14915.sh' ARCHIVE_BASE_BLADES_DEMO_0_MD5='9238093a25ce9c911d9f19789ca18878' ARCHIVE_BASE_BLADES_DEMO_0_SIZE='2764963' ARCHIVE_BASE_BLADES_DEMO_0_VERSION='1.4.4.d-gog14915' ARCHIVE_BASE_BLADES_DEMO_0_URL='https://www.gog.com/game/shadow_tactics_demo' ARCHIVE_BASE_AIKO_0_NAME='setup_shadow_tactics_blades_of_the_shogun_-_aikos_choice_3.2.25.f.r4769a_(51855).exe' ARCHIVE_BASE_AIKO_0_MD5='5e0cfcc243f249fded7906fea04f6544' ARCHIVE_BASE_AIKO_0_TYPE='innosetup' ARCHIVE_BASE_AIKO_0_PART1_NAME='setup_shadow_tactics_blades_of_the_shogun_-_aikos_choice_3.2.25.f.r4769a_(51855)-1.bin' ARCHIVE_BASE_AIKO_0_PART1_MD5='8bdc4420659b2382d742165fddb09705' ARCHIVE_BASE_AIKO_0_SIZE='4569291' ARCHIVE_BASE_AIKO_0_VERSION='3.2.25.f.r4769a-gog51855' ARCHIVE_BASE_AIKO_0_URL='https://www.gog.com/game/shadow_tactics_blades_of_the_shogun_aikos_choice' UNITY3D_NAME_BLADES='Shadow Tactics' UNITY3D_NAME_AIKO='Shadow Tactics' UNITY3D_PLUGINS_BLADES=' libRenderingPlugin.so ScreenSelector.so' # TODO: Experimental support for Windows Unity3D plugins, # no support in ./play.it library yet. # (./play.it 2.35) # Required for the initial loading to complete UNITY3D_PLUGINS_AIKO=' GalaxyCSharpGlue.dll RenderingPlugin.dll' # GalaxyCSharpGlue.dll requirement UNITY3D_PLUGINS_AIKO="$UNITY3D_PLUGINS_AIKO Galaxy.dll" # RenderingPlugin.dll requirements UNITY3D_PLUGINS_AIKO="$UNITY3D_PLUGINS_AIKO libogg.dll libtheora.dll" CONTENT_PATH_DEFAULT_BLADES='data/noarch/game' CONTENT_PATH_DEFAULT_AIKO='.' # Required to prevent a fatal error on launch CONTENT_LIBS_BIN_FILES_AIKO=" ${UNITY3D_NAME_AIKO}_Data/Mono/mono.dll" CONTENT_GAME_DATA_LIGHTNING_FILES_BLADES=" ${UNITY3D_NAME_BLADES}_Data/GI" # Aiko's Choice WINE_PERSISTENT_DIRECTORIES=' users/${USER}/AppData/Local/Daedalic Entertainment GmbH/Shadow Tactics Blades of the Shogun Aikos Choice' PACKAGES_LIST_BLADES=' PKG_BIN PKG_DATA_LIGHTNING PKG_DATA' PACKAGES_LIST_AIKO=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES_BLADES=' libc.so.6 libdl.so.2 libgcc_s.so.1 libgdk_pixbuf-2.0.so.0 libglib-2.0.so.0 libGL.so.1 libgobject-2.0.so.0 libgtk-x11-2.0.so.0 libm.so.6 libpthread.so.0 librt.so.1 libstdc++.so.6 libX11.so.6 libXcursor.so.1 libXrandr.so.2' PKG_DATA_ID_BLADES="${GAME_ID_BLADES}-data" PKG_DATA_ID_BLADES_DEMO="${GAME_ID_BLADES_DEMO}-data" PKG_DATA_ID_AIKO="${GAME_ID_AIKO}-data" PKG_DATA_DESCRIPTION='data' PKG_DATA_DEPENDENCIES_SIBLINGS_BLADES=' PKG_DATA_LIGHTNING' # Blades of the Shogun PKG_DATA_LIGHTNING_ID_BLADES="${PKG_DATA_ID_BLADES}-lightning" PKG_DATA_LIGHTNING_ID_BLADES_DEMO="${PKG_DATA_ID_BLADES_DEMO}-lightning" PKG_DATA_LIGHTNING_DESCRIPTION="${PKG_DATA_DESCRIPTION} - lightning" # Easier upgrades from pre-20251231.1 packages PKG_DATA_LIGHTNING_PROVIDES_BLADES="${PKG_LIGHTNING_PROVIDES_BLADES:-} shadow-tactics-lighting" PKG_DATA_LIGHTNING_PROVIDES_BLADES_DEMO="${PKG_LIGHTNING_PROVIDES_BLADES_DEMO:-} shadow-tactics-demo-lighting" # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' # Aiko's Choice - Include shipped libraries. case "$(current_archive)" in ('ARCHIVE_BASE_AIKO_'*) # Include Unity3D plugins. unity3d_plugins_inclusion 'PKG_BIN' "$(unity3d_name)_Data/Plugins" "$(path_libraries)/$(unity3d_name)_Data/Plugins" content_inclusion_default_libraries 'PKG_BIN' ;; esac content_inclusion_default # Blades of the Shogun - Link libRenderingPlugin.so to the harcoded path expected by the game engine. case "$(current_archive)" in ('ARCHIVE_BASE_BLADES_'*) source_file="$(path_libraries)/libRenderingPlugin.so" target_directory="$(package_path 'PKG_BIN')$(path_game_data)/$(unity3d_name)_Data/Plugins/x86" mkdir --parents "$target_directory" ln --symbolic "$source_file" "$target_directory" ;; esac # Write launchers. # Aiko's Choice - Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --symbolic "$dll_source" "$dll_destination" done EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-shadowrun-trilogy.sh0000755000000000000000000001370314471751340015665 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2015 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2017 Mopi set -o errexit ### # Shadowrun trilogy: # - Shadowrun Returns # - Shadowrun: Dragonfall # - Shadowrun: Hong Kong # send your bug reports to vv221@dotslashplay.it ### script_version=20251224.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID_RETURNS='shadowrun-returns' GAME_NAME_RETURNS='Shadowrun Returns' GAME_ID_DRAGONFALL='shadowrun-dragonfall' GAME_NAME_DRAGONFALL='Shadowrun: Dragonfall' GAME_ID_HONGKONG='shadowrun-hong-kong' GAME_NAME_HONGKONG='Shadowrun: Hong Kong' ## Shadowrun Returns ARCHIVE_BASE_RETURNS_GOG_1_NAME='gog_shadowrun_returns_2.0.0.7.sh' ARCHIVE_BASE_RETURNS_GOG_1_MD5='61c12b14c7e6040cb1465390320a61da' ARCHIVE_BASE_RETURNS_GOG_1_SIZE='3000000' ARCHIVE_BASE_RETURNS_GOG_1_VERSION='1.2.7-gog2.0.0.7' ARCHIVE_BASE_RETURNS_GOG_1_URL='https://www.gog.com/game/shadowrun_returns' ARCHIVE_BASE_RETURNS_GOG_0_NAME='gog_shadowrun_returns_2.0.0.5.sh' ARCHIVE_BASE_RETURNS_GOG_0_MD5='feb59e116eb3fd7a12f484a135e37fa4' ARCHIVE_BASE_RETURNS_GOG_0_SIZE='3000000' ARCHIVE_BASE_RETURNS_GOG_0_VERSION='1.2.7-gog2.0.0.5' ARCHIVE_BASE_RETURNS_HUMBLE_0_NAME='shadowrun-returns-linux127.tar.gz' ARCHIVE_BASE_RETURNS_HUMBLE_0_MD5='ff3146b1ad046f81bf8f3deba277e472' ARCHIVE_BASE_RETURNS_HUMBLE_0_SIZE='3000000' ARCHIVE_BASE_RETURNS_HUMBLE_0_VERSION='1.2.7-humble140311' ARCHIVE_BASE_RETURNS_HUMBLE_0_URL='https://www.humblebundle.com/store/shadowrun-returns' ## Shadowrun: Dragonfall ARCHIVE_BASE_DRAGONFALL_0_NAME='gog_shadowrun_dragonfall_director_s_cut_2.6.0.11.sh' ARCHIVE_BASE_DRAGONFALL_0_MD5='ee3db5bc8554852337b063b993f66012' ARCHIVE_BASE_DRAGONFALL_0_SIZE='7200000' ARCHIVE_BASE_DRAGONFALL_0_VERSION='2.0.9-gog2.6.0.11' ARCHIVE_BASE_DRAGONFALL_0_URL='https://www.gog.com/game/shadowrun_dragonfall_directors_cut' ## Shadowrun: Hong Kong ARCHIVE_BASE_HONGKONG_0_NAME='gog_shadowrun_hong_kong_extended_edition_2.8.0.11.sh' ARCHIVE_BASE_HONGKONG_0_MD5='643ba68e47c309d391a6482f838e46af' ARCHIVE_BASE_HONGKONG_0_SIZE='12000000' ARCHIVE_BASE_HONGKONG_0_VERSION='3.1.2-gog2.8.0.11' ARCHIVE_BASE_HONGKONG_0_URL='https://www.gog.com/game/shadowrun_hong_kong_extended_edition' UNITY3D_NAME_RETURNS='Shadowrun' UNITY3D_NAME_DRAGONFALL='Dragonfall' UNITY3D_NAME_HONGKONG='SRHK' UNITY3D_PLUGINS=' ScreenSelector.so' CONTENT_PATH_DEFAULT_RETURNS_GOG='data/noarch/game' CONTENT_PATH_DEFAULT_RETURNS_HUMBLE='Shadowrun Returns' CONTENT_PATH_DEFAULT_DRAGONFALL='data/noarch/game' CONTENT_PATH_DEFAULT_HONGKONG='data/noarch/game' CONTENT_GAME_DATA_STANDALONE_FILES=' *_Data/StreamingAssets/standalone' CONTENT_GAME0_DATA_FILES_HONGKONG=' dictionary' FAKE_HOME_PERSISTENT_DIRECTORIES_RETURNS=' Documents/Shadowrun Returns' FAKE_HOME_PERSISTENT_DIRECTORIES_DRAGONFALL=' Documents/Shadowrun Dragonfall' FAKE_HOME_PERSISTENT_DIRECTORIES_HONGKONG=' Documents/Shadowrun Hong Kong' ## Create required writable directory. APP_MAIN_PRERUN=' # Create required writable directory. mkdir --parents DumpBox ' PACKAGES_LIST=' PKG_BIN PKG_DATA_STANDALONE PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES_RETURNS=' libc.so.6 libdl.so.2 libgcc_s.so.1 libGL.so.1 libGLU.so.1 libm.so.6 libpthread.so.0 librt.so.1 libstdc++.so.6 libX11.so.6 libXcursor.so.1 libXext.so.6' PKG_BIN_DEPENDENCIES_LIBRARIES_DRAGONFALL=' libatk-1.0.so.0 libcairo.so.2 libc.so.6 libdl.so.2 libfontconfig.so.1 libfreetype.so.6 libgcc_s.so.1 libgdk_pixbuf-2.0.so.0 libgdk-x11-2.0.so.0 libgio-2.0.so.0 libglib-2.0.so.0 libGL.so.1 libGLU.so.1 libgmodule-2.0.so.0 libgobject-2.0.so.0 libgthread-2.0.so.0 libgtk-x11-2.0.so.0 libm.so.6 libpango-1.0.so.0 libpangocairo-1.0.so.0 libpangoft2-1.0.so.0 libpthread.so.0 librt.so.1 libstdc++.so.6 libX11.so.6 libXcursor.so.1 libXext.so.6' PKG_BIN_DEPENDENCIES_LIBRARIES_HONGKONG=' libc.so.6 libdl.so.2 libgcc_s.so.1 libgdk_pixbuf-2.0.so.0 libglib-2.0.so.0 libGL.so.1 libGLU.so.1 libgobject-2.0.so.0 libgtk-x11-2.0.so.0 libm.so.6 libpthread.so.0 librt.so.1 libstdc++.so.6 libX11.so.6 libXcursor.so.1' PKG_DATA_ID_RETURNS="${GAME_ID_RETURNS}-data" PKG_DATA_ID_DRAGONFALL="${GAME_ID_DRAGONFALL}-data" PKG_DATA_ID_HONGKONG="${GAME_ID_HONGKONG}-data" PKG_DATA_DESCRIPTION='data' PKG_DATA_DEPENDENCIES_SIBLINGS=' PKG_DATA_STANDALONE' PKG_DATA_STANDALONE_ID_RETURNS="${PKG_DATA_ID_RETURNS}-standalone" PKG_DATA_STANDALONE_ID_DRAGONFALL="${PKG_DATA_ID_DRAGONFALL}-standalone" PKG_DATA_STANDALONE_ID_HONGKONG="${PKG_DATA_ID_HONGKONG}-standalone" PKG_DATA_STANDALONE_DESCRIPTION="$PKG_DATA_DESCRIPTION - standalone" # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-skullgirls.sh0000755000000000000000000000727514471751340014366 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2017 Antoine Le Gonidec set -o errexit ### # Skullgirls # send your bug reports to vv221@dotslashplay.it ### script_version=20260105.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='skullgirls' GAME_NAME='Skullgirls' ## The following DRM-free archives are no longer available for sale from Humble Bundle. ## The game is still listed on their store, but only provided as a Steam key. ARCHIVE_BASE_1_NAME='Skullgirls-15719.tar' ARCHIVE_BASE_1_MD5='104a6976aec70d423756e008a5b8554c' ARCHIVE_BASE_1_SIZE='4172735' ARCHIVE_BASE_1_VERSION='15719-humble170628' ARCHIVE_BASE_0_NAME='Skullgirls-1.0.1.sh' ARCHIVE_BASE_0_MD5='bf110f7d29bfd4b9e075584e41fef402' ARCHIVE_BASE_0_SIZE='4200000' ARCHIVE_BASE_0_VERSION='1.0.1-humble152310' CONTENT_PATH_DEFAULT='SkullGirls' CONTENT_PATH_DEFAULT_0='data' CONTENT_LIBS_BIN_RELATIVE_PATH='lib/x86_64-pc-linux-gnu' CONTENT_LIBS_BIN_RELATIVE_PATH_0='x86_64/lib/x86_64-pc-linux-gnu' CONTENT_LIBS_BIN_FILES=' libSDL2_locale.so.0' ## libSDL2_mixer-2.0.so.0 must be included, because it provides a non-standard symbol ## (SDL_AudioStreamGet) that libSDL2_locale.so.0 relies on. CONTENT_LIBS_BIN_FILES="$CONTENT_LIBS_BIN_FILES libSDL2_mixer-2.0.so.0" ## libSDL2-2.0.so.0 must be included to prevent a silent crash on start-up. CONTENT_LIBS_BIN_FILES="$CONTENT_LIBS_BIN_FILES libSDL2-2.0.so.0" CONTENT_GAME_BIN_RELATIVE_PATH_0='x86_64' CONTENT_GAME_BIN_FILES=' SkullGirls.x86_64-pc-linux-gnu' CONTENT_GAME_DATA_RELATIVE_PATH_0='noarch' CONTENT_GAME_DATA_FILES=' data01 Salmon Icon.png gamecontrollerdb.txt ProgressionInit.txt' APP_MAIN_EXE='SkullGirls.x86_64-pc-linux-gnu' APP_MAIN_ICON='Icon.png' APP_MAIN_ICON_0='noarch/Icon.png' ## Trying to run the game with wayland SDL backend leads to a crash on launch: ## CRITICAL: Unable to create SDL Window APP_MAIN_PRERUN=' # Prevent a crash on launch when wayland SDL backend is used. if [ "${SDL_VIDEODRIVER:-}" = "wayland" ]; then unset SDL_VIDEODRIVER fi ' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libgcc_s.so.1 libm.so.6 libpthread.so.0 librt.so.1 libstdc++.so.6' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-slay-the-princess.sh0000755000000000000000000002066414471751340015542 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2023 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2025 BetaRays set -o errexit ### # Slay the Princess # send your bug reports to vv221@dotslashplay.it ### script_version=20260103.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='slay-the-princess' GAME_NAME='Slay the Princess' GAME_ID_DEMO="${GAME_ID}-demo" GAME_NAME_DEMO="$GAME_NAME (demo)" ## The Pristine Cut ARCHIVE_BASE_18_NAME='slay_the_princess_the_pristine_cut_slay_the_princess_the_pristine_cut_march_5_linux_80450.sh' ARCHIVE_BASE_18_MD5='711ddf89d77c92c9d225a76a0917b2ca' ARCHIVE_BASE_18_SIZE='12719976' ARCHIVE_BASE_18_VERSION='1.4a-gog80450' ARCHIVE_BASE_18_URL='https://www.gog.com/game/slay_the_princess' ARCHIVE_BASE_17_NAME='slay_the_princess_the_pristine_cut_the_pristine_cut_linux_1_4a_80374.sh' ARCHIVE_BASE_17_MD5='3006483812c9d874039b59776a894b6f' ARCHIVE_BASE_17_SIZE='12720003' ARCHIVE_BASE_17_VERSION='1.4a-gog80374' ARCHIVE_BASE_16_NAME='slay_the_princess_the_pristine_cut_the_pristine_cut_linux_1_1a_79534.sh' ARCHIVE_BASE_16_MD5='4b7dfeb531a7431bbd2fe84e0fc2cfde' ARCHIVE_BASE_16_SIZE='12700851' ARCHIVE_BASE_16_VERSION='1.1a-gog79534' ARCHIVE_BASE_15_NAME='slay_the_princess_the_pristine_cut_the_pristine_cut_linux_1_0z_77466.sh' ARCHIVE_BASE_15_MD5='9492a8cffbf5ab5ac79593ceb763d072' ARCHIVE_BASE_15_SIZE='12706022' ARCHIVE_BASE_15_VERSION='1.0z-gog77466' ARCHIVE_BASE_15_URL='https://www.gog.com/game/slay_the_princess' ARCHIVE_BASE_14_NAME='slay_the_princess_the_pristine_cut_the_pristine_cut_linux_1_0p_77354.sh' ARCHIVE_BASE_14_MD5='9cde15f2957c37f7679d73f3fa8eed8c' ARCHIVE_BASE_14_SIZE='12689218' ARCHIVE_BASE_14_VERSION='1.0p-gog77354' ARCHIVE_BASE_13_NAME='slay_the_princess_the_pristine_cut_the_pristine_cut_linux_1_0l_77303.sh' ARCHIVE_BASE_13_MD5='23fb0cd438f5936479d56846c65be179' ARCHIVE_BASE_13_SIZE='12684306' ARCHIVE_BASE_13_VERSION='1.0l-gog77303' ARCHIVE_BASE_12_NAME='slay_the_princess_the_pristine_cut_linux_1_0_77121.sh' ARCHIVE_BASE_12_MD5='df352f8474c406976f9cd3d87d0b9e79' ARCHIVE_BASE_12_SIZE='12679961' ARCHIVE_BASE_12_VERSION='1.0-gog77121' ARCHIVE_BASE_12_URL='https://www.gog.com/game/slay_the_princess' ## End of Everything update ARCHIVE_BASE_11_NAME='slay_the_princess_end_of_everything_update_1_2e_scrollbar_73222.sh' ARCHIVE_BASE_11_MD5='f1e7f54e99ceae8aa4c1314274708b1d' ARCHIVE_BASE_11_SIZE='8799577' ARCHIVE_BASE_11_VERSION='1.2e-gog73222' ARCHIVE_BASE_11_URL='https://www.gog.com/game/slay_the_princess' ARCHIVE_BASE_10_NAME='slay_the_princess_end_of_everything_update_1_2d_linux_better_controller_73049.sh' ARCHIVE_BASE_10_MD5='bf46a8f8820d6821bd9313dd49c35771' ARCHIVE_BASE_10_SIZE='8799553' ARCHIVE_BASE_10_VERSION='1.2d-gog73049' ARCHIVE_BASE_9_NAME='slay_the_princess_end_of_everything_update_1_2c_linux_better_controller_72957.sh' ARCHIVE_BASE_9_MD5='c93f7c398fc157d14679c93fcea26299' ARCHIVE_BASE_9_SIZE='8799548' ARCHIVE_BASE_9_VERSION='1.2c-gog72957' ARCHIVE_BASE_8_NAME='slay_the_princess_end_of_everything_update_1_2b_linux_72856.sh' ARCHIVE_BASE_8_MD5='6b9588bc80145f05bfc0105d4f97fda7' ARCHIVE_BASE_8_SIZE='8799541' ARCHIVE_BASE_8_VERSION='1.2b-gog72856' ARCHIVE_BASE_7_NAME='slay_the_princess_end_of_everything_update_1_2a_linux_72334.sh' ARCHIVE_BASE_7_MD5='caa8432a8b7e8c6d75191bf143714957' ARCHIVE_BASE_7_SIZE='8799532' ARCHIVE_BASE_7_VERSION='1.2a-gog72334' ARCHIVE_BASE_6_NAME='slay_the_princess_end_of_everything_update_1_2_linux_72260.sh' ARCHIVE_BASE_6_MD5='950c30b1f3496691ce2560cf3d55ed07' ARCHIVE_BASE_6_SIZE='8799446' ARCHIVE_BASE_6_VERSION='1.2-gog72260' ## Original builds ARCHIVE_BASE_5_NAME='slay_the_princess_linux_1_1c_release_70031.sh' ARCHIVE_BASE_5_MD5='d2ab1e74725c1e28f2f3a8e74347b4ee' ARCHIVE_BASE_5_SIZE='8362317' ARCHIVE_BASE_5_VERSION='1.1c-gog70031' ARCHIVE_BASE_4_NAME='slay_the_princess_linux_1_1af_release_69960.sh' ARCHIVE_BASE_4_MD5='f179e501f2edd3357c73b81eca40b34d' ARCHIVE_BASE_4_SIZE='8378490' ARCHIVE_BASE_4_VERSION='1.1af-gog69960' ARCHIVE_BASE_3_NAME='slay_the_princess_linux_1_0h_release_69787.sh' ARCHIVE_BASE_3_MD5='851f53732e9dc6314677271f67852f35' ARCHIVE_BASE_3_SIZE='11000045' ARCHIVE_BASE_3_VERSION='1.0h-gog69787' ARCHIVE_BASE_2_NAME='slay_the_princess_linux_1_0g_release_68787.sh' ARCHIVE_BASE_2_MD5='3b8417d581d1d721ab4016720a1ea881' ARCHIVE_BASE_2_SIZE='10989272' ARCHIVE_BASE_2_VERSION='1.0g-gog68787' ARCHIVE_BASE_1_NAME='slay_the_princess_linux_1_0f_release_68611.sh' ARCHIVE_BASE_1_MD5='a4fd4334624bbc469a481fc874df2750' ARCHIVE_BASE_1_SIZE='11003752' ARCHIVE_BASE_1_VERSION='1.0f-gog68611' ARCHIVE_BASE_0_NAME='slay_the_princess_linux_1_0d_release_68521.sh' ARCHIVE_BASE_0_MD5='7acf7f8093cdddff8d484aa4043e5c51' ARCHIVE_BASE_0_SIZE='11014500' ARCHIVE_BASE_0_VERSION='1.0d-gog68521' ## Free demo ARCHIVE_BASE_DEMO_0_NAME='SlaythePrincessDemo-1.0-market.zip' ARCHIVE_BASE_DEMO_0_MD5='135628b57b5e4debbaf21680d493cd74' ARCHIVE_BASE_DEMO_0_SIZE='2839604' ARCHIVE_BASE_DEMO_0_VERSION='1.0-itch' ARCHIVE_BASE_DEMO_0_URL='https://blacktabbygames.itch.io/slay-the-princess' CONTENT_PATH_DEFAULT='data/noarch/game/game' CONTENT_PATH_DEFAULT_DEMO='game' CONTENT_GAME_MAIN_FILES=' audio cache gui images staging script_version.txt' CONTENT_GAME0_MAIN_FILES_DEMO=' tl archive.rpa' CONTENT_GAME_ARCHIVE_1_FILES=' archive.rpa.split00' CONTENT_GAME_ARCHIVE_2_FILES=' archive.rpa.split01' ## archive.rpa.split02 is only provided with some old builds. CONTENT_GAME0_ARCHIVE_2_FILES=' archive.rpa.split02' APP_MAIN_TYPE='renpy' APP_MAIN_ICON='../SlaythePrincess.exe' APP_MAIN_ICON_DEMO='../SlaythePrincessDemo.exe' PACKAGES_LIST=' PKG_MAIN PKG_ARCHIVE_1 PKG_ARCHIVE_2' PACKAGES_LIST_DEMO=' PKG_MAIN' PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_ARCHIVE_1 PKG_ARCHIVE_2' PKG_ARCHIVE_ID="${GAME_ID}-archive" PKG_ARCHIVE_1_ID="${PKG_ARCHIVE_ID}-1" PKG_ARCHIVE_2_ID="${PKG_ARCHIVE_ID}-2" PKG_ARCHIVE_DESCRIPTION='archive chunks' PKG_ARCHIVE_1_DESCRIPTION="$PKG_ARCHIVE_DESCRIPTION - 1" PKG_ARCHIVE_2_DESCRIPTION="$PKG_ARCHIVE_DESCRIPTION - 2" ## Easier upgrades from pre-20240427.1 packages PKG_MAIN_PROVIDES="${PKG_MAIN_PROVIDES:-} slay-the-princess-data" PKG_ARCHIVE_1_PROVIDES="${PKG_ARCHIVE_1_PROVIDES:-} slay-the-princess-data-archive-1" PKG_ARCHIVE_2_PROVIDES="${PKG_ARCHIVE_2_PROVIDES:-} slay-the-princess-data-archive-2" # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. ## Check for the presence of the original game icon, fall back on the GOG-specific one if required. case "$(current_archive)" in ('ARCHIVE_BASE_DEMO_'*) # The game demo is not provided by GOG. ;; (*) if [ ! -e "${PLAYIT_WORKDIR}/gamedata/$(content_path_default)/${APP_MAIN_ICON}" ]; then APP_MAIN_ICON='../../support/icon.png' fi ;; esac content_inclusion_icons content_inclusion_default # Write launchers. launchers_generation # Build packages. case "$(current_archive)" in ('ARCHIVE_BASE_DEMO_'*) # Prevent some properties of the full game from applying to the demo. unset PKG_MAIN_DEPENDENCIES_SIBLINGS unset PKG_MAIN_PROVIDES ;; (*) # Rebuild the huge file from its chunks. huge_file='archive.rpa' PKG_MAIN_POSTINST_RUN="$(package_postinst_actions 'PKG_MAIN') $(huge_file_concatenate "$huge_file")" PKG_MAIN_PRERM_RUN="$(package_prerm_actions 'PKG_MAIN') $(huge_file_delete "$huge_file")" ;; esac packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-song-of-farca.sh0000755000000000000000000000533014471751340014603 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2021 Antoine Le Gonidec set -o errexit ### # Song of Farca # send your bug reports to vv221@dotslashplay.it ### script_version=20251223.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='song-of-farca' GAME_NAME='Song of Farca' ARCHIVE_BASE_2_NAME='song_of_farca_1_0_2_15_59133.sh' ARCHIVE_BASE_2_MD5='3130d206d897c7e41b8349a426fe0a49' ARCHIVE_BASE_2_SIZE='1820017' ARCHIVE_BASE_2_VERSION='1.0.2.15-gog59133' ARCHIVE_BASE_2_URL='https://www.gog.com/game/song_of_farca' ARCHIVE_BASE_1_NAME='song_of_farca_1_0_2_8_52330.sh' ARCHIVE_BASE_1_MD5='dd45ac62732f088acc44f60ddbb97724' ARCHIVE_BASE_1_SIZE='1900000' ARCHIVE_BASE_1_VERSION='1.0.2.8-gog52330' ARCHIVE_BASE_0_NAME='song_of_farca_1_0_2_2_49499.sh' ARCHIVE_BASE_0_MD5='d06f0dd62349c0834f1a8366f5525935' ARCHIVE_BASE_0_SIZE='1900000' ARCHIVE_BASE_0_VERSION='1.0.2.2-gog49499' UNITY3D_NAME='Song of Farca' UNITY3D_PLUGINS=' libzipw.so' CONTENT_PATH_DEFAULT='data/noarch/game' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libgcc_s.so.1 libm.so.6 libpthread.so.0 librt.so.1 libstdc++.so.6 libz.so.1' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-songs-of-conquest.sh0000755000000000000000000002113714471751340015556 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2024 Antoine Le Gonidec set -o errexit ### # Songs of Conquest # send your bug reports to vv221@dotslashplay.it ### script_version=20260321.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='songs-of-conquest' GAME_NAME='Songs of Conquest' ARCHIVE_BASE_14_NAME='setup_songs_of_conquest_1.9.3_344cbd1379_4100_(89512).exe' ARCHIVE_BASE_14_MD5='cf501d0737830ecdd4f3e3ae54c46306' ARCHIVE_BASE_14_TYPE='innosetup' ARCHIVE_BASE_14_PART1_NAME='setup_songs_of_conquest_1.9.3_344cbd1379_4100_(89512)-1.bin' ARCHIVE_BASE_14_PART1_MD5='a9171a0b2fe4310dc6d2baa663f6c47d' ARCHIVE_BASE_14_SIZE='2389292' ARCHIVE_BASE_14_VERSION='1.9.3-gog89512' ARCHIVE_BASE_14_URL='https://www.gog.com/game/songs_of_conquest' ARCHIVE_BASE_13_NAME='setup_songs_of_conquest_1.9.2_2bac3c6479_4075_(89372).exe' ARCHIVE_BASE_13_MD5='2a3900cb2449fea7a6df31e54690d4d6' ARCHIVE_BASE_13_TYPE='innosetup' ARCHIVE_BASE_13_PART1_NAME='setup_songs_of_conquest_1.9.2_2bac3c6479_4075_(89372)-1.bin' ARCHIVE_BASE_13_PART1_MD5='7f0719e3aab8e1acc6b7cb61ce744335' ARCHIVE_BASE_13_SIZE='2386370' ARCHIVE_BASE_13_VERSION='1.9.2-gog89372' ARCHIVE_BASE_12_NAME='setup_songs_of_conquest_1.9.1_a10783a599_4055_(89220).exe' ARCHIVE_BASE_12_MD5='741a40f26ee08117cde0205585d4b2d1' ARCHIVE_BASE_12_TYPE='innosetup' ARCHIVE_BASE_12_PART1_NAME='setup_songs_of_conquest_1.9.1_a10783a599_4055_(89220)-1.bin' ARCHIVE_BASE_12_PART1_MD5='bb9a833d3affe94b6dea0b0eb30acb0d' ARCHIVE_BASE_12_SIZE='2386258' ARCHIVE_BASE_12_VERSION='1.9.1-gog89220' ARCHIVE_BASE_11_NAME='setup_songs_of_conquest_1.8.2_0fc08df290_3930_(88293).exe' ARCHIVE_BASE_11_MD5='4752a11bf14af3f9f18eecf205ca14f3' ARCHIVE_BASE_11_TYPE='innosetup' ARCHIVE_BASE_11_PART1_NAME='setup_songs_of_conquest_1.8.2_0fc08df290_3930_(88293)-1.bin' ARCHIVE_BASE_11_PART1_MD5='f406f3da9879f43d084a3c4f5d4c86d1' ARCHIVE_BASE_11_SIZE='2373102' ARCHIVE_BASE_11_VERSION='1.8.2-gog88293' ARCHIVE_BASE_10_NAME='setup_songs_of_conquest_1.8.1_cc22406b0b_3811_(87114).exe' ARCHIVE_BASE_10_MD5='e6b61caf8d71e88d86b8133d05cce58d' ARCHIVE_BASE_10_TYPE='innosetup' ARCHIVE_BASE_10_PART1_NAME='setup_songs_of_conquest_1.8.1_cc22406b0b_3811_(87114)-1.bin' ARCHIVE_BASE_10_PART1_MD5='5fd5d38f78421801b1d01477e9b12d3a' ARCHIVE_BASE_10_SIZE='2372835' ARCHIVE_BASE_10_VERSION='1.8.1-gog87114' ARCHIVE_BASE_9_NAME='setup_songs_of_conquest_1.7.3_d817094042_3758_(86541).exe' ARCHIVE_BASE_9_MD5='dc5e2e5605a2cf2fa9b7357196be0dab' ARCHIVE_BASE_9_TYPE='innosetup' ARCHIVE_BASE_9_PART1_NAME='setup_songs_of_conquest_1.7.3_d817094042_3758_(86541)-1.bin' ARCHIVE_BASE_9_PART1_MD5='2d4ed6f931e478c6590ac28e09211e05' ARCHIVE_BASE_9_SIZE='2357821' ARCHIVE_BASE_9_VERSION='1.7.3-gog86541' ARCHIVE_BASE_8_NAME='setup_songs_of_conquest_1.6.1_1c165726cf_3547_(83102).exe' ARCHIVE_BASE_8_MD5='1d02d310853568e03a6e052960844841' ARCHIVE_BASE_8_TYPE='innosetup' ARCHIVE_BASE_8_PART1_NAME='setup_songs_of_conquest_1.6.1_1c165726cf_3547_(83102)-1.bin' ARCHIVE_BASE_8_PART1_MD5='5788080ea7520a9ede5a89ecd7a0dceb' ARCHIVE_BASE_8_SIZE='2355359' ARCHIVE_BASE_8_VERSION='1.6.1-gog83102' ARCHIVE_BASE_8_URL='https://www.gog.com/game/songs_of_conquest' ARCHIVE_BASE_7_NAME='setup_songs_of_conquest_1.6.0_52a28cd7d5_3538_(82930).exe' ARCHIVE_BASE_7_MD5='b54f2148db8e175789d69c890b4e4b02' ARCHIVE_BASE_7_TYPE='innosetup' ARCHIVE_BASE_7_PART1_NAME='setup_songs_of_conquest_1.6.0_52a28cd7d5_3538_(82930)-1.bin' ARCHIVE_BASE_7_PART1_MD5='7a14a09e120d260142e7a519c88bff62' ARCHIVE_BASE_7_SIZE='2356914' ARCHIVE_BASE_7_VERSION='1.6.0-gog82930' ARCHIVE_BASE_6_NAME='setup_songs_of_conquest_1.5.5_4e813b3773_3204_(80582).exe' ARCHIVE_BASE_6_MD5='d88ee6892bd1a93a275596e8ed5fb028' ARCHIVE_BASE_6_TYPE='innosetup' ARCHIVE_BASE_6_PART1_NAME='setup_songs_of_conquest_1.5.5_4e813b3773_3204_(80582)-1.bin' ARCHIVE_BASE_6_PART1_MD5='9c7470e8bce4972cd4eebcf71da9964a' ARCHIVE_BASE_6_SIZE='2246884' ARCHIVE_BASE_6_VERSION='1.5.5-gog80582' ARCHIVE_BASE_5_NAME='setup_songs_of_conquest_1.4.13_2d9731f566_3063_(79474).exe' ARCHIVE_BASE_5_MD5='ff47f9178c22a9804a4e513185ce6122' ARCHIVE_BASE_5_TYPE='innosetup' ARCHIVE_BASE_5_PART1_NAME='setup_songs_of_conquest_1.4.13_2d9731f566_3063_(79474)-1.bin' ARCHIVE_BASE_5_PART1_MD5='d080b22508bcafe99f81b63dca1471db' ARCHIVE_BASE_5_SIZE='2238908' ARCHIVE_BASE_5_VERSION='1.4.13-gog79474' ARCHIVE_BASE_4_NAME='setup_songs_of_conquest_1.4.12_a5624b455d_3033_(79217).exe' ARCHIVE_BASE_4_MD5='d5e6bbfb4a7a6e27696f22f2915b1269' ARCHIVE_BASE_4_TYPE='innosetup' ARCHIVE_BASE_4_PART1_NAME='setup_songs_of_conquest_1.4.12_a5624b455d_3033_(79217)-1.bin' ARCHIVE_BASE_4_PART1_MD5='8d25598cf45e67b54faaa76708e1a642' ARCHIVE_BASE_4_SIZE='2240483' ARCHIVE_BASE_4_VERSION='1.4.12-gog79217' ARCHIVE_BASE_3_NAME='setup_songs_of_conquest_1.4.11_a56e2e9ed1_3013_(78972).exe' ARCHIVE_BASE_3_MD5='af79080c297f067b66a45625abd50104' ARCHIVE_BASE_3_TYPE='innosetup' ARCHIVE_BASE_3_PART1_NAME='setup_songs_of_conquest_1.4.11_a56e2e9ed1_3013_(78972)-1.bin' ARCHIVE_BASE_3_PART1_MD5='7d35955cb78e863fa90db91fb690859b' ARCHIVE_BASE_3_SIZE='2238284' ARCHIVE_BASE_3_VERSION='1.4.11-gog78972' ARCHIVE_BASE_2_NAME='setup_songs_of_conquest_1.4.10_967940f7ee_3002_(78614).exe' ARCHIVE_BASE_2_MD5='3f7c811f0a316df65446cbce9f294ba6' ARCHIVE_BASE_2_TYPE='innosetup' ARCHIVE_BASE_2_PART1_NAME='setup_songs_of_conquest_1.4.10_967940f7ee_3002_(78614)-1.bin' ARCHIVE_BASE_2_PART1_MD5='87bffffbb31fec05c4deba26a40ce42a' ARCHIVE_BASE_2_SIZE='2239689' ARCHIVE_BASE_2_VERSION='1.4.10-gog78614' ARCHIVE_BASE_1_NAME='setup_songs_of_conquest_1.4.8_b1dfeaadfa_2989_(78547).exe' ARCHIVE_BASE_1_MD5='f3d225f934b63608e707bbd9b9821c78' ARCHIVE_BASE_1_TYPE='innosetup' ARCHIVE_BASE_1_PART1_NAME='setup_songs_of_conquest_1.4.8_b1dfeaadfa_2989_(78547)-1.bin' ARCHIVE_BASE_1_PART1_MD5='ecb65717e71b6a8a2f28911512a1f0eb' ARCHIVE_BASE_1_SIZE='2237801' ARCHIVE_BASE_1_VERSION='1.4.8-gog78547' ARCHIVE_BASE_0_NAME='setup_songs_of_conquest_1.3.2_ab33a56fa6_2566_(76712).exe' ARCHIVE_BASE_0_MD5='ea01d32299258ee757fc349e5d4f9b1e' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_PART1_NAME='setup_songs_of_conquest_1.3.2_ab33a56fa6_2566_(76712)-1.bin' ARCHIVE_BASE_0_PART1_MD5='e1a0a815f1f9500d7b5cfdfdf65223f1' ARCHIVE_BASE_0_SIZE='2544156' ARCHIVE_BASE_0_VERSION='1.3.2-gog76712' UNITY3D_NAME='SongsOfConquest' # TODO: Experimental support for Windows Unity3D plugins, # no support in ./play.it library yet. # (./play.it 2.35) # The initial loading fails to complete witout these libraries. UNITY3D_PLUGINS=' AkUnitySoundEngine.dll GalaxyCSharpGlue.dll' # GalaxyCSharpGlue.dll requirement UNITY3D_PLUGINS="$UNITY3D_PLUGINS Galaxy64.dll" CONTENT_PATH_DEFAULT='.' # songsofconquest.exe requirements CONTENT_LIBS_BIN_FILES=' UnityPlayer.dll' # Prevent the following error: # Failed to load mono CONTENT_LIBS0_BIN_FILES=' MonoBleedingEdge/EmbedRuntime/mono-2.0-bdwgc.dll' WINE_PERSISTENT_DIRECTORIES=' users/${USER}/AppData/LocalLow/Lavapotion/SongsOfConquest' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_GSTREAMER_PLUGINS=' video/quicktime, variant=(string)iso' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' # Prevent inclusion of unwanted shipped libraries. content_inclusion_default_libraries 'PKG_BIN' rm --recursive "$(path_archive_contents)/MonoBleedingEdge/EmbedRuntime" # Include Unity3D plugins. unity3d_plugins_inclusion 'PKG_BIN' "$(unity3d_name)_Data/Plugins/x86_64" "$(path_libraries)/$(unity3d_name)_Data/Plugins" content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --symbolic "$dll_source" "$dll_destination" done EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-star-wars-galactic-battlegrounds.sh0000755000000000000000000001304514471751340020526 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec set -o errexit ### # Star Wars: Galactic Battlegrounds # send your bug reports to vv221@dotslashplay.it ### script_version=20260226.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='star-wars-galactic-battlegrounds' GAME_NAME='Star Wars: Galactic Battlegrounds' ARCHIVE_BASE_EN_0_NAME='setup_sw_galactic_battlegrounds_saga_2.0.0.4.exe' ARCHIVE_BASE_EN_0_MD5='6af25835c5f240914cb04f7b4f741813' ARCHIVE_BASE_EN_0_TYPE='innosetup' ARCHIVE_BASE_EN_0_SIZE='819518' ARCHIVE_BASE_EN_0_VERSION='1.1-gog2.0.0.4' ARCHIVE_BASE_EN_0_URL='https://www.gog.com/game/star_wars_galactic_battlegrounds_saga' ARCHIVE_BASE_FR_0_NAME='setup_sw_galactic_battlegrounds_saga_french_2.0.0.4.exe' ARCHIVE_BASE_FR_0_MD5='b30458033e825ad252e2d5b3dc8a7845' ARCHIVE_BASE_FR_0_TYPE='innosetup' ARCHIVE_BASE_FR_0_SIZE='807572' ARCHIVE_BASE_FR_0_VERSION='1.1-gog2.0.0.4' ARCHIVE_BASE_FR_0_URL='https://www.gog.com/game/star_wars_galactic_battlegrounds_saga' CONTENT_PATH_DEFAULT='app/game' # The game crashes on launch if the following libraries are missing. CONTENT_LIBS_L10N_LIBS_FILES=' language.dll language_x1.dll' CONTENT_GAME_BIN_FILES=' battlegrounds.exe battlegrounds_x1.exe' CONTENT_GAME_L10N_FILES=' history taunt sound/campaign sound/scenario data/list.crx data/list_x1.crx data/genie.dat data/genie_x1.dat data/sounds.drs data/sounds_x1.drs' CONTENT_GAME_DATA_FILES=' ai extras music random savegame sound data/load data/shadow.col data/blendomatic.dat data/blkedge.dat data/filtermaps.dat data/lightmaps.dat data/loqmaps.dat data/patternmasks.dat data/stemplet.dat data/tileedge.dat data/view_icm.dat data/graphics.drs data/graphics_x1.drs data/interfac.drs data/interfac_x1.drs data/terrain.drs data/terrain_x1.drs xlogo1.avi xintro.avi' # gamedata_x1.drs differs between French and English localisations, but it does not seem to be an significative difference. # gamedata.drs is identical in both localisations, as expected. CONTENT_GAME0_DATA_FILES=' data/gamedata.drs data/gamedata_x1.drs' # campaign/media/1c2s6_end.mm differs between French and English localisations, but it does not seem to be an significative difference. CONTENT_GAME1_DATA_FILES=' campaign' CONTENT_DOC_DATA_PATH='app' CONTENT_DOC_DATA_FILES=' *.pdf' USER_PERSISTENT_DIRECTORIES=' ai campaign random savegame scenario' USER_PERSISTENT_FILES=' data/*.dat player.nf*' # Work around CD check. WINE_REGISTRY_INIT=' [HKEY_LOCAL_MACHINE\Software\LucasArts Entertainment Company LLC\Star Wars Galactic Battlegrounds\1.0] "CDPath"="C:"' # Loss of focus leads to rendering problems, making the game menu unusable. # (WINE 10.0) WINE_VIRTUAL_DESKTOP='1280x1024' APP_MAIN_EXE='battlegrounds.exe' # Play the introduction videos on launch. APP_MAIN_PRERUN=' # Play the introduction videos on launch. mpv --fs --no-osc --no-pause xlogo1.avi xintro.avi ' APP_ADDON_ID="${GAME_ID}-clone-wars" APP_ADDON_NAME="$GAME_NAME - Clone Wars" APP_ADDON_EXE='battlegrounds_x1.exe' # Play the introduction videos on launch. APP_ADDON_PRERUN="$APP_MAIN_PRERUN" PACKAGES_LIST=' PKG_BIN PKG_L10N PKG_L10N_LIBS PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_L10N_BASE PKG_DATA' PKG_BIN_DEPENDENCIES_COMMANDS=' mpv' PKG_L10N_BASE_ID="${GAME_ID}-l10n" PKG_L10N_ID_EN="${PKG_L10N_BASE_ID}-en" PKG_L10N_ID_FR="${PKG_L10N_BASE_ID}-fr" PKG_L10N_PROVIDES=" $PKG_L10N_BASE_ID" PKG_L10N_DESCRIPTION_EN='English localisation' PKG_L10N_DESCRIPTION_FR='French localisation' PKG_L10N_DEPENDENCIES_SIBLINGS=' PKG_L10N_LIBS' PKG_L10N_LIBS_ID_EN="${PKG_L10N_ID_EN}-libs" PKG_L10N_LIBS_ID_FR="${PKG_L10N_ID_FR}-libs" PKG_L10N_LIBS_PROVIDES=" ${PKG_L10N_BASE_ID}-libs" PKG_L10N_LIBS_ARCH='32' PKG_L10N_LIBS_DESCRIPTION_EN="$PKG_L10N_DESCRIPTION_EN - libraries" PKG_L10N_LIBS_DESCRIPTION_FR="$PKG_L10N_DESCRIPTION_FR - libraries" # Prevent a fallback on PKG_L10N_DEPENDENCIES_SIBLINGS. PKG_L10N_LIBS_DEPENDENCIES_SIBLINGS=' ' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. # Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Scan library paths used by ./play.it < 2.35. # This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. ln --force --symbolic $(path_libraries)/* "\${PATH_PREFIX}" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-star-wars-knights-of-the-old-republic-series.sh0000755000000000000000000002206414471751340022603 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2015 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2019 BetaRays set -o errexit ### # Star Wars: Knights of the Old Republic series: # - Star Wars: Knights of the Old Republic # - Star Wars: Knights of the Old Republic 2 # send your bug reports to vv221@dotslashplay.it ### script_version=20260322.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID_KOTOR1='star-wars-knights-of-the-old-republic-1' GAME_NAME_KOTOR1='Star Wars: Knights of the Old Republic' GAME_ID_KOTOR2='star-wars-knights-of-the-old-republic-2' GAME_NAME_KOTOR2='Star Wars: Knights of the Old Republic II - The Sith Lords' ARCHIVE_BASE_KOTOR1_FR_0_NAME='setup_star_wars_-_knights_of_the_old_republic_1.03_(french)_(29871).exe' ARCHIVE_BASE_KOTOR1_FR_0_MD5='8db7abdf7dc05e8f65ea2599c9486b8d' ARCHIVE_BASE_KOTOR1_FR_0_TYPE='innosetup' ARCHIVE_BASE_KOTOR1_FR_0_PART1_NAME='setup_star_wars_-_knights_of_the_old_republic_1.03_(french)_(29871)-1.bin' ARCHIVE_BASE_KOTOR1_FR_0_PART1_MD5='010bce761719c5e4570e136092a075fe' ARCHIVE_BASE_KOTOR1_FR_0_SIZE='3800000' ARCHIVE_BASE_KOTOR1_FR_0_VERSION='1.03-gog29871' ARCHIVE_BASE_KOTOR1_FR_0_URL='https://www.gog.com/game/star_wars_knights_of_the_old_republic' ARCHIVE_BASE_KOTOR1_DE_0_NAME='setup_star_wars_-_knights_of_the_old_republic_1.03_(german)_(29871).exe' ARCHIVE_BASE_KOTOR1_DE_0_MD5='ba963a9d4e61aabd7f654437b1f6a69e' ARCHIVE_BASE_KOTOR1_DE_0_TYPE='innosetup' ARCHIVE_BASE_KOTOR1_DE_0_PART1_NAME='setup_star_wars_-_knights_of_the_old_republic_1.03_(german)_(29871)-1.bin' ARCHIVE_BASE_KOTOR1_DE_0_PART1_MD5='ac11ebefb89767bc38d3521ba048ec31' ARCHIVE_BASE_KOTOR1_DE_0_SIZE='3900000' ARCHIVE_BASE_KOTOR1_DE_0_VERSION='1.03-gog29871' ARCHIVE_BASE_KOTOR1_DE_0_URL='https://www.gog.com/game/star_wars_knights_of_the_old_republic' ARCHIVE_BASE_KOTOR1_EN_0_NAME='setup_star_wars_-_knights_of_the_old_republic_1.03_(29871).exe' ARCHIVE_BASE_KOTOR1_EN_0_MD5='6ea3df208a9cb3c8ca54eac2d0e2e4a9' ARCHIVE_BASE_KOTOR1_EN_0_TYPE='innosetup' ARCHIVE_BASE_KOTOR1_EN_0_PART1_NAME='setup_star_wars_-_knights_of_the_old_republic_1.03_(29871)-1.bin' ARCHIVE_BASE_KOTOR1_EN_0_PART1_MD5='51d4eea9a76df9b99fba114c40005cfe' ARCHIVE_BASE_KOTOR1_EN_0_SIZE='3800000' ARCHIVE_BASE_KOTOR1_EN_0_VERSION='1.03-gog29871' ARCHIVE_BASE_KOTOR1_EN_0_URL='https://www.gog.com/game/star_wars_knights_of_the_old_republic' ARCHIVE_BASE_KOTOR2_FR_1_NAME='setup_star_wars_-_knights_of_the_old_republic_ii_1.0b_update_(french)_(56101).exe' ARCHIVE_BASE_KOTOR2_FR_1_MD5='17f853ecf017b408bee397a4f127dc37' ARCHIVE_BASE_KOTOR2_FR_1_TYPE='innosetup' ARCHIVE_BASE_KOTOR2_FR_1_PART1_NAME='setup_star_wars_-_knights_of_the_old_republic_ii_1.0b_update_(french)_(56101)-1.bin' ARCHIVE_BASE_KOTOR2_FR_1_PART1_MD5='7958318830a662b45fa3b79456713b40' ARCHIVE_BASE_KOTOR2_FR_1_SIZE='4800000' ARCHIVE_BASE_KOTOR2_FR_1_VERSION='1.0b-gog56101' ARCHIVE_BASE_KOTOR2_FR_1_URL='https://www.gog.com/game/star_wars_knights_of_the_old_republic_ii_the_sith_lords' ARCHIVE_BASE_KOTOR2_DE_1_NAME='setup_star_wars_-_knights_of_the_old_republic_ii_1.0b_update_(german)_(56101).exe' ARCHIVE_BASE_KOTOR2_DE_1_MD5='f67334a28b571238993d85ab9fdba3ef' ARCHIVE_BASE_KOTOR2_DE_1_TYPE='innosetup' ARCHIVE_BASE_KOTOR2_DE_1_PART1_NAME='setup_star_wars_-_knights_of_the_old_republic_ii_1.0b_update_(german)_(56101)-1.bin' ARCHIVE_BASE_KOTOR2_DE_1_PART1_MD5='64a734389a26611b8bec1d597c6efb52' ARCHIVE_BASE_KOTOR2_DE_1_SIZE='4800000' ARCHIVE_BASE_KOTOR2_DE_1_VERSION='1.0b-gog56101' ARCHIVE_BASE_KOTOR2_DE_1_URL='https://www.gog.com/game/star_wars_knights_of_the_old_republic_ii_the_sith_lords' ARCHIVE_BASE_KOTOR2_EN_1_NAME='setup_star_wars_-_knights_of_the_old_republic_ii_1.0b_update_(56101).exe' ARCHIVE_BASE_KOTOR2_EN_1_MD5='8ebaa4234c475ef66f8fcf7aa8835d80' ARCHIVE_BASE_KOTOR2_EN_1_TYPE='innosetup' ARCHIVE_BASE_KOTOR2_EN_1_PART1_NAME='setup_star_wars_-_knights_of_the_old_republic_ii_1.0b_update_(56101)-1.bin' ARCHIVE_BASE_KOTOR2_EN_1_PART1_MD5='9ba032cb1cdd08f07c0968ed7c4efa50' ARCHIVE_BASE_KOTOR2_EN_1_SIZE='4900000' ARCHIVE_BASE_KOTOR2_EN_1_VERSION='1.0b-gog56101' ARCHIVE_BASE_KOTOR2_EN_1_URL='https://www.gog.com/game/star_wars_knights_of_the_old_republic_ii_the_sith_lords' ARCHIVE_BASE_KOTOR2_FR_0_NAME='setup_star_wars_-_knights_of_the_old_republic_ii_1.0b_(french)_(29869).exe' ARCHIVE_BASE_KOTOR2_FR_0_MD5='a16a80f377111ec4152e5d1b196f64f5' ARCHIVE_BASE_KOTOR2_FR_0_TYPE='innosetup' ARCHIVE_BASE_KOTOR2_FR_0_PART1_NAME='setup_star_wars_-_knights_of_the_old_republic_ii_1.0b_(french)_(29869)-1.bin' ARCHIVE_BASE_KOTOR2_FR_0_PART1_MD5='e68c85d7f0ad6212c9841276526aa5d3' ARCHIVE_BASE_KOTOR2_FR_0_SIZE='4600000' ARCHIVE_BASE_KOTOR2_FR_0_VERSION='1.0b-gog29869' ARCHIVE_BASE_KOTOR2_DE_0_NAME='setup_star_wars_-_knights_of_the_old_republic_ii_1.0b_(german)_(29869).exe' ARCHIVE_BASE_KOTOR2_DE_0_MD5='fa7e9e961dfe14d730c4ec571ebe6f0e' ARCHIVE_BASE_KOTOR2_DE_0_TYPE='innosetup' ARCHIVE_BASE_KOTOR2_DE_0_PART1_NAME='setup_star_wars_-_knights_of_the_old_republic_ii_1.0b_(german)_(29869)-1.bin' ARCHIVE_BASE_KOTOR2_DE_0_PART1_MD5='26ebb49d133a564538be2d3a5b35c3d2' ARCHIVE_BASE_KOTOR2_DE_0_SIZE='4600000' ARCHIVE_BASE_KOTOR2_DE_0_VERSION='1.0b-gog29869' ARCHIVE_BASE_KOTOR2_EN_0_NAME='setup_star_wars_-_knights_of_the_old_republic_ii_1.0b_(29869).exe' ARCHIVE_BASE_KOTOR2_EN_0_MD5='7f7a2e14e5ebadf14c0cdbb1ee807521' ARCHIVE_BASE_KOTOR2_EN_0_TYPE='innosetup' ARCHIVE_BASE_KOTOR2_EN_0_PART1_NAME='setup_star_wars_-_knights_of_the_old_republic_ii_1.0b_(29869)-1.bin' ARCHIVE_BASE_KOTOR2_EN_0_PART1_MD5='8092cf5da5fa165f88d67e172c610c5e' ARCHIVE_BASE_KOTOR2_EN_0_SIZE='4700000' ARCHIVE_BASE_KOTOR2_EN_0_VERSION='1.0b-gog29869' CONTENT_PATH_DEFAULT='.' CONTENT_GAME_BIN_FILES_KOTOR1=' swkotor.exe' # swkotor.exe requirements CONTENT_LIBS_BIN_FILES_KOTOR1=' binkw32.dll mss32.dll' CONTENT_GAME_BIN_FILES_KOTOR2=' swkotor2.exe' # swkotor2.exe requirements CONTENT_LIBS_BIN_FILES_KOTOR2=' mss32.dll mss32midi.dll binkw32.dll' CONTENT_GAME0_BIN_FILES=' miles/*.asi miles/*.flt miles/*.m3d swconfig.exe' CONTENT_GAME_L10N_FILES=' patch.erf lips override streamwaves streamsounds streamvoice movies/01a.bik movies/02.bik movies/09.bik movies/31a.bik movies/50.bik movies/56b.bik movies/kre* movies/leclogo.bik movies/legal.bik movies/permov01.bik movies/scn* movies/trailer.bik *.tlk' CONTENT_GAME_DATA_FILES=' chitin.key data modules rims streammusic texturepacks movies' CONTENT_GAME0_DATA_PATH='__support/app' CONTENT_GAME0_DATA_FILES=' *.ini' CONTENT_DOC_L10N_FILES=' docs *.pdf *.txt' USER_PERSISTENT_DIRECTORIES=' saves' USER_PERSISTENT_FILES=' *.ini' # Ensure ability fo fully control the camera with the mouse. # TODO: Check if it is still required with current WINE. WINE_REGISTRY_INIT=' [HKEY_CURRENT_USER\Software\Wine\X11 Driver] "GrabFullscreen"="Y" ' APP_MAIN_EXE_KOTOR1='swkotor.exe' APP_MAIN_EXE_KOTOR2='swkotor2.exe' APP_CONFIG_ID_KOTOR1="${GAME_ID_KOTOR1}-config" APP_CONFIG_ID_KOTOR2="${GAME_ID_KOTOR2}-config" APP_CONFIG_NAME_KOTOR1="$GAME_NAME_KOTOR1 - Configuration" APP_CONFIG_NAME_KOTOR2="$GAME_NAME_KOTOR2 - configuration" APP_CONFIG_EXE='swconfig.exe' APP_CONFIG_CAT='Settings' PACKAGES_LIST=' PKG_BIN PKG_L10N PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_L10N_BASE PKG_DATA' PKG_L10N_BASE_ID_KOTOR1="${GAME_ID_KOTOR1}-l10n" PKG_L10N_BASE_ID_KOTOR2="${GAME_ID_KOTOR2}-l10n" PKG_L10N_ID_KOTOR1_FR="${PKG_L10N_BASE_ID_KOTOR1}-fr" PKG_L10N_ID_KOTOR1_DE="${PKG_L10N_BASE_ID_KOTOR1}-de" PKG_L10N_ID_KOTOR1_EN="${PKG_L10N_BASE_ID_KOTOR1}-en" PKG_L10N_ID_KOTOR2_FR="${PKG_L10N_BASE_ID_KOTOR2}-fr" PKG_L10N_ID_KOTOR2_DE="${PKG_L10N_BASE_ID_KOTOR2}-de" PKG_L10N_ID_KOTOR2_EN="${PKG_L10N_BASE_ID_KOTOR2}-en" PKG_L10N_PROVIDES_KOTOR1=" $PKG_L10N_BASE_ID_KOTOR1" PKG_L10N_PROVIDES_KOTOR2=" $PKG_L10N_BASE_ID_KOTOR2" PKG_L10N_DESCRIPTION_KOTOR1_FR='French localisation' PKG_L10N_DESCRIPTION_KOTOR1_DE='German localisation' PKG_L10N_DESCRIPTION_KOTOR1_EN='English localisation' PKG_L10N_DESCRIPTION_KOTOR2_FR='French localisation' PKG_L10N_DESCRIPTION_KOTOR2_DE='German localisation' PKG_L10N_DESCRIPTION_KOTOR2_EN='English localisation' PKG_DATA_ID_KOTOR1="${GAME_ID_KOTOR1}-data" PKG_DATA_ID_KOTOR2="${GAME_ID_KOTOR2}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. ln --force --symbolic $(path_libraries)/* "\${PATH_PREFIX}" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-starcraft.sh0000755000000000000000000001564414471751340014163 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2022 Antoine Le Gonidec set -o errexit ### # StarCraft # send your bug reports to vv221@dotslashplay.it ### script_version=20260325.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='starcraft' GAME_NAME='StarCraft' ARCHIVE_BASE_EN_0_NAME='Installer Tome.mpq' ARCHIVE_BASE_EN_0_MD5='209b1757b3d10aad3e5055e7d11d7599' ARCHIVE_BASE_EN_0_PART1_NAME='Installer Tome 2.mpq' ARCHIVE_BASE_EN_0_PART1_MD5='d3d1bb36d4d256693a1df430d853cfe9' ARCHIVE_BASE_EN_0_SIZE='1294777' ARCHIVE_BASE_EN_0_VERSION='1.15.2-blizzard1' ARCHIVE_BASE_EN_0_URL='https://eu.battle.net/download/getLegacy?os=win&locale=enUS&product=STAR' ARCHIVE_BASE_FR_0_NAME='Installer Tome.mpq' ARCHIVE_BASE_FR_0_MD5='5f94ac518b98829cc5a8078fc13f0b6f' ARCHIVE_BASE_FR_0_PART1_NAME='Installer Tome 2.mpq' ARCHIVE_BASE_FR_0_PART1_MD5='57f632256a23caaf19457773832027f7' ARCHIVE_BASE_FR_0_SIZE='1314699' ARCHIVE_BASE_FR_0_VERSION='1.15.2-blizzard1' ARCHIVE_BASE_FR_0_URL='https://eu.battle.net/download/getLegacy?os=win&locale=frFR&product=STAR' # This archive is required to update the game to a build not affected by the following WINE bug: # https://bugs.winehq.org/show_bug.cgi?id=57758 — Starcraft Brood War 1.16.1 does not launch on Wine 10 ARCHIVE_REQUIRED_UPDATE_NAME='starcraft_update_1.17.0.tar.xz' ARCHIVE_REQUIRED_UPDATE_MD5='f13f15dce9e4ce581888cd0fbd69ad70' ARCHIVE_REQUIRED_UPDATE_VERSION='1.17.0-blizzard1' ARCHIVE_REQUIRED_UPDATE_URL='https://downloads.dotslashplay.it/games/starcraft/' CONTENT_PATH_DEFAULT='.' # The game fails to launch if the following library is missing. CONTENT_LIBS_BIN_PATH='PC' CONTENT_LIBS_BIN_FILES=' Local.dll' # The game crashes on launch if the following library is missing. CONTENT_LIBS0_BIN_PATH='PC' CONTENT_LIBS0_BIN_FILES=' Smackw32.dll' # The editor fails to launch if the following library is missing. # TODO: Move the map editor to a dedicated package. CONTENT_LIBS1_BIN_PATH='PC' CONTENT_LIBS1_BIN_FILES=' EditLocal.dll' # TODO: Move the map editor to a dedicated package. CONTENT_GAME_BIN_PATH='PC' CONTENT_GAME_BIN_FILES=' SEdit???.loc' CONTENT_GAME_DATA_PATH='Common' CONTENT_GAME_DATA_FILES=' Maps *.mpq' CONTENT_DOC_DATA_PATH='PC' CONTENT_DOC_DATA_FILES=' *.cnt *.hlp *.pdf *.txt *.url' CONTENT_UPDATE_PATH='.' CONTENT_UPDATE_GAME_FILES=' StarCraft.exe' # StarCraft.exe requirements CONTENT_UPDATE_LIBS_FILES=' Storm.dll' CONTENT_UPDATE_GAME0_FILES=' Patch_rt.mpq battle.snp standard.snp' # TODO: Move the map editor to a dedicated package. CONTENT_UPDATE_GAME1_FILES=' StarEdit.exe' CONTENT_UPDATE_DOC_FILES=' patch.txt' APP_MAIN_EXE='StarCraft.exe' USER_PERSISTENT_DIRECTORIES=' Characters Maps' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA_BASE' PKG_DATA_BASE_ID="${GAME_ID}-data" PKG_DATA_ID_EN="${PKG_DATA_BASE_ID}-en" PKG_DATA_ID_FR="${PKG_DATA_BASE_ID}-fr" PKG_DATA_PROVIDES=" $PKG_DATA_BASE_ID" PKG_DATA_DESCRIPTION='data' # Set list of requirements to extract the archive data. REQUIREMENTS_LIST=' smpq' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Check for the presence of the CD key files. # During a regular install of StarCraft, CD keys are stored encrypted into StarDat.mpq, # in the files under the "font" directory. # In order to build a package that includes the CD key (required, or the game will not launch), # you need to provide the following files in addition to the installer .mpq: # - font.clh # - font.gid # They can be extracted from a regular StarCraft install with: # smpq --extract StarDat.mpq font/font.clh font/font.gid ARCHIVE_REQUIRED_CDKEY_1_NAME='font.clh' ARCHIVE_REQUIRED_CDKEY_2_NAME='font.gid' archive_initialize_required \ 'ARCHIVE_CDKEY_1' \ 'ARCHIVE_REQUIRED_CDKEY_1' archive_initialize_required \ 'ARCHIVE_CDKEY_2' \ 'ARCHIVE_REQUIRED_CDKEY_2' # Check for the presence of the 1.17.0 update archive. archive_initialize_required \ 'ARCHIVE_UPDATE' \ 'ARCHIVE_REQUIRED_UPDATE' export "$(current_archive)_VERSION=$(archive_version 'ARCHIVE_UPDATE')" # Extract game data. mkdir --parents "${PLAYIT_WORKDIR}/gamedata" ( cd "${PLAYIT_WORKDIR}/gamedata" # Extract the content from the installer. information_archive_data_extraction "$(archive_name "$(current_archive)")" smpq --extract "$(archive_path "$(current_archive)")" information_archive_data_extraction "$(archive_name "$(current_archive)_PART1")" smpq --extract --overwrite "$(archive_path "$(current_archive)_PART1")" # Include the CD key files. install -D --mode=644 \ "$(archive_path 'ARCHIVE_CDKEY_1')" \ "${PLAYIT_WORKDIR}/gamedata/Files/font/font.clh" install -D --mode=644 \ "$(archive_path 'ARCHIVE_CDKEY_2')" \ "${PLAYIT_WORKDIR}/gamedata/Files/font/font.gid" # Update the main .mpq file. ( cd 'PC' smpq --append ../Common/StarDat.mpq \ StarEdit.cnt \ EditLocal.dll \ Local.dll \ Riched20.dll \ Smackw32.dll ) ( cd 'PC-100' smpq --append ../Common/StarDat.mpq \ Readme.cnt \ storm.dll \ StarCraft.exe \ StarEdit.exe \ battle.snp \ standard.snp \ License.txt \ ./*.hlp # This file is only included in the English build of the game. case "$(current_archive)" in ('ARCHIVE_BASE_EN_'*) smpq --append ../Common/StarDat.mpq \ rez/License.txt ;; esac # Compression must be disabled when adding this file to the .mpq archive, to prevent a crash on launch. smpq --append --compression none ../Common/StarDat.mpq \ Smk/Blizzard.smk ) ( cd 'Files' # Compression must be disabled when adding these files to the .mpq archive, to prevent a crash on launch. smpq --append --compression none ../Common/StarDat.mpq \ font/*.fnt \ font/font.ccd \ font/font.clh \ font/font.gid ) ) # Extract patch data. archive_extraction 'ARCHIVE_UPDATE' # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion 'UPDATE_LIBS' 'PKG_BIN' "$(path_libraries)" content_inclusion 'UPDATE_GAME' 'PKG_BIN' "$(path_game_data)" content_inclusion 'UPDATE_GAME0' 'PKG_BIN' "$(path_game_data)" content_inclusion 'UPDATE_GAME1' 'PKG_BIN' "$(path_game_data)" content_inclusion 'UPDATE_DOC' 'PKG_DATA' "$(path_documentation)" content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. ln --force --symbolic $(path_libraries)/* "\${PATH_PREFIX}" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-startopia.sh0000755000000000000000000000640214471751340014170 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2015 Antoine Le Gonidec set -o errexit ### # StarTopia # send your bug reports to vv221@dotslashplay.it ### script_version=20260323.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='startopia' GAME_NAME='StarTopia' GAME_ID_DEMO="${GAME_ID}-demo" GAME_NAME_DEMO="$GAME_NAME (demo)" ARCHIVE_BASE_0_NAME='setup_startopia_2.0.0.17.exe' ARCHIVE_BASE_0_MD5='4fe8d194afc1012e136ed3e82f1de171' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_SIZE='600000' ARCHIVE_BASE_0_VERSION='1.01b-gog2.0.0.17' ARCHIVE_BASE_0_URL='https://www.gog.com/game/startopia' ARCHIVE_BASE_DEMO_0_NAME='startopia_demo.exe' ARCHIVE_BASE_DEMO_0_MD5='2e170f8c4700b2d271ac2a6fac23920a' ARCHIVE_BASE_DEMO_0_EXTRACTOR='unzip' ARCHIVE_BASE_DEMO_0_SIZE='149364' ARCHIVE_BASE_DEMO_0_VERSION='2001.5.15.1-archive.org' ARCHIVE_BASE_DEMO_0_URL='https://archive.org/details/startopia_demo' CONTENT_PATH_DEFAULT='app' CONTENT_PATH_DEFAULT_DEMO='.' CONTENT_GAME_BIN_FILES=' startopia.exe' # startopia.exe requirements CONTENT_LIBS_BIN_FILES=' binkw32.dll' CONTENT_GAME_L10N_FILES=' data/speech/english text/english startopia.ini' CONTENT_GAME_DATA_FILES=' startopia.jpg cardid.tom data intro languageinis missions' CONTENT_DOC_DATA_FILES=' eula weblinks *.doc *.html *.pdf *.rtf *.txt' USER_PERSISTENT_DIRECTORIES=' profiles' USER_PERSISTENT_FILES=' startopia.ini' APP_MAIN_EXE='startopia.exe' APP_MAIN_EXE_DEMO='StarTopia.exe' PACKAGES_LIST=' PKG_BIN PKG_L10N PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_L10N PKG_DATA' PKG_L10N_ID="${GAME_ID}-l10n" PKG_L10N_ID_DEMO="${GAME_ID_DEMO}-l10n" PKG_L10N_DESCRIPTION='English localisation' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_ID_DEMO="${GAME_ID_DEMO}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Generate a minimal configuration file. game_path="C:\\$(game_id)" intro_path="${game_path}\\intro\\" drive_path_music="${game_path}\\data\\" drive_path_sound="${game_path}\\data\\" sound_path_voice="${game_path}\\data\\" cat > "$(package_path 'PKG_L10N')$(path_game_data)/startopia.ini" <<- EOF [Intro] IntroPath=${intro_path} [Sound] DrivePathMusic=${drive_path_music} DrivePathSound=${drive_path_sound} SoundPathVoice=${sound_path_voice} [Language] TextLanguage=English SpeechLanguage=English EOF # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. ln --force --symbolic $(path_libraries)/* "\${PATH_PREFIX}" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-stellaris-expansions-extra.sh0000755000000000000000000001124014471751340017466 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2022 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2026 Christian Stalp set -o errexit ### # Stellaris expansions (extra content): # - Arachnoid Portrait Pack # - Horizon Signal # send your bug reports to vv221@dotslashplay.it ### script_version=20260116.5 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='stellaris' GAME_NAME='Stellaris' EXPANSION_ID_ARACHNOID='arachnoid' EXPANSION_NAME_ARACHNOID='Arachnoid Portrait Pack' EXPANSION_ID_HORIZONSIGNAL='horizon-signal' EXPANSION_NAME_HORIZONSIGNAL='Horizon Signal' ## Arachnoid Portrait Pack ARCHIVE_BASE_ARACHNOID_4_NAME='stellaris_arachnoid_portrait_pack_4_2_4_87179.sh' ARCHIVE_BASE_ARACHNOID_4_MD5='371dfa1f4a5c7609d24b6fdfbeb96cad' ARCHIVE_BASE_ARACHNOID_4_SIZE='817' ARCHIVE_BASE_ARACHNOID_4_VERSION='4.2.4-gog87179' ARCHIVE_BASE_ARACHNOID_4_URL='https://www.gog.com/game/stellaris_galaxy_edition_upgrade_pack' ARCHIVE_BASE_ARACHNOID_3_NAME='stellaris_arachnoid_portrait_pack_4_1_7_86266.sh' ARCHIVE_BASE_ARACHNOID_3_MD5='841c9caa537685374a25afffcda4a83d' ARCHIVE_BASE_ARACHNOID_3_SIZE='817' ARCHIVE_BASE_ARACHNOID_3_VERSION='4.1.7-gog86266' ARCHIVE_BASE_ARACHNOID_2_NAME='stellaris_arachnoid_portrait_pack_4_0_23_84679.sh' ARCHIVE_BASE_ARACHNOID_2_MD5='6348fc2d97141925913bbada9ad78f9c' ARCHIVE_BASE_ARACHNOID_2_SIZE='817' ARCHIVE_BASE_ARACHNOID_2_VERSION='4.0.23-gog84679' ARCHIVE_BASE_ARACHNOID_1_NAME='stellaris_arachnoid_portrait_pack_3_14_1592653_81105.sh' ARCHIVE_BASE_ARACHNOID_1_MD5='4168a3e72b2c19b0e7072e381b235314' ARCHIVE_BASE_ARACHNOID_1_SIZE='817' ARCHIVE_BASE_ARACHNOID_1_VERSION='3.14.1592653-gog81105' ARCHIVE_BASE_ARACHNOID_0_NAME='stellaris_arachnoid_portrait_pack_2_8_1_2_42827.sh' ARCHIVE_BASE_ARACHNOID_0_MD5='6232966782f11eac72d8106dbde538c9' ARCHIVE_BASE_ARACHNOID_0_SIZE='1400' ARCHIVE_BASE_ARACHNOID_0_VERSION='2.8.1.2-gog42827' ## Horizon Signal ARCHIVE_BASE_HORIZONSIGNAL_4_NAME='stellaris_horizon_signal_4_2_4_87179.sh' ARCHIVE_BASE_HORIZONSIGNAL_4_MD5='81719f136a12a8c17af7c549d054cacc' ARCHIVE_BASE_HORIZONSIGNAL_4_SIZE='817' ARCHIVE_BASE_HORIZONSIGNAL_4_VERSION='4.2.4-gog87179' ARCHIVE_BASE_HORIZONSIGNAL_4_URL='https://www.gog.com/game/stellaris_horizon_signal' ARCHIVE_BASE_HORIZONSIGNAL_3_NAME='stellaris_horizon_signal_4_1_7_86266.sh' ARCHIVE_BASE_HORIZONSIGNAL_3_MD5='d2411d879d8faa982c985b9f5bbc0681' ARCHIVE_BASE_HORIZONSIGNAL_3_SIZE='817' ARCHIVE_BASE_HORIZONSIGNAL_3_VERSION='4.1.7-gog86266' ARCHIVE_BASE_HORIZONSIGNAL_2_NAME='stellaris_horizon_signal_4_0_23_84679.sh' ARCHIVE_BASE_HORIZONSIGNAL_2_MD5='d83044063bc16d23c32fee95ecbaa5f0' ARCHIVE_BASE_HORIZONSIGNAL_2_SIZE='817' ARCHIVE_BASE_HORIZONSIGNAL_2_VERSION='4.0.23-gog84679' ARCHIVE_BASE_HORIZONSIGNAL_1_NAME='stellaris_horizon_signal_3_14_1592653_81105.sh' ARCHIVE_BASE_HORIZONSIGNAL_1_MD5='b5f000f1f6ab8e30cb90ffffcbb07716' ARCHIVE_BASE_HORIZONSIGNAL_1_SIZE='817' ARCHIVE_BASE_HORIZONSIGNAL_1_VERSION='3.14.1592653-gog81105' ARCHIVE_BASE_HORIZONSIGNAL_0_NAME='stellaris_horizon_signal_2_8_1_2_42827.sh' ARCHIVE_BASE_HORIZONSIGNAL_0_MD5='0e9f53918e8b489add020cf91b4492e8' ARCHIVE_BASE_HORIZONSIGNAL_0_SIZE='1400' ARCHIVE_BASE_HORIZONSIGNAL_0_VERSION='2.8.1.2-gog42827' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME_MAIN_FILES=' dlc' PKG_PARENT_ID="$GAME_ID" PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_PARENT' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_default # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-stellaris-expansions-species-packs.sh0000755000000000000000000002222014471751340021075 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2022 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2026 Christian Stalp set -o errexit ### # Stellaris expansions (species packs): # - Plantoids # - Humanoids # - Lithoids # - Necroids # - Aquatics # - Toxoids # send your bug reports to vv221@dotslashplay.it ### script_version=20260116.4 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='stellaris' GAME_NAME='Stellaris' EXPANSION_ID_PLANTOID='plantoid' EXPANSION_NAME_PLANTOID='Plantoids Species Pack' EXPANSION_ID_HUMANOIDS='humanoids' EXPANSION_NAME_HUMANOIDS='Humanoids Species Pack' EXPANSION_ID_LITHOIDS='lithoids' EXPANSION_NAME_LITHOIDS='Lithoids Species Pack' EXPANSION_ID_NECROIDS='necroids' EXPANSION_NAME_NECROIDS='Necroids Species Pack' EXPANSION_ID_AQUATICS='aquatics' EXPANSION_NAME_AQUATICS='Aquatics Species Pack' EXPANSION_ID_TOXOIDS='toxoids' EXPANSION_NAME_TOXOIDS='Toxoids Species Pack' ## Plantoids ARCHIVE_BASE_PLANTOID_4_NAME='stellaris_plantoids_species_pack_4_2_4_87179.sh' ARCHIVE_BASE_PLANTOID_4_MD5='3aeb981bb594457ca3f554a2e943a525' ARCHIVE_BASE_PLANTOID_4_SIZE='837' ARCHIVE_BASE_PLANTOID_4_VERSION='4.2.4-gog87179' ARCHIVE_BASE_PLANTOID_4_URL='https://www.gog.com/game/stellaris_plantoids_species_pack' ARCHIVE_BASE_PLANTOID_3_NAME='stellaris_plantoids_species_pack_4_1_7_86266.sh' ARCHIVE_BASE_PLANTOID_3_MD5='da964d39609360f339e6b26046eef659' ARCHIVE_BASE_PLANTOID_3_SIZE='837' ARCHIVE_BASE_PLANTOID_3_VERSION='4.1.7-gog86266' ARCHIVE_BASE_PLANTOID_2_NAME='stellaris_plantoids_species_pack_4_0_23_84679.sh' ARCHIVE_BASE_PLANTOID_2_MD5='d70d05409ff2c28ed9a770705945d4cc' ARCHIVE_BASE_PLANTOID_2_SIZE='837' ARCHIVE_BASE_PLANTOID_2_VERSION='4.0.23-gog84679' ARCHIVE_BASE_PLANTOID_1_NAME='stellaris_plantoids_species_pack_3_14_1592653_81105.sh' ARCHIVE_BASE_PLANTOID_1_MD5='f2096d98d49833c1f900cd91b427b99d' ARCHIVE_BASE_PLANTOID_1_SIZE='837' ARCHIVE_BASE_PLANTOID_1_VERSION='3.14.1592653-gog81105' ARCHIVE_BASE_PLANTOID_0_NAME='stellaris_plantoids_species_pack_2_8_1_2_42827.sh' ARCHIVE_BASE_PLANTOID_0_MD5='6512a887b13a3a781a6556f58be1928f' ARCHIVE_BASE_PLANTOID_0_SIZE='1400' ARCHIVE_BASE_PLANTOID_0_VERSION='2.8.1.2-gog42827' ## Humanoids ARCHIVE_BASE_HUMANOIDS_4_NAME='stellaris_humanoids_species_pack_4_2_4_87179.sh' ARCHIVE_BASE_HUMANOIDS_4_MD5='ec9b6817c6facdb3c59a2510b0bdcbb2' ARCHIVE_BASE_HUMANOIDS_4_SIZE='84675' ARCHIVE_BASE_HUMANOIDS_4_VERSION='4.2.4-gog87179' ARCHIVE_BASE_HUMANOIDS_4_URL='https://www.gog.com/game/stellaris_humanoids_species_pack' ARCHIVE_BASE_HUMANOIDS_3_NAME='stellaris_humanoids_species_pack_4_1_7_86266.sh' ARCHIVE_BASE_HUMANOIDS_3_MD5='346e685e6fb7ea72defef76c9147a875' ARCHIVE_BASE_HUMANOIDS_3_SIZE='84675' ARCHIVE_BASE_HUMANOIDS_3_VERSION='4.1.7-gog86266' ARCHIVE_BASE_HUMANOIDS_2_NAME='stellaris_humanoids_species_pack_4_0_23_84679.sh' ARCHIVE_BASE_HUMANOIDS_2_MD5='2f24f9d1cceb67be64f932452c705c34' ARCHIVE_BASE_HUMANOIDS_2_SIZE='84675' ARCHIVE_BASE_HUMANOIDS_2_VERSION='4.0.23-gog84679' ARCHIVE_BASE_HUMANOIDS_1_NAME='stellaris_humanoids_species_pack_3_14_1592653_81105.sh' ARCHIVE_BASE_HUMANOIDS_1_MD5='b0ca9dba864d8726f822b03749cc680c' ARCHIVE_BASE_HUMANOIDS_1_SIZE='84675' ARCHIVE_BASE_HUMANOIDS_1_VERSION='3.14.1592653-gog81105' ARCHIVE_BASE_HUMANOIDS_0_NAME='stellaris_humanoids_species_pack_2_8_1_2_42827.sh' ARCHIVE_BASE_HUMANOIDS_0_MD5='1aa665250b1d26f5529ee22c1ba36e8d' ARCHIVE_BASE_HUMANOIDS_0_SIZE='120000' ARCHIVE_BASE_HUMANOIDS_0_VERSION='2.8.1.2-gog42827' ## Lithoids ARCHIVE_BASE_LITHOIDS_4_NAME='stellaris_lithoids_species_pack_4_2_4_87179.sh' ARCHIVE_BASE_LITHOIDS_4_MD5='99c5fcc15d7e8400e049c837cd2ccbe0' ARCHIVE_BASE_LITHOIDS_4_SIZE='25612' ARCHIVE_BASE_LITHOIDS_4_VERSION='4.2.4-gog87179' ARCHIVE_BASE_LITHOIDS_4_URL='https://www.gog.com/game/stellaris_lithoids_species_pack' ARCHIVE_BASE_LITHOIDS_3_NAME='stellaris_lithoids_species_pack_4_1_7_86266.sh' ARCHIVE_BASE_LITHOIDS_3_MD5='c78d3a9acde2188800455c96e272e52e' ARCHIVE_BASE_LITHOIDS_3_SIZE='25612' ARCHIVE_BASE_LITHOIDS_3_VERSION='4.1.7-gog86266' ARCHIVE_BASE_LITHOIDS_2_NAME='stellaris_lithoids_species_pack_4_0_23_84679.sh' ARCHIVE_BASE_LITHOIDS_2_MD5='15878fe6dfb2d5e9d8828f250666b5b9' ARCHIVE_BASE_LITHOIDS_2_SIZE='25612' ARCHIVE_BASE_LITHOIDS_2_VERSION='4.0.23-gog84679' ARCHIVE_BASE_LITHOIDS_1_NAME='stellaris_lithoids_species_pack_3_14_1592653_81105.sh' ARCHIVE_BASE_LITHOIDS_1_MD5='61bc2f350ab85060fa192a4ab9d0449f' ARCHIVE_BASE_LITHOIDS_1_SIZE='25612' ARCHIVE_BASE_LITHOIDS_1_VERSION='3.14.1592653-gog81105' ARCHIVE_BASE_LITHOIDS_0_NAME='stellaris_lithoids_species_pack_2_8_1_2_42827.sh' ARCHIVE_BASE_LITHOIDS_0_MD5='8939eff1f210fff7dddef479a7bac685' ARCHIVE_BASE_LITHOIDS_0_SIZE='54000' ARCHIVE_BASE_LITHOIDS_0_VERSION='2.8.1.2-gog42827' ## Necroids ARCHIVE_BASE_NECROIDS_4_NAME='stellaris_necroids_species_pack_4_2_4_87179.sh' ARCHIVE_BASE_NECROIDS_4_MD5='1dfabab4650059a553ab28198281f7a7' ARCHIVE_BASE_NECROIDS_4_SIZE='24881' ARCHIVE_BASE_NECROIDS_4_VERSION='4.2.4-gog87179' ARCHIVE_BASE_NECROIDS_4_URL='https://www.gog.com/game/stellaris_necroids_species_pack' ARCHIVE_BASE_NECROIDS_3_NAME='stellaris_necroids_species_pack_4_1_7_86266.sh' ARCHIVE_BASE_NECROIDS_3_MD5='e6088f1ade97f4687d493b11950d1123' ARCHIVE_BASE_NECROIDS_3_SIZE='24881' ARCHIVE_BASE_NECROIDS_3_VERSION='4.1.7-gog86266' ARCHIVE_BASE_NECROIDS_2_NAME='stellaris_necroids_species_pack_4_0_23_84679.sh' ARCHIVE_BASE_NECROIDS_2_MD5='92999234cfe7eb8b4cb44c4db34d83cb' ARCHIVE_BASE_NECROIDS_2_SIZE='24881' ARCHIVE_BASE_NECROIDS_2_VERSION='4.0.23-gog84679' ARCHIVE_BASE_NECROIDS_1_NAME='stellaris_necroids_species_pack_3_14_1592653_81105.sh' ARCHIVE_BASE_NECROIDS_1_MD5='5725e03dc497001f9837877ea2beff8d' ARCHIVE_BASE_NECROIDS_1_SIZE='24881' ARCHIVE_BASE_NECROIDS_1_VERSION='3.14.1592653-gog81105' ## Aquatics ARCHIVE_BASE_AQUATICS_4_NAME='stellaris_aquatics_species_pack_4_2_4_87179.sh' ARCHIVE_BASE_AQUATICS_4_MD5='50bfc0bcdde6d1a00d7b2313cf1d8145' ARCHIVE_BASE_AQUATICS_4_SIZE='29883' ARCHIVE_BASE_AQUATICS_4_VERSION='4.2.4-gog87179' ARCHIVE_BASE_AQUATICS_4_URL='https://www.gog.com/game/stellaris_aquatics_species_pack' ARCHIVE_BASE_AQUATICS_3_NAME='stellaris_aquatics_species_pack_4_1_7_86266.sh' ARCHIVE_BASE_AQUATICS_3_MD5='d53e18b0df2241c89cb3cac289e03543' ARCHIVE_BASE_AQUATICS_3_SIZE='29883' ARCHIVE_BASE_AQUATICS_3_VERSION='4.1.7-gog86266' ARCHIVE_BASE_AQUATICS_2_NAME='stellaris_aquatics_species_pack_4_0_23_84679.sh' ARCHIVE_BASE_AQUATICS_2_MD5='1afeabca087501eae22ce82015866966' ARCHIVE_BASE_AQUATICS_2_SIZE='29883' ARCHIVE_BASE_AQUATICS_2_VERSION='4.0.23-gog84679' ARCHIVE_BASE_AQUATICS_1_NAME='stellaris_aquatics_species_pack_3_14_1592653_81105.sh' ARCHIVE_BASE_AQUATICS_1_MD5='1eda07287d1d1fe6bf6cefcf2c142d8e' ARCHIVE_BASE_AQUATICS_1_SIZE='29883' ARCHIVE_BASE_AQUATICS_1_VERSION='3.14.1592653-gog81105' ## Toxoids ARCHIVE_BASE_TOXOIDS_4_NAME='stellaris_toxoids_species_pack_4_2_4_87179.sh' ARCHIVE_BASE_TOXOIDS_4_MD5='2217b35bbdea45dcdd27bddb5615b13f' ARCHIVE_BASE_TOXOIDS_4_SIZE='21991' ARCHIVE_BASE_TOXOIDS_4_VERSION='4.2.4-gog87179' ARCHIVE_BASE_TOXOIDS_4_URL='https://www.gog.com/game/stellaris_toxoids_species_pack' ARCHIVE_BASE_TOXOIDS_3_NAME='stellaris_toxoids_species_pack_4_1_7_86266.sh' ARCHIVE_BASE_TOXOIDS_3_MD5='b13f2b899f909e54389a093234813d38' ARCHIVE_BASE_TOXOIDS_3_SIZE='21991' ARCHIVE_BASE_TOXOIDS_3_VERSION='4.1.7-gog86266' ARCHIVE_BASE_TOXOIDS_2_NAME='stellaris_toxoids_species_pack_4_0_23_84679.sh' ARCHIVE_BASE_TOXOIDS_2_MD5='5959517aa87e401b89e3dad77fc6fca5' ARCHIVE_BASE_TOXOIDS_2_SIZE='21991' ARCHIVE_BASE_TOXOIDS_2_VERSION='4.0.23-gog84679' ARCHIVE_BASE_TOXOIDS_1_NAME='stellaris_toxoids_species_pack_3_14_1592653_81105.sh' ARCHIVE_BASE_TOXOIDS_1_MD5='80a09c9500cd8afa5b1a3b0135a64223' ARCHIVE_BASE_TOXOIDS_1_SIZE='21991' ARCHIVE_BASE_TOXOIDS_1_VERSION='3.14.1592653-gog81105' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME_MAIN_FILES=' dlc' PKG_PARENT_ID="$GAME_ID" PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_PARENT' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_default # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-stellaris-expansions-story-packs.sh0000755000000000000000000002405714471751340020634 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2022 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2026 Christian Stalp set -o errexit ### # Stellaris expansions (story packs): # - Leviathans # - Synthetic Dawn # - Distant Stars # - Ancient Relics # - First Contact # - Astral Planes # - Grand Archive # send your bug reports to vv221@dotslashplay.it ### script_version=20260117.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='stellaris' GAME_NAME='Stellaris' EXPANSION_ID_LEVIATHANS='leviathans' EXPANSION_NAME_LEVIATHANS='Leviathans Story Pack' EXPANSION_ID_DAWN='synthetic-dawn' EXPANSION_NAME_DAWN='Synthetic Dawn Story Pack' EXPANSION_ID_STARS='distant-stars' EXPANSION_NAME_STARS='Distant Stars Story Pack' EXPANSION_ID_RELICS='ancient-relics' EXPANSION_NAME_RELICS='Ancient Relics Story Pack' EXPANSION_ID_CONTACT='first-contact' EXPANSION_NAME_CONTACT='First Contact Story Pack' EXPANSION_ID_PLANES='astral-planes' EXPANSION_NAME_PLANES='Astral Planes' EXPANSION_ID_ARCHIVE='grand-archive' EXPANSION_NAME_ARCHIVE='Grand Archive Story Pack' ## Leviathans ARCHIVE_BASE_LEVIATHANS_4_NAME='stellaris_leviathans_story_pack_4_2_4_87179.sh' ARCHIVE_BASE_LEVIATHANS_4_MD5='bea83f00f2c3e0f5c37e9597497efdec' ARCHIVE_BASE_LEVIATHANS_4_SIZE='58426' ARCHIVE_BASE_LEVIATHANS_4_VERSION='4.2.4-gog87179' ARCHIVE_BASE_LEVIATHANS_4_URL='https://www.gog.com/game/stellaris_leviathans_story_pack' ARCHIVE_BASE_LEVIATHANS_3_NAME='stellaris_leviathans_story_pack_4_1_7_86266.sh' ARCHIVE_BASE_LEVIATHANS_3_MD5='d5ded91911ba0894b5b901be43181de8' ARCHIVE_BASE_LEVIATHANS_3_SIZE='58426' ARCHIVE_BASE_LEVIATHANS_3_VERSION='4.1.7-gog86266' ARCHIVE_BASE_LEVIATHANS_2_NAME='stellaris_leviathans_story_pack_4_0_23_84679.sh' ARCHIVE_BASE_LEVIATHANS_2_MD5='f715aa00eb279dcdfe9124ac6312dce1' ARCHIVE_BASE_LEVIATHANS_2_SIZE='58426' ARCHIVE_BASE_LEVIATHANS_2_VERSION='4.0.23-gog84679' ARCHIVE_BASE_LEVIATHANS_1_NAME='stellaris_leviathans_story_pack_3_14_1592653_81105.sh' ARCHIVE_BASE_LEVIATHANS_1_MD5='9c18773594ff2456258e6b6716311b20' ARCHIVE_BASE_LEVIATHANS_1_SIZE='58426' ARCHIVE_BASE_LEVIATHANS_1_VERSION='3.14.1592653-gog81105' ARCHIVE_BASE_LEVIATHANS_0_NAME='stellaris_leviathans_story_pack_2_8_1_2_42827.sh' ARCHIVE_BASE_LEVIATHANS_0_MD5='05b6cc30fe6d39acf09087e7e02e2235' ARCHIVE_BASE_LEVIATHANS_0_SIZE='59000' ARCHIVE_BASE_LEVIATHANS_0_VERSION='2.8.1.2-gog42827' ## Synthetic Dawn ARCHIVE_BASE_DAWN_4_NAME='stellaris_synthetic_dawn_story_pack_4_2_4_87179.sh' ARCHIVE_BASE_DAWN_4_MD5='66cd2fa3feb3f40672ac98bb525866d9' ARCHIVE_BASE_DAWN_4_SIZE='48245' ARCHIVE_BASE_DAWN_4_VERSION='4.2.4-gog87179' ARCHIVE_BASE_DAWN_4_URL='https://www.gog.com/game/stellaris_synthetic_dawn_story_pack' ARCHIVE_BASE_DAWN_3_NAME='stellaris_synthetic_dawn_story_pack_4_1_7_86266.sh' ARCHIVE_BASE_DAWN_3_MD5='611270eb8c53629460682cdf7c4741a2' ARCHIVE_BASE_DAWN_3_SIZE='48245' ARCHIVE_BASE_DAWN_3_VERSION='4.1.7-gog86266' ARCHIVE_BASE_DAWN_2_NAME='stellaris_synthetic_dawn_story_pack_4_0_23_84679.sh' ARCHIVE_BASE_DAWN_2_MD5='5aa0d16a6e0e0a0f022fa4b9e820150f' ARCHIVE_BASE_DAWN_2_SIZE='48245' ARCHIVE_BASE_DAWN_2_VERSION='4.0.23-gog84679' ARCHIVE_BASE_DAWN_1_NAME='stellaris_synthetic_dawn_story_pack_3_14_1592653_81105.sh' ARCHIVE_BASE_DAWN_1_MD5='8da0b258eb5e670ecc758dc938e97878' ARCHIVE_BASE_DAWN_1_SIZE='48245' ARCHIVE_BASE_DAWN_1_VERSION='3.14.1592653-gog81105' ARCHIVE_BASE_DAWN_0_NAME='stellaris_synthetic_dawn_story_pack_2_8_1_2_42827.sh' ARCHIVE_BASE_DAWN_0_MD5='2bcad8721700e5a8203fd7fe90c6f03c' ARCHIVE_BASE_DAWN_0_SIZE='49000' ARCHIVE_BASE_DAWN_0_VERSION='2.8.1.2-gog42827' ## Distant Stars ARCHIVE_BASE_STARS_4_NAME='stellaris_distant_stars_story_pack_4_2_4_87179.sh' ARCHIVE_BASE_STARS_4_MD5='f074a54ca1d3a7e13b6f04ca5e31b119' ARCHIVE_BASE_STARS_4_SIZE='20832' ARCHIVE_BASE_STARS_4_VERSION='4.2.4-gog87179' ARCHIVE_BASE_STARS_4_URL='https://www.gog.com/game/stellaris_distant_stars_story_pack' ARCHIVE_BASE_STARS_3_NAME='stellaris_distant_stars_story_pack_4_1_7_86266.sh' ARCHIVE_BASE_STARS_3_MD5='385958d8febeed27983d44b7f9818d82' ARCHIVE_BASE_STARS_3_SIZE='20832' ARCHIVE_BASE_STARS_3_VERSION='4.1.7-gog86266' ARCHIVE_BASE_STARS_2_NAME='stellaris_distant_stars_story_pack_4_0_23_84679.sh' ARCHIVE_BASE_STARS_2_MD5='1bc7353d68bdf3590f2e709956ed088d' ARCHIVE_BASE_STARS_2_SIZE='20832' ARCHIVE_BASE_STARS_2_VERSION='4.0.23-gog84679' ARCHIVE_BASE_STARS_1_NAME='stellaris_distant_stars_story_pack_3_14_1592653_81105.sh' ARCHIVE_BASE_STARS_1_MD5='eb6a9ad65dd727662706598256581265' ARCHIVE_BASE_STARS_1_SIZE='20832' ARCHIVE_BASE_STARS_1_VERSION='3.14.1592653-gog81105' ARCHIVE_BASE_STARS_0_NAME='stellaris_distant_stars_story_pack_2_8_1_2_42827.sh' ARCHIVE_BASE_STARS_0_MD5='8f108b37713fee10394e1d63b34da83e' ARCHIVE_BASE_STARS_0_SIZE='22000' ARCHIVE_BASE_STARS_0_VERSION='2.8.1.2-gog42827' ## Ancient Relics ARCHIVE_BASE_RELICS_4_NAME='stellaris_ancient_relics_4_2_4_87179.sh' ARCHIVE_BASE_RELICS_4_MD5='b0dfa5a5f2db600daab0cbdd06686c07' ARCHIVE_BASE_RELICS_4_SIZE='32739' ARCHIVE_BASE_RELICS_4_VERSION='4.2.4-gog87179' ARCHIVE_BASE_RELICS_4_URL='https://www.gog.com/game/stellaris_ancient_relics_story_pack' ARCHIVE_BASE_RELICS_3_NAME='stellaris_ancient_relics_4_1_7_86266.sh' ARCHIVE_BASE_RELICS_3_MD5='28340a7bb369c1ff13f17d6eb92684ea' ARCHIVE_BASE_RELICS_3_SIZE='32739' ARCHIVE_BASE_RELICS_3_VERSION='4.1.7-gog86266' ARCHIVE_BASE_RELICS_2_NAME='stellaris_ancient_relics_4_0_23_84679.sh' ARCHIVE_BASE_RELICS_2_MD5='164757e6b58f2f1ad756d173be445e42' ARCHIVE_BASE_RELICS_2_SIZE='32739' ARCHIVE_BASE_RELICS_2_VERSION='4.0.23-gog84679' ARCHIVE_BASE_RELICS_1_NAME='stellaris_ancient_relics_3_14_1592653_81105.sh' ARCHIVE_BASE_RELICS_1_MD5='2ee7c8d5cb9e6d14af6ea68e269960e6' ARCHIVE_BASE_RELICS_1_SIZE='32739' ARCHIVE_BASE_RELICS_1_VERSION='3.14.1592653-gog81105' ARCHIVE_BASE_RELICS_0_NAME='stellaris_ancient_relics_2_8_1_2_42827.sh' ARCHIVE_BASE_RELICS_0_MD5='4d1fa824f08e2853bd7d81e5a5c57f3e' ARCHIVE_BASE_RELICS_0_SIZE='34000' ARCHIVE_BASE_RELICS_0_VERSION='2.8.1.2-gog42827' ## First Contact ARCHIVE_BASE_CONTACT_4_NAME='stellaris_first_contact_story_pack_4_2_4_87179.sh' ARCHIVE_BASE_CONTACT_4_MD5='4e9965bee6a6243daaaa11162cebedce' ARCHIVE_BASE_CONTACT_4_SIZE='832' ARCHIVE_BASE_CONTACT_4_VERSION='4.2.4-gog87179' ARCHIVE_BASE_CONTACT_4_URL='https://www.gog.com/game/stellaris_first_contact_story_pack' ARCHIVE_BASE_CONTACT_3_NAME='stellaris_first_contact_story_pack_4_1_7_86266.sh' ARCHIVE_BASE_CONTACT_3_MD5='4667442592b03564cf65722636ae7dff' ARCHIVE_BASE_CONTACT_3_SIZE='832' ARCHIVE_BASE_CONTACT_3_VERSION='4.1.7-gog86266' ARCHIVE_BASE_CONTACT_2_NAME='stellaris_first_contact_story_pack_4_0_23_84679.sh' ARCHIVE_BASE_CONTACT_2_MD5='8138329a8b9d21f5208ea28fb6fc3390' ARCHIVE_BASE_CONTACT_2_SIZE='832' ARCHIVE_BASE_CONTACT_2_VERSION='4.0.23-gog84679' ARCHIVE_BASE_CONTACT_1_NAME='stellaris_first_contact_story_pack_3_14_1592653_81105.sh' ARCHIVE_BASE_CONTACT_1_MD5='08a96e2468e6bf4530ea0a9dc966efe4' ARCHIVE_BASE_CONTACT_1_SIZE='832' ARCHIVE_BASE_CONTACT_1_VERSION='3.14.1592653-gog81105' ## Astral Planes ARCHIVE_BASE_PLANES_4_NAME='stellaris_astral_planes_4_2_4_87179.sh' ARCHIVE_BASE_PLANES_4_MD5='a660e0efb787e23609944542664b70c4' ARCHIVE_BASE_PLANES_4_SIZE='46789' ARCHIVE_BASE_PLANES_4_VERSION='4.2.4-gog87179' ARCHIVE_BASE_PLANES_4_URL='https://www.gog.com/game/stellaris_astral_planes' ARCHIVE_BASE_PLANES_3_NAME='stellaris_astral_planes_4_1_7_86266.sh' ARCHIVE_BASE_PLANES_3_MD5='3a30613469053692aa74cfa1e7c4f1b5' ARCHIVE_BASE_PLANES_3_SIZE='46789' ARCHIVE_BASE_PLANES_3_VERSION='4.1.7-gog86266' ARCHIVE_BASE_PLANES_2_NAME='stellaris_astral_planes_4_0_23_84679.sh' ARCHIVE_BASE_PLANES_2_MD5='e34bcde8db82137627e7bccaca471be5' ARCHIVE_BASE_PLANES_2_SIZE='46789' ARCHIVE_BASE_PLANES_2_VERSION='4.0.23-gog84679' ARCHIVE_BASE_PLANES_1_NAME='stellaris_astral_planes_3_14_1592653_81105.sh' ARCHIVE_BASE_PLANES_1_MD5='27e12dbda8a5734ec6bd94e6eda650d9' ARCHIVE_BASE_PLANES_1_SIZE='46789' ARCHIVE_BASE_PLANES_1_VERSION='3.14.1592653-gog81105' ## Grand Archive ARCHIVE_BASE_ARCHIVE_4_NAME='stellaris_grand_archive_4_2_4_87179.sh' ARCHIVE_BASE_ARCHIVE_4_MD5='8ade8bea52ef239fa5c4bdd79d0c060d' ARCHIVE_BASE_ARCHIVE_4_SIZE='32742' ARCHIVE_BASE_ARCHIVE_4_VERSION='4.2.4-gog87179' ARCHIVE_BASE_ARCHIVE_4_URL='https://www.gog.com/game/stellaris_grand_archive' ARCHIVE_BASE_ARCHIVE_3_NAME='stellaris_grand_archive_4_2_2_86843.sh' ARCHIVE_BASE_ARCHIVE_3_MD5='98379b2cefcc971f332963bdbf514347' ARCHIVE_BASE_ARCHIVE_3_SIZE='32742' ARCHIVE_BASE_ARCHIVE_3_VERSION='4.2.2-gog86843' ARCHIVE_BASE_ARCHIVE_2_NAME='stellaris_grand_archive_4_1_3_85354.sh' ARCHIVE_BASE_ARCHIVE_2_MD5='72882f69a388d7fbf66e384878004514' ARCHIVE_BASE_ARCHIVE_2_SIZE='33060' ARCHIVE_BASE_ARCHIVE_2_VERSION='4.1.3-gog85354' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME_MAIN_FILES=' dlc' PKG_PARENT_ID="$GAME_ID" PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_PARENT' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_default # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-stellaris-expansions.sh0000755000000000000000000003100414471751340016345 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2022 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2026 Christian Stalp set -o errexit ### # Stellaris expansions (main expansions): # - Utopia # - Apocalypse # - MegaCorp # - Federations # - Nemesis # - Overlord # - Galactic Paragons # - The Machine Age # - Cosmic Storms # - Biogenesis # send your bug reports to vv221@dotslashplay.it ### script_version=20260117.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='stellaris' GAME_NAME='Stellaris' EXPANSION_ID_UTOPIA='utopia' EXPANSION_NAME_UTOPIA='Utopia' EXPANSION_ID_APOCALYPSE='apocalypse' EXPANSION_NAME_APOCALYPSE='Apocalypse' EXPANSION_ID_MEGACORP='megacorp' EXPANSION_NAME_MEGACORP='MegaCorp' EXPANSION_ID_FEDERATIONS='federations' EXPANSION_NAME_FEDERATIONS='Federations' EXPANSION_ID_NEMESIS='nemesis' EXPANSION_NAME_NEMESIS='Nemesis' EXPANSION_ID_OVERLORD='overlord' EXPANSION_NAME_OVERLORD='Overlord' EXPANSION_ID_PARAGONS='galactic-paragons' EXPANSION_NAME_PARAGONS='Galactic Paragons' EXPANSION_ID_MACHINE='the-machine-age' EXPANSION_NAME_MACHINE='The Machine Age' EXPANSION_ID_STORMS='cosmic-storms' EXPANSION_NAME_STORMS='Cosmic Storms' EXPANSION_ID_BIOGENESIS='biogenesis' EXPANSION_NAME_BIOGENESIS='Biogenesis' ## Utopia ARCHIVE_BASE_UTOPIA_4_NAME='stellaris_utopia_4_2_4_87179.sh' ARCHIVE_BASE_UTOPIA_4_MD5='625447ee9c7654e9ff07249b6e438400' ARCHIVE_BASE_UTOPIA_4_SIZE='75007' ARCHIVE_BASE_UTOPIA_4_VERSION='4.2.4-gog87179' ARCHIVE_BASE_UTOPIA_4_URL='https://www.gog.com/game/stellaris_utopia' ARCHIVE_BASE_UTOPIA_3_NAME='stellaris_utopia_4_1_7_86266.sh' ARCHIVE_BASE_UTOPIA_3_MD5='2e1bd4ff7aa51754c0037242f55badb3' ARCHIVE_BASE_UTOPIA_3_SIZE='75007' ARCHIVE_BASE_UTOPIA_3_VERSION='4.1.7-gog86266' ARCHIVE_BASE_UTOPIA_2_NAME='stellaris_utopia_4_0_23_84679.sh' ARCHIVE_BASE_UTOPIA_2_MD5='36ca08b712639088b27300ef5d6348e0' ARCHIVE_BASE_UTOPIA_2_SIZE='75007' ARCHIVE_BASE_UTOPIA_2_VERSION='4.0.23-gog84679' ARCHIVE_BASE_UTOPIA_1_NAME='stellaris_utopia_3_14_1592653_81105.sh' ARCHIVE_BASE_UTOPIA_1_MD5='ce44b8d0f9afa3e05927c914d1033341' ARCHIVE_BASE_UTOPIA_1_SIZE='75007' ARCHIVE_BASE_UTOPIA_1_VERSION='3.14.1592653-gog81105' ARCHIVE_BASE_UTOPIA_0_NAME='stellaris_utopia_2_8_1_2_42827.sh' ARCHIVE_BASE_UTOPIA_0_MD5='02057c1076c581e2ad87ac0aa1aee10f' ARCHIVE_BASE_UTOPIA_0_SIZE='76000' ARCHIVE_BASE_UTOPIA_0_VERSION='2.8.1.2-gog42827' ## Apocalypse ARCHIVE_BASE_APOCALYPSE_4_NAME='stellaris_apocalypse_4_2_4_87179.sh' ARCHIVE_BASE_APOCALYPSE_4_MD5='f687ee431aaae83977e38d67fee7a2af' ARCHIVE_BASE_APOCALYPSE_4_SIZE='37877' ARCHIVE_BASE_APOCALYPSE_4_VERSION='4.2.4-gog87179' ARCHIVE_BASE_APOCALYPSE_4_URL='https://www.gog.com/game/stellaris_apocalypse' ARCHIVE_BASE_APOCALYPSE_3_NAME='stellaris_apocalypse_4_1_7_86266.sh' ARCHIVE_BASE_APOCALYPSE_3_MD5='a90f4847dbb8019b661e3272b681624e' ARCHIVE_BASE_APOCALYPSE_3_SIZE='37877' ARCHIVE_BASE_APOCALYPSE_3_VERSION='4.1.7-gog86266' ARCHIVE_BASE_APOCALYPSE_2_NAME='stellaris_apocalypse_4_0_23_84679.sh' ARCHIVE_BASE_APOCALYPSE_2_MD5='657e28499f3f9c7e7e46446b1f45bab0' ARCHIVE_BASE_APOCALYPSE_2_SIZE='37877' ARCHIVE_BASE_APOCALYPSE_2_VERSION='4.0.23-gog84679' ARCHIVE_BASE_APOCALYPSE_1_NAME='stellaris_apocalypse_3_14_1592653_81105.sh' ARCHIVE_BASE_APOCALYPSE_1_MD5='7f21a52edafc0c8a80e97a947dc5afa6' ARCHIVE_BASE_APOCALYPSE_1_SIZE='37877' ARCHIVE_BASE_APOCALYPSE_1_VERSION='3.14.1592653-gog81105' ARCHIVE_BASE_APOCALYPSE_0_NAME='stellaris_apocalypse_2_8_1_2_42827.sh' ARCHIVE_BASE_APOCALYPSE_0_MD5='3b4bfaaaa89b80694173fcc8b7fe09dd' ARCHIVE_BASE_APOCALYPSE_0_SIZE='39000' ARCHIVE_BASE_APOCALYPSE_0_VERSION='2.8.1.2-gog42827' ## MegaCorp ARCHIVE_BASE_MEGACORP_4_NAME='stellaris_megacorp_4_2_4_87179.sh' ARCHIVE_BASE_MEGACORP_4_MD5='88c646602c264278c5e7c0bfcab495f6' ARCHIVE_BASE_MEGACORP_4_SIZE='90404' ARCHIVE_BASE_MEGACORP_4_VERSION='4.2.4-gog87179' ARCHIVE_BASE_MEGACORP_4_URL='https://www.gog.com/game/stellaris_megacorp' ARCHIVE_BASE_MEGACORP_3_NAME='stellaris_megacorp_4_1_7_86266.sh' ARCHIVE_BASE_MEGACORP_3_MD5='84550d6dd8bbdf1ad9f613029e25513a' ARCHIVE_BASE_MEGACORP_3_SIZE='90404' ARCHIVE_BASE_MEGACORP_3_VERSION='4.1.7-gog86266' ARCHIVE_BASE_MEGACORP_2_NAME='stellaris_megacorp_4_0_23_84679.sh' ARCHIVE_BASE_MEGACORP_2_MD5='8e6ad615e3fa7a902e05f54c4e54564e' ARCHIVE_BASE_MEGACORP_2_SIZE='90404' ARCHIVE_BASE_MEGACORP_2_VERSION='4.0.23-gog84679' ARCHIVE_BASE_MEGACORP_1_NAME='stellaris_megacorp_3_14_1592653_81105.sh' ARCHIVE_BASE_MEGACORP_1_MD5='897bda9d1e5eda534a4913245e3af69b' ARCHIVE_BASE_MEGACORP_1_SIZE='90404' ARCHIVE_BASE_MEGACORP_1_VERSION='3.14.1592653-gog81105' ARCHIVE_BASE_MEGACORP_0_NAME='stellaris_megacorp_2_8_1_2_42827.sh' ARCHIVE_BASE_MEGACORP_0_MD5='2cd753517129dae46b0e92ca2d50dcb9' ARCHIVE_BASE_MEGACORP_0_SIZE='140000' ARCHIVE_BASE_MEGACORP_0_VERSION='2.8.1.2-gog42827' ## Federations ARCHIVE_BASE_FEDERATIONS_4_NAME='stellaris_federations_4_2_4_87179.sh' ARCHIVE_BASE_FEDERATIONS_4_MD5='15f692a0b49ade066fd48cb0622c0266' ARCHIVE_BASE_FEDERATIONS_4_SIZE='14433' ARCHIVE_BASE_FEDERATIONS_4_VERSION='4.2.4-gog87179' ARCHIVE_BASE_FEDERATIONS_4_URL='https://www.gog.com/game/stellaris_federations' ARCHIVE_BASE_FEDERATIONS_3_NAME='stellaris_federations_4_1_7_86266.sh' ARCHIVE_BASE_FEDERATIONS_3_MD5='e66ebe87313965d25ae63721636e3bad' ARCHIVE_BASE_FEDERATIONS_3_SIZE='14433' ARCHIVE_BASE_FEDERATIONS_3_VERSION='4.1.7-gog86266' ARCHIVE_BASE_FEDERATIONS_2_NAME='stellaris_federations_4_0_23_84679.sh' ARCHIVE_BASE_FEDERATIONS_2_MD5='432adf7d8b2491d1810d1fc7182f7806' ARCHIVE_BASE_FEDERATIONS_2_SIZE='14433' ARCHIVE_BASE_FEDERATIONS_2_VERSION='4.0.23-gog84679' ARCHIVE_BASE_FEDERATIONS_1_NAME='stellaris_federations_3_14_1592653_81105.sh' ARCHIVE_BASE_FEDERATIONS_1_MD5='ce2828f957f35b1ce114c1bf66fa65c2' ARCHIVE_BASE_FEDERATIONS_1_SIZE='14433' ARCHIVE_BASE_FEDERATIONS_1_VERSION='3.14.1592653-gog81105' ARCHIVE_BASE_FEDERATIONS_0_NAME='stellaris_federations_2_7_1_38218.sh' ARCHIVE_BASE_FEDERATIONS_0_MD5='371a88b8771ed4c58144a00494285c46' ARCHIVE_BASE_FEDERATIONS_0_SIZE='15000' ARCHIVE_BASE_FEDERATIONS_0_VERSION='2.7.1-gog38218' ## Nemesis ARCHIVE_BASE_NEMESIS_4_NAME='stellaris_nemesis_4_2_4_87179.sh' ARCHIVE_BASE_NEMESIS_4_MD5='760f25250f362339d379aec1d66d69f0' ARCHIVE_BASE_NEMESIS_4_SIZE='38539' ARCHIVE_BASE_NEMESIS_4_VERSION='4.2.4-gog87179' ARCHIVE_BASE_NEMESIS_4_URL='https://www.gog.com/game/stellaris_nemesis' ARCHIVE_BASE_NEMESIS_3_NAME='stellaris_nemesis_4_1_7_86266.sh' ARCHIVE_BASE_NEMESIS_3_MD5='9a7e29858a771521a8e6b792191df98f' ARCHIVE_BASE_NEMESIS_3_SIZE='38539' ARCHIVE_BASE_NEMESIS_3_VERSION='4.1.7-gog86266' ARCHIVE_BASE_NEMESIS_2_NAME='stellaris_nemesis_4_0_23_84679.sh' ARCHIVE_BASE_NEMESIS_2_MD5='dad4d0666016994358fcacb23c64e018' ARCHIVE_BASE_NEMESIS_2_SIZE='38539' ARCHIVE_BASE_NEMESIS_2_VERSION='4.0.23-gog84679' ARCHIVE_BASE_NEMESIS_1_NAME='stellaris_nemesis_3_14_1592653_81105.sh' ARCHIVE_BASE_NEMESIS_1_MD5='7d686008bc3b604c55578cb7b72b711b' ARCHIVE_BASE_NEMESIS_1_SIZE='38539' ARCHIVE_BASE_NEMESIS_1_VERSION='3.14.1592653-gog81105' ## Overlord ARCHIVE_BASE_OVERLORD_4_NAME='stellaris_overlord_4_2_4_87179.sh' ARCHIVE_BASE_OVERLORD_4_MD5='0799f8fdcb6801ecb0951c6e33051fe6' ARCHIVE_BASE_OVERLORD_4_SIZE='99860' ARCHIVE_BASE_OVERLORD_4_VERSION='4.2.4-gog87179' ARCHIVE_BASE_OVERLORD_4_URL='https://www.gog.com/game/stellaris_overlord' ARCHIVE_BASE_OVERLORD_3_NAME='stellaris_overlord_4_1_7_86266.sh' ARCHIVE_BASE_OVERLORD_3_MD5='38622d832b353aee6dbb9956b5e145fc' ARCHIVE_BASE_OVERLORD_3_SIZE='99860' ARCHIVE_BASE_OVERLORD_3_VERSION='4.1.7-gog86266' ARCHIVE_BASE_OVERLORD_2_NAME='stellaris_overlord_4_0_23_84679.sh' ARCHIVE_BASE_OVERLORD_2_MD5='9a854138d0831c661965036719252902' ARCHIVE_BASE_OVERLORD_2_SIZE='99860' ARCHIVE_BASE_OVERLORD_2_VERSION='4.0.23-gog84679' ARCHIVE_BASE_OVERLORD_1_NAME='stellaris_overlord_3_14_1592653_81105.sh' ARCHIVE_BASE_OVERLORD_1_MD5='b556024c88c3d9dec03c8e5945de49b4' ARCHIVE_BASE_OVERLORD_1_SIZE='99860' ARCHIVE_BASE_OVERLORD_1_VERSION='3.14.1592653-gog81105' ## Galactic Paragons ARCHIVE_BASE_PARAGONS_4_NAME='stellaris_galactic_paragons_4_2_4_87179.sh' ARCHIVE_BASE_PARAGONS_4_MD5='f2416e5a508f0bc06b4d1ff71610bc29' ARCHIVE_BASE_PARAGONS_4_SIZE='832' ARCHIVE_BASE_PARAGONS_4_VERSION='4.2.4-gog87179' ARCHIVE_BASE_PARAGONS_4_URL='https://www.gog.com/game/stellaris_galactic_paragons' ARCHIVE_BASE_PARAGONS_3_NAME='stellaris_galactic_paragons_4_1_7_86266.sh' ARCHIVE_BASE_PARAGONS_3_MD5='e246e9d897591d9e7b549991cad29721' ARCHIVE_BASE_PARAGONS_3_SIZE='832' ARCHIVE_BASE_PARAGONS_3_VERSION='4.1.7-gog86266' ARCHIVE_BASE_PARAGONS_2_NAME='stellaris_galactic_paragons_4_0_23_84679.sh' ARCHIVE_BASE_PARAGONS_2_MD5='c32dc8e5ece651f47c1e585b4ea98e5c' ARCHIVE_BASE_PARAGONS_2_SIZE='832' ARCHIVE_BASE_PARAGONS_2_VERSION='4.0.23-gog84679' ARCHIVE_BASE_PARAGONS_1_NAME='stellaris_galactic_paragons_3_14_1592653_81105.sh' ARCHIVE_BASE_PARAGONS_1_MD5='b3a00f45cec93aea1ff6a2a0108935a5' ARCHIVE_BASE_PARAGONS_1_SIZE='832' ARCHIVE_BASE_PARAGONS_1_VERSION='3.14.1592653-gog81105' ## The Machine Age ARCHIVE_BASE_MACHINE_4_NAME='stellaris_the_machine_age_4_2_4_87179.sh' ARCHIVE_BASE_MACHINE_4_MD5='1bb9bb74e4750787492d446224772a11' ARCHIVE_BASE_MACHINE_4_SIZE='100390' ARCHIVE_BASE_MACHINE_4_VERSION='4.2.4-gog87179' ARCHIVE_BASE_MACHINE_4_URL='https://www.gog.com/game/stellaris_the_machine_age' ARCHIVE_BASE_MACHINE_3_NAME='stellaris_the_machine_age_4_1_7_86266.sh' ARCHIVE_BASE_MACHINE_3_MD5='4877f30296d1be2b5a323e9f0e996f10' ARCHIVE_BASE_MACHINE_3_SIZE='100390' ARCHIVE_BASE_MACHINE_3_VERSION='4.1.7-gog86266' ARCHIVE_BASE_MACHINE_2_NAME='stellaris_the_machine_age_4_0_23_84679.sh' ARCHIVE_BASE_MACHINE_2_MD5='bd0a016b3974fa441665e2dcf89bb700' ARCHIVE_BASE_MACHINE_2_SIZE='100390' ARCHIVE_BASE_MACHINE_2_VERSION='4.0.23-gog84679' ARCHIVE_BASE_MACHINE_1_NAME='stellaris_the_machine_age_3_14_1592653_81105.sh' ARCHIVE_BASE_MACHINE_1_MD5='07b714aa18a9c9ff40f5fbf03cf59e2d' ARCHIVE_BASE_MACHINE_1_SIZE='100390' ARCHIVE_BASE_MACHINE_1_VERSION='3.14.1592653-gog81105' ## Cosmic Storms ARCHIVE_BASE_STORMS_4_NAME='stellaris_cosmic_storms_4_2_4_87179.sh' ARCHIVE_BASE_STORMS_4_MD5='cfc4c99dcf8fedabc594902c400c430a' ARCHIVE_BASE_STORMS_4_SIZE='829' ARCHIVE_BASE_STORMS_4_VERSION='4.2.4-gog87179' ARCHIVE_BASE_STORMS_4_URL='https://www.gog.com/game/stellaris_cosmic_storms' ARCHIVE_BASE_STORMS_3_NAME='stellaris_cosmic_storms_4_1_7_86266.sh' ARCHIVE_BASE_STORMS_3_MD5='49216dcae8261a3f7f6fbc2a59bd3400' ARCHIVE_BASE_STORMS_3_SIZE='829' ARCHIVE_BASE_STORMS_3_VERSION='4.1.7-gog86266' ARCHIVE_BASE_STORMS_2_NAME='stellaris_cosmic_storms_4_0_23_84679.sh' ARCHIVE_BASE_STORMS_2_MD5='b34dac8b2fb7970f171a5ec9a07232e1' ARCHIVE_BASE_STORMS_2_SIZE='829' ARCHIVE_BASE_STORMS_2_VERSION='4.0.23-gog84679' ARCHIVE_BASE_STORMS_1_NAME='stellaris_cosmic_storms_3_14_1592653_81105.sh' ARCHIVE_BASE_STORMS_1_MD5='672c8bb0d4992b1e76f827fe351fb69a' ARCHIVE_BASE_STORMS_1_SIZE='829' ARCHIVE_BASE_STORMS_1_VERSION='3.14.1592653-gog81105' ## Biogenesis ARCHIVE_BASE_BIOGENESIS_4_NAME='stellaris_biogenesis_4_2_4_87179.sh' ARCHIVE_BASE_BIOGENESIS_4_MD5='f8ce9051a98a7b2413285721194a7556' ARCHIVE_BASE_BIOGENESIS_4_SIZE='88020' ARCHIVE_BASE_BIOGENESIS_4_VERSION='4.2.4-gog87179.sh' ARCHIVE_BASE_BIOGENESIS_4_URL='https://www.gog.com/game/stellaris_biogenesis' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME_MAIN_FILES=' dlc' PKG_PARENT_ID="$GAME_ID" PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_PARENT' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_default # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-stellaris.sh0000755000000000000000000001464214471751340014171 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2019 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2026 Christian Stalp set -o errexit ### # Stellaris # send your bug reports to vv221@dotslashplay.it ### script_version=20260116.4 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='stellaris' GAME_NAME='Stellaris' ARCHIVE_BASE_4_NAME='stellaris_4_2_4_87179.sh' ARCHIVE_BASE_4_MD5='d92a7d056bd05fb8312a5dbe7e7aa117' ARCHIVE_BASE_4_SIZE='26630528' ARCHIVE_BASE_4_VERSION='4.2.4-gog87179' ARCHIVE_BASE_4_URL='https://www.gog.com/game/stellaris' ARCHIVE_BASE_3_NAME='stellaris_4_1_7_86266.sh' ARCHIVE_BASE_3_MD5='173d5ab87955eaac9d504a95ecfa3966' ARCHIVE_BASE_3_SIZE='25274344' ARCHIVE_BASE_3_VERSION='4.1.7-gog86266' ARCHIVE_BASE_2_NAME='stellaris_4_0_23_84679.sh' ARCHIVE_BASE_2_MD5='72012fb6ce1ecd9c729e3ceb04fbba2a' ARCHIVE_BASE_2_SIZE='22711133' ARCHIVE_BASE_2_VERSION='4.0.23-gog84679' ARCHIVE_BASE_1_NAME='stellaris_3_14_1592653_81105.sh' ARCHIVE_BASE_1_MD5='1cc50dc7470ed4ddd58fc755e9cf3024' ARCHIVE_BASE_1_SIZE='20346386' ARCHIVE_BASE_1_VERSION='3.14.1592653-gog81105' ARCHIVE_BASE_0_NAME='stellaris_2_8_1_2_42827.sh' ARCHIVE_BASE_0_MD5='8278463a7b3a9b6b7f9c5ede4b51b222' ARCHIVE_BASE_0_SIZE='11000000' ARCHIVE_BASE_0_VERSION='2.8.1.2-gog42827' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_LIBS_BIN_FILES=' libnakama-cpp.so libpops_api.so' CONTENT_FONTS_DATA_RELATIVE_PATH='gfx/fonts' CONTENT_FONTS_DATA_FILES=' Jura-VariableFont_wght.ttf malgun.ttf NotoSans-Regular.ttf ONE_Mobile_Title.ttf Orbitron-Regular.ttf rounded-mgenplus-1c-medium.ttf' CONTENT_FONTS0_DATA_RELATIVE_PATH='gfx/fonts/arimo' CONTENT_FONTS0_DATA_FILES=' Arimo-BoldItalic.ttf Arimo-Bold.ttf Arimo-Italic.ttf Arimo-Regular.ttf' CONTENT_FONTS1_DATA_RELATIVE_PATH='previewer_assets/gfx/pdx_gui' CONTENT_FONTS1_DATA_FILES=' previewer_arial.ttf' CONTENT_GAME_BIN_FILES=' crash_reporter tools stellaris' CONTENT_GAME_DATA_FILES=' common curated_save_games dlc dlc_metadata events flags fonts gfx interface licenses locales localisation localisation_synced map music prescripted_countries previewer_assets tweakergui_assets unchecked_defines ChangeLog.txt ChangeLogBlank.txt checksum_manifest.txt ThirdPartyLicenses.txt' CONTENT_GAME_DATA_SOUND_FILES=' sound' CONTENT_GAME_DATA_MODELS_FILES=' gfx/models' CONTENT_GAME_DATA_MODELS_SHIPS_FILES=' gfx/models/ships' CONTENT_GAME_DATA_MODELS_SHIPS_MEGASTRUCTURES_FILES=' gfx/models/ships/megastructures' CONTENT_GAME_MULTIPLAYER_FILES=' launcher-assets livepp pdx_launcher pdx_online_assets dowser launcher-installer-linux_2024.14 pdx_core_test launcher-settings.json' ## Symbolic links are explicitly unsupported by the game engine. ## Trying to run the game from a symlinks farm prefix leads to the following errors: ## ## [virtualfilesystem_physfs.cpp:797] File 'gfx/exe_icon.bmp' does not exist : symlinks are forbidden ## [virtualfilesystem_physfs.cpp:797] File 'gfx/loadingscreens/init.bmp' does not exist : symlinks are forbidden APP_MAIN_PREFIX_TYPE='none' APP_MAIN_EXE='stellaris' APP_MAIN_ICON='gfx/exe_icon.bmp' PACKAGES_LIST=' PKG_BIN PKG_DATA_SOUND PKG_DATA_MODELS_SHIPS_MEGASTRUCTURES PKG_DATA_MODELS_SHIPS PKG_DATA_MODELS PKG_DATA PKG_MULTIPLAYER' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libgcc_s.so.1 libGL.so.1 libm.so.6 libpthread.so.0 libresolv.so.2 libstdc++.so.6 libuuid.so.1 libX11.so.6 libz.so.1' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' PKG_DATA_DEPENDENCIES_SIBLINGS=' PKG_DATA_SOUND PKG_DATA_MODELS' PKG_DATA_SOUND_ID="${PKG_DATA_ID}-sound" PKG_DATA_SOUND_DESCRIPTION="${PKG_DATA_DESCRIPTION} - sound" PKG_DATA_MODELS_ID="${PKG_DATA_ID}-models" PKG_DATA_MODELS_DESCRIPTION="${PKG_DATA_DESCRIPTION} - models" PKG_DATA_MODELS_DEPENDENCIES_SIBLINGS=' PKG_DATA_MODELS_SHIPS' PKG_DATA_MODELS_SHIPS_ID="${PKG_DATA_MODELS_ID}-ships" PKG_DATA_MODELS_SHIPS_DESCRIPTION="${PKG_DATA_MODELS_DESCRIPTION} - ships" PKG_DATA_MODELS_SHIPS_DEPENDENCIES_SIBLINGS=' PKG_DATA_MODELS_SHIPS_MEGASTRUCTURES' PKG_DATA_MODELS_SHIPS_MEGASTRUCTURES_ID="${PKG_DATA_MODELS_SHIPS_ID}-megastructures" PKG_DATA_MODELS_SHIPS_MEGASTRUCTURES_DESCRIPTION="${PKG_DATA_MODELS_SHIPS_DESCRIPTION} - megastructures" PKG_MULTIPLAYER_ID="${GAME_ID}-multiplayer" PKG_MULTIPLAYER_DESCRIPTION='Paradox launcher' PKG_MULTIPLAYER_ARCH='64' PKG_MULTIPLAYER_DEPENDENCIES_SIBLINGS=' PKG_BIN' PKG_MULTIPLAYER_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libgcc_s.so.1 libm.so.6 libpthread.so.0 libstdc++.so.6 libX11.so.6' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. ## Force the use of system-provided SDL. APP_MAIN_PRERUN="$(application_prerun 'APP_MAIN') $(launcher_tweak_sdl_override)" PKG_BIN_DEPENDENCIES_LIBRARIES="$PKG_BIN_DEPENDENCIES_LIBRARIES libSDL2-2.0.so.0" ## Prevent a crash with SDL3 when music should be played. ## cf. https://github.com/libsdl-org/sdl2-compat/issues/548 APP_MAIN_PRERUN="$(application_prerun 'APP_MAIN') # Prevent a crash with SDL3 when music should be played. # cf. https://github.com/libsdl-org/sdl2-compat/issues/548 export SDL2COMPAT_BROKEN_LOADWAV_SIZE=1 " launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-sunless-sea.sh0000755000000000000000000001657014471751340014433 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2018 BetaRays set -o errexit ### # Sunless Sea # send your bug reports to vv221@dotslashplay.it ### script_version=20250429.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='sunless-sea' GAME_NAME='Sunless Sea' # Archives ## Zubmariner (stand-alone expansion, gog.com) ARCHIVE_BASE_GOG_ZUBMARINER_5_NAME='sunless_sea_zubmariner_2_2_11_3212_64426.sh' ARCHIVE_BASE_GOG_ZUBMARINER_5_MD5='35dfc1ccb8a152e7eae5e1468d33098e' ARCHIVE_BASE_GOG_ZUBMARINER_5_VERSION='2.2.11.3212-gog64426' ARCHIVE_BASE_GOG_ZUBMARINER_5_SIZE='928276' ARCHIVE_BASE_GOG_ZUBMARINER_5_URL='https://www.gog.com/game/sunless_sea_zubmariner' ARCHIVE_BASE_GOG_ZUBMARINER_4_NAME='sunless_sea_zubmariner_v2_2_7_3165_a_53438.sh' ARCHIVE_BASE_GOG_ZUBMARINER_4_MD5='2d160c6c91b3b7e603447714b3112fba' ARCHIVE_BASE_GOG_ZUBMARINER_4_VERSION='2.2.7.3165-gog53438' ARCHIVE_BASE_GOG_ZUBMARINER_4_SIZE='930000' ARCHIVE_BASE_GOG_ZUBMARINER_3_NAME='sunless_sea_zubmariner_2_2_7_3165_29003.sh' ARCHIVE_BASE_GOG_ZUBMARINER_3_MD5='7527c8f7a87c6d8f04a0cf2d75f30f4c' ARCHIVE_BASE_GOG_ZUBMARINER_3_VERSION='2.2.7.3165-gog29003' ARCHIVE_BASE_GOG_ZUBMARINER_3_SIZE='930000' ARCHIVE_BASE_GOG_ZUBMARINER_2_NAME='sunless_sea_zubmariner_2_2_6_3150_24613.sh' ARCHIVE_BASE_GOG_ZUBMARINER_2_MD5='427440ff2f5e57e5e556bbaa1ffcfa7c' ARCHIVE_BASE_GOG_ZUBMARINER_2_VERSION='2.2.6.3150-gog24613' ARCHIVE_BASE_GOG_ZUBMARINER_2_SIZE='930000' ARCHIVE_BASE_GOG_ZUBMARINER_1_NAME='sunless_sea_zubmariner_en_v2_2_4_3141_21326.sh' ARCHIVE_BASE_GOG_ZUBMARINER_1_MD5='438471f35119ca0131971082f6eb805c' ARCHIVE_BASE_GOG_ZUBMARINER_1_VERSION='2.2.4.3141-gog21326' ARCHIVE_BASE_GOG_ZUBMARINER_1_SIZE='930000' ARCHIVE_BASE_GOG_ZUBMARINER_0_NAME='gog_sunless_sea_zubmariner_2.5.0.6.sh' ARCHIVE_BASE_GOG_ZUBMARINER_0_MD5='692cd0dac832d5254bd38d7e1a05b918' ARCHIVE_BASE_GOG_ZUBMARINER_0_VERSION='2.2.2.3130-gog2.5.0.6' ARCHIVE_BASE_GOG_ZUBMARINER_0_SIZE='870000' ## Sunless Sea (base game, gog.com) ARCHIVE_BASE_GOG_5_NAME='sunless_sea_2_2_11_3212_64426.sh' ARCHIVE_BASE_GOG_5_MD5='f5ab5552b618f33c5ddf0d952aa1294c' ARCHIVE_BASE_GOG_5_VERSION='2.2.11.3212-gog64426' ARCHIVE_BASE_GOG_5_SIZE='756028' ARCHIVE_BASE_GOG_5_URL='https://www.gog.com/game/sunless_sea' ARCHIVE_BASE_GOG_4_NAME='sunless_sea_v2_2_7_3165_a_53438.sh' ARCHIVE_BASE_GOG_4_MD5='e7cdef68377026c0f61327342a6b68b4' ARCHIVE_BASE_GOG_4_VERSION='2.2.7.3165-gog53438' ARCHIVE_BASE_GOG_4_SIZE='760000' ARCHIVE_BASE_GOG_3_NAME='sunless_sea_2_2_7_3165_29003.sh' ARCHIVE_BASE_GOG_3_MD5='0feebd54ae67c772d189e19d2042fe91' ARCHIVE_BASE_GOG_3_VERSION='2.2.7.3165-gog29003' ARCHIVE_BASE_GOG_3_SIZE='760000' ARCHIVE_BASE_GOG_2_NAME='sunless_sea_2_2_6_3150_24613.sh' ARCHIVE_BASE_GOG_2_MD5='1ea56377e7636f354656c1f791f29a5c' ARCHIVE_BASE_GOG_2_VERSION='2.2.6.3150-gog24613' ARCHIVE_BASE_GOG_2_SIZE='760000' ARCHIVE_BASE_GOG_1_NAME='sunless_sea_en_v2_2_4_3141_21326.sh' ARCHIVE_BASE_GOG_1_MD5='df453a83ac1fb2767bdeafafb40f037a' ARCHIVE_BASE_GOG_1_VERSION='2.2.4.3141-gog21326' ARCHIVE_BASE_GOG_1_SIZE='760000' ARCHIVE_BASE_GOG_0_NAME='gog_sunless_sea_2.8.0.11.sh' ARCHIVE_BASE_GOG_0_MD5='1cf6bb7a440ce796abf8e7afcb6f7a54' ARCHIVE_BASE_GOG_0_VERSION='2.2.2.3129-gog2.8.0.11' ARCHIVE_BASE_GOG_0_SIZE='700000' ## Sunless Sea (base game, humblebundle.com) ARCHIVE_BASE_HUMBLE_1_NAME='Sunless_Sea_Setup_V2.2.4.3141_LINUX.zip' ARCHIVE_BASE_HUMBLE_1_MD5='076c6784bb96e4189f675f114c98ae85' ARCHIVE_BASE_HUMBLE_1_VERSION='2.2.4.3141-humble180606' ARCHIVE_BASE_HUMBLE_1_SIZE='760000' ARCHIVE_BASE_HUMBLE_1_URL='https://www.humblebundle.com/store/sunless-sea' ARCHIVE_BASE_HUMBLE_0_NAME='Sunless_Sea_Setup_V2.2.2.3129_LINUX.zip' ARCHIVE_BASE_HUMBLE_0_MD5='bdb37932e56fd0655a2e4263631e2582' ARCHIVE_BASE_HUMBLE_0_VERSION='2.2.2.3129-humble170131' ARCHIVE_BASE_HUMBLE_0_SIZE='700000' UNITY3D_NAME='Sunless Sea' UNITY3D_PLUGINS=' ScreenSelector.so' CONTENT_PATH_DEFAULT_GOG='data/noarch/game' CONTENT_PATH_DEFAULT_HUMBLE='data/noarch' CONTENT_GAME_BIN64_PATH_HUMBLE='data/x86_64' CONTENT_GAME_BIN32_PATH_HUMBLE='data/x86' CONTENT_DOC_DATA_FILES=' README.linux' ## Application type can not be automatically guessed when using the Humble Bundle archive, because the game binary is not stored under CONTENT_PATH_DEFAULT. ## This application type is required to automatically generate the default files list for archive contents inclusion. APP_MAIN_TYPE_HUMBLE='native' PACKAGES_LIST=' PKG_BIN64 PKG_BIN32 PKG_DATA' PKG_BIN64_ARCH='64' PKG_BIN32_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libgcc_s.so.1 libgdk_pixbuf-2.0.so.0 libglib-2.0.so.0 libGL.so.1 libgobject-2.0.so.0 libgtk-x11-2.0.so.0 libm.so.6 libpthread.so.0 librt.so.1 libstdc++.so.6 libX11.so.6 libXcursor.so.1 libXrandr.so.2 libz.so.1' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_ID_GOG_ZUBMARINER="${PKG_DATA_ID}-zubmariner" PKG_DATA_PROVIDES=" $PKG_DATA_ID" PKG_DATA_DESCRIPTION='data' PKG_DATA_DESCRIPTION_GOG_ZUBMARINER="$PKG_DATA_DESCRIPTION (including Zubmariner DLC)" ## Ensure smooth upgrades from packages generated with pre-20231020.1 scripts. PKG_DATA_PROVIDES="${PKG_DATA_PROVIDES:-} sunless-sea-zubmariner-data" # Load common functions PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run the default initialization actions initialization_default "$@" # humblebundle.com - Check that tools required to handle the inner archive are available. case "$(current_archive)" in ('ARCHIVE_BASE_HUMBLE_'*) REQUIREMENTS_LIST="${REQUIREMENTS_LIST:-} $(archive_requirements_mojosetup_list)" requirements_check ;; esac # Extract game data archive_extraction_default case "$(current_archive)" in ('ARCHIVE_BASE_HUMBLE_'*) ARCHIVE_INNER_PATH="${PLAYIT_WORKDIR}/gamedata/Sunless Sea.sh" archive_extraction 'ARCHIVE_INNER' rm "$(archive_path 'ARCHIVE_INNER')" ;; esac ( cd "${PLAYIT_WORKDIR}/gamedata/$(content_path_default)" ## humblebundle.com - Some arch-specific files in the archive are stored in the arch-independent path. case "$(current_archive)" in ('ARCHIVE_BASE_HUMBLE_'*) cp --link --parents --recursive \ "$(unity3d_name)_Data/Mono/x86_64" \ "$(unity3d_name)_Data/Plugins/x86_64" \ "${PLAYIT_WORKDIR}/gamedata/$(content_path 'GAME_BIN64')" cp --link --parents --recursive \ "$(unity3d_name)_Data/Mono/x86" \ "$(unity3d_name)_Data/Plugins/x86" \ "${PLAYIT_WORKDIR}/gamedata/$(content_path 'GAME_BIN32')" rm --recursive \ "$(unity3d_name)_Data/Mono/x86_64" \ "$(unity3d_name)_Data/Mono/x86" \ "$(unity3d_name)_Data/Plugins/x86_64" \ "$(unity3d_name)_Data/Plugins/x86" rmdir "$(unity3d_name)_Data/Plugins" ;; esac ) # Include game data content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers launchers_generation 'PKG_BIN64' launchers_generation 'PKG_BIN32' # Build packages packages_generation print_instructions # Clean up working_directory_cleanup exit 0 games/play-superflu-riteurnz.sh0000755000000000000000000001350314471751340015707 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2023 Antoine Le Gonidec set -o errexit ### # Superflu Riteurnz # send your bug reports to vv221@dotslashplay.it ### script_version=20251222.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='superflu-riteurnz' GAME_NAME='Superflu Riteurnz' ARCHIVE_BASE_1_NAME='superfluous-returnz-1.6.0-d13-gnunux.tar.gz' ARCHIVE_BASE_1_MD5='bbefabb57d0525a6e219251db7937e50' ARCHIVE_BASE_1_SIZE='256197' ARCHIVE_BASE_1_VERSION='1.6.0-itch.2023.12.20' ARCHIVE_BASE_1_URL='https://ptilouk.itch.io/superfluous-returnz' ARCHIVE_BASE_0_NAME='superfluous-returnz-1.5.5-d12-gnunux.tar.gz' ARCHIVE_BASE_0_MD5='a147cebc30b9439321b5d6c8b8f04539' ARCHIVE_BASE_0_SIZE='353012' ARCHIVE_BASE_0_VERSION='1.5.5-itch.2023.11.22' ARCHIVE_BASE_MONOARCH_7_NAME='superfluous-returnz-1.5.5-d12-gnunux.tar.gz' ARCHIVE_BASE_MONOARCH_7_MD5='6410e666d262dc32b4a143e5670d1805' ARCHIVE_BASE_MONOARCH_7_SIZE='315764' ARCHIVE_BASE_MONOARCH_7_VERSION='1.5.5-itch.2023.10.09' ARCHIVE_BASE_MONOARCH_6_NAME='superfluous-returnz-1.5.4-d11-gnunux.tar.gz' ARCHIVE_BASE_MONOARCH_6_MD5='8f1f27107d8195b252a4a95be4e49961' ARCHIVE_BASE_MONOARCH_6_SIZE='315924' ARCHIVE_BASE_MONOARCH_6_VERSION='1.5.4-itch.2023.09.14' ARCHIVE_BASE_MONOARCH_5_NAME='superfluous-returnz-1.5.3-d10-gnunux.tar.gz' ARCHIVE_BASE_MONOARCH_5_MD5='bf0989ee6fc571c5dfb1546700630a9a' ARCHIVE_BASE_MONOARCH_5_SIZE='315888' ARCHIVE_BASE_MONOARCH_5_VERSION='1.5.3-itch1' ARCHIVE_BASE_MONOARCH_4_NAME='superfluous-returnz-1.5.2-d10-gnunux.tar.gz' ARCHIVE_BASE_MONOARCH_4_MD5='8b07a4ee3c36e12335bfdad784aefcdf' ARCHIVE_BASE_MONOARCH_4_SIZE='320000' ARCHIVE_BASE_MONOARCH_4_VERSION='1.5.2-itch1' ARCHIVE_BASE_MONOARCH_3_NAME='superfluous-returnz-1.5.1-d10-gnunux.tar.gz' ARCHIVE_BASE_MONOARCH_3_MD5='34ca505142784f66a30f1c0d387aa920' ARCHIVE_BASE_MONOARCH_3_SIZE='320000' ARCHIVE_BASE_MONOARCH_3_VERSION='1.5.1-itch.2023.06.14' ARCHIVE_BASE_MONOARCH_2_NAME='superfluous-returnz-1.5.0-d10-gnunux.tar.gz' ARCHIVE_BASE_MONOARCH_2_MD5='0a243baf9fcc7dbe83a18394eb87a37f' ARCHIVE_BASE_MONOARCH_2_SIZE='320000' ARCHIVE_BASE_MONOARCH_2_VERSION='1.5.0-itch.2023.06.08' ARCHIVE_BASE_MONOARCH_1_NAME='superfluous-returnz-1.4.2-d7-gnunux.tar.gz' ARCHIVE_BASE_MONOARCH_1_MD5='a2086175774ea0038e5ea0f952971560' ARCHIVE_BASE_MONOARCH_1_SIZE='310000' ARCHIVE_BASE_MONOARCH_1_VERSION='1.4.2-itch.2023.05.16' ARCHIVE_BASE_MONOARCH_0_NAME='superfluous-returnz-1.4.1-d6-gnunux.tar.gz' ARCHIVE_BASE_MONOARCH_0_MD5='93a5592d1d10f4a73047ec46d4cc966b' ARCHIVE_BASE_MONOARCH_0_SIZE='310000' ARCHIVE_BASE_MONOARCH_0_VERSION='1.4.1-itch.2023.05.15' CONTENT_PATH_DEFAULT_1='superfluous-returnz-1.6.0-d13' CONTENT_PATH_DEFAULT_0='superfluous-returnz-1.5.5-d12' CONTENT_PATH_DEFAULT_MONOARCH_7='superfluous-returnz-1.5.5-d12' CONTENT_PATH_DEFAULT_MONOARCH_6='superfluous-returnz-1.5.4-d11' CONTENT_PATH_DEFAULT_MONOARCH_5='superfluous-returnz-1.5.3-d10' CONTENT_PATH_DEFAULT_MONOARCH_4='superfluous-returnz-1.5.2-d10' CONTENT_PATH_DEFAULT_MONOARCH_3='superfluous-returnz-1.5.1-d10' CONTENT_PATH_DEFAULT_MONOARCH_2='superfluous-returnz-1.5.0-d10' CONTENT_PATH_DEFAULT_MONOARCH_1='superfluous-returnz-1.4.2-d7' CONTENT_PATH_DEFAULT_MONOARCH_0='superfluous-returnz-1.4.1-d6' CONTENT_GAME_BIN_FILES=' bin64/superfluous-returnz' CONTENT_GAME_BIN_FILES_MONOARCH=' bin/superfluous-returnz' CONTENT_GAME_DATA_FILES=' share/superfluous-returnz/*.data' CONTENT_DOC_DATA_FILES=' LICENSE.md' APP_MAIN_EXE='bin64/superfluous-returnz' APP_MAIN_EXE_MONOARCH='bin/superfluous-returnz' APP_MAIN_ICON='share/icons/superfluous-returnz.svg' APP_MAIN_ICON_0='share/icons/hicolor/scalable/apps/superfluous-returnz.svg' APP_MAIN_ICON_MONOARCH='share/icons/hicolor/scalable/apps/superfluous-returnz.svg' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libgcc_s.so.1 liblz4.so.1 libm.so.6 libpthread.so.0 libSDL2-2.0.so.0 libSDL2_ttf-2.0.so.0 libstdc++.so.6 libyaml-0.so.2' ## libSDL2_image-2.0.so.0 is required by < 1.6 game builds. PKG_BIN_DEPENDENCIES_LIBRARIES_PRE16=' libc.so.6 libgcc_s.so.1 liblz4.so.1 libm.so.6 libpthread.so.0 libSDL2-2.0.so.0 libSDL2_image-2.0.so.0 libSDL2_ttf-2.0.so.0 libstdc++.so.6 libyaml-0.so.2' PKG_BIN_DEPENDENCIES_LIBRARIES_0="$PKG_BIN_DEPENDENCIES_LIBRARIES_PRE16" PKG_BIN_DEPENDENCIES_LIBRARIES_MONOARCH="$PKG_BIN_DEPENDENCIES_LIBRARIES_PRE16" PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-synergy.sh0000755000000000000000000000603314471751340013662 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2025 Antoine Le Gonidec set -o errexit ### # Synergy # send your bug reports to vv221@dotslashplay.it ### script_version=20260315.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='synergy' GAME_NAME='Synergy' ARCHIVE_BASE_1_NAME='setup_synergy_2510031634_(64bit)_(85527).exe' ARCHIVE_BASE_1_MD5='1efae7076534977aac8721a93e462cba' ARCHIVE_BASE_1_TYPE='innosetup' ARCHIVE_BASE_1_SIZE='4109111' ARCHIVE_BASE_1_VERSION='1.2.2510031634-gog85527' ARCHIVE_BASE_1_URL='https://www.gog.com/game/synergy' ARCHIVE_BASE_0_NAME='setup_synergy_2508200455_(64bit)_(84460).exe' ARCHIVE_BASE_0_MD5='2ec9168f2b0dfe15d020892c43368a03' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_SIZE='4106911' ARCHIVE_BASE_0_VERSION='1.2.2508200455-gog84460' UNITY3D_NAME='Synergy' # TODO: Experimental support for Windows Unity3D plugins, # no support in ./play.it library yet. # (./play.it 2.35) # Prevent a loading freeze after the introduction logos. UNITY3D_PLUGINS=' fmodstudio.dll' CONTENT_PATH_DEFAULT='.' # synergy.exe requirements CONTENT_LIBS_BIN_FILES=' UnityPlayer.dll' # Prevent a fatal error on launch. CONTENT_LIBS0_BIN_FILES=' MonoBleedingEdge/EmbedRuntime/mono-2.0-bdwgc.dll' WINE_PERSISTENT_DIRECTORIES=' users/${USER}/AppData/LocalLow/Leikir Studio/Synergy' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' # Include Unity3D plugins. unity3d_plugins_inclusion 'PKG_BIN' "$(unity3d_name)_Data/Plugins/x86_64" "$(path_libraries)/$(unity3d_name)_Data/Plugins" # Prevent inclusion of unwanted shipped libraries. content_inclusion_default_libraries 'PKG_BIN' rm --recursive "$(path_archive_contents)/MonoBleedingEdge/EmbedRuntime" content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --symbolic "$dll_source" "$dll_destination" done EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-the-settlers-2.sh0000755000000000000000000001444214471751340014747 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2015 Antoine Le Gonidec set -o errexit ### # The Settlers 2 # send your bug reports to vv221@dotslashplay.it ### script_version=20250828.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='the-settlers-2' GAME_NAME='The Settlers Ⅱ' # Archives ## German version ARCHIVE_BASE_DE_1_NAME='setup_the_settlers_2_gold_1.5.1_(german)_(30319).exe' ARCHIVE_BASE_DE_1_MD5='c360aaabd05e99b0f0752e52dd105107' ARCHIVE_BASE_DE_1_TYPE='innosetup' ARCHIVE_BASE_DE_1_SIZE='358538' ARCHIVE_BASE_DE_1_VERSION='1.5.1-gog30319' ARCHIVE_BASE_DE_1_URL='https://www.gog.com/game/the_settlers_2_gold_edition' ARCHIVE_BASE_DE_0_NAME='setup_settlers2_gold_german_2.1.0.17.exe' ARCHIVE_BASE_DE_0_MD5='f87a8fded6de455af4e6a284b3c4ed5e' ARCHIVE_BASE_DE_0_TYPE='innosetup' ARCHIVE_BASE_DE_0_SIZE='370000' ARCHIVE_BASE_DE_0_VERSION='1.5.1-gog2.1.0.17' ## English version ARCHIVE_BASE_EN_1_NAME='setup_the_settlers_2_gold_1.5.1_(30319).exe' ARCHIVE_BASE_EN_1_MD5='8381240ee580a298798b6afe863bac52' ARCHIVE_BASE_EN_1_TYPE='innosetup' ARCHIVE_BASE_EN_1_SIZE='359765' ARCHIVE_BASE_EN_1_VERSION='1.5.1-gog30319' ARCHIVE_BASE_EN_1_URL='https://www.gog.com/game/the_settlers_2_gold_edition' ARCHIVE_BASE_EN_0_NAME='setup_settlers2_gold_2.0.0.14.exe' ARCHIVE_BASE_EN_0_MD5='6f64b47b15f6ba5d43670504dd0bb229' ARCHIVE_BASE_EN_0_TYPE='innosetup' ARCHIVE_BASE_EN_0_SIZE='370000' ARCHIVE_BASE_EN_0_VERSION='1.5.1-gog2.0.0.14' ## French version ARCHIVE_BASE_FR_1_NAME='setup_the_settlers_2_gold_1.5.1_(french)_(30319).exe' ARCHIVE_BASE_FR_1_MD5='55a9d15f1260de5e711ea649120ece50' ARCHIVE_BASE_FR_1_TYPE='innosetup' ARCHIVE_BASE_FR_1_SIZE='395295' ARCHIVE_BASE_FR_1_VERSION='1.5.1-gog30319' ARCHIVE_BASE_FR_1_URL='https://www.gog.com/game/the_settlers_2_gold_edition' ARCHIVE_BASE_FR_0_NAME='setup_settlers2_gold_french_2.1.0.16.exe' ARCHIVE_BASE_FR_0_MD5='1eca72ca45d63e4390590d495657d213' ARCHIVE_BASE_FR_0_TYPE='innosetup' ARCHIVE_BASE_FR_0_SIZE='410000' ARCHIVE_BASE_FR_0_VERSION='1.5.1-gog2.1.0.16' CONTENT_PATH_DEFAULT='.' CONTENT_PATH_DEFAULT_DE_0='app' CONTENT_PATH_DEFAULT_EN_0='app' CONTENT_PATH_DEFAULT_FR_0='app' CONTENT_GAME_COMMON_FILES=' DOS4GW.EXE SETTLER2.VMC SETTLERS2.GOG SETTLERS2.INS DATA/*.DAT DATA/EDITRES.IDX DATA/ANIMDAT DATA/BOBS DATA/CBOB DATA/IO/*.DAT DATA/IO/*.FNT DATA/*.LST DATA/MASKS DATA/MBOB DATA/MISSIONS/MIS_00*.RTX DATA/MISSIONS/MIS_10*.RTX DATA/SOUNDDAT/SNG DATA/SOUNDDAT/SOUND.LST DATA/TEXTURES DRIVERS/*.AD DRIVERS/*.DIG DRIVERS/DIG.INI DRIVERS/*.EXE DRIVERS/*.LST DRIVERS/*.MDI DRIVERS/*.OPL GFX/PALETTE GFX/PICS2 GFX/PICS/INSTALL.LBM GFX/PICS/MISSION GFX/PICS/SETUP013.LBM GFX/PICS/SETUP015.LBM GFX/PICS/SETUP666.LBM GFX/PICS/SETUP667.LBM GFX/PICS/SETUP801.LBM GFX/PICS/SETUP802.LBM GFX/PICS/SETUP803.LBM GFX/PICS/SETUP804.LBM GFX/PICS/SETUP805.LBM GFX/PICS/SETUP806.LBM GFX/PICS/SETUP810.LBM GFX/PICS/SETUP811.LBM GFX/PICS/SETUP895.LBM GFX/PICS/SETUP896.LBM GFX/PICS/SETUP899.LBM GFX/PICS/SETUP990.LBM GFX/PICS/WORLD.LBM GFX/PICS/WORLDMSK.LBM GFX/TEXTURES VIDEO/SMACKPLY.EXE' CONTENT_GAME_MAIN_FILES=' DATA/RESOURCE.IDX DATA/IO/*.IDX DATA/MAPS* DATA/MISSIONS/MIS_0100.RTX DATA/ONLINE DATA/TXT* DRIVERS/MDI.INI GFX/PICS/SETUP000.LBM GFX/PICS/SETUP010.LBM GFX/PICS/SETUP011.LBM GFX/PICS/SETUP012.LBM GFX/PICS/SETUP014.LBM GFX/PICS/SETUP897.LBM GFX/PICS/SETUP898.LBM GFX/PICS/SETUP900.LBM GFX/PICS/SETUP901.LBM GFX/PICS/SETUP996.LBM GFX/PICS/SETUP997.LBM GFX/PICS/SETUP998.LBM SAVE/MISSION.DAT VIDEO/*.SMK *.EXE *.INI *.SCR' CONTENT_GAME0_MAIN_RELATIVE_PATH='__SUPPORT/SAVE' CONTENT_GAME0_MAIN_FILES=' SAVE/MISSION.DAT' CONTENT_DOC_MAIN_FILES=' EULA *.TXT' USER_PERSISTENT_FILES=' SETUP.INI' USER_PERSISTENT_DIRECTORIES=' DATA GFX SAVE WORLDS' DOSBOX_DISK_IMAGE_PATH='SETTLERS2.INS' APP_MAIN_EXE='S2.EXE' APP_MAIN_ICON='APP/GOGGAME-1207658786.ICO' ## Play the intro movie before starting the game. APP_MAIN_DOSBOX_PRERUN=' @VIDEO\SMACKPLY VIDEO\INTRO.SMK' APP_EDITOR_ID="${GAME_ID}-editor" APP_EDITOR_EXE='S2EDIT.EXE' APP_EDITOR_NAME="$GAME_NAME - Editor" APP_EDITOR_ICON="$APP_MAIN_ICON" APP_SETUP_ID="${GAME_ID}-setup" APP_SETUP_EXE='SETUP.EXE' APP_SETUP_NAME="$GAME_NAME - Setup" APP_SETUP_CAT='Settings' APP_SETUP_ICON="$APP_MAIN_ICON" PACKAGES_LIST=' PKG_COMMON PKG_MAIN' PKG_COMMON_ID="${GAME_ID}-common" PKG_COMMON_DESCRIPTION='common data' PKG_MAIN_ID="$GAME_ID" PKG_MAIN_ID_DE="${GAME_ID}-de" PKG_MAIN_ID_EN="${GAME_ID}-en" PKG_MAIN_ID_FR="${GAME_ID}-fr" PKG_MAIN_PROVIDES=" $PKG_MAIN_ID" PKG_MAIN_DESCRIPTION_DE='German version' PKG_MAIN_DESCRIPTION_EN='English version' PKG_MAIN_DESCRIPTION_FR='French version' PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_COMMON' ## convmv is used to convert file paths to upper case. REQUIREMENTS_LIST=' convmv' # Load common functions PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run the default initialization actions initialization_default "$@" # Extract game data archive_extraction_default ( cd "${PLAYIT_WORKDIR}/gamedata/$(content_path_default)" ## Convert all file paths to uppercase. toupper . ## Enforce consistent name for the disk image table of content. if [ -e 'SETTLERS2.INST' ]; then mv 'SETTLERS2.INST' "$(dosbox_disk_image_path)" fi ## Ensure case consistency in disk image table of contents. sed_pattern='settlers2.gog' sed_replacement='SETTLERS2.GOG' sed_expression="s/${sed_pattern}/${sed_replacement}/i" sed --in-place --expression="$sed_expression" "$(dosbox_disk_image_path)" ## Enforce icon name and path. for icon_path in \ 'GOGGAME-1207658786.ICO' \ 'GFW_HIGH.ICO' do if [ -e "$icon_path" ]; then mkdir --parents 'APP' mv "$icon_path" "$(icon_path 'APP_MAIN_ICON')" fi done ) # Include game data content_inclusion_icons 'PKG_COMMON' content_inclusion_default # Write launchers launchers_generation 'PKG_MAIN' # Build packages packages_generation print_instructions # Clean up working_directory_cleanup exit 0 games/play-the-witcher-1.sh0000755000000000000000000002062414471751340014545 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: BSD-2-Clause # SPDX-FileCopyrightText: © 2015 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2019 BetaRays set -o errexit ### # The Witcher # send your bug reports to vv221@dotslashplay.it ### script_version=20260330.7 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='the-witcher-1' GAME_NAME='The Witcher' ARCHIVE_BASE_3_NAME='setup_the_witcher_enhanced_edition_directors_cut_1.5_(cs)_gog_0.2_(77554).exe' ARCHIVE_BASE_3_MD5=' 5b6f7dd2247e5fbb1d0049dcc5de6b63 97cffb60d12f41bf03c84165a79a9157 3d8467c76abe8cd16711ada268e1600f' ARCHIVE_BASE_3_TYPE='innosetup' ARCHIVE_BASE_3_PART1_NAME='setup_the_witcher_enhanced_edition_directors_cut_1.5_(cs)_gog_0.2_(77554)-1.bin' ARCHIVE_BASE_3_PART1_MD5=' 8d242faffa4b3b8dc09ff8697401ece3 12107f584732052c4e11e09657df655a 149adafe38e79c246103e664613558c7' ARCHIVE_BASE_3_PART2_NAME='setup_the_witcher_enhanced_edition_directors_cut_1.5_(cs)_gog_0.2_(77554)-2.bin' ARCHIVE_BASE_3_PART2_MD5=' 869b510afebbd14e208a5252392662c7 ee77b189cf42bde0e89ea86c071b830e baa94a6d83dc3a4703d8c414b4442ce5' ARCHIVE_BASE_3_PART3_NAME='setup_the_witcher_enhanced_edition_directors_cut_1.5_(cs)_gog_0.2_(77554)-3.bin' ARCHIVE_BASE_3_PART3_MD5=' d9fc78540f616d0deb1fe83a91032138 b5fd3359b7129903a13baf731496f0c7 5b74090cd3314dd0db1849c0dce5aa84' ARCHIVE_BASE_3_SIZE='14785291' ARCHIVE_BASE_3_VERSION='1.5.726-gog77554' ARCHIVE_BASE_3_URL='https://www.gog.com/game/the_witcher' ARCHIVE_BASE_0_NAME='setup_the_witcher_enhanced_edition_1.5_(a)_(10712).exe' ARCHIVE_BASE_0_MD5='2440cfb5fb4890ff4b9bc4b88b434d38' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_PART1_NAME='setup_the_witcher_enhanced_edition_1.5_(a)_(10712)-1.bin' ARCHIVE_BASE_0_PART1_MD5='e530a1a2e86094740b45a14f63260804' ARCHIVE_BASE_0_PART2_NAME='setup_the_witcher_enhanced_edition_1.5_(a)_(10712)-2.bin' ARCHIVE_BASE_0_PART2_MD5='fb3a478bcb6e4702e1e8d392cb55391d' ARCHIVE_BASE_0_PART3_NAME='setup_the_witcher_enhanced_edition_1.5_(a)_(10712)-3.bin' ARCHIVE_BASE_0_PART3_MD5='2df8369af401815a736f5d88f85fbf8d' ARCHIVE_BASE_0_SIZE='15000000' ARCHIVE_BASE_0_VERSION='1.5.726-gog10712' ARCHIVE_BASE_0_URL='https://www.gog.com/game/the_witcher' CONTENT_PATH_DEFAULT='.' CONTENT_PATH_DEFAULT_0='app' CONTENT_GAME_BIN_FILES=' System/witcher.exe System/witcher.ini' # witcher.exe requirements CONTENT_LIBS_BIN_FILES=' System/binkw32.dll System/mss32.dll System/CommonLibs.dll' CONTENT_GAME0_BIN_FILES=' System/Miles System/Scripts' CONTENT_GAME_L10N_VOICES_PL_FILES=' Data/voices/M?_5_00.bif Data/voices_5_00.bif' CONTENT_GAME_L10N_VOICES_FR_FILES=' Data/voices/M?_11_00.bif Data/voices_11_00.bif' CONTENT_GAME_L10N_VOICES_EN_FILES=' Data/voices/M?_3_00.bif Data/voices_3_00.bif' CONTENT_GAME_DATA_FILES=' Data/Cutscenes Data/Dialogues Data/Meshes Data/modules Data/Movies Data/Music Data/Scripts Data/Templates Data/attackeffects.2da Data/languages.2da Data/2da00.bif Data/cutscenes00.bif Data/dialogues00.bif Data/fx00.bif Data/items00.bif Data/legacy00.bif Data/localized00.bif Data/materials00.bif Data/meshes00.bif Data/mg_poker00.bif Data/music00.bif Data/physics00.bif Data/quests00.bif Data/scripts00.bif Data/sounds00.bif Data/templates00.bif Data/textures00.bif Data/textures01.bif Data/trees00.bif Data/*.bik Data/*.key Data/*.tlk' # These files are required for text display. CONTENT_GAME0_DATA_FILES=' System/__cache/*.fontcache' CONTENT_DOC_DATA_FILES=' manual.pdf readme.rtf release.txt' # "Enhanced Edition" add-ons CONTENT_ADDONS_RELATIVE_PATH='__support/add/The Witcher' CONTENT_ADDONS_FILES=' *.adv' WINE_PERSISTENT_DIRECTORIES=' users/${USER}/Documents/The Witcher' WINE_REGEDIT_PERSISTENT_KEYS=' HKEY_CURRENT_USER\Software\CD Projekt RED\Witcher\Bindings HKEY_CURRENT_USER\Software\CD Projekt RED\Witcher\Settings' install_folder="C:\\\\${GAME_ID}\\\\" WINE_REGISTRY_INIT=' [HKEY_LOCAL_MACHINE\Software\CD Projekt Red\The Witcher] "InstallFolder"="'"${install_folder}"'" "IsDjinniInstalled"=dword:00000000 "Language"="3" "RegionVersion"="WE" ' WINE_REGISTRY_INIT_L10N_VOICES_PL="${WINE_REGISTRY_INIT}"' [HKEY_CURRENT_USER\Software\CD Projekt RED\Witcher\Settings] "VoiceLanguage"="5" ' WINE_REGISTRY_INIT_L10N_VOICES_FR="${WINE_REGISTRY_INIT}"' [HKEY_CURRENT_USER\Software\CD Projekt RED\Witcher\Settings] "VoiceLanguage"="11" ' WINE_REGISTRY_INIT_L10N_VOICES_EN="${WINE_REGISTRY_INIT}"' [HKEY_CURRENT_USER\Software\CD Projekt RED\Witcher\Settings] "VoiceLanguage"="3" ' # Work around texture display problems. # A visible symptom in early game is lightning shifts based on distance, # with far objects showing too much light until the player gets close enough. # cf. https://bugs.winehq.org/show_bug.cgi?id=46553 # (WINE 11.5) WINE_WINETRICKS_VERBS='d3dx9_35' APP_MAIN_EXE='System/witcher.exe' PACKAGES_LIST=' PKG_BIN PKG_L10N_VOICES_PL PKG_L10N_VOICES_FR PKG_L10N_VOICES_EN PKG_DATA PKG_ADDONS' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_L10N_VOICES PKG_DATA' PKG_L10N_VOICES_ID="${GAME_ID}-l10n-voices" PKG_L10N_VOICES_PL_ID="${PKG_L10N_VOICES_ID}-pl" PKG_L10N_VOICES_FR_ID="${PKG_L10N_VOICES_ID}-fr" PKG_L10N_VOICES_EN_ID="${PKG_L10N_VOICES_ID}-en" PKG_L10N_VOICES_PROVIDES=" $PKG_L10N_VOICES_ID" PKG_L10N_VOICES_PL_PROVIDES="$PKG_L10N_VOICES_PROVIDES" PKG_L10N_VOICES_FR_PROVIDES="$PKG_L10N_VOICES_PROVIDES" PKG_L10N_VOICES_EN_PROVIDES="$PKG_L10N_VOICES_PROVIDES" PKG_L10N_VOICES_PL_DESCRIPTION='Polish voices' PKG_L10N_VOICES_FR_DESCRIPTION='French voices' PKG_L10N_VOICES_EN_DESCRIPTION='English voices' # Easier upgrades from pre-20260329.3 packages PKG_L10N_VOICES_PROVIDES="${PKG_L10N_VOICES_PROVIDES} the-witcher-1-voices the-witcher-1-data-voices" PKG_L10N_VOICES_PL_PROVIDES="$PKG_L10N_VOICES_PROVIDES" PKG_L10N_VOICES_FR_PROVIDES="$PKG_L10N_VOICES_PROVIDES" PKG_L10N_VOICES_EN_PROVIDES="$PKG_L10N_VOICES_PROVIDES" PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' PKG_ADDONS_ID="${GAME_ID}-addons" PKG_ADDONS_DESCRIPTION='Enhanced Edition add-ons' PKG_ADDONS_DEPENDENCIES_SIBLINGS=' PKG_BIN' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' # Include "Enhanced Edition" add-ons. content_inclusion 'ADDONS' 'PKG_ADDONS' "$(path_game_data)/addons" content_inclusion_default # Write launchers. # Set voices localisation on first launch. for package in \ 'PKG_L10N_VOICES_PL' \ 'PKG_L10N_VOICES_FR' \ 'PKG_L10N_VOICES_EN' do ( set_current_package "$package" # shellcheck disable=SC2218 wine_registry_script_write "$package" ) done wine_registry_script_write() { return 0; } # Custom WINEPREFIX actions: # - Install shipped libraries. # - Include "Enhanced Edition" add-ons. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --force --symbolic "$dll_source" "$dll_destination" done EOF cat <<- 'EOF' # Include "Enhanced Edition" add-ons. if [ -e "${PATH_GAME_DATA}/addons" ]; then install -D --mode=644 \ --target-directory="${WINEPREFIX}/drive_c/users/Public/Documents/The Witcher" \ "${PATH_GAME_DATA}/addons"/*.adv fi EOF } launchers_generation # Build packages. packages_generation case "$(messages_language)" in ('fr') lang_string='voix %s :' lang_pl='polonaises' lang_fr='françaises' lang_en='anglaises' ;; ('en'|*) lang_string='%s voices:' lang_pl='Polish' lang_fr='French' lang_en='English' ;; esac printf '\n' printf "$lang_string" "$lang_pl" print_instructions 'PKG_BIN' 'PKG_DATA' 'PKG_ADDONS' 'PKG_L10N_VOICES_PL' printf "$lang_string" "$lang_fr" print_instructions 'PKG_BIN' 'PKG_DATA' 'PKG_ADDONS' 'PKG_L10N_VOICES_FR' printf "$lang_string" "$lang_en" print_instructions 'PKG_BIN' 'PKG_DATA' 'PKG_ADDONS' 'PKG_L10N_VOICES_EN' # Clean up. working_directory_cleanup exit 0 games/play-titan-quest-expansions.sh0000755000000000000000000000561514471751340016632 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2023 Antoine Le Gonidec set -o errexit ### # Titan Quest expansions: # - Ragnarök # - Atlantis # send your bug reports to vv221@dotslashplay.it ### script_version=20260324.2 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='titan-quest' GAME_NAME='Titan Quest' EXPANSION_ID_RAGNAROK='ragnarok' EXPANSION_NAME_RAGNAROK='Ragnarök' EXPANSION_ID_ATLANTIS='atlantis' EXPANSION_NAME_ATLANTIS='Atlantis' # Ragnarök ARCHIVE_BASE_RAGNAROK_0_NAME='setup_titan_quest_ragnarok_2.10.6_(59562).exe' ARCHIVE_BASE_RAGNAROK_0_MD5='cb8f5a3f5567d9f84ad3add23347ad07' ARCHIVE_BASE_RAGNAROK_0_TYPE='innosetup' ARCHIVE_BASE_RAGNAROK_0_PART1_NAME='setup_titan_quest_ragnarok_2.10.6_(59562)-1.bin' ARCHIVE_BASE_RAGNAROK_0_PART1_MD5='e4a5d3bb1264c1a3881e2263cd3d6af3' ARCHIVE_BASE_RAGNAROK_0_SIZE='2553284' ARCHIVE_BASE_RAGNAROK_0_VERSION='2.10.6-gog59562' ARCHIVE_BASE_RAGNAROK_0_URL='https://www.gog.com/game/titan_quest_ragnarok' # Atlantis ARCHIVE_BASE_ATLANTIS_0_NAME='setup_titan_quest_atlantis_2.10.6_(59562).exe' ARCHIVE_BASE_ATLANTIS_0_MD5='6924de3dc1dd15eec6f1e4e6d465f33c' ARCHIVE_BASE_ATLANTIS_0_TYPE='innosetup' ARCHIVE_BASE_ATLANTIS_0_PART1_NAME='setup_titan_quest_atlantis_2.10.6_(59562)-1.bin' ARCHIVE_BASE_ATLANTIS_0_PART1_MD5='2ad964c3cf35c13a0e05b7680b62d718' ARCHIVE_BASE_ATLANTIS_0_SIZE='2265041' ARCHIVE_BASE_ATLANTIS_0_VERSION='2.10.6-gog59562' ARCHIVE_BASE_ATLANTIS_0_URL='https://www.gog.com/game/titan_quest_atlantis' CONTENT_PATH_DEFAULT='.' CONTENT_GAME_MAIN_FILES_RAGNAROK=' resources/quests.arc resources/xpack2/dialog.arc resources/xpack2/dialog_de.arc resources/xpack2/dialog_fr.arc resources/xpack2/dialog_ru.arc resources/xpack2/menu.arc resources/xpack2/quests.arc' CONTENT_GAME_MAIN_FILES_ATLANTIS=' resources/xpack3/dialog.arc resources/xpack3/dialog_de.arc resources/xpack3/dialog_fr.arc resources/xpack3/dialog_ru.arc resources/xpack3/menu.arc resources/xpack3/quests.arc resources/xpack3/system.arc' CONTENT_GAME0_MAIN_FILES=' goggame-*.info' PKG_PARENT_ID="$GAME_ID" PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_PARENT' PKG_MAIN_PROVIDES_RAGNAROK=" ${GAME_ID}-data-xpack2" # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_default # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-titan-quest.sh0000755000000000000000000001042314471751340014436 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2022 Antoine Le Gonidec set -o errexit ### # Titan Quest # send your bug reports to vv221@dotslashplay.it ### script_version=20260324.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='titan-quest' GAME_NAME='Titan Quest' ARCHIVE_BASE_0_NAME='setup_titan_quest_-_anniversary_edition_2.10.6_(59562).exe' ARCHIVE_BASE_0_MD5='a8b9399e2f968ca819c7138ff2ce5ab1' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_PART1_NAME='setup_titan_quest_-_anniversary_edition_2.10.6_(59562)-1.bin' ARCHIVE_BASE_0_PART1_MD5='7164d6f1cf600aaa17101b4a263d4a70' ARCHIVE_BASE_0_PART2_NAME='setup_titan_quest_-_anniversary_edition_2.10.6_(59562)-2.bin' ARCHIVE_BASE_0_PART2_MD5='b8b5821c04bfed43068e02b5a1431511' ARCHIVE_BASE_0_PART3_NAME='setup_titan_quest_-_anniversary_edition_2.10.6_(59562)-3.bin' ARCHIVE_BASE_0_PART3_MD5='bb6bcb03b2ef688ef57d46d12d4b1233' ARCHIVE_BASE_0_PART4_NAME='setup_titan_quest_-_anniversary_edition_2.10.6_(59562)-4.bin' ARCHIVE_BASE_0_PART4_MD5='2a61ebe44e9424cdbad29f14e072c743' ARCHIVE_BASE_0_SIZE='13753628' ARCHIVE_BASE_0_VERSION='2.10.21415-gog59562' ARCHIVE_BASE_0_URL='https://www.gog.com/game/titan_quest_anniversary_edition' CONTENT_PATH_DEFAULT='.' CONTENT_GAME_BIN_FILES=' TQ.exe' # tq.exe requirements CONTENT_LIBS_BIN_FILES=' libcurl.dll THQGDSCore.dll thqno_api.dll NatLib.dll Engine.dll Game.dll' # Engine.dll reqirements CONTENT_LIBS0_BIN_FILES=' DevIL.dll mss32.dll binkw32.dll' # TODO: Check if all the following binaries are required. CONTENT_GAME0_BIN_FILES=' MilesRedist Settings MaxPlugins.dlo AifEditor.exe AnimationCompiler.exe ArchiveTool.exe ArtManager.exe BitmapCreator.exe Editor.exe FBXExporter.exe FontCompiler.exe MapCompiler.exe ModelCompiler.exe PSEditor.exe QuestEditor.exe ResourceTree.exe ShaderCompiler.exe SourceServer.exe TextureCompiler.exe Viewer.exe' # The game crashes on launch if the following library is missing. CONTENT_LIBS1_BIN_FILES=' THQNOnline/gog/galaxy.dll' # The intro videos does not play if Direct3D11.dll is missing, # the game stays stuck on a black screen instead. CONTENT_LIBS2_BIN_FILES=' Direct3D11.dll' # Direct3D11.dll requirements CONTENT_LIBS3_BIN_FILES=' GFSDK_SSAO_D3D11.win32.dll' CONTENT_GAME_DATA_XPACK2_FILES=' Resources/Quests.arc' CONTENT_GAME_DATA_RESOURCES_FILES=' Resources' CONTENT_GAME_DATA_FILES=' Audio Database Text Toolset Videos thqnocfg.dat' WINE_PERSISTENT_DIRECTORIES=' users/${USER}/Documents/My Games/Titan Quest - Immortal Throne' APP_MAIN_EXE='TQ.exe' APP_MAIN_OPTIONS='/dx11' PACKAGES_LIST=' PKG_BIN PKG_DATA_XPACK2 PKG_DATA_RESOURCES PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' PKG_DATA_DEPENDENCIES_SIBLINGS=' PKG_DATA_XPACK2 PKG_DATA_RESOURCES' PKG_DATA_XPACK2_ID="${PKG_DATA_ID}-xpack2" PKG_DATA_XPACK2_DESCRIPTION='resources shared between the base game and the Raganarök expansion' PKG_DATA_RESOURCES_ID="${PKG_DATA_ID}-resources" PKG_DATA_RESOURCES_DESCRIPTION="$PKG_DATA_DESCRIPTION - resources" # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --symbolic "$dll_source" "$dll_destination" done EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-tomb-raider-2.sh0000755000000000000000000000654214471751340014533 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2021 Antoine Le Gonidec set -o errexit ### # Tomb Raider 2 # send your bug reports to vv221@dotslashplay.it ### script_version=20260321.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='tomb-raider-2' GAME_NAME='Tomb Raider II' ARCHIVE_BASE_FR_0_NAME='setup_tomb_raider_2_french_20180108_(17720).exe' ARCHIVE_BASE_FR_0_MD5='12ebe01ec7b4366862af31b860097f14' ARCHIVE_BASE_FR_0_TYPE='innosetup' ARCHIVE_BASE_FR_0_VERSION='1.1-gog17720' ARCHIVE_BASE_FR_0_SIZE='410000' ARCHIVE_BASE_FR_0_URL='https://www.gog.com/game/tomb_raider_123' ARCHIVE_BASE_EN_0_NAME='setup_tomb_raider_2_20180108_(17720).exe' ARCHIVE_BASE_EN_0_MD5='858aa88bf7654a8fb7b7f8070cf1021b' ARCHIVE_BASE_EN_0_TYPE='innosetup' ARCHIVE_BASE_EN_0_VERSION='1.1-gog17720' ARCHIVE_BASE_EN_0_SIZE='340000' ARCHIVE_BASE_EN_0_URL='https://www.gog.com/game/tomb_raider_123' CONTENT_PATH_DEFAULT='app' CONTENT_GAME_BIN_FILES=' Tomb2.exe' # Tomb2.exe requirements CONTENT_LIBS_BIN_FILES=' WINPLAY.DLL' # WINPLAY.DLL requirements CONTENT_LIBS0_BIN_FILES=' WINSTR.DLL' # WINSTR.DLL requirements CONTENT_LIBS1_BIN_FILES=' Dec130.dll Edec.dll WINSDEC.DLL' CONTENT_GAME_L10N_FILES=' audio/cdaudio.dat audio/cdaudio.mp3 data/tombpc.dat data/*.PCX' # The following files are not included in the French build. # TODO: Check if these files are required. CONTENT_GAME0_L10N_FILES_EN=' data/lang.dat data/language.dat data/os.dat' CONTENT_GAME_DATA_FILES=' fmv tombpc.dat data/MAIN.SFX data/*.TR2' CONTENT_DOC_L10N_FILES=' manual.pdf readme.txt' CONTENT_DOC0_L10N_FILES_FR=' Tomb Raider II_PC EULA French.doc' CONTENT_DOC0_L10N_FILES_EN=' Tomb Raider II_PC EULA English.docx' USER_PERSISTENT_FILES=' savegame.*' APP_MAIN_EXE='Tomb2.exe' APP_SETUP_ID="${GAME_ID}-setup" APP_SETUP_NAME="$GAME_NAME - setup" APP_SETUP_CAT='Settings' APP_SETUP_EXE='Tomb2.exe' APP_SETUP_OPTIONS='-setup' PACKAGES_LIST=' PKG_BIN PKG_L10N PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_L10N_BASE PKG_DATA' PKG_BIN_DEPENDENCIES_GSTREAMER_PLUGINS=' application/x-id3' PKG_L10N_BASE_ID="${GAME_ID}-l10n" PKG_L10N_ID_EN="${PKG_L10N_BASE_ID}-en" PKG_L10N_ID_FR="${PKG_L10N_BASE_ID}-fr" PKG_L10N_PROVIDES=" $PKG_L10N_BASE_ID" PKG_L10N_DESCRIPTION_FR='French localisation' PKG_L10N_DESCRIPTION_EN='English localisation' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. ln --force --symbolic $(path_libraries)/* "\${PATH_PREFIX}" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-tomb-raider-remastered.sh0000755000000000000000000001125314471751340016520 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2019 Antoine Le Gonidec set -o errexit ### # Tomb Raider Remastered: # - Tomb Raider # - Tomb Raider 2 # - Tomb Raider 3 # send your bug reports to vv221@dotslashplay.it ### script_version=20260413.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='tomb-raider-remastered-1-2-3' GAME_NAME='Tomb Raider I-III Remastered' # WARNING: This build of the game seems to include AI-regurgitated content. ARCHIVE_BASE_3_NAME='setup_tomb_raider_i-iii_remastered_starring_lara_croft_1.1.1_(64bit)_(89708).exe' ARCHIVE_BASE_3_MD5='2ebf80db873be9840c044be14b7ac533' ARCHIVE_BASE_3_TYPE='innosetup' ARCHIVE_BASE_3_PART1_NAME='setup_tomb_raider_i-iii_remastered_starring_lara_croft_1.1.1_(64bit)_(89708)-1.bin' ARCHIVE_BASE_3_PART1_MD5='9ebe08c1db65847350ec2fbee6738d09' ARCHIVE_BASE_3_PART2_NAME='setup_tomb_raider_i-iii_remastered_starring_lara_croft_1.1.1_(64bit)_(89708)-2.bin' ARCHIVE_BASE_3_PART2_MD5='b7da8b538417cc60ab2863fba9ded8fd' ARCHIVE_BASE_3_SIZE='6453552' ARCHIVE_BASE_3_VERSION='1.1.1-gog89708' ARCHIVE_BASE_3_URL='https://www.gog.com/game/tomb_raider_i_to_iii_remastered' # WARNING: This build of the game seems to include AI-regurgitated content. ARCHIVE_BASE_2_NAME='setup_tomb_raider_i-iii_remastered_starring_lara_croft_1.1.0_dlc_(64bit)_(89347).exe' ARCHIVE_BASE_2_MD5='2e88812609e6bd4ebadad90425e96582' ARCHIVE_BASE_2_TYPE='innosetup' ARCHIVE_BASE_2_PART1_NAME='setup_tomb_raider_i-iii_remastered_starring_lara_croft_1.1.0_dlc_(64bit)_(89347)-1.bin' ARCHIVE_BASE_2_PART1_MD5='cb9cd7fd3d7615bc3bd324763c8661c7' ARCHIVE_BASE_2_PART2_NAME='setup_tomb_raider_i-iii_remastered_starring_lara_croft_1.1.0_dlc_(64bit)_(89347)-2.bin' ARCHIVE_BASE_2_PART2_MD5='f0c6a1f7e8c096f759e2e256392e3d42' ARCHIVE_BASE_2_SIZE='6218538' ARCHIVE_BASE_2_VERSION='1.1.0-gog89347' ARCHIVE_BASE_2_URL='https://www.gog.com/game/tomb_raider_i_to_iii_remastered' ARCHIVE_BASE_1_NAME='setup_tomb_raider_i-iii_remastered_starring_lara_croft_1.0.5d_(64bit)_(88648).exe' ARCHIVE_BASE_1_MD5='335b1010593a34048fbb23bd7a74c1e3' ARCHIVE_BASE_1_TYPE='innosetup' ARCHIVE_BASE_1_PART1_NAME='setup_tomb_raider_i-iii_remastered_starring_lara_croft_1.0.5d_(64bit)_(88648)-1.bin' ARCHIVE_BASE_1_PART1_MD5='160ddec95d0870bf63d5699999b7827d' ARCHIVE_BASE_1_SIZE='6105792' ARCHIVE_BASE_1_VERSION='1.0.5d-gog88648' ARCHIVE_BASE_0_NAME='setup_tomb_raider_i-iii_remastered_1.01_patch_4_(77558).exe' ARCHIVE_BASE_0_MD5='9172c7570c8c0dfd47c3925aaecf360d' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_PART1_NAME='setup_tomb_raider_i-iii_remastered_1.01_patch_4_(77558)-1.bin' ARCHIVE_BASE_0_PART1_MD5='dbcec0aba1dd597efe96bace51e79140' ARCHIVE_BASE_0_SIZE='6109084' ARCHIVE_BASE_0_VERSION='1.01-gog77558' CONTENT_PATH_DEFAULT='.' # The game crashes on launch if any of the following libraries is missing. CONTENT_LIBS_BIN_FILES=' 1/tomb1.dll 2/tomb2.dll 3/tomb3.dll' CONTENT_GAME_BIN_FILES=' tomb123.exe' CONTENT_GAME_DATA_FILES=' ?/CUTS ?/DATA ?/FMV ?/ITEM ?/PIX ?/SFX ?/TEX ?/TEXT ?/TRACKS' WINE_PERSISTENT_DIRECTORIES=' users/${USER}/AppData/Roaming/TRX' APP_MAIN_EXE='tomb123.exe' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Easier upgrades from pre-20251113.1 packages PKG_DATA_PROVIDES=' tomb-raider-remastered-1-2-3-data-episode-1 tomb-raider-remastered-1-2-3-data-episode-2 tomb-raider-remastered-1-2-3-data-episode-3' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --symbolic "$dll_source" "$dll_destination" done EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-torchlight-1.sh0000755000000000000000000000562114471751340014471 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2015 Antoine Le Gonidec set -o errexit ### # Torchlight # send your bug reports to vv221@dotslashplay.it ### script_version=20260321.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='torchlight-1' GAME_NAME='Torchlight' ARCHIVE_BASE_1_NAME='setup_torchlight_1.15(a)_(23675).exe' ARCHIVE_BASE_1_MD5='a29e51f55aae740f4046d227d33fa64b' ARCHIVE_BASE_1_TYPE='innosetup' ARCHIVE_BASE_1_SIZE='453318' ARCHIVE_BASE_1_VERSION='1.15-gog23675' ARCHIVE_BASE_1_URL='https://www.gog.com/game/torchlight' ARCHIVE_BASE_0_NAME='setup_torchlight_2.0.0.12.exe' ARCHIVE_BASE_0_MD5='4b721e1b3da90f170d66f42e60a3fece' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_SIZE='460000' ARCHIVE_BASE_0_VERSION='1.15-gog2.0.0.12' CONTENT_PATH_DEFAULT='.' CONTENT_PATH_DEFAULT_0='app' CONTENT_GAME_BIN_FILES=' Plugins.cfg resources.cfg Torchlight.exe' # Torchlight.exe requirements CONTENT_LIBS_BIN_FILES=' OgreMain.dll fmodex.dll ParticleUniverse.dll CEGUIBase.dll OgreGUIRenderer.dll' # The game crashes on launch if any of the following libraries is missing. CONTENT_LIBS0_BIN_FILES=' RenderSystem_Direct3D9.dll Plugin_ParticleFX.dll Plugin_CgProgramManager.dll Plugin_OctreeSceneManager.dll' # Plugin_CgProgramManager.dll requirements CONTENT_LIBS1_BIN_FILES=' cg.dll' # The game crashes before reaching the initial loading screen if any of the following libraries is missig. CONTENT_LIBS2_BIN_FILES=' CEGUIExpatParser.dll CEGUIFalagardWRBase.dll' CONTENT_GAME_DATA_FILES=' icons music programs logo.bmp BuildVer.txt Pak.zip' CONTENT_DOC_DATA_FILES=' TorchlightManual.pdf' WINE_PERSISTENT_DIRECTORIES=' users/${USER}/AppData/Roaming/runic games/torchlight' APP_MAIN_EXE='Torchlight.exe' APP_MAIN_ICON='Torchlight.ico' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. ln --force --symbolic $(path_libraries)/* "\${PATH_PREFIX}" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-torchlight-2.sh0000755000000000000000000000735014471751340014473 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2015 Antoine Le Gonidec set -o errexit ### # Torchlight 2 # send your bug reports to vv221@dotslashplay.it ### script_version=20250429.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='torchlight-2' GAME_NAME='Torchlight Ⅱ' ARCHIVE_BASE_GOG_0_NAME='gog_torchlight_2_2.0.0.2.sh' ARCHIVE_BASE_GOG_0_MD5='e107f6d4c6d4cecea37ade420a8d4892' ARCHIVE_BASE_GOG_0_SIZE='1673501' ARCHIVE_BASE_GOG_0_VERSION='1.25.9.7-gog2.0.0.2' ARCHIVE_BASE_GOG_0_URL='https://www.gog.com/game/torchlight_ii' ARCHIVE_BASE_HUMBLE_0_NAME='Torchlight2-linux-2015-04-01.sh' ARCHIVE_BASE_HUMBLE_0_MD5='730a5d08c8f1cd4a65afbc0ca631d85c' ARCHIVE_BASE_HUMBLE_0_SIZE='1672909' ARCHIVE_BASE_HUMBLE_0_VERSION='1.25.2.4-humble150402' ARCHIVE_BASE_HUMBLE_0_URL='https://www.humblebundle.com/store/torchlight-ii' CONTENT_PATH_DEFAULT_GOG='data/noarch/game' CONTENT_PATH_DEFAULT_HUMBLE='data' CONTENT_LIBS_BIN_FILES=' libCEGUIBase.so.1 libCEGUIExpatParser.so libCEGUIFalagardWRBase.so libCEGUIFreeImageImageCodec.so libfmodex.so libOgreMain.so.1 Plugin_OctreeSceneManager.so RenderSystem_GL.so' CONTENT_LIBS_BIN64_RELATIVE_PATH_GOG='lib64' CONTENT_LIBS_BIN64_RELATIVE_PATH_HUMBLE='x86_64/lib64' CONTENT_LIBS_BIN64_FILES="$CONTENT_LIBS_BIN_FILES" CONTENT_LIBS_BIN32_RELATIVE_PATH_GOG='lib' CONTENT_LIBS_BIN32_RELATIVE_PATH_HUMBLE='x86/lib' CONTENT_LIBS_BIN32_FILES="$CONTENT_LIBS_BIN_FILES" CONTENT_GAME_BIN64_RELATIVE_PATH_HUMBLE='x86_64' CONTENT_GAME_BIN64_FILES=' Torchlight2.bin.x86_64 ModLauncher.bin.x86_64' CONTENT_GAME_BIN32_RELATIVE_PATH_HUMBLE='x86' CONTENT_GAME_BIN32_FILES=' Torchlight2.bin.x86 ModLauncher.bin.x86' CONTENT_GAME_DATA_RELATIVE_PATH_HUMBLE='noarch' CONTENT_GAME_DATA_FILES=' icons movies music PAKS porting programs *.bmp *.cfg *.png' CONTENT_DOC_DATA_RELATIVE_PATH_HUMBLE='noarch' CONTENT_DOC_DATA_FILES=' licenses' APP_MAIN_EXE_BIN64='Torchlight2.bin.x86_64' APP_MAIN_EXE_BIN32='Torchlight2.bin.x86' APP_MAIN_ICON='Delvers.png' APP_MAIN_ICON_HUMBLE='noarch/Delvers.png' PACKAGES_LIST=' PKG_BIN64 PKG_BIN32 PKG_DATA' PKG_BIN64_ARCH='64' PKG_BIN32_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libexpat.so.1 libfontconfig.so.1 libfreeimage.so.3 libfreetype.so.6 libgcc_s.so.1 libGL.so.1 libGLU.so.1 libICE.so.6 libm.so.6 libpthread.so.0 libSDL2-2.0.so.0 libSM.so.6 libstdc++.so.6 libuuid.so.1 libX11.so.6 libXext.so.6 libXft.so.2 libz.so.1' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run the default initialization actions initialization_default "$@" # Extract game data archive_extraction_default ( cd "${PLAYIT_WORKDIR}/gamedata/$(content_path 'GAME_BIN32')" ## Add required execution bit on extra binaries. chmod 755 'ModLauncher.bin.x86' ) ( cd "${PLAYIT_WORKDIR}/gamedata/$(content_path 'GAME_BIN64')" ## Add required execution bit on extra binaries. chmod 755 'ModLauncher.bin.x86_64' ) # Include game data content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers launchers_generation 'PKG_BIN64' launchers_generation 'PKG_BIN32' # Build packages packages_generation print_instructions # Clean up working_directory_cleanup exit 0 games/play-torment-tides-of-numenera.sh0000755000000000000000000001115214471751340017170 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2017 Antoine Le Gonidec set -o errexit ### # Torment: Tides of Numenera # send your bug reports to vv221@dotslashplay.it ### script_version=20250724.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='torment-tides-of-numenera' GAME_NAME='Torment: Tides of Numenera' ARCHIVE_BASE_0_NAME='gog_torment_tides_of_numenera_2.3.0.4.sh' ARCHIVE_BASE_0_MD5='839337b42a1618f3b445f363eca210d3' ARCHIVE_BASE_0_SIZE='9300000' ARCHIVE_BASE_0_VERSION='1.1.0-gog2.3.0.4' ARCHIVE_BASE_0_URL='https://www.gog.com/game/torment_tides_of_numenera' UNITY3D_NAME='TidesOfNumenera' UNITY3D_PLUGINS=' libAkFlanger.so libAkGuitarDistortion.so libAkHarmonizer.so libAkPitchShifter.so libAkSoundEngine.so ScreenSelector.so' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME_DATA_AUDIO_FILES=" ${UNITY3D_NAME}_Data/StreamingAssets/Audio" CONTENT_GAME_DATA_RESOURCES_FILES=" ${UNITY3D_NAME}_Data/resources.assets ${UNITY3D_NAME}_Data/resources.assets.resS" PACKAGES_LIST=' PKG_BIN PKG_DATA_AUDIO PKG_DATA_RESOURCES PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libgcc_s.so.1 libgdk_pixbuf-2.0.so.0 libglib-2.0.so.0 libGL.so.1 libgobject-2.0.so.0 libgtk-x11-2.0.so.0 libm.so.6 libpthread.so.0 librt.so.1 libstdc++.so.6 libX11.so.6 libXcursor.so.1 libXrandr.so.2' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' PKG_DATA_DEPENDENCIES_SIBLINGS=' PKG_DATA_AUDIO PKG_DATA_RESOURCES' PKG_DATA_AUDIO_ID="${PKG_DATA_ID}-audio" PKG_DATA_AUDIO_DESCRIPTION="$PKG_DATA_DESCRIPTION - audio" ## Ensure smooth upgrades from packages generated with pre-20231020.1 game scripts. PKG_DATA_AUDIO_PROVIDES="${PKG_DATA_AUDIO_PROVIDES:-} torment-tides-of-numenera-audio" PKG_DATA_RESOURCES_ID="${PKG_DATA_ID}-resources" PKG_DATA_RESOURCES_DESCRIPTION="$PKG_DATA_DESCRIPTION - resources" ## Ensure smooth upgrades from packages generated with pre-20231020.1 game scripts. PKG_DATA_RESOURCES_PROVIDES="${PKG_DATA_RESOURCES_PROVIDES:-} torment-tides-of-numenera-resources" # Include a workaround for the quest-breaking Anechoic Lazaret bugs # cf. https://steamcommunity.com/app/272270/discussions/1/1473096694453357831/?ctp=15#c1708438376918556245 REQUIREMENTS_LIST="${REQUIREMENTS_LIST:-} sed unix2dos" # Load common functions PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run the default initialization actions initialization_default "$@" # Extract game data archive_extraction_default ( cd "${PLAYIT_WORKDIR}/gamedata/$(content_path_default)" ## Include a workaround for the quest-breaking Anechoic Lazaret bugs ## cf. https://steamcommunity.com/app/272270/discussions/1/1473096694453357831/?ctp=15#c1708438376918556245 conversation_file="$(unity3d_name)_Data/StreamingAssets/data/conversations/a_sagus/a2623_damaged_peerless_drone.conversation" sed_pattern=' ' sed_replacement=' \n' sed_replacement="$sed_replacement"' \n' sed_replacement="$sed_replacement"' \n' sed_replacement="$sed_replacement"' false\n' sed_replacement="$sed_replacement"' Void SetGlobalValue(String, Int32)\n' sed_replacement="$sed_replacement"' \n' sed_replacement="$sed_replacement"' Quest_AnechoicLazaret_DefeatedDrones\n' sed_replacement="$sed_replacement"' 1\n' sed_replacement="$sed_replacement"' \n' sed_replacement="$sed_replacement"' \n' sed_replacement="$sed_replacement"' \n' sed_replacement="$sed_replacement"' ' sed_expression="1010s#${sed_pattern}#${sed_replacement}#" sed --in-place --expression="$sed_expression" "$conversation_file" unix2dos --quiet "$conversation_file" ) # Include game data content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers launchers_generation 'PKG_BIN' # Build packages packages_generation print_instructions # Clean up working_directory_cleanup exit 0 games/play-total-overdose.sh0000755000000000000000000000467114471751340015137 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2021 Antoine Le Gonidec set -o errexit ### # Total Overdose # send your bug reports to vv221@dotslashplay.it ### script_version=20260321.2 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='total-overdose' GAME_NAME='Total Overdose' ARCHIVE_BASE_0_NAME='setup_total_overdose_1.00_(18925).exe' ARCHIVE_BASE_0_MD5='df9f6750e5f12fd83ee775365dfd9637' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_SIZE='1700000' ARCHIVE_BASE_0_VERSION='1.00-gog18925' ARCHIVE_BASE_0_URL='https://www.gog.com/game/total_overdose_a_gunslingers_tale_in_mexico' CONTENT_PATH_DEFAULT='app' # TODO: Check is all libraries are required. CONTENT_LIBS_BIN_FILES=' binkw32.dll DieselPowerImplementation.dll' CONTENT_GAME_BIN_FILES=' TOD.exe' CONTENT_GAME_DATA_FILES=' dpconfig.dpc blocks.naz sounds.naz videos00.naz videos01.naz' # TODO: Move localisation to a dedicated package. CONTENT_GAME0_DATA_FILES=' uk_sounds.naz' CONTENT_DOC_DATA_FILES=' Total Overdose EULA French.doc Total Overdose EULA German.docx Total Overdose EULA Italian.docx Total Overdose EULA Spanish.docx Total Overdose - Manual.pdf' WINE_PERSISTENT_DIRECTORIES=' users/${USER}/Documents/Total Overdose' APP_MAIN_EXE='TOD.exe' APP_MAIN_ICON_WRESTOOL_OPTIONS='--type=14 --name=101' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. ln --force --symbolic $(path_libraries)/* "\${PATH_PREFIX}" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-transistor.sh0000755000000000000000000000745114471751340014377 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2015 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2017 Mopi set -o errexit ### # Transistor # send your bug reports to vv221@dotslashplay.it ### script_version=20250721.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='transistor' GAME_NAME='Transistor' ARCHIVE_BASE_2_NAME='transistor_1_50440_8123_23365.sh' ARCHIVE_BASE_2_MD5='dc89c175267dc1a1f3434a9d4f903cce' ARCHIVE_BASE_2_SIZE='3580037' ARCHIVE_BASE_2_VERSION='1.50440.8123-gog23365' ARCHIVE_BASE_2_URL='https://www.gog.com/game/transistor' ARCHIVE_BASE_1_NAME='transistor_en_v1_50423_21516.sh' ARCHIVE_BASE_1_MD5='52d0df1d959b333b17ede106f8e53062' ARCHIVE_BASE_1_SIZE='3600000' ARCHIVE_BASE_1_VERSION='1.50423-gog21516' ARCHIVE_BASE_0_NAME='gog_transistor_2.0.0.3.sh' ARCHIVE_BASE_0_MD5='53dbaf643471f3b8494548261584dd13' ARCHIVE_BASE_0_SIZE='3200000' ARCHIVE_BASE_0_VERSION='1.20140310-gog2.0.0.3' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_LIBS_FILES=' libBink.so libFModPlugins.so libfmod.so.4 libfmodstudio.so.4 liblua52.so' CONTENT_LIBS_LIBS64_RELATIVE_PATH='lib64' CONTENT_LIBS_LIBS64_FILES="$CONTENT_LIBS_FILES" CONTENT_LIBS_LIBS32_RELATIVE_PATH='lib' CONTENT_LIBS_LIBS32_FILES="$CONTENT_LIBS_FILES" CONTENT_GAME_MAIN_FILES=' Content monoconfig monomachineconfig Transistor.exe Transistor.exe.config Engine.dll Engine.dll.config Engine.SDL2.dll Engine.SDL2.dll.config HostessProtocol.dll KeraLua.dll MonoGame.Framework.SDL2.dll NLua.dll SDL2-CS.dll SDL2-CS.dll.config Newtonsoft.Json.dll Newtonsoft.Json.pdb Newtonsoft.Json.xml *.bmp *.cfg *.pdb *.xml *.txt' CONTENT_DOC_MAIN_FILES=' Linux.README' APP_MAIN_EXE='Transistor.exe' APP_MAIN_ICON='Transistor.bmp' ## If the Content/Movies/*.bik files are symbolic links, the game crashes when trying to load them. APP_MAIN_PRERUN=' # Prevent a crash due to the inability of libBink.so to properly handle symbolic links. if [ -d Content/Movies ]; then rm --recursive Content/Movies ln --symbolic "${PATH_GAME_DATA}/Content/Movies" Content/Movies fi ' PACKAGES_LIST=' PKG_MAIN PKG_LIBS64 PKG_LIBS32' PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_LIBS' PKG_MAIN_DEPENDENCIES_LIBRARIES=' libGL.so.1 libSDL2-2.0.so.0' PKG_MAIN_DEPENDENCIES_MONO_LIBRARIES=' mscorlib.dll Mono.Posix.dll Mono.Security.dll System.dll System.Configuration.dll System.Core.dll System.Data.dll System.Design.dll System.Drawing.dll System.Management.dll System.Numerics.dll System.Runtime.Serialization.dll System.Security.dll System.Transactions.dll System.Xml.dll System.Xml.Linq.dll' PKG_LIBS_ID="${GAME_ID}-libs" PKG_LIBS64_ARCH='64' PKG_LIBS32_ARCH='32' PKG_LIBS_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libgcc_s.so.1 libm.so.6 libpthread.so.0 librt.so.1 libstdc++.so.6' # Load common functions PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run the default initialization actions initialization_default "$@" # Extract game data archive_extraction_default # Include game data content_inclusion_icons 'PKG_MAIN' content_inclusion_default # Write launchers ## This game expects an executable stack through dynamically loaded libraries. game_exec_line() { cat <<- 'EOF' GLIBC_TUNABLES=glibc.rtld.execstack=2 mono Transistor.exe "$@" EOF } launchers_generation 'PKG_MAIN' # Build packages packages_generation print_instructions # Clean up working_directory_cleanup exit 0 games/play-tropico-series.sh0000755000000000000000000001557514471751340015144 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2015 Antoine Le Gonidec set -o errexit ### # Tropico games: # - Tropico # - Tropico 2 # send your bug reports to vv221@dotslashplay.it ### script_version=20260323.2 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID_TROPICO1='tropico-1' GAME_NAME_TROPICO1='Tropico' GAME_ID_TROPICO2='tropico-2' GAME_NAME_TROPICO2='Tropico 2: Pirate Cove' ARCHIVE_BASE_TROPICO1_FR_0_NAME='setup_tropico_french_2.1.0.14.exe' ARCHIVE_BASE_TROPICO1_FR_0_MD5='aad4ea5a6fe2b2c2f347cfa7aae058b3' ARCHIVE_BASE_TROPICO1_FR_0_TYPE='innosetup' ARCHIVE_BASE_TROPICO1_FR_0_SIZE='1400000' ARCHIVE_BASE_TROPICO1_FR_0_VERSION='1.5.3-gog2.1.0.14' ARCHIVE_BASE_TROPICO1_FR_0_URL='https://www.gog.com/game/tropico_reloaded' ARCHIVE_BASE_TROPICO1_EN_0_NAME='setup_tropico_2.1.0.14.exe' ARCHIVE_BASE_TROPICO1_EN_0_MD5='1bd761bc4a40a42a9caeb41c70d46465' ARCHIVE_BASE_TROPICO1_EN_0_TYPE='innosetup' ARCHIVE_BASE_TROPICO1_EN_0_SIZE='1400000' ARCHIVE_BASE_TROPICO1_EN_0_VERSION='1.5.3-gog2.1.0.14' ARCHIVE_BASE_TROPICO1_EN_0_URL='https://www.gog.com/game/tropico_reloaded' ARCHIVE_BASE_TROPICO2_FR_0_NAME='setup_tropico2_french_2.1.0.14.exe' ARCHIVE_BASE_TROPICO2_FR_0_MD5='e9cb36d88a03fd65b7152c815f05a7cc' ARCHIVE_BASE_TROPICO2_FR_0_TYPE='innosetup' ARCHIVE_BASE_TROPICO2_FR_0_SIZE='1900000' ARCHIVE_BASE_TROPICO2_FR_0_VERSION='1.20-gog2.1.0.14' ARCHIVE_BASE_TROPICO2_FR_0_URL='https://www.gog.com/game/tropico_reloaded' ARCHIVE_BASE_TROPICO2_EN_0_NAME='setup_tropico2_2.1.0.14.exe' ARCHIVE_BASE_TROPICO2_EN_0_MD5='59a41778988f4b0a45d144f29187ffd8' ARCHIVE_BASE_TROPICO2_EN_0_TYPE='innosetup' ARCHIVE_BASE_TROPICO2_EN_0_SIZE='1900000' ARCHIVE_BASE_TROPICO2_EN_0_VERSION='1.20-gog2.1.0.14' ARCHIVE_BASE_TROPICO2_EN_0_URL='https://www.gog.com/game/tropico_reloaded' CONTENT_PATH_DEFAULT='app' # TODO: Check if/why these libraries are required. CONTENT_LIBS_BIN_FILES=' binkw32.dll mss32.dll' CONTENT_GAME_BIN_FILES_TROPICO1=' Tropico.EXE' CONTENT_GAME_BIN_FILES_TROPICO2=' Tropico2.exe Tropico2.ini Tropico2Safe.ini' CONTENT_GAME0_BIN_FILES=' *.asi' CONTENT_GAME_L10N_FILES=' Maps' CONTENT_GAME0_L10N_FILES_TROPICO1=' data2/TROPICO.CFG data2/px_cred.lng data2/Tropico.lng data2/x1.dap data2/x2.dap movies/s_f2o.bik movies/s_m2o.bik movies/s_s2o.bik voice/Narrator' CONTENT_GAME0_L10N_FILES_TROPICO2=' Data/soun.{} Data/text.{} Movies/CampaignToExit.bik Movies/DeskToOutside.bik' CONTENT_GAME_DATA_FILES=' Data Movies' CONTENT_GAME0_DATA_FILES_TROPICO1=' data2 voice/People' CONTENT_DOC_L10N_FILES=' Manual.pdf ReadMe.txt' CONTENT_DOC0_L10N_FILES_TROPICO1=' HISTORY.TXT' CONTENT_DOC0_L10N_FILES_TROPICO2=' PatchReadMe.doc ReadMe.rtf LastMinute.rtf' USER_PERSISTENT_DIRECTORIES=' Campaign Games Maps Save' # TODO: Check if write access to all these files is required. USER_PERSISTENT_FILES_TROPICO1=' data2/TROPICO.CFG data2/HISCORE.DAT data2/bldgtype.dat data2/unittype.dat' USER_PERSISTENT_FILES_TROPICO2=' Tropico2.ini Tropico2Safe.ini' # Tropico 2 - Loss of focus leads to graphical corruption. # (WINE 10.0) WINE_VIRTUAL_DESKTOP_TROPICO2='1600x1200' APP_MAIN_EXE_TROPICO1='Tropico.EXE' APP_MAIN_EXE_TROPICO2='Tropico2.exe' PACKAGES_LIST=' PKG_BIN PKG_L10N PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_L10N_BASE PKG_DATA' PKG_L10N_BASE_ID_TROPICO1="${GAME_ID_TROPICO1}-l10n" PKG_L10N_BASE_ID_TROPICO2="${GAME_ID_TROPICO2}-l10n" PKG_L10N_ID_TROPICO1_FR="${PKG_L10N_BASE_ID_TROPICO1}-fr" PKG_L10N_ID_TROPICO1_EN="${PKG_L10N_BASE_ID_TROPICO1}-en" PKG_L10N_ID_TROPICO2_FR="${PKG_L10N_BASE_ID_TROPICO2}-fr" PKG_L10N_ID_TROPICO2_EN="${PKG_L10N_BASE_ID_TROPICO2}-en" PKG_L10N_PROVIDES_TROPICO1=" $PKG_L10N_BASE_ID_TROPICO1" PKG_L10N_PROVIDES_TROPICO2=" $PKG_L10N_BASE_ID_TROPICO2" PKG_L10N_DESCRIPTION_FR='French localisation' PKG_L10N_DESCRIPTION_EN='English localisation' PKG_L10N_DESCRIPTION_TROPICO1_FR="$PKG_L10N_DESCRIPTION_FR" PKG_L10N_DESCRIPTION_TROPICO1_EN="$PKG_L10N_DESCRIPTION_EN" PKG_L10N_DESCRIPTION_TROPICO2_FR="$PKG_L10N_DESCRIPTION_FR" PKG_L10N_DESCRIPTION_TROPICO2_EN="$PKG_L10N_DESCRIPTION_EN" PKG_DATA_ID_TROPICO1="${GAME_ID_TROPICO1}-data" PKG_DATA_ID_TROPICO2="${GAME_ID_TROPICO2}-data" PKG_DATA_DESCRIPTION='data' # Tropico 2 - Use software rendering by default. REQUIREMENTS_LIST_TROPICO2=' dos2unix' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Use uniform case for both games. path_archive_contents=$(path_archive_contents) path_reference="${path_archive_contents}/Maps" path_alternative="${path_archive_contents}/maps" if [ -e "$path_alternative" ]; then mv "$path_alternative" "$path_reference" fi # Tropico - Disable censorship in French version. case "$(current_archive)" in ('ARCHIVE_BASE_TROPICO1_FR_'*) # Force standard locale to avoid choking on some characters. # TODO: Extended expressions would make that easier to read. LANG=C sed --in-place \ --expression='s/^\( \+406 .\+militaire\) \(.\+\)/\1 \2/' \ "${path_archive_contents}/data2/Tropico.lng" ;; esac # Tropico 2 - Use software rendering by default. case "$(current_archive)" in ('ARCHIVE_BASE_TROPICO2_'*) ini_file="${path_archive_contents}/Tropico2.ini" ini_field='SoftwareDevice' ini_value='1' sed_expression="s/^${ini_field}=.*$/${ini_field}=${ini_value}/" unix2dos --quiet "$ini_file" sed --in-place --expression="$sed_expression" "$ini_file" dos2unix --quiet "$ini_file" ;; esac # Tropico 2 - Fix a file name encoding, to prevent a crash when selecting this map. case "$(current_archive)" in ('ARCHIVE_BASE_TROPICO2_FR_'*) if [ -e "${path_archive_contents}/Maps/6-Pičges en eaux troubles.{}" ]; then mv \ "${path_archive_contents}/Maps/6-Pičges en eaux troubles.{}" \ "${path_archive_contents}/Maps/6-Pièges en eaux troubles.{}" mv \ "${path_archive_contents}/Maps/6-Pičges en eaux troubles.txt" \ "${path_archive_contents}/Maps/6-Pièges en eaux troubles.txt" fi ;; esac # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Work around WINE_VIRTUAL_DESKTOP lack of context support. # (./play.it 2.35) WINE_VIRTUAL_DESKTOP=$(context_value 'WINE_VIRTUAL_DESKTOP') # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. ln --force --symbolic $(path_libraries)/* "\${PATH_PREFIX}" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-tyranny-expansions.sh0000755000000000000000000000724714471751340016063 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2023 Antoine Le Gonidec set -o errexit ### # Tyranny expansions: # - Coat of Arms # - Portrait Pack # - Tales from the Tiers # - Bastard's Wound # send your bug reports to vv221@dotslashplay.it ### script_version=20260108.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='tyranny' GAME_NAME='Tyranny' EXPANSION_ID_COATOFARMS='coat-of-arms' EXPANSION_NAME_COATOFARMS='Coat of Arms' EXPANSION_ID_PORTRAIT='portrait-pack' EXPANSION_NAME_PORTRAIT='Portrait Pack' EXPANSION_ID_TALES='tales-from-the-tiers' EXPANSION_NAME_TALES='Tales from the Tiers' EXPANSION_ID_WOUND='bastards-wound' EXPANSION_NAME_WOUND='Bastardʼs Wound' ## Coat of Arms ARCHIVE_BASE_COATOFARMS_0_NAME='tyranny_coat_of_arms_dlc_en_1_0_14773.sh' ARCHIVE_BASE_COATOFARMS_0_MD5='ba1403ce1f2535a00ae137c19204459f' ARCHIVE_BASE_COATOFARMS_0_SIZE='1342' ARCHIVE_BASE_COATOFARMS_0_VERSION='1.0-gog14773' ARCHIVE_BASE_COATOFARMS_0_URL='https://www.gog.com/game/tyranny_overlord_edition_upgrade' ## Portrait Pack ARCHIVE_BASE_PORTRAIT_0_NAME='tyranny_portrait_pack_dlc_en_1_0_14773.sh' ARCHIVE_BASE_PORTRAIT_0_MD5='165e1cf02119a0b2ddb4d8bfa8b6819d' ARCHIVE_BASE_PORTRAIT_0_SIZE='4150' ARCHIVE_BASE_PORTRAIT_0_VERSION='1.0-gog14773' ARCHIVE_BASE_PORTRAIT_0_URL='https://www.gog.com/game/tyranny_portrait_pack' ## Tales from the Tiers ARCHIVE_BASE_TALES_0_NAME='tyranny_tales_from_the_tiers_dlc_en_1_2_1_0158_15398.sh' ARCHIVE_BASE_TALES_0_MD5='08676e535375b162e2fa32b1bc4488a3' ARCHIVE_BASE_TALES_0_SIZE='4386' ARCHIVE_BASE_TALES_0_VERSION='1.2.1.0158-gog15398' ARCHIVE_BASE_TALES_0_URL='https://www.gog.com/game/tyranny_tales_from_the_tiers' ## Bastard's Wound ARCHIVE_BASE_WOUND_0_NAME='tyranny_bastard_s_wound_dlc_en_1_2_1_0158_15398.sh' ARCHIVE_BASE_WOUND_0_MD5='dbd2b51a410db2357b2e144f44139c19' ARCHIVE_BASE_WOUND_0_SIZE='1159755' ARCHIVE_BASE_WOUND_0_VERSION='1.2.1.0158-gog15398' ARCHIVE_BASE_WOUND_0_URL='https://www.gog.com/game/tyranny_bastards_wound' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME_MAIN_FILES=' Tyranny_Data' ## Bastard's Wound - Prevent inclusion of duplicated files already provided by the base game. CONTENT_GAME_MAIN_FILES_WOUND=' Tyranny_Data/data_vx1 Tyranny_Data/bundles/dlc01.unity3d' PKG_PARENT_ID="$GAME_ID" PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_PARENT' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_default # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-tyranny.sh0000755000000000000000000000502514471751340013666 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2018 Antoine Le Gonidec set -o errexit ### # Tyranny # send your bug reports to vv221@dotslashplay.it ### script_version=20260310.2 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='tyranny' GAME_NAME='Tyranny' ARCHIVE_BASE_0_NAME='tyranny_v1_2_1_160_v2_25169.sh' ARCHIVE_BASE_0_MD5='72bdb7c9f6966ac6f1ccfbbad9fb29e6' ARCHIVE_BASE_0_SIZE='15136872' ARCHIVE_BASE_0_VERSION='1.2.1.0160-gog25169' ARCHIVE_BASE_0_URL='https://www.gog.com/game/tyranny_commander_edition' ARCHIVE_BASE_1_NAME='tyranny_en_1_2_1_0158_15398.sh' ARCHIVE_BASE_1_MD5='664cba00a861611fb155f65b8d83d9e9' ARCHIVE_BASE_1_SIZE='15000000' ARCHIVE_BASE_1_VERSION='1.2.1.0158-gog15398' UNITY3D_NAME='Tyranny' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME_DATA_AREAS_FILES=" ${UNITY3D_NAME}_Data/bundles/st_ar_*" PACKAGES_LIST=' PKG_BIN64 PKG_DATA_AREAS PKG_DATA' PKG_BIN64_ARCH='64' PKG_BIN64_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN64_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libgcc_s.so.1 libGL.so.1 libm.so.6 libpthread.so.0 librt.so.1 libstdc++.so.6 libX11.so.6 libXcursor.so.1 libXrandr.so.2' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' PKG_DATA_DEPENDENCIES_SIBLINGS=' PKG_DATA_AREAS' PKG_DATA_AREAS_ID="${PKG_DATA_ID}-areas" PKG_DATA_AREAS_DESCRIPTION="${PKG_DATA_DESCRIPTION} - areas" # Easier upgrades from pre-20260107.1 packages PKG_DATA_AREAS_PROVIDES="${PKG_DATA_AREAS_PROVIDES:-} tyranny-areas" # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Prevent inclusion of 32-bit libraries. rm --recursive "$(path_archive_contents)/$(unity3d_name)_Data/Mono/x86" # Prevent inclusion of unused Unity3D plugins. rm --recursive "$(path_archive_contents)/$(unity3d_name)_Data/Plugins" # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-unavowed.sh0000755000000000000000000001042314471751340014010 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2021 Antoine Le Gonidec set -o errexit ### # Unavowed # send your bug reports to vv221@dotslashplay.it ### script_version=20260201.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='unavowed' GAME_NAME='Unavowed' ARCHIVE_BASE_11_NAME='unavowed_2_7_86520.sh' ARCHIVE_BASE_11_MD5='a10c05b8f243a8ba6de01ba32d11a58a' ARCHIVE_BASE_11_SIZE='2315518' ARCHIVE_BASE_11_VERSION='2.7-gog86520' ARCHIVE_BASE_11_URL='https://www.gog.com/game/unavowed' ARCHIVE_BASE_10_NAME='unavowed_2_5_81809.sh' ARCHIVE_BASE_10_MD5='d1d79f92b1332341371f519b0810bf9c' ARCHIVE_BASE_10_SIZE='2315517' ARCHIVE_BASE_10_VERSION='2.5-gog81809' ARCHIVE_BASE_9_NAME='unavowed_2_2_78264.sh' ARCHIVE_BASE_9_MD5='6a60648441f57342e92a6bb0a4dc462a' ARCHIVE_BASE_9_SIZE='2310225' ARCHIVE_BASE_9_VERSION='2.2-gog78264' ARCHIVE_BASE_8_NAME='unavowed_2_1_75524.sh' ARCHIVE_BASE_8_MD5='07926f2dd86460eae439d2d16f87e76d' ARCHIVE_BASE_8_SIZE='2310225' ARCHIVE_BASE_8_VERSION='2.1-gog75524' ARCHIVE_BASE_7_NAME='unavowed_2_0_2_70667.sh' ARCHIVE_BASE_7_MD5='00c9f35c3e3e506f8238de49c8ac781a' ARCHIVE_BASE_7_SIZE='2310224' ARCHIVE_BASE_7_VERSION='2.0.2-gog70667' ARCHIVE_BASE_6_NAME='unavowed_2_0_2_70012.sh' ARCHIVE_BASE_6_MD5='a9cfabc33e91f0d7b7649e302966b591' ARCHIVE_BASE_6_SIZE='2310224' ARCHIVE_BASE_6_VERSION='2.0.2-gog70012' ARCHIVE_BASE_5_NAME='unavowed_2_0_1_66601.sh' ARCHIVE_BASE_5_MD5='bacc5d7cf9da4970da580c7ee43e1a2e' ARCHIVE_BASE_5_SIZE='2400000' ARCHIVE_BASE_5_VERSION='2.0.1-gog66601' ARCHIVE_BASE_4_NAME='unavowed_2_0_66472.sh' ARCHIVE_BASE_4_MD5='771d43bf86a85da9a70d02da80a6eb01' ARCHIVE_BASE_4_SIZE='2400000' ARCHIVE_BASE_4_VERSION='2.0-gog66472' ARCHIVE_BASE_3_NAME='unavowed_1_5_64507.sh' ARCHIVE_BASE_3_MD5='0029204a1edc703c2fc90bcc2741c442' ARCHIVE_BASE_3_SIZE='2500000' ARCHIVE_BASE_3_VERSION='1.5-gog64507' ARCHIVE_BASE_2_NAME='unavowed_1_4_57370.sh' ARCHIVE_BASE_2_MD5='c785b049e60d60e45296acda30bd9aa2' ARCHIVE_BASE_2_SIZE='2500000' ARCHIVE_BASE_2_VERSION='1.4-gog57370' ARCHIVE_BASE_1_NAME='unavowed_1_32_55233.sh' ARCHIVE_BASE_1_MD5='6d92c60a1a3406f619b4fb4c204adecc' ARCHIVE_BASE_1_SIZE='2500000' ARCHIVE_BASE_1_VERSION='1.3.2-gog55233' ARCHIVE_BASE_0_NAME='unavowed_1_31_54237.sh' ARCHIVE_BASE_0_MD5='f0060c808571a4324714c69f653a4caa' ARCHIVE_BASE_0_SIZE='2500000' ARCHIVE_BASE_0_VERSION='1.3.1-gog54237' ARCHIVE_OPTIONAL_ICONS_NAME='unavowed_icons.tar.gz' ARCHIVE_OPTIONAL_ICONS_MD5='359eae49cc167a34a1cc5525cf6ab340' ARCHIVE_OPTIONAL_ICONS_URL='https://downloads.dotslashplay.it/games/unavowed/' CONTENT_ICONS_PATH='.' CONTENT_ICONS_FILES=' 16x16 24x24 32x32 48x48 256x256' AGS_NAME='unavowed' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_DOC_MAIN_FILES=' licenses' APP_MAIN_ICON='../support/icon.png' APP_MAIN_ICON_3='Unavowed.exe' APP_MAIN_ICON_2='Unavowed.exe' APP_MAIN_ICON_1='Unavowed.exe' APP_MAIN_ICON_0='Unavowed.exe' # Load common functions. # Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Scan library paths used by ./play.it < 2.35. # This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run the default initialization actions initialization_default "$@" # Extract game data archive_extraction_default # Include game data content_inclusion_icons content_inclusion_default # Write launchers launchers_generation # Build packages packages_generation print_instructions # Clean up working_directory_cleanup exit 0 games/play-unreal-tournament-2004.sh0000755000000000000000000002076614471751340016236 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2022 Antoine Le Gonidec set -o errexit ### # Unreal Tournament 2004 # send your bug reports to vv221@dotslashplay.it ### script_version=20260220.6 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='unreal-tournament-2004' GAME_NAME='Unreal Tournament 2004' # This CD-ROM image does not include a CD key, one must still be provided. # Create a file ~/.local/share/games/unreal-tournament-2004/System/CDKey and write a valid CD key in it, # or the game will fail to start with the following error: # Your CD key appears to be invalid. You will need to reinstall the game and enter your CD key to fix this problem. ARCHIVE_BASE_OLDUNREAL_0_NAME='UT2004.ISO' ARCHIVE_BASE_OLDUNREAL_0_MD5='4ad34b16d757e0752809eb9bf5fb1fba' ARCHIVE_BASE_OLDUNREAL_0_TYPE='iso' ARCHIVE_BASE_OLDUNREAL_0_SIZE='8993007' ARCHIVE_BASE_OLDUNREAL_0_VERSION='1.0-oldunreal1' ARCHIVE_BASE_OLDUNREAL_0_URL='https://files.oldunreal.net/UT2004.ISO' # This game is no longer available for sale from GOG.com since 2022-12-23. # This installer includes a valid CD key so there is no need to provide one manually. # It can still be done following the instructions above to override the default GOG.com CD key with your own. ARCHIVE_BASE_GOG_0_NAME='setup_unreal_tournament_2004_1.0_(18947).exe' ARCHIVE_BASE_GOG_0_MD5='243376d34413b830324c5879ac2f9cfd' # Do not convert file paths to lowercase. ARCHIVE_BASE_GOG_0_EXTRACTOR='innoextract' ARCHIVE_BASE_GOG_0_EXTRACTOR_OPTIONS=' ' ARCHIVE_BASE_GOG_0_PART1_NAME='setup_unreal_tournament_2004_1.0_(18947)-1.bin' ARCHIVE_BASE_GOG_0_PART1_MD5='a211e2a6feed7334bb3b7deef6b858b5' ARCHIVE_BASE_GOG_0_SIZE='5961826' ARCHIVE_BASE_GOG_0_VERSION='1.0-gog18947' ARCHIVE_REQUIRED_ENGINE_0_NAME='ut2004-lnxpatch3369-2.tar.bz2' ARCHIVE_REQUIRED_ENGINE_0_MD5='0fa447e05fe5a38e0e32adf171be405e' ARCHIVE_REQUIRED_ENGINE_0_SIZE='76580' ARCHIVE_REQUIRED_ENGINE_0_VERSION='3369.2-1' ARCHIVE_REQUIRED_ENGINE_0_URL='http://downloads.dotslashplay.it/games/unreal-tournament-2004/' ARCHIVE_REQUIRED_CPP5_NAME='libstdc++5.tar.xz' ARCHIVE_REQUIRED_CPP5_MD5='5c0ed9260d1b75778ef5f0785e4be223' ARCHIVE_REQUIRED_CPP5_SIZE='829' ARCHIVE_REQUIRED_CPP5_URL='http://downloads.dotslashplay.it/resources/gcc/' CONTENT_PATH_DEFAULT='.' CONTENT_LIBS_BIN_FILES=' libstdc++.so.5 libstdc++.so.5.0.7' CONTENT_GAME_BIN_FILES=' System/*.u System/*.upl System/*.int System/*.det System/*.est System/*.frt System/*.itt System/*.kot' CONTENT_GAME0_BIN_PATH='UT2004-Patch' CONTENT_GAME0_BIN_FILES=' System/ut2004-bin-linux-amd64 System/Packages.md5 System/*.u System/*.ucl System/*.int System/*.det System/*.est System/*.frt System/*.itt System/*.kot' CONTENT_GAME1_BIN_PATH_GOG='__support/app' CONTENT_GAME1_BIN_FILES=' System/Default.ini System/DefUser.ini' CONTENT_GAME_DATA_FILES=' Animations ForceFeedback KarmaData Maps Music Sounds Speech StaticMeshes Textures Web' CONTENT_GAME0_DATA_PATH='UT2004-Patch' CONTENT_GAME0_DATA_FILES=' Animations Speech Textures Web' CONTENT_DOC0_DATA_RELATIVE_PATH='Help' CONTENT_DOC0_DATA_FILES=' *.txt' CONTENT_DOC1_DATA_RELATIVE_PATH='Manual' CONTENT_DOC1_DATA_FILES=' *.pdf' CONTENT_DOC2_DATA_PATH='UT2004-Patch/Help' CONTENT_DOC2_DATA_FILES=' *.txt' APP_MAIN_EXE='System/ut2004-bin-linux-amd64' APP_MAIN_ICON='Help/Unreal.ico' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libgcc_s.so.1 libm.so.6 libopenal.so.1 libpthread.so.0 libSDL-1.2.so.0' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' REQUIREMENTS_LIST_OLDUNREAL=' unshield' # Load common functions. # Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Scan library paths used by ./play.it < 2.35. # This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Chek for the presence of the required game engine. archive_initialize_required \ 'ARCHIVE_ENGINE' \ 'ARCHIVE_REQUIRED_ENGINE_0' archive_initialize_required \ 'ARCHIVE_CPP5' \ 'ARCHIVE_REQUIRED_CPP5' archive_version=$(archive_version 'ARCHIVE_ENGINE' | cut --delimiter='-' --fields=1) archive_release=$(archive_version "$(current_archive)" | cut --delimiter='-' --fields=2) export "$(current_archive)_VERSION=${archive_version}-${archive_release}" # Extract game data. archive_extraction_default # OldUnreal ISO - Extract files from inner archives. case "$(current_archive)" in ('ARCHIVE_BASE_OLDUNREAL_'*) path_archive_contents="${PLAYIT_WORKDIR}/gamedata/$(content_path_default)" ln --symbolic --target-directory="$path_archive_contents" \ "${path_archive_contents}/Disk1/data1.hdr" \ "${path_archive_contents}/Disk1/data1.cab" \ "${path_archive_contents}/Disk1/data2.cab" \ "${path_archive_contents}/Disk2/data3.cab" \ "${path_archive_contents}/Disk3/data4.cab" \ "${path_archive_contents}/Disk4/data5.cab" \ "${path_archive_contents}/Disk5/data6.cab" ARCHIVE_INSTALLSHIELD_PATH="${path_archive_contents}/data1.hdr" ARCHIVE_INSTALLSHIELD_EXTRACTOR='unshield' ARCHIVE_INSTALLSHIELD_EXTRACTOR_OPTIONS=' ' archive_extraction 'ARCHIVE_INSTALLSHIELD' rm \ "${path_archive_contents}/Disk1/data1.hdr" \ "${path_archive_contents}/Disk1/data1.cab" \ "${path_archive_contents}/Disk1/data2.cab" \ "${path_archive_contents}/Disk2/data3.cab" \ "${path_archive_contents}/Disk3/data4.cab" \ "${path_archive_contents}/Disk4/data5.cab" \ "${path_archive_contents}/Disk5/data6.cab" ( cd "$path_archive_contents" mv All_Animations Animations mv All_ForceFeedback ForceFeedback mv All_Help Help mv English_Sounds_Speech_System_Help/Help/* Help/ mv All_KarmaData KarmaData mv English_Manual Manual mv All_Maps Maps mv All_Music Music mv English_Sounds_Speech_System_Help/Sounds Sounds mv English_Sounds_Speech_System_Help/Speech Speech mv All_StaticMeshes StaticMeshes mv All_UT2004.EXE System mv English_Sounds_Speech_System_Help/System/* System/ mv All_Textures Textures mv All_Web Web ) ;; esac archive_extraction 'ARCHIVE_ENGINE' archive_extraction 'ARCHIVE_CPP5' # Include game data. # GOG.com installer - Include required CD key. case "$(current_archive)" in ('ARCHIVE_BASE_GOG_'*) source_file="${PLAYIT_WORKDIR}/gamedata/$(content_path_default)/goggame-1207658691.script" destination_directory="$(package_path 'PKG_BIN')$(path_game_data)/System" mkdir --parents "$destination_directory" grep --before=1 --fixed-strings 'CDKey' "$source_file" | sed --silent 's/\s*"valueData": "\(.*\)",/\1/p' > "${destination_directory}/CDKey" ;; esac content_inclusion_icons 'PKG_DATA' content_inclusion_default # Create required links for some libraries. path_libraries_source=$(path_libraries_system) path_libraries_destination="$(package_path 'PKG_BIN')$(path_game_data)/System" ln --symbolic "${path_libraries_source}/libSDL-1.2.so.0" "${path_libraries_destination}/libSDL-1.2.so.0" ln --symbolic "${path_libraries_source}/libopenal.so.1" "${path_libraries_destination}/openal.so" # Write launchers. # Run the game binary from its parent directory. game_exec_line() { cat <<- 'EOF' # Run the game binary from its parent directory. cd System ./ut2004-bin-linux-amd64 "$@" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-unreal-tournament.sh0000755000000000000000000001234214471751340015642 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2018 Jacek Szafarkiewicz # SPDX-FileCopyrightText: © 2018 Phil Morrell set -o errexit ### # Unreal Tournament # send your bug reports to vv221@dotslashplay.it ### script_version=20251128.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='unreal-tournament' GAME_NAME='Unreal Tournament' ## This game is no longer available for sale from gog.com since 2022-12-23. ARCHIVE_BASE_0_NAME='setup_ut_goty_2.0.0.5.exe' ARCHIVE_BASE_0_MD5='0d25ec835648710a098aff7106187f38' ## Do not convert file paths to lowercase. ARCHIVE_BASE_0_EXTRACTOR='innoextract' ARCHIVE_BASE_0_EXTRACTOR_OPTIONS=' ' ARCHIVE_BASE_0_SIZE='640000' ARCHIVE_BASE_0_VERSION='1.0-gog2.0.0.5' ARCHIVE_REQUIRED_ENGINE_2_NAME='OldUnreal-UTPatch469e-Linux-amd64.tar.bz2' ARCHIVE_REQUIRED_ENGINE_2_MD5='6ce309ddf5fb0d60c33be2f2ba92c71b' ARCHIVE_REQUIRED_ENGINE_2_SIZE='191188' ARCHIVE_REQUIRED_ENGINE_2_VERSION='469e-1' ARCHIVE_REQUIRED_ENGINE_2_URL='https://github.com/OldUnreal/UnrealTournamentPatches/releases/tag/v469e' ARCHIVE_REQUIRED_ENGINE_1_NAME='OldUnreal-UTPatch469d-Linux-amd64.tar.bz2' ARCHIVE_REQUIRED_ENGINE_1_MD5='d0e133165bf1630288583e52a40b90db' ARCHIVE_REQUIRED_ENGINE_1_SIZE='187239' ARCHIVE_REQUIRED_ENGINE_1_VERSION='469d-1' ARCHIVE_REQUIRED_ENGINE_1_URL='https://github.com/OldUnreal/UnrealTournamentPatches/releases/tag/v469d' ARCHIVE_REQUIRED_ENGINE_0_NAME='OldUnreal-UTPatch469c-Linux-amd64.tar.bz2' ARCHIVE_REQUIRED_ENGINE_0_MD5='6cd032e70460b1393d9514ffe81dcb1a' ARCHIVE_REQUIRED_ENGINE_0_VERSION='469c-1' ARCHIVE_REQUIRED_ENGINE_0_URL='https://github.com/OldUnreal/UnrealTournamentPatches/releases/tag/v469c' ## Unreal Tournament (game installer) CONTENT_GAME_DATA_PATH='app' CONTENT_GAME_DATA_FILES=' Maps Music Sounds Textures' CONTENT_DOC_DATA_PATH='app' CONTENT_DOC_DATA_FILES=' Help Manual' ## Native Linux engine CONTENT_PATH_DEFAULT='.' CONTENT_LIBS_BIN_RELATIVE_PATH='System64' CONTENT_LIBS_BIN_FILES=' ALAudio.so Cluster.so Core.so Editor.so Engine.so Fire.so IpDrv.so libfmod.so.13 OpenGLDrv.so Render.so SDLDrv.so udemo.so UWeb.so VulkanDrv.so XOpenGLDrv.so' CONTENT_FONTS_DATA_RELATIVE_PATH='System64/Fonts' CONTENT_FONTS_DATA_FILES=' CourierPrime.ttf OpenSans-Regular.ttf Tinos-Regular.ttf' CONTENT_GAME_BIN_FILES=' System System64/Default.ini System64/DefUser.ini System64/Packages.md5 System64/ucc-bin System64/ucc-bin-amd64 System64/ut-bin System64/ut-bin-amd64' CONTENT_GAME0_DATA_FILES=' SystemLocalized Textures Web' CONTENT_DOC0_DATA_FILES=' Help LICENSE.md' APP_MAIN_EXE='System64/ut-bin-amd64' APP_MAIN_ICON='app/System/Unreal.ico' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libgcc_s.so.1 libmpg123.so.0 libm.so.6 libopenal.so.1 libpthread.so.0 librt.so.1 libSDL2-2.0.so.0 libsndfile.so.1 libstdc++.so.6 libxmp.so.4' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Chek for the presence of the game engine archive. archive_initialize_required \ 'ARCHIVE_ENGINE' \ 'ARCHIVE_REQUIRED_ENGINE_2' \ 'ARCHIVE_REQUIRED_ENGINE_1' \ 'ARCHIVE_REQUIRED_ENGINE_0' archive_version=$(archive_version 'ARCHIVE_ENGINE' | cut --delimiter='-' --fields=1) archive_release=$(archive_version "$(current_archive)" | cut --delimiter='-' --fields=2) export "$(current_archive)_VERSION=${archive_version}-${archive_release}" # Extract game data archive_extraction_default archive_extraction 'ARCHIVE_ENGINE' # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # The game engine looks for libmpg123.so instead of libmpg123.so.0. case "$(option_value 'package')" in ('arch') # Arch Linux already provides the unversioned .so. ;; ('gentoo'|'egentoo') # Gentoo already provides the unversioned .so. ;; ('deb') library_destination="$(package_path 'PKG_BIN')$(path_libraries)/libmpg123.so" mkdir --parents "$(dirname "$library_destination")" ln --symbolic "$(path_libraries_system)/libmpg123.so.0" "$library_destination" ;; esac # Write launchers ## Trying to run the game with wayland SDL backend leads to a crash on launch: ## Critical: Inconsistent SDL window flags ## (SDL 3.2.26) APP_MAIN_PRERUN=' # Prevent a crash on launch when wayland SDL backend is used. if [ "${SDL_VIDEODRIVER:-}" = "wayland" ]; then unset SDL_VIDEODRIVER fi ' ## Run the game binary from its parent directory. game_exec_line() { cat <<- 'EOF' cd System64 ./ut-bin-amd64 "$@" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-vampire-the-masquerade-bloodlines.sh0000755000000000000000000003415114471751340020662 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2020 Mopi set -o errexit ### # Vampire: The Masquerade - Bloodlines # send your bug reports to vv221@dotslashplay.it ### script_version=20260228.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='vampire-the-masquerade-bloodlines' GAME_NAME='Vampire: The Masquerade - Bloodlines' # The DotEmu store closed down in 2017, since then they only advertise Steam. ARCHIVE_BASE_DOTEMU_0_NAME='vampire_the_masquerade_bloodlines_v1.2.exe' ARCHIVE_BASE_DOTEMU_0_MD5='8981da5fa644475583b2888a67fdd741' ARCHIVE_BASE_DOTEMU_0_EXTRACTOR='unar' ARCHIVE_BASE_DOTEMU_0_SIZE='5013863' ARCHIVE_BASE_DOTEMU_0_VERSION='1.2-dotemu1' ARCHIVE_BASE_GOG_EN_6_NAME='setup_vampire_the_masquerade_-_bloodlines_1.2_(up_11.511.410.2)_(68368).exe' ARCHIVE_BASE_GOG_EN_6_MD5=' 553f6bdbd8b23fa143da22d9ea47a20b b2c1eff2640a4b7c52922a3c1ce3f36b' ARCHIVE_BASE_GOG_EN_6_TYPE='innosetup' ARCHIVE_BASE_GOG_EN_6_PART1_NAME='setup_vampire_the_masquerade_-_bloodlines_1.2_(up_11.511.410.2)_(68368)-1.bin' ARCHIVE_BASE_GOG_EN_6_PART1_MD5=' f0ca81565507da32075e6334a96a173f 96b585f441224ab5f8658815b74a0763' ARCHIVE_BASE_GOG_EN_6_SIZE='4152647' ARCHIVE_BASE_GOG_EN_6_VERSION='1.2-gog68368' ARCHIVE_BASE_GOG_EN_6_URL='https://www.gog.com/game/vampire_the_masquerade_bloodlines' ARCHIVE_BASE_GOG_FR_6_NAME='setup_vampire_the_masquerade_-_bloodlines_1.2_(up_11.511.410.2)_(french)_(68368).exe' ARCHIVE_BASE_GOG_FR_6_MD5=' 5bb92c9507ef442ec95dade41f940c48 ea6cec86b0eb1986164eefb6ddf458ef' ARCHIVE_BASE_GOG_FR_6_TYPE='innosetup' ARCHIVE_BASE_GOG_FR_6_PART1_NAME='setup_vampire_the_masquerade_-_bloodlines_1.2_(up_11.511.410.2)_(french)_(68368)-1.bin' ARCHIVE_BASE_GOG_FR_6_PART1_MD5=' c003bb4e2973fb7487bef0b50ed46c6a 01194704a7c9b1e7c67e4743bcdb81f7' ARCHIVE_BASE_GOG_FR_6_SIZE='4184265' ARCHIVE_BASE_GOG_FR_6_VERSION='1.2-gog68368' ARCHIVE_BASE_GOG_FR_6_URL='https://www.gog.com/game/vampire_the_masquerade_bloodlines' ARCHIVE_BASE_GOG_EN_4_NAME='setup_vampire_the_masquerade_-_bloodlines_1.2_(up_11.111.010.2)_hotfix_(55110).exe' ARCHIVE_BASE_GOG_EN_4_MD5='9a1c0824945008a3d520103002479fbc' ARCHIVE_BASE_GOG_EN_4_TYPE='innosetup' ARCHIVE_BASE_GOG_EN_4_PART1_NAME='setup_vampire_the_masquerade_-_bloodlines_1.2_(up_11.111.010.2)_hotfix_(55110)-1.bin' ARCHIVE_BASE_GOG_EN_4_PART1_MD5='50cbbf0ad7063e089ba4663cb599b7ac' ARCHIVE_BASE_GOG_EN_4_SIZE='4300000' ARCHIVE_BASE_GOG_EN_4_VERSION='1.2-gog55110' ARCHIVE_BASE_GOG_FR_4_NAME='setup_vampire_the_masquerade_-_bloodlines_1.2_(up_11.111.010.2)_hotfix_(french)_(55110).exe' ARCHIVE_BASE_GOG_FR_4_MD5='2cf2aa09a1bfbd3151ded2457037f2ab' ARCHIVE_BASE_GOG_FR_4_TYPE='innosetup' ARCHIVE_BASE_GOG_FR_4_PART1_NAME='setup_vampire_the_masquerade_-_bloodlines_1.2_(up_11.111.010.2)_hotfix_(french)_(55110)-1.bin' ARCHIVE_BASE_GOG_FR_4_PART1_MD5='3925827a5aa7dfcd53609130ef128a18' ARCHIVE_BASE_GOG_FR_4_SIZE='4300000' ARCHIVE_BASE_GOG_FR_4_VERSION='1.2-gog55110' ARCHIVE_BASE_GOG_EN_3_NAME='setup_vampire_the_masquerade_-_bloodlines_1.2_(up_11.111.010.2)_(54206).exe' ARCHIVE_BASE_GOG_EN_3_MD5='97cc63738b2eab02140c38883d82fa8b' ARCHIVE_BASE_GOG_EN_3_TYPE='innosetup' ARCHIVE_BASE_GOG_EN_3_PART1_NAME='setup_vampire_the_masquerade_-_bloodlines_1.2_(up_11.111.010.2)_(54206)-1.bin' ARCHIVE_BASE_GOG_EN_3_PART1_MD5='5024eb1ddef8ec13c2ed433d399193cf' ARCHIVE_BASE_GOG_EN_3_SIZE='4300000' ARCHIVE_BASE_GOG_EN_3_VERSION='1.2-gog54206' ARCHIVE_BASE_GOG_FR_3_NAME='setup_vampire_the_masquerade_-_bloodlines_1.2_(up_11.111.010.2)_(french)_(54206).exe' ARCHIVE_BASE_GOG_FR_3_MD5='80bb9fab0f97230989b5f15aa5118f51' ARCHIVE_BASE_GOG_FR_3_TYPE='innosetup' ARCHIVE_BASE_GOG_FR_3_PART1_NAME='setup_vampire_the_masquerade_-_bloodlines_1.2_(up_11.111.010.2)_(french)_(54206)-1.bin' ARCHIVE_BASE_GOG_FR_3_PART1_MD5='3624eb7399c9d260889ab245f9bd43b1' ARCHIVE_BASE_GOG_FR_3_SIZE='4300000' ARCHIVE_BASE_GOG_FR_3_VERSION='1.2-gog54206' ARCHIVE_BASE_GOG_EN_2_NAME='setup_vampire_the_masquerade_-_bloodlines_1.2_(up_10.2)_(28160).exe' ARCHIVE_BASE_GOG_EN_2_MD5='8c1907871d2ded8afda77d5b570d5383' ARCHIVE_BASE_GOG_EN_2_TYPE='innosetup' ARCHIVE_BASE_GOG_EN_2_PART1_NAME='setup_vampire_the_masquerade_-_bloodlines_1.2_(up_10.2)_(28160)-1.bin' ARCHIVE_BASE_GOG_EN_2_PART1_MD5='a28edc25dc3c0f818673196852490628' ARCHIVE_BASE_GOG_EN_2_SIZE='4100000' ARCHIVE_BASE_GOG_EN_2_VERSION='1.2-gog28160' ARCHIVE_BASE_GOG_FR_2_NAME='setup_vampire_the_masquerade_-_bloodlines_1.2_(up_10.2)_(french)_(28160).exe' ARCHIVE_BASE_GOG_FR_2_MD5='8877c5ab14363b249e72034fe5333921' ARCHIVE_BASE_GOG_FR_2_TYPE='innosetup' ARCHIVE_BASE_GOG_FR_2_PART1_NAME='setup_vampire_the_masquerade_-_bloodlines_1.2_(up_10.2)_(french)_(28160)-1.bin' ARCHIVE_BASE_GOG_FR_2_PART1_MD5='0dddbbcd2dee5474066b4863c56aa5f0' ARCHIVE_BASE_GOG_FR_2_SIZE='4200000' ARCHIVE_BASE_GOG_FR_2_VERSION='1.2-gog28160' ARCHIVE_BASE_GOG_EN_1_NAME='setup_vampire_the_masquerade_-_bloodlines_1.2_(up_10.0)_(22135).exe' ARCHIVE_BASE_GOG_EN_1_MD5='095771daf8fd1b26d34a099f182c8d4a' ARCHIVE_BASE_GOG_EN_1_TYPE='innosetup' ARCHIVE_BASE_GOG_EN_1_PART1_NAME='setup_vampire_the_masquerade_-_bloodlines_1.2_(up_10.0)_(22135)-1.bin' ARCHIVE_BASE_GOG_EN_1_PART1_MD5='ef8a3fe212da189d811fcf6bc70a1e40' ARCHIVE_BASE_GOG_EN_1_SIZE='4100000' ARCHIVE_BASE_GOG_EN_1_VERSION='1.2-gog22135' ARCHIVE_BASE_GOG_EN_0_NAME='setup_vtmb_1.2_(up_9.7_basic)_(11362).exe' ARCHIVE_BASE_GOG_EN_0_MD5='62b8db3b054595fb46bd8eaa5f8ae7bc' ARCHIVE_BASE_GOG_EN_0_TYPE='innosetup' ARCHIVE_BASE_GOG_EN_0_PART1_NAME='setup_vtmb_1.2_(up_9.7_basic)_(11362)-1.bin' ARCHIVE_BASE_GOG_EN_0_PART1_MD5='4177042d5a6e03026d52428e900e6137' ARCHIVE_BASE_GOG_EN_0_SIZE='4100000' ARCHIVE_BASE_GOG_EN_0_VERSION='1.2-gog11362' CONTENT_PATH_DEFAULT_DOTEMU='.' CONTENT_PATH_DEFAULT_GOG='.' CONTENT_PATH_DEFAULT_GOG_EN_0='app' # The game fails to launch if any of the following libraries is missing. CONTENT_LIBS_BIN_FILES=' bin/launcher.dll bin/filesystem_stdio.dll bin/materialsystem.dll bin/engine.dll bin/vgui2.dll bin/vguimatsurface.dll bin/shaderapidx9.dll bin/VPHYSICS.DLL bin/StudioRender.dll vampire/cl_dlls/GameUI.dll' # loader.dll is only used by the GOG build. CONTENT_LIBS_BIN_FILES_GOG="$CONTENT_LIBS_BIN_FILES loader.dll" # launcher.dll requirements CONTENT_LIBS0_BIN_FILES=' bin/vstdlib.dll bin/tier0.dll' # engine.dll requirements CONTENT_LIBS1_BIN_FILES=' bin/binkw32.dll bin/vampire_python21.dll' # The game crashes after an initial loading screen if the following library is missing. CONTENT_LIBS2_BIN_FILES=' bin/vaudio_miles.dll' # vaudio_miles.dll requirements CONTENT_LIBS3_BIN_FILES=' bin/mss32.dll' # The game errors out after an initial loading screen if the following library is missing. CONTENT_LIBS4_BIN_FILES=' vampire/cl_dlls/client.dll' # The game menu is displayed as wireframe if any of the following libraries is missing. CONTENT_LIBS5_BIN_FILES=' bin/stdshader_dx6.dll bin/stdshader_dx7.dll bin/stdshader_dx8.dll bin/stdshader_dx9.dll' # The game crashes when trying to start a new game if the following library is missing. CONTENT_LIBS6_BIN_FILES=' vampire/dlls/vampire.dll' CONTENT_GAME_BIN_FILES_DOTEMU=' bin/mssmp3.asi bin/mssvoice.asi vampire.exe' CONTENT_GAME_BIN_FILES_GOG=' bin/loader bin/mssmp3.asi bin/mssvoice.asi loader.exe vampire.exe' # These paths are created at the "Extract game data" step. CONTENT_GAME_L10N_EN_PATH_DOTEMU='l10n-en' CONTENT_GAME_L10N_FR_PATH_DOTEMU='l10n-fr' CONTENT_GAME_L10N_FILES=' vampire/pack101.vpk vampire/pack103.vpk' CONTENT_GAME_L10N_EN_FILES="$CONTENT_GAME_L10N_FILES" CONTENT_GAME_L10N_FR_FILES="$CONTENT_GAME_L10N_FILES" CONTENT_GAME_DATA_FILES=' vampire/maps vampire/media vampire/pack000.vpk vampire/pack001.vpk vampire/pack002.vpk vampire/pack003.vpk vampire/pack004.vpk vampire/pack005.vpk vampire/pack006.vpk vampire/pack007.vpk vampire/pack008.vpk vampire/pack009.vpk vampire/pack010.vpk vampire/pack100.vpk vampire/pack102.vpk vampire/python vampire/resource vampire/sound vtmbup-loader.txt vtmbup-readme.txt *.dat *.mpg *.tth' # These paths are created at the "Extract game data" step. CONTENT_DOC_L10N_EN_PATH_DOTEMU='l10n-en' CONTENT_DOC_L10N_FR_PATH_DOTEMU='l10n-fr' CONTENT_DOC_L10N_FILES=' docs *.pdf' CONTENT_DOC_L10N_EN_FILES="$CONTENT_DOC_L10N_FILES" CONTENT_DOC_L10N_FR_FILES="$CONTENT_DOC_L10N_FILES" USER_PERSISTENT_DIRECTORIES=' vampire/cfg vampire/maps/graphs vampire/python vampire/save' USER_PERSISTENT_FILES=' vampire/vidcfg.bin' WINE_VIRTUAL_DESKTOP='auto' APP_MAIN_EXE_DOTEMU='vampire.exe' # Using vampire.exe directly with the GOG build leads to lingering processes. # cf. https://bugs.winehq.org/show_bug.cgi?id=56713 # (WINE 9.9) APP_MAIN_EXE_GOG='loader.exe' APP_MAIN_ICON='vampire.exe' # Work around mysterious disappearance of zlib1.dll. # (WINE 10.0) APP_MAIN_PRERUN=' # Work around mysterious disappearance of zlib1.dll. system_library="${WINEPREFIX}/drive_c/windows/system32/zlib1.dll" if \ [ ! -e "$system_library" ] && [ -e "${system_library}.bak" ] then mv "${system_library}.bak" "$system_library" fi ' # Keep hold of the terminal until the game process actually ends, # instead of returning as soon as the game is started. APP_MAIN_POSTRUN=' # Keep hold of the terminal until the game process actually ends, # instead of returning as soon as the game is started. sleep 10s pidwait --euid "$USER" --ignore-case vampire.exe ' PACKAGES_LIST_DOTEMU=' PKG_BIN PKG_L10N_EN PKG_L10N_FR PKG_DATA' PACKAGES_LIST_GOG_EN=' PKG_BIN PKG_L10N_EN PKG_DATA' PACKAGES_LIST_GOG_FR=' PKG_BIN PKG_L10N_FR PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_L10N_BASE PKG_DATA' PKG_BIN_DEPENDENCIES_COMMANDS=' pidwait' PKG_L10N_BASE_ID="${GAME_ID}-l10n" PKG_L10N_EN_ID="${PKG_L10N_BASE_ID}-en" PKG_L10N_FR_ID="${PKG_L10N_BASE_ID}-fr" PKG_L10N_PROVIDES=" $PKG_L10N_BASE_ID" PKG_L10N_EN_ENSCRIPTION='English localization' PKG_L10N_FR_FRSCRIPTION='French localization' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # DotEmu archive # - unzip is required to extract the content of inner archives. # - convmv is used to convert file paths to lower case. REQUIREMENTS_LIST_DOTEMU=' unzip convmv' # Load common functions. # Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Scan library paths used by ./play.it < 2.35. # This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default case "$(current_archive)" in ('ARCHIVE_BASE_DOTEMU_'*) ( cd "${PLAYIT_WORKDIR}/gamedata/$(content_path_default)" localised_paths=' Docs Vampire/pack101.vpk Vampire/pack103.vpk' localised_paths_en=" $localised_paths manual_en.pdf" localised_paths_fr=" $localised_paths Manual_fr.pdf" ARCHIVE_COMMON1_PATH="${PLAYIT_WORKDIR}/gamedata/$(content_path_default)/common1.zip" archive_extraction 'ARCHIVE_COMMON1' rm "$(archive_path 'ARCHIVE_COMMON1')" ARCHIVE_COMMON2_PATH="${PLAYIT_WORKDIR}/gamedata/$(content_path_default)/common2.zip" archive_extraction 'ARCHIVE_COMMON2' rm "$(archive_path 'ARCHIVE_COMMON2')" ARCHIVE_EN_PATH="${PLAYIT_WORKDIR}/gamedata/$(content_path_default)/en.zip" archive_extraction 'ARCHIVE_EN' rm "$(archive_path 'ARCHIVE_EN')" # Localised paths are moved out of the way to prevent them from being overwritten. mkdir 'l10n-en' # Silence a ShellCheck false positive, word splitting is expected here. # shellcheck disable=SC2086 cp --link --parents --recursive $localised_paths_en 'l10n-en' # shellcheck disable=SC2086 rm --recursive $localised_paths ARCHIVE_FR_PATH="${PLAYIT_WORKDIR}/gamedata/$(content_path_default)/fr.zip" archive_extraction 'ARCHIVE_FR' rm "$(archive_path 'ARCHIVE_FR')" # Localised paths are moved out of the way to prevent them from being overwritten. mkdir 'l10n-fr' # Silence a ShellCheck false positive, word splitting is expected here. # shellcheck disable=SC2086 cp --link --parents --recursive $localised_paths_fr 'l10n-fr' # shellcheck disable=SC2086 rm --recursive $localised_paths tolower . ) ;; esac # Include game data content_inclusion_icons 'PKG_DATA' content_inclusion_default # Give access to character histories (backgrounds). config_file="$(package_path 'PKG_BIN')$(path_game_data)/vampire/cfg/config.cfg" mkdir --parents "$(dirname "$config_file")" cat > "$config_file" <<- EOF vchar_edit_histories "1" EOF # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --symbolic "$dll_source" "$dll_destination" done EOF } launchers_generation # Build packages. packages_generation case "$(current_archive)" in ('ARCHIVE_BASE_DOTEMU_'*) case "$(messages_language)" in ('fr') lang_string='version %s :' lang_en='anglaise' lang_fr='française' ;; ('en'|*) lang_string='%s version:' lang_en='English' lang_fr='French' ;; esac printf '\n' printf "$lang_string" "$lang_en" print_instructions 'PKG_BIN' 'PKG_L10N_EN' 'PKG_DATA' printf "$lang_string" "$lang_fr" print_instructions 'PKG_BIN' 'PKG_L10N_FR' 'PKG_DATA' ;; (*) print_instructions ;; esac # Clean up. working_directory_cleanup exit 0 games/play-vampire-the-masquerade-stories-of-new-york-series.sh0000755000000000000000000001667414471751340023675 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2020 Mopi # SPDX-FileCopyrightText: © 2021 Antoine Le Gonidec set -o errexit ### # Vampire: The Masquerade - Stories of New York series: # - Vampire: The Masquerade - Coteries of New York # - Vampire: The Masquerade - Shadows of New York # - Vampire: The Masquerade - Reckoning of New York # send your bug reports to vv221@dotslashplay.it ### script_version=20260330.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID_COTERIES='vampire-the-masquerade-coteries-of-new-york' GAME_NAME_COTERIES='Vampire: The Masquerade - Coteries of New York' GAME_ID_SHADOWS='vampire-the-masquerade-shadows-of-new-york' GAME_NAME_SHADOWS='Vampire: The Masquerade - Shadows of New York' GAME_ID_RECKONING='vampire-the-masquerade-reckoning-of-new-york' GAME_NAME_RECKONING='Vampire: The Masquerade - Reckoning of New York' ARCHIVE_BASE_COTERIES_2_NAME='vampire_the_masquerade_coteries_of_new_york_1_0_12_52098.sh' ARCHIVE_BASE_COTERIES_2_MD5='035735d7a7717c4c31cce156511ec8b0' ARCHIVE_BASE_COTERIES_2_SIZE='3300000' ARCHIVE_BASE_COTERIES_2_VERSION='1.0.12-gog52098' ARCHIVE_BASE_COTERIES_2_URL='https://www.gog.com/game/vampire_the_masquerade_coteries_of_new_york' ARCHIVE_BASE_COTERIES_1_NAME='vampire_the_masquerade_coteries_of_new_york_1_0_9_45543.sh' ARCHIVE_BASE_COTERIES_1_MD5='6310c15fabd1768d00faa57f83f2de5e' ARCHIVE_BASE_COTERIES_1_SIZE='3300000' ARCHIVE_BASE_COTERIES_1_VERSION='1.0.9-gog45543' ARCHIVE_BASE_COTERIES_0_NAME='vampire_the_masquerade_coteries_of_new_york_1_0_7_40980.sh' ARCHIVE_BASE_COTERIES_0_MD5='146113ea6b7295104413d8ce2b1fbf4e' ARCHIVE_BASE_COTERIES_0_SIZE='3200000' ARCHIVE_BASE_COTERIES_0_VERSION='1.0.7-gog40980' ARCHIVE_BASE_SHADOWS_1_NAME='vampire_the_masquerade_shadows_of_new_york_1_0_1_51032.sh' ARCHIVE_BASE_SHADOWS_1_MD5='0ec3a59f889b30e7d632f65dcdf0ac6b' ARCHIVE_BASE_SHADOWS_1_SIZE='3319144' ARCHIVE_BASE_SHADOWS_1_VERSION='1.0.1-gog51032' ARCHIVE_BASE_SHADOWS_1_URL='https://www.gog.com/game/vampire_the_masquerade_shadows_of_new_york' ARCHIVE_BASE_SHADOWS_0_NAME='vampire_the_masquerade_shadows_of_new_york_1_0_0_41075.sh' ARCHIVE_BASE_SHADOWS_0_MD5='e7880d6e417f81f47b079c9cdc4fb907' ARCHIVE_BASE_SHADOWS_0_SIZE='3300000' ARCHIVE_BASE_SHADOWS_0_VERSION='1.0.0-gog41075' ARCHIVE_BASE_RECKONING_1_NAME='setup_vtm_reckoning_of_new_york_testks_(85858).exe' ARCHIVE_BASE_RECKONING_1_MD5='04996b98511c4c1555a8056339f800e5' ARCHIVE_BASE_RECKONING_1_TYPE='innosetup' ARCHIVE_BASE_RECKONING_1_SIZE='745188' ARCHIVE_BASE_RECKONING_1_VERSION='1.0.2-gog85858' ARCHIVE_BASE_RECKONING_1_URL='https://www.gog.com/game/vampire_the_masquerade_reckoning_of_new_york' ARCHIVE_BASE_RECKONING_0_NAME='setup_vampire_the_masquerade_-_reckoning_of_new_york_1.0.1.1147_(64bit)_(76185).exe' ARCHIVE_BASE_RECKONING_0_MD5='8dd698c31c0f26818b109543436ea94f' ARCHIVE_BASE_RECKONING_0_TYPE='innosetup' ARCHIVE_BASE_RECKONING_0_SIZE='792005' ARCHIVE_BASE_RECKONING_0_VERSION='1.0.1-gog76185' UNITY3D_NAME_COTERIES='VtM Coteries of New York' UNITY3D_NAME_SHADOWS='Vampire the Masquerade - Shadows of New York' UNITY3D_NAME_RECKONING='VtM Reckoning of New York' UNITY3D_PLUGINS_COTERIES=' libfmod.so libfmodstudio.so' UNITY3D_PLUGINS_SHADOWS=' libfmod.so libfmodstudio.so' # TODO: Experimental support for Windows Unity3D plugins, # no support in ./play.it library yet. # (./play.it 2.35) # Prevent a freeze during the initial loading. UNITY3D_PLUGINS_RECKONING=' GalaxyCSharpGlue.dll fmodstudio.dll' # GalaxyCSharpGlue.dll requirement UNITY3D_PLUGINS_RECKONING="$UNITY3D_PLUGINS_RECKONING Galaxy64.dll" CONTENT_PATH_DEFAULT_LINUX='data/noarch/game' CONTENT_PATH_DEFAULT_COTERIES="$CONTENT_PATH_DEFAULT_LINUX" CONTENT_PATH_DEFAULT_SHADOWS="$CONTENT_PATH_DEFAULT_LINUX" CONTENT_PATH_DEFAULT_RECKONING='.' # VtM Reckoning of New York.exe requirements CONTENT_LIBS_BIN_FILES_RECKONING=' UnityPlayer.dll' # Prevent a fatal error on launch. CONTENT_LIBS0_BIN_FILES_RECKONING=' GameAssembly.dll' # GameAssembly.dll requirements CONTENT_LIBS1_BIN_FILES_RECKONING=' baselib.dll' WINE_PERSISTENT_DIRECTORIES_RECKONING=' users/${USER}/AppData/LocalLow/DrawDistance/VtM Reckoning of New York' # Default to windowed mode on first launch. APP_MAIN_PRERUN_COMMON=' config_file="${config_directory}/Settings.save" if [ ! -e "$config_file" ]; then mkdir --parents "$config_directory" cat > "$config_file" <<- EOF {"FullScreenMode":false} EOF fi ' APP_MAIN_PRERUN_COTERIES=' # Default to windowed mode on first launch. config_directory="${XDG_CONFIG_HOME:="$HOME/.config"}/unity3d/DrawDistance/VtM Coteries of New York/Saves" '"${APP_MAIN_PRERUN_COMMON}" APP_MAIN_PRERUN_SHADOWS=' # Default to windowed mode on first launch config_directory="${XDG_CONFIG_HOME:="$HOME/.config"}/unity3d/DrawDistance/VtM Shadows of New York/Saves" '"${APP_MAIN_PRERUN_COMMON}" PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES_LINUX=' libc.so.6 libdl.so.2 libgcc_s.so.1 libm.so.6 libpthread.so.0 librt.so.1 libstdc++.so.6 libz.so.1' PKG_BIN_DEPENDENCIES_LIBRARIES_COTERIES="$PKG_BIN_DEPENDENCIES_LIBRARIES_LINUX" PKG_BIN_DEPENDENCIES_LIBRARIES_SHADOWS="$PKG_BIN_DEPENDENCIES_LIBRARIES_LINUX" PKG_DATA_ID_COTERIES="${GAME_ID_COTERIES}-data" PKG_DATA_ID_SHADOWS="${GAME_ID_SHADOWS}-data" PKG_DATA_ID_RECKONING="${GAME_ID_RECKONING}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' # Reckoning of New York - Include Unity3D plugins. case "$(current_archive)" in ('ARCHIVE_BASE_RECKONING_'*) unity3d_plugins_inclusion 'PKG_BIN' "$(unity3d_name)_Data/Plugins/x86_64" "$(path_libraries)/$(unity3d_name)_Data/Plugins" # Prevent inclusion of unwanted shipped libraries. content_inclusion_default_libraries 'PKG_BIN' rm --recursive "$(path_archive_contents)/$(unity3d_name)_Data/Plugins" ;; esac content_inclusion_default # Write launchers. # Reckoning of New York - Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --symbolic "$dll_source" "$dll_destination" done EOF } # Coteries of New York / Shadows of New York - Shipped libraries expect an executable stack. case "$(current_archive)" in ('ARCHIVE_BASE_COTERIES_'*|'ARCHIVE_BASE_SHADOWS_'*) game_exec_line() { # shellcheck disable=SC2086 local application=$1 local application_exe application_exe=$(application_exe "$application") cat <<- EOF GLIBC_TUNABLES=glibc.rtld.execstack=2 \ "./${application_exe}" -logFile "./logs/\$(date +%F-%R).log" "\$@" EOF } ;; esac launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-wanderlust-series.sh0000755000000000000000000000633514471751340015647 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2025 Antoine Le Gonidec set -o errexit ### # Wanderlust series: # - Wanderlust: Travel Stories # - Wanderlust: Transsiberian # send your bug reports to vv221@dotslashplay.it ### script_version=20250909.2 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID_TRAVELSTORIES='wanderlust-travel-stories' GAME_NAME_TRAVELSTORIES='Wanderlust: Travel Stories' GAME_ID_TRANSSIBERIAN='wanderlust-transsiberian' GAME_NAME_TRANSSIBERIAN='Wanderlust: Transsiberian' ARCHIVE_BASE_TRAVELSTORIES_0_NAME='wanderlust_travel_stories_1_5_34189.sh' ARCHIVE_BASE_TRAVELSTORIES_0_MD5='af68a7b1d7b595d2f0548dc847b13ec8' ARCHIVE_BASE_TRAVELSTORIES_0_SIZE='1334994' ARCHIVE_BASE_TRAVELSTORIES_0_VERSION='1.5-gog34189' ARCHIVE_BASE_TRAVELSTORIES_0_URL='https://www.gog.com/game/wanderlust_travel_stories' ARCHIVE_BASE_TRANSSIBERIAN_0_NAME='wanderlust_transsiberian_1_1_13_2003271410_37232.sh' ARCHIVE_BASE_TRANSSIBERIAN_0_MD5='bc70174132aa81a5f858e40812e4aa9c' ARCHIVE_BASE_TRANSSIBERIAN_0_SIZE='493581' ARCHIVE_BASE_TRANSSIBERIAN_0_VERSION='1.1.13-gog37232' ARCHIVE_BASE_TRANSSIBERIAN_0_URL='https://www.gog.com/game/wanderlust_transsiberian' UNITY3D_NAME_TRAVELSTORIES='Wanderlust' UNITY3D_NAME_TRANSSIBERIAN='Transsiberian' UNITY3D_PLUGINS=' libfmod.so libfmodL.so libfmodstudio.so libfmodstudioL.so libgvraudio.so libresonanceaudio.so ScreenSelector.so' CONTENT_PATH_DEFAULT='data/noarch/game' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libatk-1.0.so.0 libcairo.so.2 libc.so.6 libdl.so.2 libfontconfig.so.1 libfreetype.so.6 libgcc_s.so.1 libgdk_pixbuf-2.0.so.0 libgdk-x11-2.0.so.0 libgio-2.0.so.0 libglib-2.0.so.0 libgobject-2.0.so.0 libgtk-x11-2.0.so.0 libm.so.6 libpango-1.0.so.0 libpangocairo-1.0.so.0 libpangoft2-1.0.so.0 libpthread.so.0 librt.so.1 libstdc++.so.6' PKG_DATA_ID_TRAVELSTORIES="${GAME_ID_TRAVELSTORIES}-data" PKG_DATA_ID_TRANSSIBERIAN="${GAME_ID_TRANSSIBERIAN}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. ## Thes games expect an executable stack through dynamically loaded libraries. game_exec_line() { local application application="$1" local application_exe application_exe=$(application_exe "$application") cat <<- EOF GLIBC_TUNABLES=glibc.rtld.execstack=2 "./${application_exe}" "\$@" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-war-for-the-overworld-expansions-themes.sh0000755000000000000000000002535614471751340022017 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2022 Antoine Le Gonidec set -o errexit ### # War for the Overworld themes: # - The Cynical Imp # - Founders Theme # - Kickstarter Theme # - Underlord Edition # - Seasonal Worker Skins # send your bug reports to vv221@dotslashplay.it ### script_version=20250820.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='war-for-the-overworld' GAME_NAME='War for the Overworld' EXPANSION_ID_UNDERLORD='underlord-edition' EXPANSION_NAME_UNDERLORD='Underlord Edition' EXPANSION_ID_FOUNDERS='founders-theme' EXPANSION_NAME_FOUNDERS='Founders Theme' EXPANSION_ID_KICKSTARTER='kickstarter-theme' EXPANSION_NAME_KICKSTARTER='Kickstarter Theme' EXPANSION_ID_CYNICAL='the-cynical-imp' EXPANSION_NAME_CYNICAL='The Cynical Imp' EXPANSION_ID_SEASONALWORKER='seasonal-worker-skins' EXPANSION_NAME_SEASONALWORKER='Seasonal Worker Skins' # Archives ## Underlord Edition ARCHIVE_BASE_UNDERLORD_10_NAME='war_for_the_overworld_underlord_edition_upgrade_v2_1_3f1_82000.sh' ARCHIVE_BASE_UNDERLORD_10_MD5='5b2a56f4ce9f3d2895a90c12321db8ca' ARCHIVE_BASE_UNDERLORD_10_SIZE='1048' ARCHIVE_BASE_UNDERLORD_10_VERSION='2.1.3f1-gog82000' ARCHIVE_BASE_UNDERLORD_10_URL='https://www.gog.com/game/war_for_the_overworld_underlord_edition_upgrade' ARCHIVE_BASE_UNDERLORD_9_NAME='war_for_the_overworld_underlord_edition_upgrade_v2_1_3_81115.sh' ARCHIVE_BASE_UNDERLORD_9_MD5='5eac82814fdebfba78d4370a4b0519d6' ARCHIVE_BASE_UNDERLORD_9_SIZE='1048' ARCHIVE_BASE_UNDERLORD_9_VERSION='2.1.3-gog81115' ARCHIVE_BASE_UNDERLORD_8_NAME='war_for_the_overworld_underlord_edition_upgrade_v2_1_2_76431.sh' ARCHIVE_BASE_UNDERLORD_8_MD5='c214676919d7475a5dc2558ab8481b2e' ARCHIVE_BASE_UNDERLORD_8_SIZE='1048' ARCHIVE_BASE_UNDERLORD_8_VERSION='2.1.2-gog76431' ARCHIVE_BASE_UNDERLORD_7_NAME='war_for_the_overworld_underlord_edition_upgrade_v2_1_1_73576.sh' ARCHIVE_BASE_UNDERLORD_7_MD5='066e110e2b85ffca512ce8c8d3d67ca3' ARCHIVE_BASE_UNDERLORD_7_SIZE='1048' ARCHIVE_BASE_UNDERLORD_7_VERSION='2.1.1-gog73576' ARCHIVE_BASE_UNDERLORD_6_NAME='war_for_the_overworld_underlord_edition_upgrade_v2_1_0f4_55096.sh' ARCHIVE_BASE_UNDERLORD_6_MD5='b2b81108728fe2bbadd51c7897f9269c' ARCHIVE_BASE_UNDERLORD_6_SIZE='1400' ARCHIVE_BASE_UNDERLORD_6_VERSION='2.1.0f4-gog55096' ARCHIVE_BASE_UNDERLORD_5_NAME='war_for_the_overworld_underlord_edition_upgrade_2_0_7f1_gog_36563.sh' ARCHIVE_BASE_UNDERLORD_5_MD5='7cd85994986cf75f9fd81d4be0df82fe' ARCHIVE_BASE_UNDERLORD_5_SIZE='1300' ARCHIVE_BASE_UNDERLORD_5_VERSION='2.0.7f1-gog36563' ARCHIVE_BASE_UNDERLORD_4_NAME='war_for_the_overworld_underlord_edition_upgrade_2_0_7f1_30014.sh' ARCHIVE_BASE_UNDERLORD_4_MD5='9d67c88dd331703315e9056dc6abb78c' ARCHIVE_BASE_UNDERLORD_4_SIZE='1300' ARCHIVE_BASE_UNDERLORD_4_VERSION='2.0.6f1-gog30014' ARCHIVE_BASE_UNDERLORD_3_NAME='war_for_the_overworld_underlord_edition_upgrade_2_0_6f1_24637.sh' ARCHIVE_BASE_UNDERLORD_3_MD5='0be12c1160fdba4f180dc3776f1bb21e' ARCHIVE_BASE_UNDERLORD_3_SIZE='1300' ARCHIVE_BASE_UNDERLORD_3_VERSION='2.0.6f1-gog24637' ARCHIVE_BASE_UNDERLORD_2_NAME='war_for_the_overworld_underlord_edition_upgrade_2_0_5_24177.sh' ARCHIVE_BASE_UNDERLORD_2_MD5='97857939a158c470d04936bc580838c2' ARCHIVE_BASE_UNDERLORD_2_SIZE='1300' ARCHIVE_BASE_UNDERLORD_2_VERSION='2.0.5-gog24177' ## Founders Theme ARCHIVE_BASE_FOUNDERS_5_NAME='war_for_the_overworld_founders_theme_charity_v2_1_3f1_82000.sh' ARCHIVE_BASE_FOUNDERS_5_MD5='1bac55d944657ebf1fe2532620d6c27c' ARCHIVE_BASE_FOUNDERS_5_SIZE='1048' ARCHIVE_BASE_FOUNDERS_5_VERSION='2.1.3f1-gog82000' ARCHIVE_BASE_FOUNDERS_5_URL='http://buy.wftogame.com/charity/' ARCHIVE_BASE_FOUNDERS_4_NAME='war_for_the_overworld_founders_theme_charity_v2_1_3_81115.sh' ARCHIVE_BASE_FOUNDERS_4_MD5='a80bb2ec79ec76ff3187bbcabba83732' ARCHIVE_BASE_FOUNDERS_4_SIZE='1048' ARCHIVE_BASE_FOUNDERS_4_VERSION='2.1.3-gog81115' ARCHIVE_BASE_FOUNDERS_3_NAME='war_for_the_overworld_founders_theme_charity_v2_1_2_76431.sh' ARCHIVE_BASE_FOUNDERS_3_MD5='5d3a4a047ff40d4d6aede45bc92241a5' ARCHIVE_BASE_FOUNDERS_3_SIZE='1048' ARCHIVE_BASE_FOUNDERS_3_VERSION='2.1.2-gog76431' ARCHIVE_BASE_FOUNDERS_2_NAME='war_for_the_overworld_founders_theme_charity_v2_1_1_73576.sh' ARCHIVE_BASE_FOUNDERS_2_MD5='1b12880acd1ddbd352ff8321e6c0b6c8' ARCHIVE_BASE_FOUNDERS_2_SIZE='1048' ARCHIVE_BASE_FOUNDERS_2_VERSION='2.1.1-gog73576' ARCHIVE_BASE_FOUNDERS_1_NAME='war_for_the_overworld_founders_theme_charity_v2_1_0f4_55096.sh' ARCHIVE_BASE_FOUNDERS_1_MD5='0313b90d995d5f527feea040995677f7' ARCHIVE_BASE_FOUNDERS_1_SIZE='1400' ARCHIVE_BASE_FOUNDERS_1_VERSION='2.1.0f4-gog55096' ARCHIVE_BASE_FOUNDERS_0_NAME='war_for_the_overworld_founders_theme_charity_2_0_7f1_gog_36563.sh' ARCHIVE_BASE_FOUNDERS_0_MD5='a8fec55ffb2c9eda265f7f346c8998e6' ARCHIVE_BASE_FOUNDERS_0_SIZE='1300' ARCHIVE_BASE_FOUNDERS_0_VERSION='2.0.7f1-gog36563' ## Kickstarter Theme ARCHIVE_BASE_KICKSTARTER_5_NAME='war_for_the_overworld_kickstarter_theme_charity_v2_1_3f1_82000.sh' ARCHIVE_BASE_KICKSTARTER_5_MD5='290e2f1c26d55b5b7cf4bf5c7d7ade18' ARCHIVE_BASE_KICKSTARTER_5_SIZE='1048' ARCHIVE_BASE_KICKSTARTER_5_VERSION='2.1.3f1-gog82000' ARCHIVE_BASE_KICKSTARTER_5_URL='http://buy.wftogame.com/charity/' ARCHIVE_BASE_KICKSTARTER_4_NAME='war_for_the_overworld_kickstarter_theme_charity_v2_1_3_81115.sh' ARCHIVE_BASE_KICKSTARTER_4_MD5='d19a49bf32c6686d82ba4d0a2ebddd26' ARCHIVE_BASE_KICKSTARTER_4_SIZE='1048' ARCHIVE_BASE_KICKSTARTER_4_VERSION='2.1.3-gog81115' ARCHIVE_BASE_KICKSTARTER_3_NAME='war_for_the_overworld_kickstarter_theme_charity_v2_1_2_76431.sh' ARCHIVE_BASE_KICKSTARTER_3_MD5='e5f937fe8b8b2b323d06e7b77c579d45' ARCHIVE_BASE_KICKSTARTER_3_SIZE='1048' ARCHIVE_BASE_KICKSTARTER_3_VERSION='2.1.2-gog76431' ARCHIVE_BASE_KICKSTARTER_2_NAME='war_for_the_overworld_kickstarter_theme_charity_v2_1_1_73576.sh' ARCHIVE_BASE_KICKSTARTER_2_MD5='d63028e7708e7bbf167d4ea44db42ab6' ARCHIVE_BASE_KICKSTARTER_2_SIZE='1048' ARCHIVE_BASE_KICKSTARTER_2_VERSION='2.1.1-gog73576' ARCHIVE_BASE_KICKSTARTER_1_NAME='war_for_the_overworld_kickstarter_theme_charity_v2_1_0f4_55096.sh' ARCHIVE_BASE_KICKSTARTER_1_MD5='194826ab3072cd5007a8214fe96bc071' ARCHIVE_BASE_KICKSTARTER_1_SIZE='1400' ARCHIVE_BASE_KICKSTARTER_1_VERSION='2.1.0f4-gog55096' ARCHIVE_BASE_KICKSTARTER_0_NAME='war_for_the_overworld_kickstarter_theme_charity_2_0_7f1_gog_36563.sh' ARCHIVE_BASE_KICKSTARTER_0_MD5='9ee5fad56ab9dd6676ab4718fa7e5e2e' ARCHIVE_BASE_KICKSTARTER_0_SIZE='1300' ARCHIVE_BASE_KICKSTARTER_0_VERSION='2.0.7f1-gog36563' ## The Cynical Imp ARCHIVE_BASE_CYNICAL_5_NAME='war_for_the_overworld_cynical_imp_charity_v2_1_3f1_82000.sh' ARCHIVE_BASE_CYNICAL_5_MD5='e3f3d7b831cdfb26504f547ad30eb031' ARCHIVE_BASE_CYNICAL_5_SIZE='1048' ARCHIVE_BASE_CYNICAL_5_VERSION='2.1.3f1-gog82000' ARCHIVE_BASE_CYNICAL_5_URL='http://buy.wftogame.com/charity/' ARCHIVE_BASE_CYNICAL_4_NAME='war_for_the_overworld_cynical_imp_charity_v2_1_3_81115.sh' ARCHIVE_BASE_CYNICAL_4_MD5='2d9da5fc41705b70bbda8dd2ae382ea6' ARCHIVE_BASE_CYNICAL_4_SIZE='1048' ARCHIVE_BASE_CYNICAL_4_VERSION='2.1.3-gog81115' ARCHIVE_BASE_CYNICAL_3_NAME='war_for_the_overworld_cynical_imp_charity_v2_1_2_76431.sh' ARCHIVE_BASE_CYNICAL_3_MD5='39148177572cbb5a953eede826816cf7' ARCHIVE_BASE_CYNICAL_3_SIZE='1048' ARCHIVE_BASE_CYNICAL_3_VERSION='2.1.2-gog76431' ARCHIVE_BASE_CYNICAL_2_NAME='war_for_the_overworld_cynical_imp_charity_v2_1_1_73576.sh' ARCHIVE_BASE_CYNICAL_2_MD5='a82cbdad5ac4320dac813d5d588af23d' ARCHIVE_BASE_CYNICAL_2_SIZE='1048' ARCHIVE_BASE_CYNICAL_2_VERSION='2.1.1-gog73576' ARCHIVE_BASE_CYNICAL_1_NAME='war_for_the_overworld_cynical_imp_charity_v2_1_0f4_55096.sh' ARCHIVE_BASE_CYNICAL_1_MD5='7941c2d30434ec481056ca668d8901d6' ARCHIVE_BASE_CYNICAL_1_SIZE='1400' ARCHIVE_BASE_CYNICAL_1_VERSION='2.1.0f4-gog55096' ARCHIVE_BASE_CYNICAL_0_NAME='war_for_the_overworld_cynical_imp_charity_2_0_7f1_gog_36563.sh' ARCHIVE_BASE_CYNICAL_0_MD5='301e40e80942c2382dbf892fd3801216' ARCHIVE_BASE_CYNICAL_0_SIZE='1300' ARCHIVE_BASE_CYNICAL_0_VERSION='2.0.7f1-gog36563' ## Seasonal Worker Skins ARCHIVE_BASE_SEASONALWORKER_6_NAME='war_for_the_overworld_seasonal_worker_skins_v2_1_3f1_82000.sh' ARCHIVE_BASE_SEASONALWORKER_6_MD5='4dfe007a692e95d9a47a5110e6a2fee5' ARCHIVE_BASE_SEASONALWORKER_6_SIZE='1048' ARCHIVE_BASE_SEASONALWORKER_6_VERSION='2.1.3f1-gog82000' ARCHIVE_BASE_SEASONALWORKER_6_URL='https://www.gog.com/game/war_for_the_overworld_worker_skin_collection' ARCHIVE_BASE_SEASONALWORKER_5_NAME='war_for_the_overworld_seasonal_worker_skins_v2_1_3_81115.sh' ARCHIVE_BASE_SEASONALWORKER_5_MD5='6b99c1003b6712b50cf0e77afbbb951c' ARCHIVE_BASE_SEASONALWORKER_5_SIZE='1048' ARCHIVE_BASE_SEASONALWORKER_5_VERSION='2.1.3-gog81115' ARCHIVE_BASE_SEASONALWORKER_4_NAME='war_for_the_overworld_seasonal_worker_skins_v2_1_2_76431.sh' ARCHIVE_BASE_SEASONALWORKER_4_MD5='941ee4e1fd7a37a9862f79054bbb8b00' ARCHIVE_BASE_SEASONALWORKER_4_SIZE='1048' ARCHIVE_BASE_SEASONALWORKER_4_VERSION='2.1.2-gog76431' ARCHIVE_BASE_SEASONALWORKER_3_NAME='war_for_the_overworld_seasonal_worker_skins_v2_1_1_73576.sh' ARCHIVE_BASE_SEASONALWORKER_3_MD5='a74c7dc94c79c37a328a15d9cc4a8385' ARCHIVE_BASE_SEASONALWORKER_3_SIZE='1048' ARCHIVE_BASE_SEASONALWORKER_3_VERSION='2.1.1-gog73576' ARCHIVE_BASE_SEASONALWORKER_2_NAME='war_for_the_overworld_seasonal_worker_skins_v2_1_0f4_55096.sh' ARCHIVE_BASE_SEASONALWORKER_2_MD5='874a21a49ba212ef716e35e0a5b98357' ARCHIVE_BASE_SEASONALWORKER_2_SIZE='1400' ARCHIVE_BASE_SEASONALWORKER_2_VERSION='2.1.0f4-gog55096' ARCHIVE_BASE_SEASONALWORKER_1_NAME='war_for_the_overworld_seasonal_worker_skins_2_0_7f1_gog_36563.sh' ARCHIVE_BASE_SEASONALWORKER_1_MD5='ccc02cab316dff3f6a9351217f38f029' ARCHIVE_BASE_SEASONALWORKER_1_SIZE='1400' ARCHIVE_BASE_SEASONALWORKER_1_VERSION='2.0.7f1-gog36563' ARCHIVE_BASE_SEASONALWORKER_0_NAME='war_for_the_overworld_seasonal_worker_skins_2_0_7f1_30014.sh' ARCHIVE_BASE_SEASONALWORKER_0_MD5='6b4c2c19a901547b1fe9a8a51edab522' ARCHIVE_BASE_SEASONALWORKER_0_SIZE='1400' ARCHIVE_BASE_SEASONALWORKER_0_VERSION='2.0.6f1-gog30014' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME_MAIN_FILES=' goggame-*.info' PKG_PARENT_ID="$GAME_ID" PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_PARENT' # Load common functions PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run the default initialization actions initialization_default "$@" # Extract game data archive_extraction_default # Include game data content_inclusion_default # Build packages packages_generation print_instructions # Clean up working_directory_cleanup exit 0 games/play-war-for-the-overworld-expansions.sh0000755000000000000000000001635614471751340020534 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2022 Antoine Le Gonidec set -o errexit ### # War for the Overworld expansions: # - My Pet Dungeon # - Heart of Gold # - The Under Games # send your bug reports to vv221@dotslashplay.it ### script_version=20250820.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='war-for-the-overworld' GAME_NAME='War for the Overworld' EXPANSION_ID_PETDUNGEON='my-pet-dungeon' EXPANSION_NAME_PETDUNGEON='My Pet Dungeon' EXPANSION_ID_HEARTOFGOLD='heart-of-gold' EXPANSION_NAME_HEARTOFGOLD='Heart of Gold' EXPANSION_ID_UNDERGAMES='the-under-games' EXPANSION_NAME_UNDERGAMES='The Under Games' # Archives ## My Pet Dungeon ARCHIVE_BASE_PETDUNGEON_9_NAME='war_for_the_overworld_my_pet_dungeon_v2_1_3f1_82000.sh' ARCHIVE_BASE_PETDUNGEON_9_MD5='9e27c96ad2ed027707dfb7d1af061937' ARCHIVE_BASE_PETDUNGEON_9_SIZE='1048' ARCHIVE_BASE_PETDUNGEON_9_VERSION='2.1.3f1-gog82000' ARCHIVE_BASE_PETDUNGEON_9_URL='https://www.gog.com/game/war_for_the_overworld_my_pet_dungeon' ARCHIVE_BASE_PETDUNGEON_8_NAME='war_for_the_overworld_my_pet_dungeon_v2_1_3_81115.sh' ARCHIVE_BASE_PETDUNGEON_8_MD5='31070753b7800ecce32b82ed5582fad7' ARCHIVE_BASE_PETDUNGEON_8_SIZE='1048' ARCHIVE_BASE_PETDUNGEON_8_VERSION='2.1.3-gog81115' ARCHIVE_BASE_PETDUNGEON_7_NAME='war_for_the_overworld_my_pet_dungeon_v2_1_2_76431.sh' ARCHIVE_BASE_PETDUNGEON_7_MD5='4561b9cb3f6405c7c576da87e9e74175' ARCHIVE_BASE_PETDUNGEON_7_SIZE='1048' ARCHIVE_BASE_PETDUNGEON_7_VERSION='2.1.2-gog76431' ARCHIVE_BASE_PETDUNGEON_6_NAME='war_for_the_overworld_my_pet_dungeon_v2_1_1_73576.sh' ARCHIVE_BASE_PETDUNGEON_6_MD5='435ec9378fbefad46ad4827d870b84e1' ARCHIVE_BASE_PETDUNGEON_6_SIZE='1048' ARCHIVE_BASE_PETDUNGEON_6_VERSION='2.1.1-gog73576' ARCHIVE_BASE_PETDUNGEON_5_NAME='war_for_the_overworld_my_pet_dungeon_v2_1_0f4_55096.sh' ARCHIVE_BASE_PETDUNGEON_5_MD5='5aadd3ab719d2fd71df604708b9a29e1' ARCHIVE_BASE_PETDUNGEON_5_SIZE='1400' ARCHIVE_BASE_PETDUNGEON_5_VERSION='2.1.0f4-gog55096' ARCHIVE_BASE_PETDUNGEON_4_NAME='war_for_the_overworld_my_pet_dungeon_2_0_7f1_gog_36563.sh' ARCHIVE_BASE_PETDUNGEON_4_MD5='55fd7104b3c3141bc38a2809ae470c92' ARCHIVE_BASE_PETDUNGEON_4_SIZE='1400' ARCHIVE_BASE_PETDUNGEON_4_VERSION='2.0.7f1-gog36563' ARCHIVE_BASE_PETDUNGEON_3_NAME='war_for_the_overworld_my_pet_dungeon_2_0_7f1_30014.sh' ARCHIVE_BASE_PETDUNGEON_3_MD5='f9cd5f6fbe46d46c98837410f8cbfeee' ARCHIVE_BASE_PETDUNGEON_3_SIZE='1400' ARCHIVE_BASE_PETDUNGEON_3_VERSION='2.0.6f1-gog30014' ARCHIVE_BASE_PETDUNGEON_2_NAME='war_for_the_overworld_my_pet_dungeon_2_0_6f1_24637.sh' ARCHIVE_BASE_PETDUNGEON_2_MD5='7788aeeee1e9c7cd365eb595e772ff52' ARCHIVE_BASE_PETDUNGEON_2_SIZE='1400' ARCHIVE_BASE_PETDUNGEON_2_VERSION='2.0.6f1-gog24637' ARCHIVE_BASE_PETDUNGEON_1_NAME='war_for_the_overworld_my_pet_dungeon_2_0_5_24177.sh' ARCHIVE_BASE_PETDUNGEON_1_MD5='eb45d5ee8c699d9ded7d15b82ad1efa3' ARCHIVE_BASE_PETDUNGEON_1_SIZE='1400' ARCHIVE_BASE_PETDUNGEON_1_VERSION='2.0.5-gog24177' ## Heart of Gold ARCHIVE_BASE_HEARTOFGOLD_6_NAME='war_for_the_overworld_heart_of_gold_v2_1_3f1_82000.sh' ARCHIVE_BASE_HEARTOFGOLD_6_MD5='13fb8636f61a619bc61e592cac6089da' ARCHIVE_BASE_HEARTOFGOLD_6_SIZE='1048' ARCHIVE_BASE_HEARTOFGOLD_6_VERSION='2.1.3f1-gog82000' ARCHIVE_BASE_HEARTOFGOLD_6_URL='https://www.gog.com/game/war_for_the_overworld_heart_of_gold' ARCHIVE_BASE_HEARTOFGOLD_5_NAME='war_for_the_overworld_heart_of_gold_v2_1_3_81115.sh' ARCHIVE_BASE_HEARTOFGOLD_5_MD5='2b1629d133d9c9291e4d7ab3e7ae82c0' ARCHIVE_BASE_HEARTOFGOLD_5_SIZE='1048' ARCHIVE_BASE_HEARTOFGOLD_5_VERSION='2.1.3-gog81115' ARCHIVE_BASE_HEARTOFGOLD_4_NAME='war_for_the_overworld_heart_of_gold_v2_1_2_76431.sh' ARCHIVE_BASE_HEARTOFGOLD_4_MD5='c3acb781eda622962857b70416fc7a54' ARCHIVE_BASE_HEARTOFGOLD_4_SIZE='1048' ARCHIVE_BASE_HEARTOFGOLD_4_VERSION='2.1.2-gog76431' ARCHIVE_BASE_HEARTOFGOLD_3_NAME='war_for_the_overworld_heart_of_gold_v2_1_1_73576.sh' ARCHIVE_BASE_HEARTOFGOLD_3_MD5='653ab69838583a231b7cc8128286e183' ARCHIVE_BASE_HEARTOFGOLD_3_SIZE='1048' ARCHIVE_BASE_HEARTOFGOLD_3_VERSION='2.1.1-gog73576' ARCHIVE_BASE_HEARTOFGOLD_2_NAME='war_for_the_overworld_heart_of_gold_v2_1_0f4_55096.sh' ARCHIVE_BASE_HEARTOFGOLD_2_MD5='c492a072ab257817abeb7c80f76c1eca' ARCHIVE_BASE_HEARTOFGOLD_2_SIZE='1400' ARCHIVE_BASE_HEARTOFGOLD_2_VERSION='2.1.0f4-gog55096' ARCHIVE_BASE_HEARTOFGOLD_1_NAME='war_for_the_overworld_heart_of_gold_2_0_7f1_gog_36563.sh' ARCHIVE_BASE_HEARTOFGOLD_1_MD5='c512019fa698759ba0a96e79fadcb06e' ARCHIVE_BASE_HEARTOFGOLD_1_SIZE='1400' ARCHIVE_BASE_HEARTOFGOLD_1_VERSION='2.0.7f1-gog36563' ARCHIVE_BASE_HEARTOFGOLD_0_NAME='war_for_the_overworld_heart_of_gold_2_0_7f1_30014.sh' ARCHIVE_BASE_HEARTOFGOLD_0_MD5='2d3555bfea2aafca9ff9e8eb7a970c0d' ARCHIVE_BASE_HEARTOFGOLD_0_SIZE='1400' ARCHIVE_BASE_HEARTOFGOLD_0_VERSION='2.0.6f1-gog30014' ## The Under Games ARCHIVE_BASE_UNDERGAMES_5_NAME='war_for_the_overworld_the_under_games_v2_1_3f1_82000.sh' ARCHIVE_BASE_UNDERGAMES_5_MD5='f37c92cb2318d871218e07fa14066ae5' ARCHIVE_BASE_UNDERGAMES_5_SIZE='1048' ARCHIVE_BASE_UNDERGAMES_5_VERSION='2.1.3f1-gog82000' ARCHIVE_BASE_UNDERGAMES_5_URL='https://www.gog.com/game/war_for_the_overworld_the_under_games' ARCHIVE_BASE_UNDERGAMES_4_NAME='war_for_the_overworld_the_under_games_v2_1_3_81115.sh' ARCHIVE_BASE_UNDERGAMES_4_MD5='d408718a67271601c0d3b57ccc5c07a7' ARCHIVE_BASE_UNDERGAMES_4_SIZE='1048' ARCHIVE_BASE_UNDERGAMES_4_VERSION='2.1.3-gog81115' ARCHIVE_BASE_UNDERGAMES_3_NAME='war_for_the_overworld_the_under_games_v2_1_2_76431.sh' ARCHIVE_BASE_UNDERGAMES_3_MD5='09378c271fee3fd4eac40d14f6161831' ARCHIVE_BASE_UNDERGAMES_3_SIZE='1048' ARCHIVE_BASE_UNDERGAMES_3_VERSION='2.1.2-gog76431' ARCHIVE_BASE_UNDERGAMES_2_NAME='war_for_the_overworld_the_under_games_v2_1_1_73576.sh' ARCHIVE_BASE_UNDERGAMES_2_MD5='820594211c64b3fe94716921c1da3f73' ARCHIVE_BASE_UNDERGAMES_2_SIZE='1048' ARCHIVE_BASE_UNDERGAMES_2_VERSION='2.1.1-gog73576' ARCHIVE_BASE_UNDERGAMES_1_NAME='war_for_the_overworld_the_under_games_v2_1_0f4_55096.sh' ARCHIVE_BASE_UNDERGAMES_1_MD5='8c7bdf2299a2cc5795f92e58c94aa57b' ARCHIVE_BASE_UNDERGAMES_1_SIZE='1400' ARCHIVE_BASE_UNDERGAMES_1_VERSION='2.1.0f4-gog55096' ARCHIVE_BASE_UNDERGAMES_0_NAME='war_for_the_overworld_the_under_games_2_0_7f1_gog_36563.sh' ARCHIVE_BASE_UNDERGAMES_0_MD5='c63ba259c40ab080f697fe03678d287e' ARCHIVE_BASE_UNDERGAMES_0_SIZE='1400' ARCHIVE_BASE_UNDERGAMES_0_VERSION='2.0.7f1-gog36563' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME_MAIN_FILES=' goggame-*.info' PKG_PARENT_ID="$GAME_ID" PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_PARENT' # Load common functions PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run the default initialization actions initialization_default "$@" # Extract game data archive_extraction_default # Include game data content_inclusion_default # Build packages packages_generation print_instructions # Clean up working_directory_cleanup exit 0 games/play-war-for-the-overworld.sh0000755000000000000000000001236314471751340016341 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2017 Antoine Le Gonidec set -o errexit ### # War for the Overworld # send your bug reports to vv221@dotslashplay.it ### script_version=20250820.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='war-for-the-overworld' GAME_NAME='War for the Overworld' ARCHIVE_BASE_10_NAME='war_for_the_overworld_v2_1_3f1_82000.sh' ARCHIVE_BASE_10_MD5='da9bec477b96f969fed21847a78f9c80' ARCHIVE_BASE_10_SIZE='5085934' ARCHIVE_BASE_10_VERSION='2.1.3f1-gog82000' ARCHIVE_BASE_10_URL='https://www.gog.com/game/war_for_the_overworld' ARCHIVE_BASE_9_NAME='war_for_the_overworld_v2_1_3_81115.sh' ARCHIVE_BASE_9_MD5='1b18aa35479357a3ecb02d8763935705' ARCHIVE_BASE_9_SIZE='5085906' ARCHIVE_BASE_9_VERSION='2.1.3-gog81115' ARCHIVE_BASE_8_NAME='war_for_the_overworld_v2_1_2_76431.sh' ARCHIVE_BASE_8_MD5='e834b2a81bff0a36dc50fcf7a061abec' ARCHIVE_BASE_8_SIZE='4814079' ARCHIVE_BASE_8_VERSION='2.1.2-gog76431' ARCHIVE_BASE_7_NAME='war_for_the_overworld_v2_1_1_73576.sh' ARCHIVE_BASE_7_MD5='d3095d210fda9c39cd2cec6c2d0a882f' ARCHIVE_BASE_7_SIZE='4792845' ARCHIVE_BASE_7_VERSION='2.1.1-gog73576' ARCHIVE_BASE_6_NAME='war_for_the_overworld_v2_1_0f4_55096.sh' ARCHIVE_BASE_6_MD5='97a9bd6ee2f88fa9c64a75cd578d3677' ARCHIVE_BASE_6_SIZE='4800000' ARCHIVE_BASE_6_VERSION='2.1.0f4-gog55096' ARCHIVE_BASE_5_NAME='war_for_the_overworld_2_0_7f1_gog_36563.sh' ARCHIVE_BASE_5_MD5='e957781ef8559841ed2e32032e43d2cd' ARCHIVE_BASE_5_SIZE='4700000' ARCHIVE_BASE_5_VERSION='2.0.7f1-gog36563' ARCHIVE_BASE_4_NAME='war_for_the_overworld_2_0_7f1_30014.sh' ARCHIVE_BASE_4_MD5='a352307c8fbf70c33bdfdd97a82c6530' ARCHIVE_BASE_4_SIZE='4700000' ARCHIVE_BASE_4_VERSION='2.0.6f1-gog30014' ARCHIVE_BASE_3_NAME='war_for_the_overworld_2_0_6f1_24637.sh' ARCHIVE_BASE_3_MD5='e58f2720ed974185e9e5b29d08aa6238' ARCHIVE_BASE_3_SIZE='4700000' ARCHIVE_BASE_3_VERSION='2.0.6f1-gog24637' ARCHIVE_BASE_2_NAME='war_for_the_overworld_2_0_5_24177.sh' ARCHIVE_BASE_2_MD5='79b604f0d19caf3af5fdc4cb3903b370' ARCHIVE_BASE_2_SIZE='4700000' ARCHIVE_BASE_2_VERSION='2.0.5-gog24177' ARCHIVE_BASE_1_NAME='war_for_the_overworld_en_2_0_4_23102.sh' ARCHIVE_BASE_1_MD5='2873095f86b17c613b84af9624986f42' ARCHIVE_BASE_1_SIZE='4700000' ARCHIVE_BASE_1_VERSION='2.0.4-gog23102' ARCHIVE_BASE_0_NAME='war_for_the_overworld_en_2_0_3f1_22287.sh' ARCHIVE_BASE_0_MD5='4f1ff4e136aeaa795fce8ba26445cbe8' ARCHIVE_BASE_0_SIZE='4700000' ARCHIVE_BASE_0_VERSION='2.0.3f1-gog22287' UNITY3D_NAME='WFTOGame' UNITY3D_PLUGINS=' libCoherentGTCore.so libCoherentGTJS.so libcoherenticudata.so libcoherenticui18n.so libcoherenticuuc.so libCoherentUIGT_Native.so libGameLogic.so libRenoirCore.Linux.so libWTF.so ScreenSelector.so' ## If libsteam_api.so is not included, ending a level will fail. UNITY3D_PLUGINS="${UNITY3D_PLUGINS:-} libsteam_api.so" CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME0_BIN_FILES=" ${UNITY3D_NAME}_Data/CoherentUI_Host" CONTENT_GAME0_DATA_FILES=' GameData *.info' USER_PERSISTENT_DIRECTORIES=" GameData ${UNITY3D_NAME}_Data/GameData ${UNITY3D_NAME}_Data/uiresources/minimapSnapshot" ## Work around the engine inability to play video files without write permissions USER_PERSISTENT_DIRECTORIES="${USER_PERSISTENT_DIRECTORIES:-} ${UNITY3D_NAME}_Data/uiresources/wftoUI/menu/vids" PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libgcc_s.so.1 libgdk_pixbuf-2.0.so.0 libglib-2.0.so.0 libGL.so.1 libgobject-2.0.so.0 libgtk-x11-2.0.so.0 libm.so.6 libpthread.so.0 librt.so.1 libstdc++.so.6 libz.so.1' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run the default initialization actions initialization_default "$@" # Extract game data archive_extraction_default ( cd "${PLAYIT_WORKDIR}/gamedata/$(content_path_default)" ## Add required execution permissions (this is only required by some old builds of the game) for file in \ "$(unity3d_name)_Data/CoherentUI_Host/linux/CoherentUI_Host" \ "$(unity3d_name)_Data/CoherentUI_Host/linux/CoherentUI_Host.bin" do if [ -e "$file" ]; then chmod 755 "$file" fi done ) # Include game data content_inclusion_icons 'PKG_DATA' content_inclusion_default ## Link some Unity3D plugin libraries in the game data path as the game engine fails to find them otherwise libraries_destination="$(package_path 'PKG_BIN')$(path_game_data)/$(unity3d_name)_Data/Plugins/x86_64" mkdir --parents "$libraries_destination" ln --symbolic \ "$(path_libraries)/libCoherentUIGT_Native.so" \ "$(path_libraries)/libGameLogic.so" \ "$libraries_destination" # Write launchers launchers_generation 'PKG_BIN' # Build packages packages_generation print_instructions # Clean up working_directory_cleanup exit 0 games/play-warcraft-2.sh0000755000000000000000000001005414471751340014130 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2025 Antoine Le Gonidec set -o errexit ### # Warcraft 2 # send your bug reports to vv221@dotslashplay.it ### script_version=20260322.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='warcraft-2' GAME_NAME='Warcraft II: Tides of Darkness' # The following installers are no longer available for sale from GOG, # they have been removed when Blizzard released a remaster tied to their DRM system. ARCHIVE_BASE_FR_0_NAME='setup_warcraft_ii_2.02_v5_(french)_(78104).exe' ARCHIVE_BASE_FR_0_MD5='346bb75021090767a68902947b4a19ed' ARCHIVE_BASE_FR_0_TYPE='innosetup' ARCHIVE_BASE_FR_0_PART1_NAME='setup_warcraft_ii_2.02_v5_(french)_(78104)-1.bin' ARCHIVE_BASE_FR_0_PART1_MD5='bffa0de5bf00595a24c1d468c896d393' ARCHIVE_BASE_FR_0_VERSION='2.02-gog78104' ARCHIVE_BASE_FR_0_SIZE='711005' ARCHIVE_BASE_EN_0_NAME='setup_warcraft_ii_2.02_v5_(78104).exe' ARCHIVE_BASE_EN_0_MD5='6e5f20698076b193f3e94a4f762b361f' ARCHIVE_BASE_EN_0_TYPE='innosetup' ARCHIVE_BASE_EN_0_PART1_NAME='setup_warcraft_ii_2.02_v5_(78104)-1.bin' ARCHIVE_BASE_EN_0_PART1_MD5='3ac578bac3d490f3994f88311936a544' ARCHIVE_BASE_EN_0_VERSION='2.02-gog78104' ARCHIVE_BASE_EN_0_SIZE='732702' CONTENT_PATH_DEFAULT='.' CONTENT_GAME_BIN_FILES=' W2SOUNDS.EXE Warcraft II BNE.exe battle.snp' # warcraft ii bne.exe requirements CONTENT_LIBS_BIN_FILES=' Storm.dll' # The game triggers an error if the following library is missing, then only renders a black screen (with sound). CONTENT_LIBS0_BIN_FILES=' W2Local.dll' # Videos are not played if the following library is missing. CONTENT_LIBS1_BIN_FILES=' smackw32.dll' # TODO: Move the map editor to a dedicated package. CONTENT_GAME0_BIN_FILES=' Warcraft II Map Editor.exe' CONTENT_GAME_DATA_FILES=' GameSFX Maps Support bncache.dat install.mpq War2Dat.mpq War2Patch.mpq' CONTENT_DOC_DATA_FILES=' License.txt patch.txt' # TODO: Move the map editor to a dedicated package. CONTENT_DOC0_DATA_FILES=' Warcraft II Map Editor.chm' USER_PERSISTENT_DIRECTORIES=' Maps Save' APP_MAIN_EXE='Warcraft II BNE.exe' # TODO: Move the map editor to a dedicated package. APP_EDITOR_ID="${GAME_ID}-editor" APP_EDITOR_NAME='Warcraft II Map Editor' APP_EDITOR_EXE='Warcraft II Map Editor.exe' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_ID="$GAME_ID" PKG_BIN_ID_FR="${PKG_BIN_ID}-fr" PKG_BIN_ID_EN="${PKG_BIN_ID}-en" PKG_BIN_PROVIDES=" $GAME_ID" PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DESCRIPTION_FR='Binaries (French localisation)' PKG_BIN_DESCRIPTION_EN='Binaries (English localisation)' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_ID_FR="${PKG_DATA_ID}-fr" PKG_DATA_ID_EN="${PKG_DATA_ID}-en" PKG_DATA_PROVIDES=" $PKG_DATA_ID" PKG_DATA_DESCRIPTION='data' PKG_DATA_DESCRIPTION_FR='Data (French localisation)' PKG_DATA_DESCRIPTION_EN='Data (English localisation)' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. PATH_LIBRARIES_SYSTEM='$(path_libraries)' EOF cat <<- 'EOF' find "$PATH_LIBRARIES_SYSTEM" -iname '*.dll' | while read -r dll_source; do dll_destination="${PATH_PREFIX}${dll_source#"${PATH_LIBRARIES_SYSTEM}"}" mkdir --parents "$(dirname "$dll_destination")" ln --symbolic "$dll_source" "$dll_destination" done EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-warcraft-3-expansions.sh0000755000000000000000000001420314471751340016316 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2024 Antoine Le Gonidec set -o errexit ### # Warcraft 3 expansions: # - The Frozen Throne # send your bug reports to vv221@dotslashplay.it ### script_version=20260129.3 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='warcraft-3' GAME_NAME='Warcraft III' EXPANSION_ID='the-frozen-throne' EXPANSION_NAME='The Frozen Throne' ARCHIVE_BASE_EN_0_NAME='Installer Tome.mpq' ARCHIVE_BASE_EN_0_MD5='04f1a75841df58a839ea3c2ea9d46a7e' ARCHIVE_BASE_EN_0_SIZE='612802' ARCHIVE_BASE_EN_0_VERSION='1.27-blizzard1' ARCHIVE_BASE_EN_0_URL='https://eu.battle.net/download/getLegacy?os=win&locale=enUS&product=W3XP' ARCHIVE_BASE_FR_0_NAME='Installer Tome.mpq' ARCHIVE_BASE_FR_0_MD5='050d7b179b1c8c784f3ff40fae077f6e' ARCHIVE_BASE_FR_0_SIZE='661687' ARCHIVE_BASE_FR_0_VERSION='1.27-blizzard1' ARCHIVE_BASE_FR_0_URL='https://eu.battle.net/download/getLegacy?os=win&locale=frFR&product=W3XP' ARCHIVE_BASE_DE_0_NAME='Installer Tome.mpq' ARCHIVE_BASE_DE_0_MD5='fdb12d1362e846c189e10b24ef3feee6' ARCHIVE_BASE_DE_0_SIZE='654348' ARCHIVE_BASE_DE_0_VERSION='1.27-blizzard1' ARCHIVE_BASE_DE_0_URL='https://eu.battle.net/download/getLegacy?os=win&locale=deDE&product=W3XP' CONTENT_PATH_DEFAULT='.' CONTENT_GAME_BIN_PATH='PC' # Frozen Throne.exe is distinct between the English and the French build of the game, # for now we assume the differences are not critical and one can be used in place of the other. CONTENT_GAME_BIN_FILES=' Frozen Throne.exe' CONTENT_GAME_DATA_PATH='Common' CONTENT_GAME_DATA_FILES=' Maps/FrozenThrone War3x.mpq War3xLocal.mpq' CONTENT_GAME_DATA_SHARED_PATH='Common' CONTENT_GAME_DATA_SHARED_FILES=' War3Patch.mpq' CONTENT_GAME_MOVIES_PATH='Common' CONTENT_GAME_MOVIES_FILES=' Movies/IntroX.mpq Movies/OutroX.mpq' USER_PERSISTENT_DIRECTORIES=' Campaigns Maps Replay Save' APP_MAIN_ID="${GAME_ID}-${EXPANSION_ID}" APP_MAIN_NAME="${GAME_NAME}: ${EXPANSION_NAME}" APP_MAIN_EXE='Frozen Throne.exe' APP_MAIN_OPTIONS='-opengl' APP_MAIN_ICON='PC/Frozen Throne.exe' PACKAGES_LIST=' PKG_BIN PKG_DATA PKG_DATA_SHARED PKG_MOVIES' PKG_PARENT_ID="$GAME_ID" PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA_BASE PKG_PARENT' PKG_DATA_BASE_ID="${GAME_ID}-${EXPANSION_ID}-data" PKG_DATA_ID_EN="${PKG_DATA_BASE_ID}-en" PKG_DATA_ID_FR="${PKG_DATA_BASE_ID}-fr" PKG_DATA_ID_DE="${PKG_DATA_BASE_ID}-de" PKG_DATA_PROVIDES=" $PKG_DATA_BASE_ID" PKG_DATA_DESCRIPTION='data' PKG_DATA_DEPENDENCIES_SIBLINGS=' PKG_DATA_SHARED' PKG_DATA_SHARED_ID="${PKG_DATA_BASE_ID}-shared" PKG_DATA_SHARED_ID_EN="${PKG_DATA_SHARED_ID}-en" PKG_DATA_SHARED_ID_FR="${PKG_DATA_SHARED_ID}-fr" PKG_DATA_SHARED_ID_DE="${PKG_DATA_SHARED_ID}-de" PKG_DATA_SHARED_PROVIDES=" $PKG_DATA_SHARED_ID ${GAME_ID}-data-shared" PKG_DATA_SHARED_PROVIDES_EN="$PKG_DATA_SHARED_PROVIDES ${GAME_ID}-data-shared-en" PKG_DATA_SHARED_PROVIDES_FR="$PKG_DATA_SHARED_PROVIDES ${GAME_ID}-data-shared-fr" PKG_DATA_SHARED_PROVIDES_DE="$PKG_DATA_SHARED_PROVIDES ${GAME_ID}-data-shared-de" PKG_DATA_SHARED_DESCRIPTION='data shared between the base game and the expansion' PKG_MOVIES_ID="${GAME_ID}-${EXPANSION_ID}-movies" PKG_MOVIES_ID_EN="${PKG_MOVIES_ID}-en" PKG_MOVIES_ID_FR="${PKG_MOVIES_ID}-fr" PKG_MOVIES_ID_DE="${PKG_MOVIES_ID}-de" PKG_MOVIES_PROVIDES=" $PKG_MOVIES_ID" PKG_MOVIES_DESCRIPTION='data' PKG_MOVIES_DEPENDENCIES_SIBLINGS=' PKG_BIN PKG_MOVIES_LIBS' PKG_MOVIES_LIBS_ID="${GAME_ID}-movies-libs" # Set the list of requirements to extract the archive contents. REQUIREMENTS_LIST=' smpq' # Load common functions. # Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Scan library paths used by ./play.it < 2.35. # This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Check for the presence of the CD key files. # During a regular install of The Frozen Throne, the CD key is stored encrypted into War3x.mpq, in the files under the "font" directory. # In order to build a package that includes the CD key (required, or the game will not launch), # you need to provide the following file in addition to the installer .mpq: # - font.exp # # It can be extracted from a regular Warcraft 3 install with: # smpq --extract War3x.mpq font/font.exp ARCHIVE_REQUIRED_CDKEY_NAME='font.exp' archive_initialize_required \ 'ARCHIVE_CDKEY' \ 'ARCHIVE_REQUIRED_CDKEY' # Extract game data. archive_path=$(archive_path "$(current_archive)") archive_path_cdkey=$(archive_path 'ARCHIVE_CDKEY') mkdir --parents "${PLAYIT_WORKDIR}/gamedata" information_archive_data_extraction "$archive_path" ( cd "${PLAYIT_WORKDIR}/gamedata" smpq --extract "$archive_path" # Update the .mpq file. ( cd 'PC-100x' smpq --append --overwrite ../Common/War3x.mpq ./* ) ( cd 'Files' cp --dereference \ "$archive_path_cdkey" \ 'font' smpq --append ../Common/War3x.mpq \ font/font.ccd \ font/font.exp rm --force --recursive 'font' ) ) # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. ln --force --symbolic $(path_libraries)/* "\${PATH_PREFIX}" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-warcraft-3.sh0000755000000000000000000001464714471751340014145 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2022 Antoine Le Gonidec set -o errexit ### # Warcraft 3 # send your bug reports to vv221@dotslashplay.it ### script_version=20260129.4 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='warcraft-3' GAME_NAME='Warcraft III: Reign of Chaos' ARCHIVE_BASE_EN_0_NAME='Installer Tome.mpq' ARCHIVE_BASE_EN_0_MD5='dd5926d8bb6ed10c47617bbc69b0ce1a' ARCHIVE_BASE_EN_0_SIZE='775512' ARCHIVE_BASE_EN_0_VERSION='1.27-blizzard1' ARCHIVE_BASE_EN_0_URL='https://eu.battle.net/download/getLegacy?os=win&locale=enUS&product=WAR3' ARCHIVE_BASE_FR_0_NAME='Installer Tome.mpq' ARCHIVE_BASE_FR_0_MD5='e61e66359b1ceedbf3c3d06b835e6aa1' ARCHIVE_BASE_FR_0_SIZE='801118' ARCHIVE_BASE_FR_0_VERSION='1.27-blizzard1' ARCHIVE_BASE_FR_0_URL='https://eu.battle.net/download/getLegacy?os=win&locale=frFR&product=WAR3' ARCHIVE_BASE_DE_0_NAME='Installer Tome.mpq' ARCHIVE_BASE_DE_0_MD5='d5c1dd8ed66473e6adee36e1f8b528cb' ARCHIVE_BASE_DE_0_SIZE='795612' ARCHIVE_BASE_DE_0_VERSION='1.27-blizzard1' ARCHIVE_BASE_DE_0_URL='https://eu.battle.net/download/getLegacy?os=win&locale=deDE&product=WAR3' CONTENT_PATH_DEFAULT='.' CONTENT_LIBS_BIN_PATH='PC' CONTENT_LIBS_BIN_FILES=' Game.dll ijl15.dll mss32.dll Storm.dll' # Warcraft III.exe and World Editor.exe are distinct between the English and the French build of the game, # for now we assume the differences are not critical and one can be used in place of the other. CONTENT_GAME_BIN_PATH='PC' CONTENT_GAME_BIN_FILES=' redist blizzard.ax War3.exe Warcraft III.exe WorldEdit.exe World Editor.exe' CONTENT_GAME_DATA_PATH='Common' CONTENT_GAME_DATA_FILES=' Maps War3.mpq' CONTENT_GAME_DATA_SHARED_PATH='Common' CONTENT_GAME_DATA_SHARED_FILES=' War3Patch.mpq' CONTENT_GAME_MOVIES_PATH='Common' CONTENT_GAME_MOVIES_FILES=' Movies' USER_PERSISTENT_DIRECTORIES=' Campaigns Maps Replay Save' APP_MAIN_EXE='Warcraft III.exe' # Ensure that Reign of Chaos is started, even if The Frozen Throne is installed. APP_MAIN_OPTIONS='-classic -opengl' APP_MAIN_ICON='PC/War3.exe' APP_MAIN_ICON_WRESTOOL_OPTIONS='--type=14 --name=WAR3.ICO' PACKAGES_LIST=' PKG_BIN PKG_DATA PKG_DATA_SHARED PKG_MOVIES PKG_MOVIES_LIBS' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA_BASE' PKG_DATA_BASE_ID="${GAME_ID}-data" PKG_DATA_ID_EN="${PKG_DATA_BASE_ID}-en" PKG_DATA_ID_FR="${PKG_DATA_BASE_ID}-fr" PKG_DATA_ID_DE="${PKG_DATA_BASE_ID}-de" PKG_DATA_PROVIDES=" $PKG_DATA_BASE_ID" PKG_DATA_DESCRIPTION='data' PKG_DATA_DEPENDENCIES_SIBLINGS=' PKG_DATA_SHARED' PKG_DATA_SHARED_ID="${PKG_DATA_BASE_ID}-shared" PKG_DATA_SHARED_ID_EN="${PKG_DATA_SHARED_ID}-en" PKG_DATA_SHARED_ID_FR="${PKG_DATA_SHARED_ID}-fr" PKG_DATA_SHARED_ID_DE="${PKG_DATA_SHARED_ID}-de" PKG_DATA_SHARED_PROVIDES=" $PKG_DATA_SHARED_ID" PKG_DATA_SHARED_DESCRIPTION='data shared between the base game and the expansion' PKG_MOVIES_ID="${GAME_ID}-movies" PKG_MOVIES_ID_EN="${PKG_MOVIES_ID}-en" PKG_MOVIES_ID_FR="${PKG_MOVIES_ID}-fr" PKG_MOVIES_ID_DE="${PKG_MOVIES_ID}-de" PKG_MOVIES_PROVIDES=" $PKG_MOVIES_ID" PKG_MOVIES_DESCRIPTION='movies' PKG_MOVIES_DEPENDENCIES_SIBLINGS=' PKG_BIN PKG_MOVIES_LIBS' PKG_MOVIES_LIBS_ARCH='32' PKG_MOVIES_LIBS_ID="${GAME_ID}-movies-libs" PKG_MOVIES_LIBS_DESCRIPTION='movies libraries' PKG_MOVIES_LIBS_DEPENDENCIES_GSTREAMER_PLUGINS=' video/x-msvideo' # Set the list of requirements to extract the archive contents. REQUIREMENTS_LIST=' smpq' # Load common functions. # Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Scan library paths used by ./play.it < 2.35. # This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Check for the presence of the CD key files. # During a regular install of Reign of Chaos, the CD key is stored encrypted into War3.mpq, in the files under the "font" directory. # In order to build a package that includes the CD key (required, or the game will not launch), # you need to provide the following files in addition to the installer .mpq: # - font.clh # - font.gid # # They can be extracted from a regular Warcraft 3 install with: # smpq --extract War3.mpq font/font.clh font/font.gid ARCHIVE_REQUIRED_CDKEY_1_NAME='font.clh' ARCHIVE_REQUIRED_CDKEY_2_NAME='font.gid' archive_initialize_required \ 'ARCHIVE_CDKEY_1' \ 'ARCHIVE_REQUIRED_CDKEY_1' archive_initialize_required \ 'ARCHIVE_CDKEY_2' \ 'ARCHIVE_REQUIRED_CDKEY_2' # Extract game data. archive_path=$(archive_path "$(current_archive)") archive_path_cdkey_1=$(archive_path 'ARCHIVE_CDKEY_1') archive_path_cdkey_2=$(archive_path 'ARCHIVE_CDKEY_2') mkdir --parents "${PLAYIT_WORKDIR}/gamedata" information_archive_data_extraction "$archive_path" ( cd "${PLAYIT_WORKDIR}/gamedata" smpq --extract "$archive_path" # Update the .mpq file. ( # Ensure case consistency between the different builds of the game. cd 'Common' if [ -e 'war3.mpq' ]; then mv 'war3.mpq' 'War3.mpq' fi ) ( cd 'PC-100' smpq --append ../Common/War3.mpq ./* ) ( cd 'Files' cp --dereference \ "$archive_path_cdkey_1" \ "$archive_path_cdkey_2" \ 'font' smpq --append ../Common/War3.mpq \ font/font.ccd \ font/font.clh \ font/font.gid rm --force --recursive 'font' ) ) # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. ln --force --symbolic $(path_libraries)/* "\${PATH_PREFIX}" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-warhammer-40k-dawn-of-war.sh0000755000000000000000000003734514471751340016673 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2020 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2021 Hoël Bézier set -o errexit ### # Warhammer 40,000: Dawn of War: # - Dawn of War # - Winter Assault # - Dark Crusade # - Soulstorm # send your bug reports to vv221@dotslashplay.it ### script_version=20260326.6 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='warhammer-40k-dawn-of-war' GAME_NAME='Warhammer 40,000: Dawn of War' GAME_ID_WA="${GAME_ID}-winter-assault" GAME_NAME_WA="$GAME_NAME - Winter Assault" GAME_ID_WA_DEMO="${GAME_ID_WA}-demo" GAME_NAME_WA_DEMO="$GAME_NAME_WA (demo)" GAME_ID_DC="${GAME_ID}-dark-crusade" GAME_NAME_DC="$GAME_NAME - Dark Crusade" GAME_ID_SS="${GAME_ID}-soulstorm" GAME_NAME_SS="$GAME_NAME - Soulstorm" # Dawn of War (base game) ARCHIVE_BASE_DOW_FR_0_NAME='setup_warhammer_40000_dawn_of_war_0.19_(french)_(64626).exe' ARCHIVE_BASE_DOW_FR_0_MD5='e1cdc8cc2b9a81b390cd1996053d5c04' ARCHIVE_BASE_DOW_FR_0_TYPE='innosetup' ARCHIVE_BASE_DOW_FR_0_PART1_NAME='setup_warhammer_40000_dawn_of_war_0.19_(french)_(64626)-1.bin' ARCHIVE_BASE_DOW_FR_0_PART1_MD5='32eecc81507d84f6d39f9c74aeb5e1ef' ARCHIVE_BASE_DOW_FR_0_SIZE='2800000' ARCHIVE_BASE_DOW_FR_0_VERSION='1.51-gog64626' ARCHIVE_BASE_DOW_FR_0_URL='https://www.gog.com/game/warhammer_40000_dawn_of_war' ARCHIVE_BASE_DOW_EN_0_NAME='setup_warhammer_40000_dawn_of_war_0.19_(64626).exe' ARCHIVE_BASE_DOW_EN_0_MD5='a45fc06675d678b282e7f72f39c2591c' ARCHIVE_BASE_DOW_EN_0_TYPE='innosetup' ARCHIVE_BASE_DOW_EN_0_PART1_NAME='setup_warhammer_40000_dawn_of_war_0.19_(64626)-1.bin' ARCHIVE_BASE_DOW_EN_0_PART1_MD5='e89415bc33d078598a19650ddd80d2be' ARCHIVE_BASE_DOW_EN_0_SIZE='2800000' ARCHIVE_BASE_DOW_EN_0_VERSION='1.51-gog64626' ARCHIVE_BASE_DOW_EN_0_URL='https://www.gog.com/game/warhammer_40000_dawn_of_war' # Winter Assault (full game) ARCHIVE_BASE_WA_FR_1_NAME='setup_warhammer_40000_dawn_of_war_-_winter_assault_0.19_(french)_(64626).exe' ARCHIVE_BASE_WA_FR_1_MD5=' 99640045bdd625ff55aed497aef96e78 9423b22d50f707d794e961aef63a9a44' ARCHIVE_BASE_WA_FR_1_TYPE='innosetup' ARCHIVE_BASE_WA_FR_1_PART1_NAME='setup_warhammer_40000_dawn_of_war_-_winter_assault_0.19_(french)_(64626)-1.bin' ARCHIVE_BASE_WA_FR_1_PART1_MD5=' e6263848739e9c9975632c0766fae2e1 b4a188c7ed2012a9c4fd300af07c831d' ARCHIVE_BASE_WA_FR_1_SIZE='2769494' ARCHIVE_BASE_WA_FR_1_VERSION='1.51-gog64626' ARCHIVE_BASE_WA_FR_1_URL='https://www.gog.com/game/warhammer_40000_dawn_of_war' ARCHIVE_BASE_WA_EN_1_NAME='setup_warhammer_40000_dawn_of_war_-_winter_assault_0.19_(64626).exe' ARCHIVE_BASE_WA_EN_1_MD5=' 223385b79c6ee7eb691248a943eb53fa a610066c44aee835f0ac608864c31ef9' ARCHIVE_BASE_WA_EN_1_TYPE='innosetup' ARCHIVE_BASE_WA_EN_1_PART1_NAME='setup_warhammer_40000_dawn_of_war_-_winter_assault_0.19_(64626)-1.bin' ARCHIVE_BASE_WA_EN_1_PART1_MD5=' 61e354453cb8638b995f5ed17a4bdbbd fd954304b3f38cccf859edf7ca4e1dd5' ARCHIVE_BASE_WA_EN_1_SIZE='2763147' ARCHIVE_BASE_WA_EN_1_VERSION='1.51-gog64626' ARCHIVE_BASE_WA_EN_1_URL='https://www.gog.com/game/warhammer_40000_dawn_of_war' # Winter Assault (free demo) ARCHIVE_BASE_WA_DEMO_EN_0_NAME='Dawn of War - Winter Assault.rar' ARCHIVE_BASE_WA_DEMO_EN_0_MD5='555f5b3844c80866b0cb9fa536692380' ARCHIVE_BASE_WA_DEMO_EN_0_SIZE='480000' ARCHIVE_BASE_WA_DEMO_EN_0_VERSION='1.0-archiveorg1' ARCHIVE_BASE_WA_DEMO_EN_0_URL='https://archive.org/details/DawnOfWarWinterAssault_201404' # Dark Crusade ARCHIVE_BASE_DC_FR_0_NAME='setup_warhammer_40000_dawn_of_war_-_dark_crusade_0.19_(french)_(64626).exe' ARCHIVE_BASE_DC_FR_0_MD5='5a254443909788b595baf16610809056' ARCHIVE_BASE_DC_FR_0_TYPE='innosetup' ARCHIVE_BASE_DC_FR_0_PART1_NAME='setup_warhammer_40000_dawn_of_war_-_dark_crusade_0.19_(french)_(64626)-1.bin' ARCHIVE_BASE_DC_FR_0_PART1_MD5='0a64baaffaa392b9afd570a0a811cb2f' ARCHIVE_BASE_DC_FR_0_SIZE='4600000' ARCHIVE_BASE_DC_FR_0_VERSION='1.20-gog64626' ARCHIVE_BASE_DC_FR_0_URL='https://www.gog.com/game/warhammer_40000_dawn_of_war' ARCHIVE_BASE_DC_EN_0_NAME='setup_warhammer_40000_dawn_of_war_-_dark_crusade_0.19_(64626).exe' ARCHIVE_BASE_DC_EN_0_MD5='e54248e3e006fa378e374a9a60f33418' ARCHIVE_BASE_DC_EN_0_TYPE='innosetup' ARCHIVE_BASE_DC_EN_0_PART1_NAME='setup_warhammer_40000_dawn_of_war_-_dark_crusade_0.19_(64626)-1.bin' ARCHIVE_BASE_DC_EN_0_PART1_MD5='8830adc7aa004a800411b0f95919af5f' ARCHIVE_BASE_DC_EN_0_SIZE='4500000' ARCHIVE_BASE_DC_EN_0_VERSION='1.20-gog64626' ARCHIVE_BASE_DC_EN_0_URL='https://www.gog.com/game/warhammer_40000_dawn_of_war' # Soulstorm ARCHIVE_BASE_SS_FR_1_NAME='setup_warhammer_40000_dawn_of_war_-_soulstorm_0.21_(french)_(64955).exe' ARCHIVE_BASE_SS_FR_1_MD5='e2fd0c36f0b36a9ad06c10ff4d044478' ARCHIVE_BASE_SS_FR_1_TYPE='innosetup' ARCHIVE_BASE_SS_FR_1_PART1_NAME='setup_warhammer_40000_dawn_of_war_-_soulstorm_0.21_(french)_(64955)-1.bin' ARCHIVE_BASE_SS_FR_1_PART1_MD5='29203f3fc2424b33f3251e44fbe65d13' ARCHIVE_BASE_SS_FR_1_PART2_NAME='setup_warhammer_40000_dawn_of_war_-_soulstorm_0.21_(french)_(64955)-2.bin' ARCHIVE_BASE_SS_FR_1_PART2_MD5='6ad688745bba4fe353b1da9b330e956a' ARCHIVE_BASE_SS_FR_1_SIZE='5459544' ARCHIVE_BASE_SS_FR_1_VERSION='1.2.0-gog64955' ARCHIVE_BASE_SS_FR_1_URL='https://www.gog.com/game/warhammer_40000_dawn_of_war' ARCHIVE_BASE_SS_EN_1_NAME='setup_warhammer_40000_dawn_of_war_-_soulstorm_0.21_(64955).exe' ARCHIVE_BASE_SS_EN_1_MD5='8da443afebb589ca1f1b0100579325d2' ARCHIVE_BASE_SS_EN_1_TYPE='innosetup' ARCHIVE_BASE_SS_EN_1_PART1_NAME='setup_warhammer_40000_dawn_of_war_-_soulstorm_0.21_(64955)-1.bin' ARCHIVE_BASE_SS_EN_1_PART1_MD5='ac634ca5d861d3fc502325646cffbd83' ARCHIVE_BASE_SS_EN_1_PART2_NAME='setup_warhammer_40000_dawn_of_war_-_soulstorm_0.21_(64955)-2.bin' ARCHIVE_BASE_SS_EN_1_PART2_MD5='5c4cde5ecf4dae72bbdbc97a7659dbe5' ARCHIVE_BASE_SS_EN_1_SIZE='5458668' ARCHIVE_BASE_SS_EN_1_VERSION='1.2.0-gog64955' ARCHIVE_BASE_SS_EN_1_URL='https://www.gog.com/game/warhammer_40000_dawn_of_war' ARCHIVE_BASE_SS_FR_0_NAME='setup_warhammer_40000_dawn_of_war_-_soulstorm_0.19_(french)_(64626).exe' ARCHIVE_BASE_SS_FR_0_MD5='a652d618bdc2071ad476842939b63373' ARCHIVE_BASE_SS_FR_0_TYPE='innosetup' ARCHIVE_BASE_SS_FR_0_PART1_NAME='setup_warhammer_40000_dawn_of_war_-_soulstorm_0.19_(french)_(64626)-1.bin' ARCHIVE_BASE_SS_FR_0_PART1_MD5='3ffd1c39b68c984acb23263c9ffec133' ARCHIVE_BASE_SS_FR_0_PART2_NAME='setup_warhammer_40000_dawn_of_war_-_soulstorm_0.19_(french)_(64626)-2.bin' ARCHIVE_BASE_SS_FR_0_PART2_MD5='6ba9d30068b91823d838812c8930c8b3' ARCHIVE_BASE_SS_FR_0_SIZE='5500000' ARCHIVE_BASE_SS_FR_0_VERSION='1.2.0-gog64626' ARCHIVE_BASE_SS_EN_0_NAME='setup_warhammer_40000_dawn_of_war_-_soulstorm_0.19_(64626).exe' ARCHIVE_BASE_SS_EN_0_MD5='ccf68576db62f61c3d4967a1e66d3863' ARCHIVE_BASE_SS_EN_0_TYPE='innosetup' ARCHIVE_BASE_SS_EN_0_PART1_NAME='setup_warhammer_40000_dawn_of_war_-_soulstorm_0.19_(64626)-1.bin' ARCHIVE_BASE_SS_EN_0_PART1_MD5='944e2a30b2036dbfb37b1b649c370541' ARCHIVE_BASE_SS_EN_0_PART2_NAME='setup_warhammer_40000_dawn_of_war_-_soulstorm_0.19_(64626)-2.bin' ARCHIVE_BASE_SS_EN_0_PART2_MD5='949587a4ce461c4900636913ab53e5a1' ARCHIVE_BASE_SS_EN_0_SIZE='5500000' ARCHIVE_BASE_SS_EN_0_VERSION='1.2.0-gog64626' CONTENT_PATH_DEFAULT='.' CONTENT_GAME_BIN_FILES=' W40k.exe W40kWA.exe darkcrusade.exe Soulstorm.exe' # W40k.exe / W40kWA.exe / darkcrusade.exe / Soulstorm.exe requirements CONTENT_LIBS_BIN_FILES=' BugSplat.dll DivxMediaLib.dll Debug.dll Filesystem.dll Localizer.dll LuaConfig.dll MathBox.dll Memory.dll Platform.dll seInterface.dll UserInterface.dll Util.dll GSLobby.dll SimEngine.dll Galaxy.dll' CONTENT_GAME_BIN_FILES_WA_DEMO=' winterassault.exe' # winterassault.exe (demo) requirements CONTENT_LIBS_BIN_FILES_WA_DEMO=' LuaConfig.dll Debug.dll STLPort.dll Util.dll GSLobby.dll seInterface.dll Platform.dll DivxMediaLib.dll Localizer.dll UserInterface.dll MathBox.dll Memory.dll SimEngine.dll Filesystem.dll DllTie.dll' # DivxMediaLib.dll requirements CONTENT_LIBS0_BIN_FILES=' FileParser.dll DivxDecoder.dll' CONTENT_GAME0_BIN_FILES=' BsSndRpt.exe GraphicsConfig.exe Local.ini W40k.ini' # TODO: Check if the BugReport directory is required. CONTENT_GAME1_BIN_FILES=' BugReport' # The game fails to start with a GPU-related error if the following library is missing. CONTENT_LIBS1_BIN_FILES=' spdx9.dll' # The game fails to reach the main menu if the following libraries are missing. CONTENT_LIBS2_BIN_FILES=' W40kMod.dll WXPMod.dll' # W40kMod.dll / WXPMod.dll requirements CONTENT_LIBS3_BIN_FILES=' luabind.dll' CONTENT_GAME_L10N_FILES=' DXP2/Locale Engine/Locale GraphicsOptions/Locale W40k/Locale WXP/Locale regions.ini' # TODO: Check if the BugReport directory is required. CONTENT_GAME0_L10N_FILES=' BugReport/French BugReport/English' CONTENT_GAME_DATA_FILES=' Drivers DXP2 Engine GraphicsOptions Patch W40k WXP *.dat *.module' CONTENT_DOC_L10N_FILES=' *.htm' USER_PERSISTENT_DIRECTORIES=' BADGES BANNERS Playback Profiles ScreenShots STATS' USER_PERSISTENT_FILES=' Drivers/spdx9_config.txt Local.ini' WINE_WINEPREFIX_TWEAKS='mono' # Mono is not required by the Winter Assault demo. WINE_WINEPREFIX_TWEAKS_WA_DEMO=' ' # Without a virtual desktop, the game lose input on loss of focus. # In addition, the game window turns into a black screen. # (WINE 10.0) WINE_VIRTUAL_DESKTOP='auto' APP_MAIN_EXE_DOW='W40k.exe' APP_MAIN_EXE_WA='W40kWA.exe' APP_MAIN_EXE_WA_DEMO='winterassault.exe' APP_MAIN_EXE_DC='darkcrusade.exe' APP_MAIN_EXE_SS='Soulstorm.exe' APP_MAIN_ICON_WRESTOOL_OPTIONS='--type=14 --name=101' APP_MAIN_ICON_WRESTOOL_OPTIONS_WA_DEMO='--type=14' # Type must be set explicitly, # or it will be wrongly identified as a Mono application. APP_MAIN_TYPE='wine' PACKAGES_LIST=' PKG_L10N PKG_BIN PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_L10N_BASE PKG_DATA' PKG_L10N_BASE_ID_DOW="${GAME_ID}-l10n" PKG_L10N_BASE_ID_WA="${GAME_ID_WA}-l10n" PKG_L10N_BASE_ID_WA_DEMO="${GAME_ID_WA_DEMO}-l10n" PKG_L10N_BASE_ID_DC="${GAME_ID_DC}-l10n" PKG_L10N_BASE_ID_SS="${GAME_ID_SS}-l10n" PKG_L10N_ID_DOW_FR="${PKG_L10N_BASE_ID_DOW}-fr" PKG_L10N_ID_DOW_EN="${PKG_L10N_BASE_ID_DOW}-en" PKG_L10N_ID_WA_FR="${PKG_L10N_BASE_ID_WA}-fr" PKG_L10N_ID_WA_EN="${PKG_L10N_BASE_ID_WA}-en" PKG_L10N_ID_WA_DEMO_EN="${PKG_L10N_BASE_ID_WA_DEMO}-en" PKG_L10N_ID_DC_FR="${PKG_L10N_BASE_ID_DC}-fr" PKG_L10N_ID_DC_EN="${PKG_L10N_BASE_ID_DC}-en" PKG_L10N_ID_SS_FR="${PKG_L10N_BASE_ID_SS}-fr" PKG_L10N_ID_SS_EN="${PKG_L10N_BASE_ID_SS}-en" PKG_L10N_PROVIDES_DOW=" $PKG_L10N_BASE_ID_DOW" PKG_L10N_PROVIDES_WA=" $PKG_L10N_BASE_ID_WA" PKG_L10N_PROVIDES_WA_DEMO=" $PKG_L10N_BASE_ID_WA_DEMO" PKG_L10N_PROVIDES_DC=" $PKG_L10N_BASE_ID_DC" PKG_L10N_PROVIDES_SS=" $PKG_L10N_BASE_ID_SS" PKG_L10N_DESCRIPTION_DOW_FR='French localisation' PKG_L10N_DESCRIPTION_DOW_EN='English localisation' PKG_L10N_DESCRIPTION_WA_FR='French localisation' PKG_L10N_DESCRIPTION_WA_EN='English localisation' PKG_L10N_DESCRIPTION_WA_DEMO_EN='English localisation' PKG_L10N_DESCRIPTION_DC_FR='French localisation' PKG_L10N_DESCRIPTION_DC_EN='English localisation' PKG_L10N_DESCRIPTION_SS_FR='French localisation' PKG_L10N_DESCRIPTION_SS_EN='English localisation' PKG_DATA_ID_DOW="${GAME_ID}-data" PKG_DATA_ID_WA="${GAME_ID_WA}-data" PKG_DATA_ID_WA_DEMO="${GAME_ID_WA_DEMO}-data" PKG_DATA_ID_DC="${GAME_ID_DC}-data" PKG_DATA_ID_SS="${GAME_ID_SS}-data" PKG_DATA_DESCRIPTION='data' # Winter Assault (free demo) # - cabextract is required to extract the content of an inner archive # - unix2dos is required to generate a .ini file REQUIREMENTS_LIST_WA_DEMO=' cabextract unix2dos' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. init_package() { set_default_package 'PKG_BIN'; } initialization_default "$@" # Extract game data. archive_extraction_default # Winter Assault (free demo) case "$(current_archive)" in ('ARCHIVE_BASE_WA_DEMO_'*) # Extract game data from the cabinet installer. ARCHIVE_INNER_PATH="${PLAYIT_WORKDIR}/gamedata/WinterAssaultDemo1.cab" archive_extraction 'ARCHIVE_INNER' rm "$ARCHIVE_INNER_PATH" # Create the expected game arborescence. ( cd "$(path_archive_contents)" mkdir --parents \ 'badges' \ 'banners' \ 'bugreport/english' \ 'drivers' \ 'engine' \ 'engine/data' \ 'engine/locale/english' \ 'engine/movies' \ 'graphicsoptions/data' \ 'graphicsoptions/locale/english' \ 'logfiles' \ 'patch' \ 'playback' \ 'profiles' \ 'screenshots' \ 'stats' \ 'w40k' \ 'w40k/data' \ 'w40k/locale/english' \ 'wxp' \ 'wxp/data' \ 'wxp/locale/english' \ 'wxp/movies' mv 'bugreport.exe' 'bugreport/bugreport.exe' mv 'bugreport.ini' 'bugreport/bugreport.ini' mv 'bugreport.ucs' 'bugreport/english/bugreport.ucs' mv 'ati.txt' 'drivers/ati.txt' mv 'nvidia.txt' 'drivers/nvidia.txt' mv 'shader.txt' 'drivers/shader.txt' mv 'spdx9_config.txt' 'drivers/spdx9_config.txt' mv 'engine.sga' 'engine/engine.sga' mv 'engine.ucs' 'engine/locale/english/engine.ucs' mv 'enginloc.sga' 'engine/locale/english/enginloc.sga' mv 'dow_intro.avi' 'engine/movies/dow_intro.avi' mv 'dow_intro.lua' 'engine/movies/dow_intro.lua' mv 'dxp_relic_intro.avi' 'engine/movies/dxp_relic_intro.avi' mv 'dxp_relic_intro.lua' 'engine/movies/dxp_relic_intro.lua' mv 'gotdata.sga' 'graphicsoptions/gotdata.sga' mv 'graphicsoptionsutility.ucs' 'graphicsoptions/locale/english/graphicsoptionsutility.ucs' mv 'w40k.ucs' 'w40k/locale/english/w40k.ucs' mv 'w40kdatasoundspeech.sga' 'w40k/locale/english/w40kdata-sound-speech.sga' mv 'w40kdatakeys.sga' 'w40k/locale/english/w40kdatakeys.sga' mv 'w40kdataloc.sga' 'w40k/locale/english/w40kdataloc.sga' mv 'w40kdata.sga' 'w40k/w40kdata.sga' mv 'w40kdatasharedtexturesfull.sga' 'w40k/w40kdata-sharedtextures-full.sga' mv 'w40kdatasoundmed.sga' 'w40k/w40kdata-sound-med.sga' mv 'w40kdatawhmmedium.sga' 'w40k/w40kdata-whm-medium.sga' mv 'wxp.ucs' 'wxp/locale/english/wxp.ucs' mv 'wxpdatasoundspeech.sga' 'wxp/locale/english/wxpdata-sound-speech.sga' mv 'wxpdatakeys.sga' 'wxp/locale/english/wxpdatakeys.sga' mv 'wxpdataloc.sga' 'wxp/locale/english/wxpdataloc.sga' mv 'wxp_order.avi' 'wxp/movies/wxp_order.avi' mv 'wxp_order.lua' 'wxp/movies/wxp_order.lua' mv 'wxpdata.sga' 'wxp/wxpdata.sga' mv 'wxpdatamusic.sga' 'wxp/wxpdata-music.sga' mv 'wxpdatasharedtexturesfull.sga' 'wxp/wxpdata-sharedtextures-full.sga' mv 'wxpdatasoundmed.sga' 'wxp/wxpdata-sound-med.sga' mv 'wxpdatawhmmedium.sga' 'wxp/wxpdata-whm-medium.sga' ) # Generate a required configuration file. config_file="$(path_archive_contents)/regions.ini" cat > "$config_file" <<- 'EOF' [mods] wxp=english [global] lang=english EOF unix2dos --quiet "$config_file" ;; esac # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. ln --force --symbolic $(path_libraries)/* "\${PATH_PREFIX}" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-warhammer-40k-gladius-expansions-extra.sh0000755000000000000000000001035714471751340021501 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2022 Antoine Le Gonidec set -o errexit ### # Warhammer 40k: Gladius expansions (extra content): # - Lord of Skulls # send your bug reports to vv221@dotslashplay.it ### script_version=20251213.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='warhammer-40k-gladius' GAME_NAME='Warhammer 40,000: Gladius' EXPANSION_ID_LORDOFSKULLS='lord-of-skulls' EXPANSION_NAME_LORDOFSKULLS='Lord of Skulls' ## Lord of Skulls ARCHIVE_BASE_LORDOFSKULLS_23_NAME='warhammer_40_000_gladius_relics_of_war_lord_of_skulls_1_16_02_83943.sh' ARCHIVE_BASE_LORDOFSKULLS_23_MD5='9e0df62ab059e4f696850a71909f3563' ARCHIVE_BASE_LORDOFSKULLS_23_SIZE='1086' ARCHIVE_BASE_LORDOFSKULLS_23_VERSION='1.16.2-gog83943' ARCHIVE_BASE_LORDOFSKULLS_23_URL='https://www.gog.com/game/warhammer_40000_gladius_relics_of_war_lord_of_skulls' ARCHIVE_BASE_LORDOFSKULLS_22_NAME='warhammer_40_000_gladius_relics_of_war_lord_of_skulls_1_16_00_82313.sh' ARCHIVE_BASE_LORDOFSKULLS_22_MD5='2a47b62bc1390808b708027fe377eed1' ARCHIVE_BASE_LORDOFSKULLS_22_SIZE='1086' ARCHIVE_BASE_LORDOFSKULLS_22_VERSION='1.16.0-gog82313' ARCHIVE_BASE_LORDOFSKULLS_21_NAME='warhammer_40_000_gladius_relics_of_war_lord_of_skulls_1_15_01_78637.sh' ARCHIVE_BASE_LORDOFSKULLS_21_MD5='237e1fdb4e0dbec187d7d3032f22feda' ARCHIVE_BASE_LORDOFSKULLS_21_SIZE='1086' ARCHIVE_BASE_LORDOFSKULLS_21_VERSION='1.15.1-gog78637' ARCHIVE_BASE_LORDOFSKULLS_20_NAME='warhammer_40_000_gladius_relics_of_war_lord_of_skulls_1_14_03_77940.sh' ARCHIVE_BASE_LORDOFSKULLS_20_MD5='d175e20aa6d48a3ee6e06929b4c34ff2' ARCHIVE_BASE_LORDOFSKULLS_20_SIZE='1086' ARCHIVE_BASE_LORDOFSKULLS_20_VERSION='1.14.3-gog77940' ARCHIVE_BASE_LORDOFSKULLS_17_NAME='warhammer_40_000_gladius_relics_of_war_lord_of_skulls_1_13_03_72014.sh' ARCHIVE_BASE_LORDOFSKULLS_17_MD5='4e14b2240bb38489dad212e05cbadba3' ARCHIVE_BASE_LORDOFSKULLS_17_SIZE='1086' ARCHIVE_BASE_LORDOFSKULLS_17_VERSION='1.13.3-gog72014' ARCHIVE_BASE_LORDOFSKULLS_14_NAME='warhammer_40_000_gladius_relics_of_war_lord_of_skulls_1_12_03_67548.sh' ARCHIVE_BASE_LORDOFSKULLS_14_MD5='b0481ff1c15b0393bfd7c1b1c8d80709' ARCHIVE_BASE_LORDOFSKULLS_14_SIZE='1400' ARCHIVE_BASE_LORDOFSKULLS_14_VERSION='1.12.3-gog67548' ARCHIVE_BASE_LORDOFSKULLS_11_NAME='warhammer_40_000_gladius_relics_of_war_lord_of_skulls_1_11_04_64361.sh' ARCHIVE_BASE_LORDOFSKULLS_11_MD5='82bf8335b67ecfc66ca0a58abfee40b6' ARCHIVE_BASE_LORDOFSKULLS_11_SIZE='1400' ARCHIVE_BASE_LORDOFSKULLS_11_VERSION='1.11.4-gog64361' ARCHIVE_BASE_LORDOFSKULLS_6_NAME='warhammer_40_000_gladius_relics_of_war_lord_of_skulls_1_10_01_00_57375.sh' ARCHIVE_BASE_LORDOFSKULLS_6_MD5='ad8818e83aec830eb11385cfbf1c3d10' ARCHIVE_BASE_LORDOFSKULLS_6_SIZE='1400' ARCHIVE_BASE_LORDOFSKULLS_6_VERSION='1.10.1-gog57375' ARCHIVE_BASE_LORDOFSKULLS_4_NAME='warhammer_40_000_gladius_relics_of_war_lord_of_skulls_v1_09_03_00_54377.sh' ARCHIVE_BASE_LORDOFSKULLS_4_MD5='a3e949e976d3248ea338a4555454c804' ARCHIVE_BASE_LORDOFSKULLS_4_SIZE='1400' ARCHIVE_BASE_LORDOFSKULLS_4_VERSION='1.9.3-gog54377' ARCHIVE_BASE_LORDOFSKULLS_2_NAME='warhammer_40_000_gladius_relics_of_war_lord_of_skulls_1_08_04_01_49548.sh' ARCHIVE_BASE_LORDOFSKULLS_2_MD5='a5cad7f6b77e112e10172709f531bb76' ARCHIVE_BASE_LORDOFSKULLS_2_SIZE='1400' ARCHIVE_BASE_LORDOFSKULLS_2_VERSION='1.8.4.1-gog49548' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME_MAIN_FILES=' Data/*.dlc' PKG_PARENT_ID="$GAME_ID" PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_PARENT' # Load common functions. PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_default # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-warhammer-40k-gladius-expansions-units-packs.sh0000755000000000000000000003572014471751340022620 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2022 Antoine Le Gonidec set -o errexit ### # Warhammer 40k: Gladius expansions (units packs): # - Reinforcement # - Fortification # - Specialist # - Escalation # - Firepower # send your bug reports to vv221@dotslashplay.it ### script_version=20251213.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='warhammer-40k-gladius' GAME_NAME='Warhammer 40,000: Gladius' EXPANSION_ID_REINFORCEMENT='reinforcement-pack' EXPANSION_NAME_REINFORCEMENT='Reinforcement Pack' EXPANSION_ID_FORTIFICATION='fortification-pack' EXPANSION_NAME_FORTIFICATION='Fortification Pack' EXPANSION_ID_ASSAULT='assault-pack' EXPANSION_NAME_ASSAULT='Assault Pack' EXPANSION_ID_SPECIALIST='specialist-pack' EXPANSION_NAME_SPECIALIST='Specialist Pack' EXPANSION_ID_ESCALATION='escalation-pack' EXPANSION_NAME_ESCALATION='Escalation Pack' EXPANSION_ID_FIREPOWER='firepower-pack' EXPANSION_NAME_FIREPOWER='Firepower Pack' ## Reinforcement ARCHIVE_BASE_REINFORCEMENT_24_NAME='warhammer_40_000_gladius_reinforcement_pack_1_16_02_83943.sh' ARCHIVE_BASE_REINFORCEMENT_24_MD5='660876f16e9a9b79efab6e82596dea37' ARCHIVE_BASE_REINFORCEMENT_24_SIZE='1086' ARCHIVE_BASE_REINFORCEMENT_24_VERSION='1.16.2-gog83943' ARCHIVE_BASE_REINFORCEMENT_24_URL='https://www.gog.com/game/warhammer_40000_gladius_reinforcement_pack' ARCHIVE_BASE_REINFORCEMENT_23_NAME='warhammer_40_000_gladius_reinforcement_pack_1_16_00_82313.sh' ARCHIVE_BASE_REINFORCEMENT_23_MD5='f639dc832183bc75fd079317d0609b8a' ARCHIVE_BASE_REINFORCEMENT_23_SIZE='1086' ARCHIVE_BASE_REINFORCEMENT_23_VERSION='1.16.0-gog82313' ARCHIVE_BASE_REINFORCEMENT_22_NAME='warhammer_40_000_gladius_reinforcement_pack_1_15_01_78637.sh' ARCHIVE_BASE_REINFORCEMENT_22_MD5='ffa627db6c6910e464a748b182d86758' ARCHIVE_BASE_REINFORCEMENT_22_SIZE='1086' ARCHIVE_BASE_REINFORCEMENT_22_VERSION='1.15.1-gog78637' ARCHIVE_BASE_REINFORCEMENT_21_NAME='warhammer_40_000_gladius_reinforcement_pack_1_14_03_77940.sh' ARCHIVE_BASE_REINFORCEMENT_21_MD5='901cae49f0ac57a2c39666e40f269c49' ARCHIVE_BASE_REINFORCEMENT_21_SIZE='1086' ARCHIVE_BASE_REINFORCEMENT_21_VERSION='1.14.3-gog77940' ARCHIVE_BASE_REINFORCEMENT_18_NAME='warhammer_40_000_gladius_reinforcement_pack_1_13_03_72014.sh' ARCHIVE_BASE_REINFORCEMENT_18_MD5='f7d2e11be209a004bc4d1f666ab18875' ARCHIVE_BASE_REINFORCEMENT_18_SIZE='1086' ARCHIVE_BASE_REINFORCEMENT_18_VERSION='1.13.3-gog72014' ARCHIVE_BASE_REINFORCEMENT_15_NAME='warhammer_40_000_gladius_reinforcement_pack_1_12_03_67548.sh' ARCHIVE_BASE_REINFORCEMENT_15_MD5='290f8f6e2a054d2fcc543318b3636063' ARCHIVE_BASE_REINFORCEMENT_15_SIZE='1400' ARCHIVE_BASE_REINFORCEMENT_15_VERSION='1.12.3-gog67548' ARCHIVE_BASE_REINFORCEMENT_12_NAME='warhammer_40_000_gladius_reinforcement_pack_1_11_04_64361.sh' ARCHIVE_BASE_REINFORCEMENT_12_MD5='145f5a09d46543718f8bcc8b643f6807' ARCHIVE_BASE_REINFORCEMENT_12_SIZE='1400' ARCHIVE_BASE_REINFORCEMENT_12_VERSION='1.11.4-gog64361' ARCHIVE_BASE_REINFORCEMENT_7_NAME='warhammer_40_000_gladius_reinforcement_pack_1_10_01_00_57375.sh' ARCHIVE_BASE_REINFORCEMENT_7_MD5='59ac7359ac72a1f40f5ba237fcee8698' ARCHIVE_BASE_REINFORCEMENT_7_SIZE='1400' ARCHIVE_BASE_REINFORCEMENT_7_VERSION='1.10.1-gog57375' ARCHIVE_BASE_REINFORCEMENT_5_NAME='warhammer_40_000_gladius_reinforcement_pack_v1_09_03_00_54377.sh' ARCHIVE_BASE_REINFORCEMENT_5_MD5='20cce6c9a3a012a4b2d3fda7101606f4' ARCHIVE_BASE_REINFORCEMENT_5_SIZE='1400' ARCHIVE_BASE_REINFORCEMENT_5_VERSION='1.9.3-gog54377' ARCHIVE_BASE_REINFORCEMENT_3_NAME='warhammer_40_000_gladius_reinforcement_pack_1_08_04_01_49548.sh' ARCHIVE_BASE_REINFORCEMENT_3_MD5='72e9d71403328df72d4505096c98c423' ARCHIVE_BASE_REINFORCEMENT_3_SIZE='1400' ARCHIVE_BASE_REINFORCEMENT_3_VERSION='1.8.4.1-gog49548' ARCHIVE_BASE_REINFORCEMENT_0_NAME='warhammer_40_000_gladius_reinforcement_pack_1_07_04_44200.sh' ARCHIVE_BASE_REINFORCEMENT_0_MD5='013e6db4458c5fe0c39b3a33bdda68e5' ARCHIVE_BASE_REINFORCEMENT_0_SIZE='1400' ARCHIVE_BASE_REINFORCEMENT_0_VERSION='1.7.4-gog44200' ## Fortification ARCHIVE_BASE_FORTIFICATION_23_NAME='warhammer_40_000_gladius_fortification_pack_1_16_02_83943.sh' ARCHIVE_BASE_FORTIFICATION_23_MD5='cf6cbf717378266f7e47f73fc882614a' ARCHIVE_BASE_FORTIFICATION_23_SIZE='1086' ARCHIVE_BASE_FORTIFICATION_23_VERSION='1.16.2-gog83943' ARCHIVE_BASE_FORTIFICATION_23_URL='https://www.gog.com/game/warhammer_40000_gladius_fortification_pack' ARCHIVE_BASE_FORTIFICATION_22_NAME='warhammer_40_000_gladius_fortification_pack_1_16_00_82313.sh' ARCHIVE_BASE_FORTIFICATION_22_MD5='8d7580150a95357439345a7c8c6db2d3' ARCHIVE_BASE_FORTIFICATION_22_SIZE='1086' ARCHIVE_BASE_FORTIFICATION_22_VERSION='1.16.0-gog82313' ARCHIVE_BASE_FORTIFICATION_21_NAME='warhammer_40_000_gladius_fortification_pack_1_15_01_78637.sh' ARCHIVE_BASE_FORTIFICATION_21_MD5='081e8d397681b99fad38414f005a846b' ARCHIVE_BASE_FORTIFICATION_21_SIZE='1086' ARCHIVE_BASE_FORTIFICATION_21_VERSION='1.15.1-gog78637' ARCHIVE_BASE_FORTIFICATION_20_NAME='warhammer_40_000_gladius_fortification_pack_1_14_03_77940.sh' ARCHIVE_BASE_FORTIFICATION_20_MD5='4c540595d9e2d42c330488cb091ba1fa' ARCHIVE_BASE_FORTIFICATION_20_SIZE='1086' ARCHIVE_BASE_FORTIFICATION_20_VERSION='1.14.3-gog77940' ARCHIVE_BASE_FORTIFICATION_17_NAME='warhammer_40_000_gladius_fortification_pack_1_13_03_72014.sh' ARCHIVE_BASE_FORTIFICATION_17_MD5='8c9b997c2dfb6e141db5e02f7b519c93' ARCHIVE_BASE_FORTIFICATION_17_SIZE='1086' ARCHIVE_BASE_FORTIFICATION_17_VERSION='1.13.3-gog72014' ARCHIVE_BASE_FORTIFICATION_14_NAME='warhammer_40_000_gladius_fortification_pack_1_12_03_67548.sh' ARCHIVE_BASE_FORTIFICATION_14_MD5='32c26b39aaa8329f20bddccc4059a257' ARCHIVE_BASE_FORTIFICATION_14_SIZE='1400' ARCHIVE_BASE_FORTIFICATION_14_VERSION='1.12.3-gog67548' ARCHIVE_BASE_FORTIFICATION_11_NAME='warhammer_40_000_gladius_fortification_pack_1_11_04_64361.sh' ARCHIVE_BASE_FORTIFICATION_11_MD5='90d66263e66f30aa7c6df35ec2b0d276' ARCHIVE_BASE_FORTIFICATION_11_SIZE='1400' ARCHIVE_BASE_FORTIFICATION_11_VERSION='1.11.4-gog64361' ARCHIVE_BASE_FORTIFICATION_6_NAME='warhammer_40_000_gladius_fortification_pack_1_10_01_00_57375.sh' ARCHIVE_BASE_FORTIFICATION_6_MD5='859c6d14d76a4b1a43880ea89e01ed27' ARCHIVE_BASE_FORTIFICATION_6_SIZE='1400' ARCHIVE_BASE_FORTIFICATION_6_VERSION='1.10.1-gog57375' ARCHIVE_BASE_FORTIFICATION_4_NAME='warhammer_40_000_gladius_fortification_pack_v1_09_03_00_54377.sh' ARCHIVE_BASE_FORTIFICATION_4_MD5='4221b279557e7af587ec6207f8654071' ARCHIVE_BASE_FORTIFICATION_4_SIZE='1400' ARCHIVE_BASE_FORTIFICATION_4_VERSION='1.9.3-gog54377' ARCHIVE_BASE_FORTIFICATION_2_NAME='warhammer_40_000_gladius_fortification_pack_1_08_04_01_49548.sh' ARCHIVE_BASE_FORTIFICATION_2_MD5='d485b048b4c1d391c7671ecc4c88e66d' ARCHIVE_BASE_FORTIFICATION_2_SIZE='1400' ARCHIVE_BASE_FORTIFICATION_2_VERSION='1.8.4.1-gog49548' ## Assault ARCHIVE_BASE_ASSAULT_20_NAME='warhammer_40_000_gladius_assault_pack_1_16_02_83943.sh' ARCHIVE_BASE_ASSAULT_20_MD5='58f22582c5f904b07af5585f988d6168' ARCHIVE_BASE_ASSAULT_20_SIZE='1086' ARCHIVE_BASE_ASSAULT_20_VERSION='1.16.2-gog83943' ARCHIVE_BASE_ASSAULT_20_URL='https://www.gog.com/game/warhammer_40000_gladius_assault_pack' ARCHIVE_BASE_ASSAULT_19_NAME='warhammer_40_000_gladius_assault_pack_1_16_00_82313.sh' ARCHIVE_BASE_ASSAULT_19_MD5='2a103597b520cc937f59ca36bc15edfd' ARCHIVE_BASE_ASSAULT_19_SIZE='1086' ARCHIVE_BASE_ASSAULT_19_VERSION='1.16.0-gog82313' ARCHIVE_BASE_ASSAULT_18_NAME='warhammer_40_000_gladius_assault_pack_1_15_01_78637.sh' ARCHIVE_BASE_ASSAULT_18_MD5='31305aacc9903eddd50abe2233d71eda' ARCHIVE_BASE_ASSAULT_18_SIZE='1086' ARCHIVE_BASE_ASSAULT_18_VERSION='1.15.1-gog78637' ARCHIVE_BASE_ASSAULT_17_NAME='warhammer_40_000_gladius_assault_pack_1_14_03_77940.sh' ARCHIVE_BASE_ASSAULT_17_MD5='760deb0defe921b8875c99274be00bec' ARCHIVE_BASE_ASSAULT_17_SIZE='1086' ARCHIVE_BASE_ASSAULT_17_VERSION='1.14.3-gog77940' ARCHIVE_BASE_ASSAULT_14_NAME='warhammer_40_000_gladius_assault_pack_1_13_03_72014.sh' ARCHIVE_BASE_ASSAULT_14_MD5='f0c6a21687fbcad8442f5bb1c835b1aa' ARCHIVE_BASE_ASSAULT_14_SIZE='1086' ARCHIVE_BASE_ASSAULT_14_VERSION='1.13.3-gog72014' ARCHIVE_BASE_ASSAULT_11_NAME='warhammer_40_000_gladius_assault_pack_1_12_03_67548.sh' ARCHIVE_BASE_ASSAULT_11_MD5='9e56693f4d1623a9c7dcc9c2cf63a59a' ARCHIVE_BASE_ASSAULT_11_SIZE='1400' ARCHIVE_BASE_ASSAULT_11_VERSION='1.12.3-gog67548' ARCHIVE_BASE_ASSAULT_8_NAME='warhammer_40_000_gladius_assault_pack_1_11_04_64361.sh' ARCHIVE_BASE_ASSAULT_8_MD5='aae3f873d640d36f3821921efb7525c2' ARCHIVE_BASE_ASSAULT_8_SIZE='1400' ARCHIVE_BASE_ASSAULT_8_VERSION='1.11.4-gog64361' ARCHIVE_BASE_ASSAULT_3_NAME='warhammer_40_000_gladius_assault_pack_1_10_01_00_57375.sh' ARCHIVE_BASE_ASSAULT_3_MD5='69d3d257e8caa70c7af8bd50b6963e0a' ARCHIVE_BASE_ASSAULT_3_SIZE='1400' ARCHIVE_BASE_ASSAULT_3_VERSION='1.10.1-gog57375' ARCHIVE_BASE_ASSAULT_1_NAME='warhammer_40_000_gladius_assault_pack_v1_09_03_00_54377.sh' ARCHIVE_BASE_ASSAULT_1_MD5='8812a45df8fa62523f655ecc2a1dbd46' ARCHIVE_BASE_ASSAULT_1_SIZE='1400' ARCHIVE_BASE_ASSAULT_1_VERSION='1.9.3-gog54377' ## Specialist ARCHIVE_BASE_SPECIALIST_18_NAME='warhammer_40_000_gladius_specialist_pack_1_16_02_83943.sh' ARCHIVE_BASE_SPECIALIST_18_MD5='0a762a5a582a76aa61f446a72b01749c' ARCHIVE_BASE_SPECIALIST_18_SIZE='1086' ARCHIVE_BASE_SPECIALIST_18_VERSION='1.16.2-gog83943' ARCHIVE_BASE_SPECIALIST_18_URL='https://www.gog.com/game/warhammer_40000_gladius_specialist_pack' ARCHIVE_BASE_SPECIALIST_17_NAME='warhammer_40_000_gladius_specialist_pack_1_16_00_82313.sh' ARCHIVE_BASE_SPECIALIST_17_MD5='0d1846d59bf1e5fa5c630cb3901942d0' ARCHIVE_BASE_SPECIALIST_17_SIZE='1086' ARCHIVE_BASE_SPECIALIST_17_VERSION='1.16.0-gog82313' ARCHIVE_BASE_SPECIALIST_16_NAME='warhammer_40_000_gladius_specialist_pack_1_15_01_78637.sh' ARCHIVE_BASE_SPECIALIST_16_MD5='91546b521b9e1554b97a43e0f542fd05' ARCHIVE_BASE_SPECIALIST_16_SIZE='1086' ARCHIVE_BASE_SPECIALIST_16_VERSION='1.15.1-gog78637' ARCHIVE_BASE_SPECIALIST_15_NAME='warhammer_40_000_gladius_specialist_pack_1_14_03_77940.sh' ARCHIVE_BASE_SPECIALIST_15_MD5='265a6aa1071eff6f5f7855f63278e61c' ARCHIVE_BASE_SPECIALIST_15_SIZE='1086' ARCHIVE_BASE_SPECIALIST_15_VERSION='1.14.3-gog77940' ARCHIVE_BASE_SPECIALIST_12_NAME='warhammer_40_000_gladius_specialist_pack_1_13_03_72014.sh' ARCHIVE_BASE_SPECIALIST_12_MD5='065713713aaa72418d048a20dcd9203e' ARCHIVE_BASE_SPECIALIST_12_SIZE='1086' ARCHIVE_BASE_SPECIALIST_12_VERSION='1.13.3-gog72014' ARCHIVE_BASE_SPECIALIST_9_NAME='warhammer_40_000_gladius_specialist_pack_1_12_03_67548.sh' ARCHIVE_BASE_SPECIALIST_9_MD5='f8e1aaacc5a30496abae99c8a6965799' ARCHIVE_BASE_SPECIALIST_9_SIZE='1400' ARCHIVE_BASE_SPECIALIST_9_VERSION='1.12.3-gog67548' ARCHIVE_BASE_SPECIALIST_6_NAME='warhammer_40_000_gladius_specialist_pack_1_11_04_64361.sh' ARCHIVE_BASE_SPECIALIST_6_MD5='5f44ab4c03bf70047e6716000a29f910' ARCHIVE_BASE_SPECIALIST_6_SIZE='1400' ARCHIVE_BASE_SPECIALIST_6_VERSION='1.11.4-gog64361' ARCHIVE_BASE_SPECIALIST_1_NAME='warhammer_40_000_gladius_specialist_pack_1_10_01_00_57375.sh' ARCHIVE_BASE_SPECIALIST_1_MD5='b0b788d180a82919048621796f68fb1e' ARCHIVE_BASE_SPECIALIST_1_SIZE='1400' ARCHIVE_BASE_SPECIALIST_1_VERSION='1.10.1-gog57375' ## Escalation ARCHIVE_BASE_ESCALATION_11_NAME='warhammer_40_000_gladius_escalation_pack_1_16_02_83943.sh' ARCHIVE_BASE_ESCALATION_11_MD5='e341d10836b5d9f78ee36c6587f29b83' ARCHIVE_BASE_ESCALATION_11_SIZE='1086' ARCHIVE_BASE_ESCALATION_11_VERSION='1.16.2-gog83943' ARCHIVE_BASE_ESCALATION_11_URL='https://www.gog.com/game/warhammer_40000_gladius_adeptus_mechanicus' ARCHIVE_BASE_ESCALATION_10_NAME='warhammer_40_000_gladius_escalation_pack_1_16_00_82313.sh' ARCHIVE_BASE_ESCALATION_10_MD5='99496fe1509b4a2e1114f5fd66ac062a' ARCHIVE_BASE_ESCALATION_10_SIZE='1086' ARCHIVE_BASE_ESCALATION_10_VERSION='1.16.0-gog82313' ARCHIVE_BASE_ESCALATION_9_NAME='warhammer_40_000_gladius_escalation_pack_1_15_01_78637.sh' ARCHIVE_BASE_ESCALATION_9_MD5='548fae3d18f2bc3a066c41efc8549200' ARCHIVE_BASE_ESCALATION_9_SIZE='1086' ARCHIVE_BASE_ESCALATION_9_VERSION='1.15.1-gog78637' ARCHIVE_BASE_ESCALATION_8_NAME='warhammer_40_000_gladius_escalation_pack_1_14_03_77940.sh' ARCHIVE_BASE_ESCALATION_8_MD5='847f3fbd0e977f2a944531cabd3efd30' ARCHIVE_BASE_ESCALATION_8_SIZE='1086' ARCHIVE_BASE_ESCALATION_8_VERSION='1.14.3-gog77940' ARCHIVE_BASE_ESCALATION_5_NAME='warhammer_40_000_gladius_escalation_pack_1_13_03_72014.sh' ARCHIVE_BASE_ESCALATION_5_MD5='5dba4c9a1719723682a2857b44dce0c5' ARCHIVE_BASE_ESCALATION_5_SIZE='1086' ARCHIVE_BASE_ESCALATION_5_VERSION='1.13.3-gog72014' ARCHIVE_BASE_ESCALATION_2_NAME='warhammer_40_000_gladius_escalation_pack_1_12_03_67548.sh' ARCHIVE_BASE_ESCALATION_2_MD5='ce318c4cc0ee526f1abcd18ddbd4937c' ARCHIVE_BASE_ESCALATION_2_SIZE='1400' ARCHIVE_BASE_ESCALATION_2_VERSION='1.12.3-gog67548' ## Firepower ARCHIVE_BASE_FIREPOWER_10_NAME='warhammer_40_000_gladius_firepower_pack_1_16_02_83943.sh' ARCHIVE_BASE_FIREPOWER_10_MD5='dc951eb8ffcab8f645eb01c9907ea975' ARCHIVE_BASE_FIREPOWER_10_SIZE='1086' ARCHIVE_BASE_FIREPOWER_10_VERSION='1.16.2-gog83943' ARCHIVE_BASE_FIREPOWER_10_URL='https://www.gog.com/game/warhammer_40000_gladius_firepower_pack' ARCHIVE_BASE_FIREPOWER_9_NAME='warhammer_40_000_gladius_firepower_pack_1_16_00_82313.sh' ARCHIVE_BASE_FIREPOWER_9_MD5='23b91bf23b00ac2a72d7d3c218f04711' ARCHIVE_BASE_FIREPOWER_9_SIZE='1086' ARCHIVE_BASE_FIREPOWER_9_VERSION='1.16.0-gog82313' ARCHIVE_BASE_FIREPOWER_8_NAME='warhammer_40_000_gladius_firepower_pack_1_15_01_78637.sh' ARCHIVE_BASE_FIREPOWER_8_MD5='fbe795330138176fbce3fb80f7801617' ARCHIVE_BASE_FIREPOWER_8_SIZE='1086' ARCHIVE_BASE_FIREPOWER_8_VERSION='1.15.1-gog78637' ARCHIVE_BASE_FIREPOWER_7_NAME='warhammer_40_000_gladius_firepower_pack_1_14_03_77940.sh' ARCHIVE_BASE_FIREPOWER_7_MD5='1a81b99275d126cbbfcf1ee3c751cac7' ARCHIVE_BASE_FIREPOWER_7_SIZE='1086' ARCHIVE_BASE_FIREPOWER_7_VERSION='1.14.3-gog77940' ARCHIVE_BASE_FIREPOWER_4_NAME='warhammer_40_000_gladius_firepower_pack_1_13_03_72014.sh' ARCHIVE_BASE_FIREPOWER_4_MD5='813f40d7fbce991eae9db43aad552a4e' ARCHIVE_BASE_FIREPOWER_4_SIZE='1086' ARCHIVE_BASE_FIREPOWER_4_VERSION='1.13.3-gog72014' ARCHIVE_BASE_FIREPOWER_1_NAME='warhammer_40_000_gladius_firepower_pack_1_12_03_67548.sh' ARCHIVE_BASE_FIREPOWER_1_MD5='4f5adaaf42d40278df28bae531313c1d' ARCHIVE_BASE_FIREPOWER_1_SIZE='1400' ARCHIVE_BASE_FIREPOWER_1_VERSION='1.12.3-gog67548' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME_MAIN_FILES=' Data/*.dlc' PKG_PARENT_ID="$GAME_ID" PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_PARENT' # Load common functions. PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_default # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-warhammer-40k-gladius-expansions.sh0000755000000000000000000003653114471751340020362 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2022 Antoine Le Gonidec set -o errexit ### # Warhammer 40k: Gladius expansions: # - Tyranids # - Chaos Space Marines # - T'au # - Craftworld Aeldari # - Adeptus Mechanicus # - Adepta Sororitas # - Drukhari # send your bug reports to vv221@dotslashplay.it ### script_version=20251213.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='warhammer-40k-gladius' GAME_NAME='Warhammer 40,000: Gladius' EXPANSION_ID_TYRANIDS='tyranids' EXPANSION_NAME_TYRANIDS='Tyranids' EXPANSION_ID_CHAOS='chaos-space-marines' EXPANSION_NAME_CHAOS='Chaos Space Marines' EXPANSION_ID_TAU='tau' EXPANSION_NAME_TAU='Tʼau' EXPANSION_ID_AELDARI='craftworld-aeldari' EXPANSION_NAME_AELDARI='Craftworld Aeldari' EXPANSION_ID_MECHANICUS='adeptus-mechanicus' EXPANSION_NAME_MECHANICUS='Adeptus Mechanicus' EXPANSION_ID_SORORITAS='adepta-sororitas' EXPANSION_NAME_SORORITAS='Adepta Sororitas' EXPANSION_ID_DRUKHARI='drukhari' EXPANSION_NAME_DRUKHARI='Drukhari' ## Tyranids ARCHIVE_BASE_TYRANIDS_24_NAME='warhammer_40_000_gladius_tyranids_1_16_02_83943.sh' ARCHIVE_BASE_TYRANIDS_24_MD5='821885cb5b96c005216a122554256089' ARCHIVE_BASE_TYRANIDS_24_SIZE='1086' ARCHIVE_BASE_TYRANIDS_24_VERSION='1.16.2-gog83943' ARCHIVE_BASE_TYRANIDS_24_URL='https://www.gog.com/game/warhammer_40000_gladius_tyranids' ARCHIVE_BASE_TYRANIDS_23_NAME='warhammer_40_000_gladius_tyranids_1_16_00_82313.sh' ARCHIVE_BASE_TYRANIDS_23_MD5='feaa9df2e06a4c1459b871eb776761e1' ARCHIVE_BASE_TYRANIDS_23_SIZE='1086' ARCHIVE_BASE_TYRANIDS_23_VERSION='1.16.0-gog82313' ARCHIVE_BASE_TYRANIDS_22_NAME='warhammer_40_000_gladius_tyranids_1_15_01_78637.sh' ARCHIVE_BASE_TYRANIDS_22_MD5='54d7c19b2c64853b0025928b8c8e8918' ARCHIVE_BASE_TYRANIDS_22_SIZE='1086' ARCHIVE_BASE_TYRANIDS_22_VERSION='1.15.1-gog78637' ARCHIVE_BASE_TYRANIDS_21_NAME='warhammer_40_000_gladius_tyranids_1_14_03_77940.sh' ARCHIVE_BASE_TYRANIDS_21_MD5='08a7490d398a7f36c600a84367b9dfb8' ARCHIVE_BASE_TYRANIDS_21_SIZE='1086' ARCHIVE_BASE_TYRANIDS_21_VERSION='1.14.3-gog77940' ARCHIVE_BASE_TYRANIDS_18_NAME='warhammer_40_000_gladius_tyranids_1_13_03_72014.sh' ARCHIVE_BASE_TYRANIDS_18_MD5='1126da61c9bdc27a4c9c4cc9444ff87d' ARCHIVE_BASE_TYRANIDS_18_SIZE='1086' ARCHIVE_BASE_TYRANIDS_18_VERSION='1.13.3-gog72014' ARCHIVE_BASE_TYRANIDS_15_NAME='warhammer_40_000_gladius_tyranids_1_12_03_67548.sh' ARCHIVE_BASE_TYRANIDS_15_MD5='6fd672b4230bceebc496e7ce7aa455b4' ARCHIVE_BASE_TYRANIDS_15_SIZE='1400' ARCHIVE_BASE_TYRANIDS_15_VERSION='1.12.3-gog67548' ARCHIVE_BASE_TYRANIDS_12_NAME='warhammer_40_000_gladius_tyranids_1_11_04_64361.sh' ARCHIVE_BASE_TYRANIDS_12_MD5='53da0257c7ae0ca6c4b2712a70f8b666' ARCHIVE_BASE_TYRANIDS_12_SIZE='1400' ARCHIVE_BASE_TYRANIDS_12_VERSION='1.11.4-gog64361' ARCHIVE_BASE_TYRANIDS_7_NAME='warhammer_40_000_gladius_tyranids_1_10_01_00_57375.sh' ARCHIVE_BASE_TYRANIDS_7_MD5='30934475a2b0c8f794234d5e38f504cc' ARCHIVE_BASE_TYRANIDS_7_SIZE='1400' ARCHIVE_BASE_TYRANIDS_7_VERSION='1.10.1-gog57375' ARCHIVE_BASE_TYRANIDS_5_NAME='warhammer_40_000_gladius_tyranids_v1_09_03_00_54377.sh' ARCHIVE_BASE_TYRANIDS_5_MD5='ac2e7f57d90a405688304573e6332443' ARCHIVE_BASE_TYRANIDS_5_SIZE='1400' ARCHIVE_BASE_TYRANIDS_5_VERSION='1.9.3-gog54377' ARCHIVE_BASE_TYRANIDS_3_NAME='warhammer_40_000_gladius_tyranids_1_08_04_01_49548.sh' ARCHIVE_BASE_TYRANIDS_3_MD5='a6e5921db60b6a366619354b1eb47d23' ARCHIVE_BASE_TYRANIDS_3_SIZE='1400' ARCHIVE_BASE_TYRANIDS_3_VERSION='1.8.4.1-gog49548' ARCHIVE_BASE_TYRANIDS_0_NAME='warhammer_40_000_gladius_tyranids_1_07_04_44200.sh' ARCHIVE_BASE_TYRANIDS_0_MD5='c6c04852f1a3128dbfa267c89f1c9626' ARCHIVE_BASE_TYRANIDS_0_SIZE='1400' ARCHIVE_BASE_TYRANIDS_0_VERSION='1.7.4-gog44200' ## Chaos Space Marines ARCHIVE_BASE_CHAOS_23_NAME='warhammer_40_000_gladius_chaos_space_marines_1_16_02_83943.sh' ARCHIVE_BASE_CHAOS_23_MD5='8c1b55b12541a92f8d7dfda25892498d' ARCHIVE_BASE_CHAOS_23_SIZE='1086' ARCHIVE_BASE_CHAOS_23_VERSION='1.16.2-gog83943' ARCHIVE_BASE_CHAOS_23_URL='https://www.gog.com/game/warhammer_40000_gladius_chaos_space_marines' ARCHIVE_BASE_CHAOS_22_NAME='warhammer_40_000_gladius_chaos_space_marines_1_16_00_82313.sh' ARCHIVE_BASE_CHAOS_22_MD5='60568806dde898dc17904ae64c0971ed' ARCHIVE_BASE_CHAOS_22_SIZE='1086' ARCHIVE_BASE_CHAOS_22_VERSION='1.16.0-gog82313' ARCHIVE_BASE_CHAOS_21_NAME='warhammer_40_000_gladius_chaos_space_marines_1_15_01_78637.sh' ARCHIVE_BASE_CHAOS_21_MD5='abda449d0db7d068321a0d44ea2b8704' ARCHIVE_BASE_CHAOS_21_SIZE='1086' ARCHIVE_BASE_CHAOS_21_VERSION='1.15.1-gog78637' ARCHIVE_BASE_CHAOS_20_NAME='warhammer_40_000_gladius_chaos_space_marines_1_14_03_77940.sh' ARCHIVE_BASE_CHAOS_20_MD5='4d3e181c0156ab28d81e4b8df4c3d1ba' ARCHIVE_BASE_CHAOS_20_SIZE='1086' ARCHIVE_BASE_CHAOS_20_VERSION='1.14.3-gog77940' ARCHIVE_BASE_CHAOS_17_NAME='warhammer_40_000_gladius_chaos_space_marines_1_13_03_72014.sh' ARCHIVE_BASE_CHAOS_17_MD5='a7c63aa885dd1a5b51b2b5a3d55d4e21' ARCHIVE_BASE_CHAOS_17_SIZE='1086' ARCHIVE_BASE_CHAOS_17_VERSION='1.13.3-gog72014' ARCHIVE_BASE_CHAOS_14_NAME='warhammer_40_000_gladius_chaos_space_marines_1_12_03_67548.sh' ARCHIVE_BASE_CHAOS_14_MD5='5103e5a13f5e04f6a0d4ce2124ae9b8f' ARCHIVE_BASE_CHAOS_14_SIZE='1400' ARCHIVE_BASE_CHAOS_14_VERSION='1.12.3-gog67548' ARCHIVE_BASE_CHAOS_11_NAME='warhammer_40_000_gladius_chaos_space_marines_1_11_04_64361.sh' ARCHIVE_BASE_CHAOS_11_MD5='2c613e93f92197efb004a4d590f6412e' ARCHIVE_BASE_CHAOS_11_SIZE='1400' ARCHIVE_BASE_CHAOS_11_VERSION='1.11.4-gog64361' ARCHIVE_BASE_CHAOS_6_NAME='warhammer_40_000_gladius_chaos_space_marines_1_10_01_00_57375.sh' ARCHIVE_BASE_CHAOS_6_MD5='88542a8341638e1d51e2758c9886e2c6' ARCHIVE_BASE_CHAOS_6_SIZE='1400' ARCHIVE_BASE_CHAOS_6_VERSION='1.10.1-gog57375' ARCHIVE_BASE_CHAOS_4_NAME='warhammer_40_000_gladius_chaos_space_marines_v1_09_03_00_54377.sh' ARCHIVE_BASE_CHAOS_4_MD5='ed2c64df977669d9413648347c883a35' ARCHIVE_BASE_CHAOS_4_SIZE='1400' ARCHIVE_BASE_CHAOS_4_VERSION='1.9.3-gog54377' ARCHIVE_BASE_CHAOS_2_NAME='warhammer_40_000_gladius_chaos_space_marines_1_08_04_01_49548.sh' ARCHIVE_BASE_CHAOS_2_MD5='37894d5cd89aaa67dc841d2f5023ebf2' ARCHIVE_BASE_CHAOS_2_SIZE='1400' ARCHIVE_BASE_CHAOS_2_VERSION='1.8.4.1-gog49548' ## T'au ARCHIVE_BASE_TAU_20_NAME='warhammer_40_000_gladius_t_au_1_16_02_83943.sh' ARCHIVE_BASE_TAU_20_MD5='dcca997c5a4f7240c6c028ec6496fdbf' ARCHIVE_BASE_TAU_20_SIZE='1086' ARCHIVE_BASE_TAU_20_VERSION='1.16.2-gog83943' ARCHIVE_BASE_TAU_20_URL='https://www.gog.com/game/warhammer_40000_gladius_tau' ARCHIVE_BASE_TAU_19_NAME='warhammer_40_000_gladius_t_au_1_16_00_82313.sh' ARCHIVE_BASE_TAU_19_MD5='e37407f9a4f59d871303c0d946e70867' ARCHIVE_BASE_TAU_19_SIZE='1086' ARCHIVE_BASE_TAU_19_VERSION='1.16.0-gog82313' ARCHIVE_BASE_TAU_18_NAME='warhammer_40_000_gladius_t_au_1_15_01_78637.sh' ARCHIVE_BASE_TAU_18_MD5='868bab8668f793d74d2830156ab9c49d' ARCHIVE_BASE_TAU_18_SIZE='1086' ARCHIVE_BASE_TAU_18_VERSION='1.15.1-gog78637' ARCHIVE_BASE_TAU_17_NAME='warhammer_40_000_gladius_t_au_1_14_03_77940.sh' ARCHIVE_BASE_TAU_17_MD5='e69fec137633403f9b37fa37d58da209' ARCHIVE_BASE_TAU_17_SIZE='1086' ARCHIVE_BASE_TAU_17_VERSION='1.14.3-gog77940' ARCHIVE_BASE_TAU_14_NAME='warhammer_40_000_gladius_t_au_1_13_03_72014.sh' ARCHIVE_BASE_TAU_14_MD5='cc6b1b472357aafe1a92906dbac6ce56' ARCHIVE_BASE_TAU_14_SIZE='1086' ARCHIVE_BASE_TAU_14_VERSION='1.13.3-gog72014' ARCHIVE_BASE_TAU_11_NAME='warhammer_40_000_gladius_t_au_1_12_03_67548.sh' ARCHIVE_BASE_TAU_11_MD5='c0dd6e15c253f1b58a0d596fec8d1531' ARCHIVE_BASE_TAU_11_SIZE='1396' ARCHIVE_BASE_TAU_11_VERSION='1.12.3-gog67548' ARCHIVE_BASE_TAU_8_NAME='warhammer_40_000_gladius_t_au_1_11_04_64361.sh' ARCHIVE_BASE_TAU_8_MD5='b8d20922d142704e61dbb8dbe83ce2b0' ARCHIVE_BASE_TAU_8_SIZE='1400' ARCHIVE_BASE_TAU_8_VERSION='1.11.4-gog64361' ARCHIVE_BASE_TAU_3_NAME='warhammer_40_000_gladius_t_au_1_10_01_00_57375.sh' ARCHIVE_BASE_TAU_3_MD5='1f7770a75d1c846aca32f905cd4ce51f' ARCHIVE_BASE_TAU_3_SIZE='1400' ARCHIVE_BASE_TAU_3_VERSION='1.10.1-gog57375' ARCHIVE_BASE_TAU_1_NAME='warhammer_40_000_gladius_t_au_v1_09_03_00_54377.sh' ARCHIVE_BASE_TAU_1_MD5='22b575c6ce8da35f7d57335662de4747' ARCHIVE_BASE_TAU_1_SIZE='1400' ARCHIVE_BASE_TAU_1_VERSION='1.9.3-gog54377' ## Craftworld Aeldari ARCHIVE_BASE_AELDARI_18_NAME='warhammer_40_000_gladius_craftworld_aeldari_1_16_02_83943.sh' ARCHIVE_BASE_AELDARI_18_MD5='1c3b009d6da8306d8b04beb8c0bcb249' ARCHIVE_BASE_AELDARI_18_SIZE='1086' ARCHIVE_BASE_AELDARI_18_VERSION='1.16.2-gog83943' ARCHIVE_BASE_AELDARI_18_URL='https://www.gog.com/game/warhammer_40000_gladius_craftworld_aeldari' ARCHIVE_BASE_AELDARI_17_NAME='warhammer_40_000_gladius_craftworld_aeldari_1_16_00_82313.sh' ARCHIVE_BASE_AELDARI_17_MD5='c4f51f47973e1500ac1f34de022392d9' ARCHIVE_BASE_AELDARI_17_SIZE='1086' ARCHIVE_BASE_AELDARI_17_VERSION='1.16.0-gog82313' ARCHIVE_BASE_AELDARI_16_NAME='warhammer_40_000_gladius_craftworld_aeldari_1_15_01_78637.sh' ARCHIVE_BASE_AELDARI_16_MD5='5676c61f7af8851baec11d26740ec3b8' ARCHIVE_BASE_AELDARI_16_SIZE='1086' ARCHIVE_BASE_AELDARI_16_VERSION='1.15.1-gog78637' ARCHIVE_BASE_AELDARI_15_NAME='warhammer_40_000_gladius_craftworld_aeldari_1_14_03_77940.sh' ARCHIVE_BASE_AELDARI_15_MD5='73a817b4990d66ea7f938d82d0ec4bbf' ARCHIVE_BASE_AELDARI_15_SIZE='1086' ARCHIVE_BASE_AELDARI_15_VERSION='1.14.3-gog77940' ARCHIVE_BASE_AELDARI_12_NAME='warhammer_40_000_gladius_craftworld_aeldari_1_13_03_72014.sh' ARCHIVE_BASE_AELDARI_12_MD5='18e5d21d0d2b202d746de192cc4370da' ARCHIVE_BASE_AELDARI_12_SIZE='1086' ARCHIVE_BASE_AELDARI_12_VERSION='1.13.3-gog72014' ARCHIVE_BASE_AELDARI_9_NAME='warhammer_40_000_gladius_craftworld_aeldari_1_12_03_67548.sh' ARCHIVE_BASE_AELDARI_9_MD5='a9ed6a70658299ab82d2934f7b572151' ARCHIVE_BASE_AELDARI_9_SIZE='1400' ARCHIVE_BASE_AELDARI_9_VERSION='1.12.3-gog67548' ARCHIVE_BASE_AELDARI_6_NAME='warhammer_40_000_gladius_craftworld_aeldari_1_11_04_64361.sh' ARCHIVE_BASE_AELDARI_6_MD5='2c2b76c50ee3d7c29fd24c8aea0fe6e0' ARCHIVE_BASE_AELDARI_6_SIZE='1400' ARCHIVE_BASE_AELDARI_6_VERSION='1.11.4-gog64361' ARCHIVE_BASE_AELDARI_1_NAME='warhammer_40_000_gladius_craftworld_aeldari_1_10_01_00_57375.sh' ARCHIVE_BASE_AELDARI_1_MD5='b3698a59f99611fb8431a76ea50ef35d' ARCHIVE_BASE_AELDARI_1_SIZE='1400' ARCHIVE_BASE_AELDARI_1_VERSION='1.10.1-gog57375' ## Adeptus Mechanicus ARCHIVE_BASE_MECHANICUS_11_NAME='warhammer_40_000_gladius_adeptus_mechanicus_1_16_02_83943.sh' ARCHIVE_BASE_MECHANICUS_11_MD5='50174578d8246116e5e72afc67fa0b98' ARCHIVE_BASE_MECHANICUS_11_SIZE='1086' ARCHIVE_BASE_MECHANICUS_11_VERSION='1.16.2-gog83943' ARCHIVE_BASE_MECHANICUS_11_URL='https://www.gog.com/game/warhammer_40000_gladius_adeptus_mechanicus' ARCHIVE_BASE_MECHANICUS_10_NAME='warhammer_40_000_gladius_adeptus_mechanicus_1_16_00_82313.sh' ARCHIVE_BASE_MECHANICUS_10_MD5='1def126bbf90b067a5c1514395cbd963' ARCHIVE_BASE_MECHANICUS_10_SIZE='1086' ARCHIVE_BASE_MECHANICUS_10_VERSION='1.16.0-gog82313' ARCHIVE_BASE_MECHANICUS_9_NAME='warhammer_40_000_gladius_adeptus_mechanicus_1_15_01_78637.sh' ARCHIVE_BASE_MECHANICUS_9_MD5='afe583ed20206aa21dae3a4a4d0ae2ed' ARCHIVE_BASE_MECHANICUS_9_SIZE='1086' ARCHIVE_BASE_MECHANICUS_9_VERSION='1.15.1-gog78637' ARCHIVE_BASE_MECHANICUS_8_NAME='warhammer_40_000_gladius_adeptus_mechanicus_1_14_03_77940.sh' ARCHIVE_BASE_MECHANICUS_8_MD5='ea312fa967f14ad4511bc178430aeda1' ARCHIVE_BASE_MECHANICUS_8_SIZE='1086' ARCHIVE_BASE_MECHANICUS_8_VERSION='1.14.3-gog77940' ARCHIVE_BASE_MECHANICUS_5_NAME='warhammer_40_000_gladius_adeptus_mechanicus_1_13_03_72014.sh' ARCHIVE_BASE_MECHANICUS_5_MD5='7670878de137f0de17cdae93ded39f09' ARCHIVE_BASE_MECHANICUS_5_SIZE='1086' ARCHIVE_BASE_MECHANICUS_5_VERSION='1.13.3-gog72014' ARCHIVE_BASE_MECHANICUS_2_NAME='warhammer_40_000_gladius_adeptus_mechanicus_1_12_03_67548.sh' ARCHIVE_BASE_MECHANICUS_2_MD5='0be493045812d7ee50c5c7846b60151e' ARCHIVE_BASE_MECHANICUS_2_SIZE='1400' ARCHIVE_BASE_MECHANICUS_2_VERSION='1.12.3-gog67548' ## Adepta Sororitas ARCHIVE_BASE_SORORITAS_10_NAME='warhammer_40_000_gladius_adepta_sororitas_1_16_02_83943.sh' ARCHIVE_BASE_SORORITAS_10_MD5='148ed072b98789ff640de4e29f68e51f' ARCHIVE_BASE_SORORITAS_10_SIZE='1086' ARCHIVE_BASE_SORORITAS_10_VERSION='1.16.2-gog83943' ARCHIVE_BASE_SORORITAS_10_URL='https://www.gog.com/game/warhammer_40000_gladius_adepta_sororitas' ARCHIVE_BASE_SORORITAS_9_NAME='warhammer_40_000_gladius_adepta_sororitas_1_16_00_82313.sh' ARCHIVE_BASE_SORORITAS_9_MD5='20af00eeaf1fb3aff8e3389a2955d772' ARCHIVE_BASE_SORORITAS_9_SIZE='1086' ARCHIVE_BASE_SORORITAS_9_VERSION='1.16.0-gog82313' ARCHIVE_BASE_SORORITAS_8_NAME='warhammer_40_000_gladius_adepta_sororitas_1_15_01_78637.sh' ARCHIVE_BASE_SORORITAS_8_MD5='4114725cfa16b43f5371d4d0399787b6' ARCHIVE_BASE_SORORITAS_8_SIZE='1086' ARCHIVE_BASE_SORORITAS_8_VERSION='1.15.1-gog78637' ARCHIVE_BASE_SORORITAS_7_NAME='warhammer_40_000_gladius_adepta_sororitas_1_14_03_77940.sh' ARCHIVE_BASE_SORORITAS_7_MD5='2166533e2ed1efc020729e5b174a1721' ARCHIVE_BASE_SORORITAS_7_SIZE='1086' ARCHIVE_BASE_SORORITAS_7_VERSION='1.14.3-gog77940' ARCHIVE_BASE_SORORITAS_4_NAME='warhammer_40_000_gladius_adepta_sororitas_1_13_03_72014.sh' ARCHIVE_BASE_SORORITAS_4_MD5='6d588bac7b0e51c140f8cbb888b8de61' ARCHIVE_BASE_SORORITAS_4_SIZE='1086' ARCHIVE_BASE_SORORITAS_4_VERSION='1.13.3-gog72014' ARCHIVE_BASE_SORORITAS_1_NAME='warhammer_40_000_gladius_adepta_sororitas_1_12_03_67548.sh' ARCHIVE_BASE_SORORITAS_1_MD5='1c69d1ce8301b0fb42f10718a4271761' ARCHIVE_BASE_SORORITAS_1_SIZE='1400' ARCHIVE_BASE_SORORITAS_1_VERSION='1.12.3-gog67548' ## Drukhari ARCHIVE_BASE_DRUKHARI_7_NAME='warhammer_40_000_gladius_drukhari_1_16_02_83943.sh' ARCHIVE_BASE_DRUKHARI_7_MD5='83628d3b5bb3a3bdbb17d899e68676c4' ARCHIVE_BASE_DRUKHARI_7_SIZE='1086' ARCHIVE_BASE_DRUKHARI_7_VERSION='1.16.2-gog83943' ARCHIVE_BASE_DRUKHARI_7_URL='https://www.gog.com/game/warhammer_40000_gladius_drukhari' ARCHIVE_BASE_DRUKHARI_6_NAME='warhammer_40_000_gladius_drukhari_1_16_00_82313.sh' ARCHIVE_BASE_DRUKHARI_6_MD5='04f6ec8cdd5c782edf8def8e8f72863c' ARCHIVE_BASE_DRUKHARI_6_SIZE='1086' ARCHIVE_BASE_DRUKHARI_6_VERSION='1.16.0-gog82313' ARCHIVE_BASE_DRUKHARI_5_NAME='warhammer_40_000_gladius_drukhari_1_15_01_78637.sh' ARCHIVE_BASE_DRUKHARI_5_MD5='4878d59bea341f3ef560fe8017884e68' ARCHIVE_BASE_DRUKHARI_5_SIZE='1086' ARCHIVE_BASE_DRUKHARI_5_VERSION='1.15.1-gog78637' ARCHIVE_BASE_DRUKHARI_4_NAME='warhammer_40_000_gladius_drukhari_1_14_03_77940.sh' ARCHIVE_BASE_DRUKHARI_4_MD5='f8ad53fe2b0eba0ff16089e2840fdc40' ARCHIVE_BASE_DRUKHARI_4_SIZE='1086' ARCHIVE_BASE_DRUKHARI_4_VERSION='1.14.3-gog77940' ARCHIVE_BASE_DRUKHARI_1_NAME='warhammer_40_000_gladius_drukhari_1_13_03_72014.sh' ARCHIVE_BASE_DRUKHARI_1_MD5='9f04c3d2b819a9865f853fcf184df6fe' ARCHIVE_BASE_DRUKHARI_1_SIZE='1086' ARCHIVE_BASE_DRUKHARI_1_VERSION='1.13.3-gog72014' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME_MAIN_FILES=' Data/*.dlc' PKG_PARENT_ID="$GAME_ID" PKG_MAIN_DEPENDENCIES_SIBLINGS=' PKG_PARENT' # Load common functions. PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_default # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-warhammer-40k-gladius.sh0000755000000000000000000002104414471751340016166 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2019 Antoine Le Gonidec set -o errexit ### # Warhammer 40k: Gladius # send your bug reports to vv221@dotslashplay.it ### script_version=20251213.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='warhammer-40k-gladius' GAME_NAME='Warhammer 40,000: Gladius - Relics of War' ARCHIVE_BASE_6_NAME='warhammer_40_000_gladius_relics_of_war_1_16_02_83943.sh' ARCHIVE_BASE_6_MD5='656794f73b3f539d432264b6d5a9cf3e' ARCHIVE_BASE_6_SIZE='3679285' ARCHIVE_BASE_6_VERSION='1.16.2-gog83943' ARCHIVE_BASE_6_URL='https://www.gog.com/game/warhammer_40000_gladius_relics_of_war' ARCHIVE_BASE_5_NAME='warhammer_40_000_gladius_relics_of_war_1_16_00_82313.sh' ARCHIVE_BASE_5_MD5='7c3795898a311ad274a4f061e4f6f0a4' ARCHIVE_BASE_5_SIZE='3679340' ARCHIVE_BASE_5_VERSION='1.16.0-gog82313' ARCHIVE_BASE_4_NAME='warhammer_40_000_gladius_relics_of_war_1_15_01_78637.sh' ARCHIVE_BASE_4_MD5='47d39e7d60862615e6d65987049e40b0' ARCHIVE_BASE_4_SIZE='3607175' ARCHIVE_BASE_4_VERSION='1.15.1-gog78637' ARCHIVE_BASE_3_NAME='warhammer_40_000_gladius_relics_of_war_1_14_03_77940.sh' ARCHIVE_BASE_3_MD5='3d47d62522615fb42e876c630c5bbbb0' ARCHIVE_BASE_3_SIZE='3558407' ARCHIVE_BASE_3_VERSION='1.14.3-gog77940' ARCHIVE_BASE_0_NAME='warhammer_40_000_gladius_relics_of_war_1_13_03_72014.sh' ARCHIVE_BASE_0_MD5='6ff6665c0a2ead9b1807fcddb28a9a08' ARCHIVE_BASE_0_SIZE='3489255' ARCHIVE_BASE_0_VERSION='1.13.3-gog72014' ARCHIVE_BASE_OLDLIBS_9_NAME='warhammer_40_000_gladius_relics_of_war_1_12_03_67548.sh' ARCHIVE_BASE_OLDLIBS_9_MD5='9bbcc5e63c4793fddceea5d8b8fbe1d8' ARCHIVE_BASE_OLDLIBS_9_SIZE='3254164' ARCHIVE_BASE_OLDLIBS_9_VERSION='1.12.3-gog67548' ARCHIVE_BASE_OLDLIBS_8_NAME='warhammer_40_000_gladius_relics_of_war_1_11_04_64361.sh' ARCHIVE_BASE_OLDLIBS_8_MD5='eb7bcdf1a43f47dbc7407e309fd209a3' ARCHIVE_BASE_OLDLIBS_8_SIZE='3200000' ARCHIVE_BASE_OLDLIBS_8_VERSION='1.11.4-gog64361' ARCHIVE_BASE_OLDLIBS_7_NAME='warhammer_40_000_gladius_relics_of_war_1_10_01_00_57375.sh' ARCHIVE_BASE_OLDLIBS_7_MD5='924bba1e75fdc323d72f24eccc2856a7' ARCHIVE_BASE_OLDLIBS_7_SIZE='2900000' ARCHIVE_BASE_OLDLIBS_7_VERSION='1.10.1-gog57375' ARCHIVE_BASE_OLDLIBS_6_NAME='warhammer_40_000_gladius_relics_of_war_v1_09_03_00_54377.sh' ARCHIVE_BASE_OLDLIBS_6_MD5='f3271281015c34f1ce3c6974998d886f' ARCHIVE_BASE_OLDLIBS_6_SIZE='2900000' ARCHIVE_BASE_OLDLIBS_6_VERSION='1.9.3-gog54377' ARCHIVE_BASE_OLDLIBS_5_NAME='warhammer_40_000_gladius_relics_of_war_1_08_04_01_49548.sh' ARCHIVE_BASE_OLDLIBS_5_MD5='d2e88289b1b7b1ebe1037d999f14578e' ARCHIVE_BASE_OLDLIBS_5_SIZE='2600000' ARCHIVE_BASE_OLDLIBS_5_VERSION='1.8.4.1-gog49548' ARCHIVE_BASE_OLDLIBS_4_NAME='warhammer_40_000_gladius_relics_of_war_1_07_04_44200.sh' ARCHIVE_BASE_OLDLIBS_4_MD5='b8534d0956159736ee49f207da516ba6' ARCHIVE_BASE_OLDLIBS_4_SIZE='2600000' ARCHIVE_BASE_OLDLIBS_4_VERSION='1.7.4-gog44200' ARCHIVE_BASE_OLDLIBS_3_NAME='warhammer_40_000_gladius_relics_of_war_1_06_4b_41966.sh' ARCHIVE_BASE_OLDLIBS_3_MD5='dbdcdd7450f009ffd2c5feae2fbc9fd2' ARCHIVE_BASE_OLDLIBS_3_SIZE='2300000' ARCHIVE_BASE_OLDLIBS_3_VERSION='1.6.4b-gog41966' ARCHIVE_BASE_OLDLIBS_2_NAME='warhammer_40_000_gladius_relics_of_war_1_05_01_36614.sh' ARCHIVE_BASE_OLDLIBS_2_MD5='faf0d5df1a800d8102bdf20309aa9b6c' ARCHIVE_BASE_OLDLIBS_2_SIZE='2200000' ARCHIVE_BASE_OLDLIBS_2_VERSION='1.5.1-gog36614' ARCHIVE_BASE_OLDLIBS_1_NAME='warhammer_40_000_gladius_relics_of_war_1_04_07_36064.sh' ARCHIVE_BASE_OLDLIBS_1_MD5='d42c72ef55cb2a42487f8173d26b2260' ARCHIVE_BASE_OLDLIBS_1_SIZE='2300000' ARCHIVE_BASE_OLDLIBS_1_VERSION='1.4.7-gog36064' ARCHIVE_BASE_OLDLIBS_0_NAME='warhammer_40_000_gladius_relics_of_war_1_03_08_32868.sh' ARCHIVE_BASE_OLDLIBS_0_MD5='0739ede31aa10db01b2afef9f66c5e12' ARCHIVE_BASE_OLDLIBS_0_SIZE='2100000' ARCHIVE_BASE_OLDLIBS_0_VERSION='1.3.8-gog32868' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_LIBS_BIN_RELATIVE_PATH='Binaries/Linux-x86_64' CONTENT_LIBS_BIN_FILES=' libavcodec.so.58 libavformat.so.58 libavutil.so.56 libboost_locale.so.1.74.0 libboost_system.so.1.74.0 libboost_thread.so.1.74.0 libcrypto.so.1.1 libEOSSDK-Linux-Shipping.so libicudata.so.60 libicui18n.so.60 libicuuc.so.60 libjemalloc.so.1 libjpeg.so.8 libminiupnpc.so.17 libnettle.so.6 libswresample.so.3' ## Include libraries shipped with old game builds. CONTENT_LIBS_BIN_FILES_OLDLIBS=' libavcodec.so.58 libavformat.so.58 libavutil.so.56 libcrypto.so.1.1 libboost_locale.so.1.65.1 libboost_system.so.1.65.1 libboost_thread.so.1.65.1 libEOSSDK-Linux-Shipping.so libicudata.so.60 libicui18n.so.60 libicuuc.so.60 libjemalloc.so.1 libjpeg.so.8 libswresample.so.3' ## The game binary is linked against libsteam_api.so. CONTENT_LIBS0_BIN_RELATIVE_PATH='Binaries/Linux-x86_64' CONTENT_LIBS0_BIN_FILES=' libsteam_api.so' CONTENT_GAME_BIN_FILES=' Binaries/Linux-x86_64/Gladius.bin' CONTENT_GAME_DATA_FILES=' Data Documents Manuals Resources *.doc *.pdf' ## Running the game from a symlinks farm prefix leads to the following crash on launch: ## ## DataManager.hpp:100: T& proxy::core::DataManager::get(const string&, bool) const [with T = proxy::video::Shader; std::string = std::__cxx11::basic_string]: "Vertex/GUI" does not exist. ## ExceptionHandler::handleException() ## DataManager.hpp:100: T& proxy::core::DataManager::get(const string&, bool) const [with T = proxy::video::Shader; std::string = std::__cxx11::basic_string]: "Vertex/GUI" does not exist. ## (0) [0x0x55ee9730627f] proxy::core::StackTrace::log() + 0x2f ## (1) [0x0x55ee972a205c] proxy::core::ExceptionHandler::handleException() + 0x1c ## (2) [0x0x7f15484b344a] + 0xb344a ## (3) [0x0x7f15484a15e9] std::unexpected() + 0 ## (4) [0x0x7f15484b36c8] + 0xb36c8 ## (5) [0x0x55ee9613032f] void boost::throw_exception(boost::escaped_list_error const&, boost::source_location const&) + 0 ## (6) [0x0x55ee9627885e] proxy::core::DataManager::get(std::__cxx11::basic_string, std::allocator > const&, bool) const + 0x1ee ## (7) [0x0x55ee968090b1] proxy::video::Renderer::createSwapChain() + 0x1651 ## (8) [0x0x55ee9680a385] proxy::video::Renderer::initialize() + 0x3e5 ## (9) [0x0x55ee9679d03c] proxy::video::Display::createWindow(proxy::video::Display::Mode, proxy::video::Display::Resolution const&) + 0x93c ## (10) [0x0x55ee9679fd49] proxy::video::Display::initialize(proxy::video::Display::Mode, proxy::video::Display::Resolution const&) + 0x29 ## (11) [0x0x55ee9629da1e] gladius::Game::initializeVideo() + 0xe8e ## (12) [0x0x55ee962a0faa] gladius::Game::initialize(int, char**, char**) + 0x4a ## (13) [0x0x55ee962344c2] gladius::Game::main(int, char**, char**) + 0x12 ## (14) [0x0x55ee96233af6] main + 0x36 ## (15) [0x0x7f154822eca8] + 0x29ca8 ## (16) [0x0x7f154822ed65] __libc_start_main + 0x85 ## (17) [0x0x55ee9624712a] _start + 0x2a APP_MAIN_PREFIX_TYPE='none' APP_MAIN_EXE='Binaries/Linux-x86_64/Gladius.bin' APP_MAIN_ICON='Data/Video/Textures/Icon.png' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libcurl.so.4 libdl.so.2 libfreetype.so.6 libgcc_s.so.1 libglfw.so.3 libm.so.6 libopenal.so.1 libpng16.so.16 libpthread.so.0 librt.so.1 libstdc++.so.6 libvorbisfile.so.3 libvulkan.so.1 libz.so.1' ## Set dependencies for old game builds. PKG_BIN_DEPENDENCIES_LIBRARIES_OLDLIBS=' libc.so.6 libcurl.so.4 libdl.so.2 libfreetype.so.6 libgcc_s.so.1 libglfw.so.3 libminiupnpc.so.17 libm.so.6 libopenal.so.1 libpng16.so.16 libpthread.so.0 librt.so.1 libstdc++.so.6 libvorbisfile.so.3 libvulkan.so.1 libz.so.1' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. ## Run the game binary from its parent directory. game_exec_line() { cat <<- 'EOF' cd Binaries/Linux-x86_64 ./Gladius.bin "$@" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-warlords-battlecry-2.sh0000755000000000000000000000522414471751340016146 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec set -o errexit ### # Warlords Battlecry 2 # send your bug reports to vv221@dotslashplay.it ### script_version=20260310.1 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='warlords-battlecry-2' GAME_NAME='Warlords Battlecry II' ARCHIVE_BASE_1_NAME='setup_warlords_battlecry_2_1.04_(30487).exe' ARCHIVE_BASE_1_MD5='25cf7418f5b954b97fc0e8b6d32039f2' ARCHIVE_BASE_1_TYPE='innosetup' ARCHIVE_BASE_1_SIZE='930000' ARCHIVE_BASE_1_VERSION='1.04-gog30487' ARCHIVE_BASE_1_URL='https://www.gog.com/game/warlords_battlecry_2' ARCHIVE_BASE_0_NAME='setup_warlords_battlecry2_2.0.0.4.exe' ARCHIVE_BASE_0_MD5='baa54ca0285182d18d532abfcbb8769f' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_SIZE='940000' ARCHIVE_BASE_0_VERSION='1.04-gog2.0.0.4' CONTENT_PATH_DEFAULT='.' CONTENT_PATH_DEFAULT_0='app' # TODO: Check if all libraries are required. CONTENT_LIBS_BIN_FILES=' binkw32.dll mss32.dll WETSTD32.DLL' CONTENT_GAME_BIN_FILES=' Battlecry II.exe Mp3dec.asi Mssv??.asi Mss*.m3d' CONTENT_GAME_DATA_FILES=' CampaignScenario CustomAI CustomUnitAI Data Documentation English Events Fonts HeroData Music NamingSets Scenario SoundFX Tutorial Video Terrain.cfg War4Gfx.xcg War4Int.xci WBC.DAT *.xcr' CONTENT_DOC_DATA_FILES=' manual.pdf reference card.pdf' # Write access to .ini files is required. USER_PERSISTENT_FILES=' *.ini' WINE_PERSISTENT_DIRECTORIES=' users/${USER}/Documents/Warlords Battlecry II' APP_MAIN_EXE='Battlecry II.exe' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. ln --force --symbolic $(path_libraries)/* "\${PATH_PREFIX}" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-wasteland-2.sh0000755000000000000000000001323114471751340014301 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2015 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2021 Anna Lea set -o errexit ### # Wasteland 2 # send your bug reports to vv221@dotslashplay.it ### script_version=20251223.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='wasteland-2' GAME_NAME='Wasteland 2' GAME_ID_CLASSIC="$GAME_ID" GAME_NAME_CLASSIC="$GAME_NAME" GAME_ID_DIRECTORSCUT="${GAME_ID}-directors-cut" GAME_NAME_DIRECTORSCUT="$GAME_NAME - Directorʼs Cut" ## Wasteland 2 (classic) ARCHIVE_BASE_CLASSIC_0_NAME='gog_wasteland_2_2.9.0.14.sh' ARCHIVE_BASE_CLASSIC_0_MD5='8421db3519ed0074ff2647f5ea53f6f6' ARCHIVE_BASE_CLASSIC_0_SIZE='20000000' ARCHIVE_BASE_CLASSIC_0_VERSION='1.0-gog2.9.0.14' ARCHIVE_BASE_CLASSIC_0_URL='https://www.gog.com/game/wasteland_2_directors_cut_digital_classic_edition' ## Wasteland 2 Director's Cut ARCHIVE_BASE_DIRECTORSCUT_0_NAME='gog_wasteland_2_director_s_cut_2.3.0.5.sh' ARCHIVE_BASE_DIRECTORSCUT_0_MD5='dc697b13e1f08de606add7684b5b3f78' ARCHIVE_BASE_DIRECTORSCUT_0_SIZE='16000000' ARCHIVE_BASE_DIRECTORSCUT_0_VERSION='1.1.92788-gog2.3.0.5' ARCHIVE_BASE_DIRECTORSCUT_0_URL='https://www.gog.com/game/wasteland_2_directors_cut_digital_classic_edition' UNITY3D_NAME='WL2' UNITY3D_PLUGINS=' ScreenSelector.so' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME_DATA_SCENES_AZ_FILES=" ${UNITY3D_NAME}_Data/Streaming/Scenes/ArizonaWorldMap.unity3d ${UNITY3D_NAME}_Data/Streaming/Scenes/AZ_*.unity3d ${UNITY3D_NAME}_Data/Streaming/Scenes/AZ??_*.unity3d ${UNITY3D_NAME}_Data/Streaming/Scenes/az??_*.unity3d" CONTENT_GAME_DATA_SCENES_CA_FILES=" ${UNITY3D_NAME}_Data/Streaming/Scenes/CA_*.unity3d ${UNITY3D_NAME}_Data/Streaming/Scenes/CA??_*.unity3d" CONTENT_GAME_DATA_RESOURCES_FILES_DIRECTORSCUT=" ${UNITY3D_NAME}_Data/*.resource" CONTENT_DOC_DATA_PATH='data/noarch/docs' CONTENT_DOC_DATA_FILES=' Map.pdf Wasteland 2 Ranger Field Manual.pdf Wasteland 2 Reference Guide.pdf' ## Work around the engine overuse of file descriptors. APP_MAIN_PRERUN=' # Work around the engine overuse of file descriptors. # 4096 is an arbitrary value, 4 times the default (1024), that seems to work for all setups. if ! ulimit -n 4096; then { printf "\\n\\033[1;33mWarning:\\033[0m\\n" printf "Your current shell interpreter has no support for ulimit -n.\\n" printf "This might lead to unending loading screens if the game engine hits the file descriptors use limit.\\n" printf "\\n" } > /dev/stderr fi ' PACKAGES_LIST_CLASSIC=' PKG_BIN PKG_DATA_SCENES_AZ PKG_DATA_SCENES_CA PKG_DATA' PACKAGES_LIST_DIRECTORSCUT=' PKG_BIN PKG_DATA_RESOURCES PKG_DATA' PKG_BIN_ARCH_CLASSIC='32' PKG_BIN_ARCH_DIRECTORSCUT='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES_CLASSIC=' libatk-1.0.so.0 libcairo.so.2 libc.so.6 libdl.so.2 libfontconfig.so.1 libfreetype.so.6 libgcc_s.so.1 libgdk_pixbuf-2.0.so.0 libgdk-x11-2.0.so.0 libgio-2.0.so.0 libglib-2.0.so.0 libGL.so.1 libGLU.so.1 libgmodule-2.0.so.0 libgobject-2.0.so.0 libgthread-2.0.so.0 libgtk-x11-2.0.so.0 libm.so.6 libpango-1.0.so.0 libpangocairo-1.0.so.0 libpangoft2-1.0.so.0 libpthread.so.0 librt.so.1 libstdc++.so.6 libX11.so.6 libXcursor.so.1 libXext.so.6 libXrandr.so.2' PKG_BIN_DEPENDENCIES_LIBRARIES_DIRECTORSCUT=' libc.so.6 libdl.so.2 libgcc_s.so.1 libgdk_pixbuf-2.0.so.0 libglib-2.0.so.0 libGL.so.1 libgobject-2.0.so.0 libgtk-x11-2.0.so.0 libm.so.6 libpthread.so.0 librt.so.1 libstdc++.so.6 libX11.so.6 libXcursor.so.1 libXrandr.so.2' PKG_DATA_ID_CLASSIC="${GAME_ID_CLASSIC}-data" PKG_DATA_ID_DIRECTORSCUT="${GAME_ID_DIRECTORSCUT}-data" PKG_DATA_DESCRIPTION='data' PKG_DATA_DEPENDENCIES_SIBLINGS_CLASSIC=' PKG_DATA_SCENES_AZ PKG_DATA_SCENES_CA' PKG_DATA_DEPENDENCIES_SIBLINGS_DIRECTORSCUT=' PKG_DATA_RESOURCES' PKG_DATA_SCENES_AZ_ID="${PKG_DATA_ID_CLASSIC}-scenes-az" PKG_DATA_SCENES_AZ_DESCRIPTION="$PKG_DATA_DESCRIPTION - Arizona scenes" PKG_DATA_SCENES_CA_ID="${PKG_DATA_ID_CLASSIC}-scenes-ca" PKG_DATA_SCENES_CA_DESCRIPTION="$PKG_DATA_DESCRIPTION - California scenes" PKG_DATA_RESOURCES_ID="${PKG_DATA_ID_DIRECTORSCUT}-resources" PKG_DATA_RESOURCES_DESCRIPTION='resources' ## Ensure smooth upgrades from packages generated with pre-20231021.1 scripts. PKG_DATA_RESOURCES_PROVIDES="${PKG_DATA_RESOURCES_PROVIDES:-} wasteland-2-directors-cut-resources" # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-werewolf-the-apocalypse-forest-stories-series.sh0000755000000000000000000000777414471751340023223 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2021 Antoine Le Gonidec set -o errexit ### # Werewolf: The Apocalypse - Forest Stories series: # - Werewolf: The Apocalypse - Heart of the Forest # - Werewolf: The Apocalypse - Purgatory # send your bug reports to vv221@dotslashplay.it ### script_version=20260303.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID_HEART='werewolf-the-apocalypse-heart-of-the-forest' GAME_NAME_HEART='Werewolf: The Apocalypse - Heart of the Forest' GAME_ID_PURGATORY='werewolf-the-apocalypse-purgatory' GAME_NAME_PURGATORY='Werewolf: The Apocalypse - Purgatory' ARCHIVE_BASE_HEART_0_NAME='werewolf_the_apocalypse_heart_of_the_forest_1_0_13_2010191537_42086.sh' ARCHIVE_BASE_HEART_0_MD5='8f8655786c9eed74746c9cc151b5543b' ARCHIVE_BASE_HEART_0_SIZE='902811' ARCHIVE_BASE_HEART_0_VERSION='1.0.13-gog42086' ARCHIVE_BASE_HEART_0_URL='https://www.gog.com/game/werewolf_the_apocalypse_heart_of_the_forest' ARCHIVE_BASE_PURGATORY_1_NAME='purgatory_1_1_13_2504011817_81091.sh' ARCHIVE_BASE_PURGATORY_1_MD5='012f8c571e7649b50b56e2a59542d1d1' ARCHIVE_BASE_PURGATORY_1_SIZE='1524084' ARCHIVE_BASE_PURGATORY_1_VERSION='1.1.13-gog81091' ARCHIVE_BASE_PURGATORY_1_URL='https://www.gog.com/game/werewolf_the_apocalypse_purgatory' ARCHIVE_BASE_PURGATORY_0_NAME='purgatory_1_0_13_2406131256_74723.sh' ARCHIVE_BASE_PURGATORY_0_MD5='eac63ba42adc2614e66e0cd733c019fb' ARCHIVE_BASE_PURGATORY_0_SIZE='1069791' ARCHIVE_BASE_PURGATORY_0_VERSION='1.0.13-gog74723' UNITY3D_NAME_HEART='Heart of the Forest' UNITY3D_NAME_PURGATORY='Purgatory' UNITY3D_PLUGINS_HEART=' libfmodL.so libfmod.so libfmodstudioL.so libfmodstudio.so libgvraudio.so libresonanceaudio.so' UNITY3D_PLUGINS_PURGATORY=' libfmodstudio.so libresonanceaudio.so' CONTENT_PATH_DEFAULT='data/noarch/game' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES_HEART=' libc.so.6 libdl.so.2 libgcc_s.so.1 libm.so.6 libpthread.so.0 libresolv.so.2 librt.so.1 libstdc++.so.6 libz.so.1' PKG_BIN_DEPENDENCIES_LIBRARIES_PURGATORY=' libc.so.6 libdl.so.2 libgcc_s.so.1 libm.so.6 libpthread.so.0 librt.so.1 libstdc++.so.6 libz.so.1' PKG_DATA_ID_HEART="${GAME_ID_HEART}-data" PKG_DATA_ID_PURGATORY="${GAME_ID_PURGATORY}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. # Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Scan library paths used by ./play.it < 2.35. # This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Heart of the Forest - Shipped libraries expect an executable stack. case "$(current_archive)" in ('ARCHIVE_BASE_HEART_'*) game_exec_line() { cat <<- 'EOF' GLIBC_TUNABLES=glibc.rtld.execstack=2 \ "./Heart of the Forest" -logFile "./logs/$(date +%F-%R).log" "$@" EOF } ;; esac launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-whispers-of-a-machine.sh0000755000000000000000000000321314471751340016245 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2021 Mopi # SPDX-FileCopyrightText: © 2021 Antoine Le Gonidec set -o errexit ### # Whispers of a Machine # send your bug reports to vv221@dotslashplay.it ### script_version=20250111.1 PLAYIT_COMPATIBILITY_LEVEL='2.33' GAME_ID='whispers-of-a-machine' GAME_NAME='Whispers of a Machine' ARCHIVE_BASE_0_NAME='setup_whispers_of_a_machine_1.0.6d_(35876).exe' ARCHIVE_BASE_0_MD5='92244849a09e9b47a290618acd9dc9b6' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_SIZE='768282' ARCHIVE_BASE_0_VERSION='1.0.6d-gog35876' ARCHIVE_BASE_0_URL='https://www.gog.com/game/whispers_of_a_machine' AGS_NAME='whispersofamachine' CONTENT_PATH_DEFAULT='.' APP_MAIN_ICON='whispers.exe' # Load common functions PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run the default initialization actions initialization_default "$@" # Extract game data archive_extraction_default # Include game data content_inclusion_icons content_inclusion_default # Write launchers launchers_generation # Build packages packages_generation print_instructions # Clean up working_directory_cleanup exit 0 games/play-world-of-goo-1.sh0000755000000000000000000000732414471751340014637 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2016 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2017 Mopi # SPDX-FileCopyrightText: © 2020 BetaRays set -o errexit ### # World of Goo 1 # send your bug reports to vv221@dotslashplay.it ### script_version=20251231.2 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='world-of-goo-1' GAME_NAME='World of Goo' ARCHIVE_BASE_GOG_1_NAME='world_of_goo_1_6_538_87464.sh' ARCHIVE_BASE_GOG_1_MD5='92c4075f2ed640b59caca7fdebe2eafd' ARCHIVE_BASE_GOG_1_SIZE='251204' ## Yes, 1.6 is supposed to be higher than 1.51. ## Blame game developers inability to manipulate numbers. ARCHIVE_BASE_GOG_1_VERSION='1.6.538-gog87464' ARCHIVE_BASE_GOG_1_URL='https://www.gog.com/game/world_of_goo' ARCHIVE_BASE_GOG_0_NAME='world_of_goo_1_51_29337.sh' ARCHIVE_BASE_GOG_0_MD5='f3566d859e824862b4dc14f94b15cafa' ARCHIVE_BASE_GOG_0_SIZE='186520' ARCHIVE_BASE_GOG_0_VERSION='1.51-gog29337' ## Formerly sold from humblebundle.com, this archive is no longer available for sale. ARCHIVE_BASE_HUMBLE_0_NAME='WorldOfGoo.Linux.1.53.sh' ARCHIVE_BASE_HUMBLE_0_MD5='9049f4fccf98ba79ac238a8b414e053a' ARCHIVE_BASE_HUMBLE_0_SIZE='210000' ARCHIVE_BASE_HUMBLE_0_VERSION='1.53-humble' CONTENT_PATH_DEFAULT_GOG='data/noarch/game' CONTENT_PATH_DEFAULT_HUMBLE='data' CONTENT_GAME_BIN_RELATIVE_PATH_HUMBLE='x86_64' CONTENT_GAME_BIN_FILES=' WorldOfGoo.bin.x86_64' CONTENT_GAME_DATA_RELATIVE_PATH_HUMBLE='noarch' CONTENT_GAME_DATA_FILES=' game' ## Pre 1.6 game builds only CONTENT_DOC_DATA_RELATIVE_PATH_HUMBLE='noarch' CONTENT_DOC_DATA_PATH_GOG='data/noarch/docs' CONTENT_DOC_DATA_FILES=' readme.html linux-issues.txt' APP_MAIN_EXE='WorldOfGoo.bin.x86_64' APP_MAIN_ICON='WorldOfGoo.png' APP_MAIN_ICON_GOG_0='game/gooicon.png' APP_MAIN_ICON_HUMBLE_0='game/gooicon.png' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libgcc_s.so.1 libm.so.6 libSDL2-2.0.so.0 libSDL2_mixer-2.0.so.0 libstdc++.so.6' ## Easier upgrades from pre-20240805.1 packages PKG_BIN_PROVIDES="${PKG_BIN_PROVIDES:-} world-of-goo" PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' ## Easier upgrades from pre-20240805.1 packages PKG_DATA_PROVIDES="${PKG_DATA_PROVIDES:-} world-of-goo-data" # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-world-of-goo-2.sh0000755000000000000000000001017114471751340014632 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2024 Antoine Le Gonidec set -o errexit ### # World of Goo 2 # send your bug reports to vv221@dotslashplay.it ### script_version=20251201.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='world-of-goo-2' GAME_NAME='World of Goo 2' ARCHIVE_BASE_3_NAME='World_of_Goo_2-x86_64-1.0.13211.7.AppImage' ARCHIVE_BASE_3_MD5='80e2b52c2ef8c5045a6b5cec26d50f91' ARCHIVE_BASE_3_SIZE='920432' ARCHIVE_BASE_3_VERSION='1.0.13211-2dboy' ARCHIVE_BASE_3_URL='https://worldofgoo2.com/#getitnow' ARCHIVE_BASE_2_NAME='World_of_Goo_2-x86_64-1.0.4.13120.27.AppImage' ARCHIVE_BASE_2_MD5='3c36dbdb0d0fa34ee795ed7c0098cddf' ARCHIVE_BASE_2_SIZE='909392' ARCHIVE_BASE_2_VERSION='1.0.4.13120-2dboy' ARCHIVE_BASE_1_NAME='World_of_Goo_2-x86_64-1.0.12478.15.AppImage' ARCHIVE_BASE_1_MD5='3748d37805bd4bc96f1b19d108d10f9d' ARCHIVE_BASE_1_SIZE='903954' ARCHIVE_BASE_1_VERSION='1.0.12478-2dboy' ARCHIVE_BASE_0_NAME='World_of_Goo_2-x86_64.12329.171.AppImage' ARCHIVE_BASE_0_MD5='011faf15abea1c51837e6e2683c80042' ARCHIVE_BASE_0_SIZE='896550' ARCHIVE_BASE_0_VERSION='1.0.12329-2dboy' CONTENT_PATH_DEFAULT='.' CONTENT_GAME_BIN_FILES=' WorldOfGoo2' CONTENT_GAME_DATA_FILES=' game WorldOfGoo2.png' APP_MAIN_EXE='WorldOfGoo2' APP_MAIN_ICON='WorldOfGoo2.png' ## Trying to run the game with the wayland SDL backend leads to a segmentation fault: ## ## #0 0x00007ffff7e9d1c3 in _XFlush () from /lib/x86_64-linux-gnu/libX11.so.6 ## #1 0x00007ffff7e9fec5 in _XGetRequest () from /lib/x86_64-linux-gnu/libX11.so.6 ## #2 0x00007ffff7e92905 in XQueryExtension () from /lib/x86_64-linux-gnu/libX11.so.6 ## #3 0x00007ffff7726e20 in InitDisplayInfoEntry (dpy=0x5555572b50e0) at ../src/GLX/libglxmapping.c:639 ## #4 __glXLookupDisplay (dpy=dpy@entry=0x5555572b50e0) at ../src/GLX/libglxmapping.c:755 ## #5 0x00007ffff77225f7 in glXQueryVersion (dpy=0x5555572b50e0, major=0x7fffd57f9a94, minor=0x7fffd57f9a98) at ../src/GLX/libglx.c:1166 ## #6 0x000055555597ff04 in ?? () ## #7 0x000055555594a4f9 in ?? () ## #8 0x0000555555940834 in ?? () ## #9 0x000055555591f331 in ?? () ## #10 0x000055555592cad5 in ?? () ## #11 0x000055555592cb63 in ?? () ## #12 0x00005555559363a2 in ?? () ## #13 0x000055555596287f in ?? () ## #14 0x00007ffff789cb7b in start_thread (arg=) at ./nptl/pthread_create.c:448 ## #15 0x00007ffff791a7b8 in __GI___clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78 ## ## Forcing the use of system-provided SDL does not avoid this crash. APP_MAIN_PRERUN=' # Prevent a crash on launch when the wayland backend of SDL is used. if [ "${SDL_VIDEODRIVER:-}" = "wayland" ]; then unset SDL_VIDEODRIVER fi ' ## The game segfaults when loading the world selector if started through a symlinks farm. APP_MAIN_PREFIX_TYPE='none' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='64' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_LIBRARIES=' libc.so.6 libdl.so.2 libgcc_s.so.1 libGL.so.1 libm.so.6 libpthread.so.0 libstdc++.so.6 libX11.so.6' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. PLAYIT_LIB_PATHS=" $PWD ${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it /usr/local/share/games/play.it /usr/local/share/play.it /usr/share/games/play.it /usr/share/play.it" if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_path in $PLAYIT_LIB_PATHS; do if [ -e "${playit_lib_path}/libplayit2.sh" ]; then PLAYIT_LIB2="${playit_lib_path}/libplayit2.sh" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. ## Force the use of system-provided SDL. APP_MAIN_PRERUN="${APP_MAIN_PRERUN:-} $(launcher_tweak_sdl_override)" PKG_BIN_DEPENDENCIES_LIBRARIES="$PKG_BIN_DEPENDENCIES_LIBRARIES libSDL2-2.0.so.0" launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-worms-2.sh0000755000000000000000000000660514471751340013475 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2015 Antoine Le Gonidec set -o errexit ### # Worms 2 # send your bug reports to vv221@dotslashplay.it ### script_version=20260211.1 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID='worms-2' GAME_NAME='Worms 2' ARCHIVE_BASE_0_NAME='setup_worms2_2.0.0.23.exe' ARCHIVE_BASE_0_MD5='bbe752d1b716432bb67e574ad9f3e9f3' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_SIZE='190000' ARCHIVE_BASE_0_VERSION='1.05-gog2.0.0.23' ARCHIVE_BASE_0_URL='https://www.gog.com/game/worms_2' CONTENT_PATH_DEFAULT='app' # frontend.exe requirements CONTENT_LIBS_BIN_FILES=' WIN32.dll' # WIN32.dll requirements CONTENT_LIBS0_BIN_FILES=' libvorbisfile-3.dll' # libvorbisfile-3.dll requirements CONTENT_LIBS1_BIN_FILES=' libogg-0.dll libvorbis-0.dll' CONTENT_GAME_BIN_FILES=' binaries frontend.exe goglauncher.exe start.exe worms2.exe data/wav/bankeditor.exe' CONTENT_GAME_DATA_FILES=' data levels music options saves teams weapons stats.txt template.bmp *.wmv' CONTENT_DOC_DATA_FILES=' manual.pdf patch.txt' USER_PERSISTENT_DIRECTORIES=' levels options saves teams weapons' USER_PERSISTENT_FILES=' stats.txt data/*.dat' # Running the game in a virtual desktop prevents it from being stuck into a corner of the screen. WINE_VIRTUAL_DESKTOP='640x480' APP_MAIN_EXE='frontend.exe' # Play the introduction videos on launch. APP_MAIN_PRERUN=' # Play the introduction videos on launch. RANDOM_MOVIE=$(find . -mindepth 1 -maxdepth 1 -name "*.wmv" ! -name "intro.wmv" | shuf --head-count=1) mpv --fs --no-osc --no-pause intro.wmv mpv --fs --no-osc --no-pause "$RANDOM_MOVIE" ' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_BIN_DEPENDENCIES_COMMANDS=' mpv' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. # Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Scan library paths used by ./play.it < 2.35. # This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi # Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. ln --force --symbolic $(path_libraries)/* "\${PATH_PREFIX}" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-worms-armageddon.sh0000755000000000000000000000643014471751340015431 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: ACSL # SPDX-FileCopyrightText: © 2017 Mopi # SPDX-FileCopyrightText: © 2020 Jacek Szafarkiewicz # SPDX-FileCopyrightText: © 2021 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2021 Hubert Ray set -o errexit ### # Worms: Armageddon # send your bug reports to vv221@dotslashplay.it ### script_version=20260322.2 PLAYIT_COMPATIBILITY_LEVEL='2.35' GAME_ID='worms-armageddon' GAME_NAME='Worms: Armageddon' ARCHIVE_BASE_3_NAME='setup_worms_armageddon_gog-3.8.1_(43454).exe' ARCHIVE_BASE_3_MD5='f84e60ba11363219c582a4ff65301692' ARCHIVE_BASE_3_TYPE='innosetup' ARCHIVE_BASE_3_SIZE='648070' ARCHIVE_BASE_3_VERSION='3.8.1-gog43454' ARCHIVE_BASE_3_URL='https://www.gog.com/game/worms_armageddon' ARCHIVE_BASE_2_NAME='setup_worms_armageddon_gog-2_(40354).exe' ARCHIVE_BASE_2_MD5='db2087029ee8c069c9006ebeedc76bbf' ARCHIVE_BASE_2_TYPE='innosetup' ARCHIVE_BASE_2_SIZE='650000' ARCHIVE_BASE_2_VERSION='3.8-gog40354' ARCHIVE_BASE_1_NAME='setup_worms_armageddon_gog-7_(40119).exe' ARCHIVE_BASE_1_MD5='8e904d462327917452a47572a38b772a' ARCHIVE_BASE_1_TYPE='innosetup' ARCHIVE_BASE_1_SIZE='660000' ARCHIVE_BASE_1_VERSION='3.8-gog40119' ARCHIVE_BASE_0_NAME='setup_worms_armageddon_2.0.0.2.exe' ARCHIVE_BASE_0_MD5='7f0bb89729662ebe74b7c9c2cd97d1c8' ARCHIVE_BASE_0_TYPE='innosetup' ARCHIVE_BASE_0_SIZE='570000' ARCHIVE_BASE_0_VERSION='3.7.2.1-gog2.0.0.2' CONTENT_PATH_DEFAULT='.' CONTENT_PATH_DEFAULT_0='app' CONTENT_GAME_BIN_FILES=' WA.exe' # wa.exe requirements CONTENT_LIBS_BIN_FILES=' LTKRN10N.dll LTFIL10N.DLL' # TODO: Check if the following library is required. CONTENT_GAME0_BIN_FILES=' User/BankEditor.exe' CONTENT_GAME_DATA_FILES=' DATA FESfx graphics Tweaks User' # TODO: This directory is probably not required. CONTENT_GAME0_DATA_RELATIVE_PATH='__support' CONTENT_GAME0_DATA_FILES=' save' CONTENT_DOC_DATA_FILES=' WA_Manual.pdf Worms Armageddon Update Documentation.rtf' USER_PERSISTENT_DIRECTORIES=' save User' USER_PERSISTENT_FILES=' graphics/font.bmp' APP_MAIN_EXE='WA.exe' # Create a required empty file prior to game run. APP_MAIN_PRERUN=' # Create a required empty file prior to game run. touch steam.dat ' PACKAGES_LIST=' PKG_BIN PKG_DATA' PKG_BIN_ARCH='32' PKG_BIN_DEPENDENCIES_SIBLINGS=' PKG_DATA' PKG_DATA_ID="${GAME_ID}-data" PKG_DATA_DESCRIPTION='data' # Load common functions. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit.sh.2 not found.\n' exit 1 fi # shellcheck source=libplayit.sh.2 . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons 'PKG_DATA' content_inclusion_default # Write launchers. # Install shipped libraries. wineprefix_init_custom() { cat <<- EOF # Install shipped libraries. ln --force --symbolic $(path_libraries)/* "\${PATH_PREFIX}" EOF } launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 games/play-zachtronics.sh0000755000000000000000000002021714471751340014511 0ustar rootroot#!/bin/sh # SPDX-License-Identifier: BSD-2-Clause # SPDX-FileCopyrightText: © 2018 Antoine Le Gonidec # SPDX-FileCopyrightText: © 2019 BetaRays # SPDX-FileCopyrightText: © 2021 Mopi set -o errexit ### # Zachtronics games: # - Opus Magnum # - Exapunks # - Eliza # - Molek-Syntez # - Last Call BBS # - Zachtronics Solitaire Collection # send your bug reports to vv221@dotslashplay.it ### script_version=20260104.2 PLAYIT_COMPATIBILITY_LEVEL='2.34' GAME_ID_OPUSMAGNUM='opus-magnum' GAME_NAME_OPUSMAGNUM='Opus Magnum' GAME_ID_EXAPUNKS='exapunks' GAME_NAME_EXAPUNKS='Exapunks' GAME_ID_ELIZA='eliza' GAME_NAME_ELIZA='Eliza' GAME_ID_MOLEKSYNTEZ='molek-syntez' GAME_NAME_MOLEKSYNTEZ='Molek-Syntez' GAME_ID_LASTCALL='last-call-bbs' GAME_NAME_LASTCALL='Last Call BBS' GAME_ID_SOLITAIRE='zachtronics-solitaire-collection' GAME_NAME_SOLITAIRE='The Zachtronics Solitaire Collection' ## Opus Magnum ARCHIVE_BASE_OPUSMAGNUM_2_NAME='opus_magnum_26_03_2023_63471.sh' ARCHIVE_BASE_OPUSMAGNUM_2_MD5='0313ec8451cac5445818f143a7c2d79d' ARCHIVE_BASE_OPUSMAGNUM_2_SIZE='520000' ARCHIVE_BASE_OPUSMAGNUM_2_VERSION='2023.03.26-gog63471' ARCHIVE_BASE_OPUSMAGNUM_2_URL='https://www.gog.com/game/opus_magnum' ARCHIVE_BASE_OPUSMAGNUM_1_NAME='opus_magnum_11_14_2020_43144.sh' ARCHIVE_BASE_OPUSMAGNUM_1_MD5='2defb1198c5a5778eb9ac20ff201f086' ARCHIVE_BASE_OPUSMAGNUM_1_SIZE='520000' ARCHIVE_BASE_OPUSMAGNUM_1_VERSION='2020.11.14-gog43144' ARCHIVE_BASE_OPUSMAGNUM_0_NAME='opus_magnum_en_17_08_2018_update_23270.sh' ARCHIVE_BASE_OPUSMAGNUM_0_MD5='dbe5137d4b7e2edd21f4117a80756872' ARCHIVE_BASE_OPUSMAGNUM_0_SIZE='460000' ARCHIVE_BASE_OPUSMAGNUM_0_VERSION='2018.08.17-gog23270' ## Exapunks ARCHIVE_BASE_EXAPUNKS_1_NAME='exapunks_gog_26_03_2023_63466.sh' ARCHIVE_BASE_EXAPUNKS_1_MD5='f2e0fda51c0ebc94345379ffc56d188f' ARCHIVE_BASE_EXAPUNKS_1_SIZE='730000' ARCHIVE_BASE_EXAPUNKS_1_VERSION='2023.03.26-gog63466' ARCHIVE_BASE_EXAPUNKS_1_URL='https://www.gog.com/game/exapunks' ARCHIVE_BASE_EXAPUNKS_0_NAME='exapunks_gog_11_14_2020_43140.sh' ARCHIVE_BASE_EXAPUNKS_0_MD5='46222cde2bdac46c80b3c64a976c9f78' ARCHIVE_BASE_EXAPUNKS_0_SIZE='730000' ARCHIVE_BASE_EXAPUNKS_0_VERSION='2020.11.14-gog43140' ## Eliza ARCHIVE_BASE_ELIZA_2_NAME='eliza_march_2023_update_63854.sh' ARCHIVE_BASE_ELIZA_2_MD5='7ea156a0a553e1f44fbf1f4aee5a3aac' ARCHIVE_BASE_ELIZA_2_SIZE='1900000' ARCHIVE_BASE_ELIZA_2_VERSION='2023.03-gog63854' ARCHIVE_BASE_ELIZA_2_URL='https://www.gog.com/game/eliza' ARCHIVE_BASE_ELIZA_1_NAME='eliza_11_14_2020_43139.sh' ARCHIVE_BASE_ELIZA_1_MD5='0508915315f0c2b5b102bfd80cd252ef' ARCHIVE_BASE_ELIZA_1_SIZE='1900000' ARCHIVE_BASE_ELIZA_1_VERSION='2020.11.14-gog43139' ARCHIVE_BASE_ELIZA_0_NAME='eliza_03_09_2019_32218.sh' ARCHIVE_BASE_ELIZA_0_MD5='7751b93498ad637a79f84cbbc7370f0a' ARCHIVE_BASE_ELIZA_0_SIZE='1100000' ARCHIVE_BASE_ELIZA_0_VERSION='2019.03.09-gog32218' ## Molek-Syntez ARCHIVE_BASE_MOLEKSYNTEZ_1_NAME='molek_syntez_26_03_2023_63470.sh' ARCHIVE_BASE_MOLEKSYNTEZ_1_MD5='bd13a99c3365d22cabb68d88c0216b2d' ARCHIVE_BASE_MOLEKSYNTEZ_1_SIZE='200000' ARCHIVE_BASE_MOLEKSYNTEZ_1_VERSION='2023.03.26-gog63470' ARCHIVE_BASE_MOLEKSYNTEZ_1_URL='https://www.gog.com/game/moleksyntez' ARCHIVE_BASE_MOLEKSYNTEZ_0_NAME='molek_syntez_11_14_2020_43139.sh' ARCHIVE_BASE_MOLEKSYNTEZ_0_MD5='95735bb467813bbcd10c049bf1861c0c' ARCHIVE_BASE_MOLEKSYNTEZ_0_SIZE='200000' ARCHIVE_BASE_MOLEKSYNTEZ_0_VERSION='2020.11.14-gog43139' ARCHIVE_BASE_MOLEKSYNTEZ_0_URL='https://www.gog.com/game/moleksyntez' ## Last Call BBS ARCHIVE_BASE_LASTCALL_1_NAME='last_call_bbs_1_1_62795.sh' ARCHIVE_BASE_LASTCALL_1_MD5='4731f5efa1a0ff178951fb9956f5510f' ARCHIVE_BASE_LASTCALL_1_SIZE='216690' ARCHIVE_BASE_LASTCALL_1_VERSION='1.1-gog62795' ARCHIVE_BASE_LASTCALL_1_URL='https://www.gog.com/game/last_call_bbs' ARCHIVE_BASE_LASTCALL_0_NAME='last_call_bbs_1_0_57778.sh' ARCHIVE_BASE_LASTCALL_0_MD5='3dc1e94645cc3ea871cb48b930056699' ARCHIVE_BASE_LASTCALL_0_SIZE='230000' ARCHIVE_BASE_LASTCALL_0_VERSION='1.0-gog57778' ## Zachtronics Solitaire Collection ARCHIVE_BASE_SOLITAIRE_3_NAME='the_zachtronics_solitaire_collection_march_2023_update_63924.sh' ARCHIVE_BASE_SOLITAIRE_3_MD5='8965f467c0243ead5cf51468771d59fd' ARCHIVE_BASE_SOLITAIRE_3_SIZE='640000' ARCHIVE_BASE_SOLITAIRE_3_VERSION='2023.03-gog63924' ARCHIVE_BASE_SOLITAIRE_3_URL='https://www.gog.com/game/the_zachtronics_solitaire_collection' ARCHIVE_BASE_SOLITAIRE_2_NAME='the_zachtronics_solitaire_collection_1_2_59266.sh' ARCHIVE_BASE_SOLITAIRE_2_MD5='8202afdd9c32244da3ea632f86597766' ARCHIVE_BASE_SOLITAIRE_2_SIZE='640000' ARCHIVE_BASE_SOLITAIRE_2_VERSION='1.2-gog59266' ARCHIVE_BASE_SOLITAIRE_1_NAME='the_zachtronics_solitaire_collection_1_1_58740.sh' ARCHIVE_BASE_SOLITAIRE_1_MD5='33190fa2731ce09d04e028585061c3e4' ARCHIVE_BASE_SOLITAIRE_1_SIZE='640000' ARCHIVE_BASE_SOLITAIRE_1_VERSION='1.1-gog58740' ARCHIVE_BASE_SOLITAIRE_0_NAME='the_zachtronics_solitaire_collection_1_0_58571.sh' ARCHIVE_BASE_SOLITAIRE_0_MD5='1b33a67b53c34150b8795c9680874bba' ARCHIVE_BASE_SOLITAIRE_0_SIZE='640000' ARCHIVE_BASE_SOLITAIRE_0_VERSION='1.0-gog58571' CONTENT_PATH_DEFAULT='data/noarch/game' CONTENT_GAME_MAIN_FILES_COMMON=' Ionic.Zip.Reduced.dll MoonSharp.Interpreter.dll System.Speech.dll Content PackedContent monoconfig monomachineconfig' CONTENT_GAME_MAIN_FILES_OPUSMAGNUM="$CONTENT_GAME_MAIN_FILES_COMMON Lightning.exe Lightning.exe.config" CONTENT_GAME_MAIN_FILES_EXAPUNKS="$CONTENT_GAME_MAIN_FILES_COMMON EXAPUNKS.exe EXAPUNKS.exe.config" CONTENT_GAME_MAIN_FILES_ELIZA="$CONTENT_GAME_MAIN_FILES_COMMON Eliza.exe Eliza.exe.config" CONTENT_GAME_MAIN_FILES_MOLEKSYNTEZ="$CONTENT_GAME_MAIN_FILES_COMMON MOLEK-SYNTEZ.exe MOLEK-SYNTEZ.exe.config" CONTENT_GAME_MAIN_FILES_LASTCALL="$CONTENT_GAME_MAIN_FILES_COMMON LastCallBBS.exe LastCallBBS.exe.config System.Speech.dll" CONTENT_GAME_MAIN_FILES_SOLITAIRE="$CONTENT_GAME_MAIN_FILES_COMMON TheZachtronicsSolitaireCollection.exe TheZachtronicsSolitaireCollection.exe.config" CONTENT_DOC_MAIN_FILES=' LICENSE.txt' APP_MAIN_EXE_OPUSMAGNUM='Lightning.exe' APP_MAIN_EXE_EXAPUNKS='EXAPUNKS.exe' APP_MAIN_EXE_ELIZA='Eliza.exe' APP_MAIN_EXE_MOLEKSYNTEZ='MOLEK-SYNTEZ.exe' APP_MAIN_EXE_LASTCALL='LastCallBBS.exe' APP_MAIN_EXE_SOLITAIRE='TheZachtronicsSolitaireCollection.exe' APP_MAIN_ICON='Content/icon.png' PKG_MAIN_DEPENDENCIES_LIBRARIES=' libSDL2-2.0.so.0 libSDL2_image-2.0.so.0 libSDL2_mixer-2.0.so.0 libvorbisfile.so.3' PKG_MAIN_DEPENDENCIES_MONO_LIBRARIES=' mscorlib.dll I18N.dll I18N.West.dll Mono.Posix.dll Mono.Security.dll System.dll System.ComponentModel.DataAnnotations.dll System.Configuration.dll System.Core.dll System.Data.dll System.Drawing.dll System.Numerics.dll System.Runtime.Serialization.dll System.Security.dll System.Transactions.dll System.Web.dll System.Web.Extensions.dll System.Web.Http.dll System.Web.Services.dll System.Xml.dll System.Xml.Linq.dll' # Load common functions. ## Scan library paths used by ./play.it ≥ 2.35. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${HOME}/.local/lib/play.it" \ '/usr/local/lib/play.it' \ '/usr/lib/play.it' do playit_lib_path="${playit_lib_dir}/libplayit.sh.2" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Scan library paths used by ./play.it < 2.35. ## This can go away when PLAYIT_COMPATIBILITY_LEVEL is bumped to 2.35 or higher. if [ -z "$PLAYIT_LIB2" ]; then for playit_lib_dir in \ "$PWD" \ "${XDG_DATA_HOME:="${HOME}/.local/share"}/play.it" \ '/usr/local/share/games/play.it' \ '/usr/local/share/play.it' \ '/usr/share/games/play.it' \ '/usr/share/play.it' do playit_lib_path="${playit_lib_dir}/libplayit2.sh" if [ -e "$playit_lib_path" ]; then PLAYIT_LIB2="$playit_lib_path" break fi done fi ## Error out if the library can not be found. if [ -z "$PLAYIT_LIB2" ]; then printf '\n\033[1;31mError:\033[0m\n' printf 'libplayit2.sh not found.\n' exit 1 fi # shellcheck source=libplayit2.sh . "$PLAYIT_LIB2" # Run default initialisation actions. initialization_default "$@" # Extract game data. archive_extraction_default # Include game data. content_inclusion_icons content_inclusion_default # Write launchers. launchers_generation # Build packages. packages_generation print_instructions # Clean up. working_directory_cleanup exit 0 tests/check-license.sh0000755000000000000000000000065114471751340013762 0ustar rootroot#!/bin/sh set -o errexit CONTRIBUTORS_LIST=$( grep 'SPDX-FileCopyrightText' games/* | cut --delimiter=' ' --fields=5- | sort --unique ) CONTRIBUTOR_MISSING=0 while read contributor; do grep --quiet "$contributor" licenses/* || { printf 'Missing contributor in licenses/*: %s\n' "$contributor" && CONTRIBUTOR_MISSING=1 } done << EOL $(printf '%s\n' "$CONTRIBUTORS_LIST") EOL test $CONTRIBUTOR_MISSING -eq 0 COPYING0000644000000000000000000000121414471751340010613 0ustar rootrootACSL is short for Anti-Capitalist Software License BSD-2-Clause is short for Simplified BSD License Full license texts can be found in the "licenses" directory. ACSL applies to all files outside of the "games" directory, and is the default one for files in "games" directory. If a script specifies another license in its headers, the license set in the script takes precedence over the default one. In addition to the license applying to any given file, it is explicitly forbidden to input any of these in an LLM or any other tool powered by or powering a generative AI. This includes, but is not limited to, LLM "training" and AI-assisted coding. licenses/0000755000000000000000000000000014471751340011367 5ustar rootrootlicenses/ACSL0000644000000000000000000000352014471751340012034 0ustar rootrootAnti-Capitalist Software License (v 1.4) Copyright © 2015 Antoine Le Gonidec Copyright © 2016 Mopi Copyright © 2018 VA Copyright © 2020 Hoël Bézier Copyright © 2020 Fabien Givors Copyright © 2021 HS-157 Copyright © 2021 Hubert Ray Copyright © 2026 Christian Stalp This is anti-capitalist software, released for free use by individuals and organizations that do not operate by capitalist principles. Permission is hereby granted, free of charge, to any person or organization (the "User") obtaining a copy of this software and associated documentation files (the "Software"), to use, copy, modify, merge, distribute, and/or sell copies of the Software, subject to the following conditions: 1. The above copyright notice and this permission notice shall be included in all copies or modified versions of the Software. 2. The User is one of the following: a. An individual person, laboring for themselves b. A non-profit organization c. An educational institution d. An organization that seeks shared profit for all of its members, and allows non-members to set the cost of their labor 3. If the User is an organization with owners, then all owners are workers and all workers are owners with equal equity and/or equal vote. 4. If the User is an organization, then the User is not law enforcement or military, or working for or under either. The Software is provided "as is", without express or implied warranty of any kind, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.licenses/BSD-2-Clause0000644000000000000000000000340014471751340013270 0ustar rootrootSimplified BSD License Copyright © 2015 Antoine Le Gonidec Copyright © 2016 Mopi Copyright © 2018 BetaRays Copyright © 2018 Dawnmist Copyright © 2018 Jacek Szafarkiewicz Copyright © 2018 Phil Morrell Copyright © 2018 VA Copyright © 2020 Hoël Bézier Copyright © 2020 macaron Copyright © 2020 Fabien Givors Copyright © 2021 Anna Lea Copyright © 2021 HS-157 Copyright © 2021 Hubert Ray Copyright © 2026 Christian Stalp All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. This software is provided by the copyright holders and contributors "as is" and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the copyright holder or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage. Makefile0000644000000000000000000000540414471751340011225 0ustar rootrootcollection_name = 40_vv221-games # Set default prefix if called by the root account, for system-wide install. UID := $(shell id --user) ifeq ($(UID),0) prefix = /usr/local endif # Set install path based on $(prefix), if provided. ifneq ($(prefix),) datadir = $(prefix)/share endif # Fall back on $XDG_DATA_HOME, defaulting to ~/.local/share ifeq ($(prefix),) ifeq ($(XDG_DATA_HOME),) XDG_DATA_HOME := $(HOME)/.local/share endif datadir = $(XDG_DATA_HOME) endif collections_path = $(DESTDIR)$(datadir)/play.it/collections # Install the game scripts .PHONY: install uninstall install: install -D --mode=755 --target-directory=$(collections_path)/$(collection_name) games/* uninstall: rm $(collections_path)/$(collection_name)/play-*.sh rmdir -p --ignore-fail-on-non-empty $(collections_path)/$(collection_name) # Generate tarballs, for easier packaging .PHONY: dist ## The generated tarball is signed with gpg by default, ## NO_SIGN should be set to a non-0 value to skip the signature. NO_SIGN := 0 dist: DATE := $(shell date +%F) dist: TARBALL := $(collection_name)_$(DATE).tar.gz dist: TAR_OPTIONS := --sort=name --mtime=2023-08-25 --owner=root:0 --group=root:0 --use-compress-program='gzip --no-name' dist: games/*.sh tests/check-license.sh COPYING licenses Makefile README.md mkdir --parents dist LC_ALL=C tar cf dist/$(TARBALL) $(TAR_OPTIONS) games/*.sh tests/check-license.sh COPYING licenses Makefile README.md ifeq ($(NO_SIGN),0) rm --force dist/$(TARBALL).asc gpg --armor --detach-sign dist/$(TARBALL) endif # Run license check, to ensure no contributor is missing .PHONY: check check-license check: check-license check-license: ./tests/check-license.sh # Run syntax checks, relying on ShellCheck GAME_SCRIPTS := $(wildcard games/play-*.sh) GAME_SCRIPTS_TESTS := $(addprefix shellcheck_, $(GAME_SCRIPTS)) .PHONY: $(GAME_SCRIPTS_TESTS) check: $(GAME_SCRIPTS_TESTS) $(GAME_SCRIPTS_TESTS): SHELLCHECK_SOURCES := /usr/lib/play.it:/usr/share/games/play.it:/usr/share/play.it ## This is a unicode quote. Delete and retype it (or ignore/doublequote for literal). $(GAME_SCRIPTS_TESTS): SHELLCHECK_EXCLUDE += --exclude=SC1112 ## Expressions don't expand in single quotes, use double quotes for that. $(GAME_SCRIPTS_TESTS): SHELLCHECK_EXCLUDE += --exclude=SC2016 ## foo appears unused. Verify it or export it. $(GAME_SCRIPTS_TESTS): SHELLCHECK_EXCLUDE += --exclude=SC2034 ## Don't use variables in the printf format string. Use printf '..%s..' "$foo". $(GAME_SCRIPTS_TESTS): SHELLCHECK_EXCLUDE += --exclude=SC2059 ## In POSIX sh, 'local' is undefined. $(GAME_SCRIPTS_TESTS): SHELLCHECK_EXCLUDE += --exclude=SC3043 $(GAME_SCRIPTS_TESTS): shellcheck_%: % shellcheck --extended-analysis=false --external-sources --source-path=$(SHELLCHECK_SOURCES) $(SHELLCHECK_EXCLUDE) $< README.md0000644000000000000000000001550014471751340011042 0ustar rootroot# vv221ʼs games collection The codebase is maintained at [https://git.vv221.fr/play.it-vv221/] Bug reports and support requests should be sent to [vv221@dotslashplay.it]. [https://git.vv221.fr/play.it-vv221/]: https://git.vv221.fr/play.it-vv221/ [vv221@dotslashplay.it]: mailto:vv221@dotslashplay.it ## Description ./play.it is a free software building native packages from installers for Windows or Linux, mainly those sold by stores focusing on DRM-free games distribution. The goal is that a game installed via ./play.it is indistinguishable from a game installed via the official repositories of your favourite distribution. This collection adds support for a collection of games curated by vv221, ./play.it original author. It can be seen as a very subjective "best of". ## Installation ### From Debian/Ubuntu repositories This package is only provided from Debian 13 "Trixie" or newer, and Ubuntu 24.04 "Noble Numbat" or newer. Users of older versions of these distributions should follow the next instructions about installing this collection from the git repository. ``` apt install play.it-vv221 ``` ### From the git repository ``` git clone --branch main --depth 1 http://git.vv221.fr/play.it/games-vv221.git play.it-vv221.git cd play.it-vv221.git make install ``` ## Usage Usage instructions are provided on the main ./play.it repository: [./play.it: Installer for DRM-free commercial games — Usage] [./play.it: Installer for DRM-free commercial games — Usage]: https://git.dotslashplay.it/scripts/about/#usage ## Supported games ### Action - BallisticNG - Distance - Skullgirls - Total Overdose - Unreal Tournament series: - Unreal Tournament - Unreal Tournament 2004 ### Action-adventure - Beyond Good & Evil - Prince of Persia: The Sands of Time - Scrapland - Tomb Raider series: - Tomb Raider - Tomb Raider 2 - Tomb Raider 3 ### Action-RPG - Bastion - Diablo series: - Diablo - Diablo 2 - Grim Dawn - Freelancer - Pyre - Titan Quest - Torchlight series: - Torchlight - Torchlight 2 ### Adventure - Blacksad: Under the Skin - Eliza - Escape from Monkey Island - Mask of the Rose - Orwell series: - Orwell - Orwell: Ignorance is Strength - RealMyst: - RealMyst - realMyst: Masterpiece Edition - Roadwarden - Slay the Princess - Song of Farca - Wanderlust series: - Wanderlust: Travel Stories - Wanderlust: Transsiberian - World of Darkness setting: - Vampire: The Masquerade - Coteries of New York - Vampire: The Masquerade - Shadows of New York - Vampire: The Masquerade - Reckoning of New York - Werewolf: The Apocalypse - Heart of the Forest - Werewolf: The Apocalypse - Purgatory ### Cyberpunk - Deus Ex - Exapunks - Shadowrun series (by Harebrained Schemes): - Shadowrun Returns - Shadowrun: Dragonfall - Shadowrun: Hong Kong - Song of Farca - Whispers of a Machine ### Horror - Darkest Dungeon - Diablo series: - Diablo - Diablo 2 - Ghost Master - Grim Dawn - Slay the Princess - Sunless Sea - The Kittehverse: - Gibbous - A Cthulhu Adventure - Near-Mage - World of Darkness setting: - Vampire: The Masquerade - Bloodlines - Vampire: The Masquerade - Coteries of New York - Vampire: The Masquerade - Shadows of New York - Vampire: The Masquerade - Reckoning of New York - Werewolf: The Apocalypse - Heart of the Forest - Werewolf: The Apocalypse - Purgatory ### Platform - Distance - Jazz Jackrabbit 2 - Prince of Persia: The Sands of Time - Rayman series: - Rayman - Rayman Origins - Tomb Raider series: - Tomb Raider - Tomb Raider 2 - Tomb Raider 3 ### Point-and-click - Blackwell series: - The Blackwell Legacy - Blackwell Unbound - The Blackwell Convergence - The Blackwell Deception - The Blackwell Epiphany - Day of the Tentacle - Gobliiins series: - Gobliiins - Gobliiins 5: L'invasion des Morglotons - Gobliins 2: Le Prince Bouffon - Gobliins 6: Le Prince Bouffon - Goblins 3 - Kathy Rain series: - Kathy Rain - Kathy Rain 2: Soothsayer - Monkey Island series: - The Secret of Monkey Island - Monkey Island 2: LeChuck's Revenge - The Curse of Monkey Island - Return to Monkey Island - Myst series: - Myst - Riven: The Sequel to Myst - Myst 3: Exile - Old Skies - Primordia - Sam and Max Hit the Road - Superflu Riteurnz - The Kittehverse: - Gibbous - A Cthulhu Adventure - Near-Mage - Unavowed - Whispers of a Machine ### Puzzle - 7 Billion Humans - Ghost Master - Human Resource Machine - Little Inferno - Myst series: - Myst - Riven: The Sequel to Myst - Myst 3: Exile - realMyst: Masterpiece Edition - Orwell series: - Orwell - Orwell: Ignorance is Strength - World of Goo series: - World of Goo - World of Goo 2 - Zachtronics games: - Opus Magnum - Exapunks - Molek-Syntez - Last Call BBS - Zachtronics Solitaire Collection ### Role-playing - Anachronox - Baldur's Gate series: - Baldur's Gate - Baldur's Gate 2 - Darkest Dungeon - Deus Ex - Disco Elysium - Icewind Dale series: - Icewind Dale - Icewind Dale 2 - Loop Hero - Morrowind - Pillars of Eternity - Planescape: Torment - Shadowrun series (by Harebrained Schemes): - Shadowrun Returns - Shadowrun: Dragonfall - Shadowrun: Hong Kong - Star Wars: Knights of the Old Republic series: - Star Wars: Knights of the Old Republic - Star Wars: Knights of the Old Republic 2: The Sith Lords - Sunless Sea - The Witcher - Torment: Tides of Numenera - Transistor - Tyranny - Vampire: The Masquerade - Bloodlines - Wasteland 2 ### Strategy - Age of Empires 2 - Age of Mythology - Alpha Centauri - City Building series (by Impression Games and BreakAway Games): - Caesar 3 - Pharaoh - Zeus: Master of Olympus - Emperor: Rise of the Middle Kingdom - Desperados series: - Desperados: Wanted Dead or Alive - Desperados 3 - Dark Reign 2 - Dungeon Keeper series: - Dungeon Keeper - Dungeon Keeper 2 - Factorio - Frostpunk - FTL: Faster Than Light - Galacticare - Ghost Master - Heroes of Might and Magic series: - Heroes of Might and Magic 4 - Heroes of Might and Magic 5 - Kingdom Rush series: - Kingdom Rush - Kingdom Rush: Frontiers - Kingdom Rush: Origins - Off-World Resource Base - Oil Rush - Pandora: First Contact - Renowned Explorers - Reus series: - Reus - Reus 2 - Shadow Gambit: The Cursed Crew - Shadow Tactics: Blades of the Shogun - Songs of Conquest - Star Wars: Galactic Battlegrounds - StarCraft - StarTopia - Stellaris - Synergy - The Settlers 2 - Tropico series: - Tropico - Tropico 2 - War for the Overworld - Warcraft series: - Warcraft 2 - Warcraft 3 - Warhammer 40,000 setting: - Warhammer 40,000: Dawn of War - Warhammer 40,000: Gladius - Relics of War - Warlords Battlecry 2 - Worms series: - Worms 2 - Worms Armageddon