The forum

Beyond Good and Evil (GoG) [WIP]

Author Replies
petch Saturday 17 December 2011 at 17:45
petch
Developer

Bonsoir à tous,
Voici le mieux que j'ai réussi à faire pour faire tourner Beyond Good and Evil.
Le premier problème (résolu) est de s'assurer que le processeur fonctionne à vitesse fixe.
Le principal problème restant est le son, sans DirectSound en natif les sons partent en boucle, et avec dsound la vidéo et l'audio sont désynchronisés, les dialogues sont coupés,... WineHQ bug #13046
Je suis à court d'idées pour corriger ça parfaitement, un peu d'aide ne serait pas de refus... :sad:

https://raw.github.com/petchema/playonlinux/master/wip/beyond-good&evil-gog
#!/bin/bash
# Date : (2011-12-14 23-58)
# Last revision : (2011-12-17 13-34)
# Wine version used : 1.3.23
# Distribution used to test : Debian Sid (Unstable)
# Author : Pierre Etchemaite petchema@concept-micro.com
# Script licence : GPL v.2
# Program licence : Retail
# Depend :

# Tested up to 1.3.35 without native DirectSound, and still looping sounds

[ -z "$PLAYONLINUX" ] && exit 0
source "$PLAYONLINUX/lib/sources"

check_install_archive () {
    FILE="$1"
    EXPECTED_NAME="$2"
    EXPECTED_SIZE="$3"
    EXPECTED_MD5="$4"

    POL_SetupWindow_wait "$(eval_gettext 'Checking install archive...')" "$TITLE"
    # Temporarily prevent word splitting
    OLDIFS="$IFS"
    IFS=''
    NAME="$(basename $FILE)"
    SIZE="$(stat -c%s $FILE)"
    MD5="$(POL_MD5_file $FILE)"
    IFS="$OLDIFS"

    if [ $SIZE -ne $EXPECTED_SIZE -o "$MD5" != "$EXPECTED_MD5" ]; then
        POL_Debug_Error "$(eval_gettext 'Install archive mismatch.\\nEither your install archive is corrupted, or is not the expected version.\\nThis script cannot guarantee that installation will work correctly. Please report success or failure to PlayOnLinux forums.')\\n$(eval_gettext 'Name:') $NAME ($(eval_gettext 'expected') $EXPECTED_NAME)\\n$(eval_gettext 'Size:') $SIZE ($(eval_gettext 'expected') $EXPECTED_SIZE)\\n$(eval_gettext 'MD5:') $MD5\\n     ($(eval_gettext 'expected') $EXPECTED_MD5)"
        POL_SetupWindow_question "$(eval_gettext 'Continue?')" "$TITLE"
        [ "$APP_ANSWER" != "TRUE" ] && POL_Debug_Fatal "$(eval_gettext 'Not the expected archive')"
    fi
}


PREFIX="BeyondGaE_gog"
WORKING_WINE_VERSION="1.3.23"

TITLE="$(eval_gettext 'Beyond Good and Evil (GoG release)')"
SHORTCUT_NAME="Beyond Good and Evil"
SHORTCUT_DOC="$SHORTCUT_NAME - $(eval_gettext 'User manual')"
SHORTCUT_README="$SHORTCUT_NAME - $(eval_gettext 'Readme')"

POL_SetupWindow_Init
POL_Debug_Init

POL_SetupWindow_presentation "$TITLE" "Ubisoft" "http://www.gog.com/en/gamecard/beyond_good_and_evil" "Pierre Etchemaite" "$PREFIX"

POL_Wine_SelectPrefix "$PREFIX"
POL_Wine_PrefixCreate "$WORKING_WINE_VERSION"

cd $HOME
POL_SetupWindow_browse "$(eval_gettext 'Please select the setup file to run.')" "$TITLE"
ARCHIVE="$APP_ANSWER"

check_install_archive "$ARCHIVE" setup_beyond_good_and_evil.exe 1544566386 "75ccff61fc37b3b04245f094850dce88"


POL_SetupWindow_wait "$(eval_gettext 'Please wait while $TITLE is installed.')" "$TITLE"

# Associate .PDF with native app
# http://wiki.winehq.org/FAQ#head-91bf3f0a8ccbfab8dee96f82fae2f1a489e0d243
# Do it before installing the game, so you have the possibility to open
# PDFs with Win32 reader if you choose to install it
cat <<'_EOF_' > $REPERTOIRE/tmp/pdfnativereader.reg
[HKEY_CLASSES_ROOT\\.pdf]
@="PDFfile"
"Content Type"="application/pdf"
[HKEY_CLASSES_ROOT\\PDFfile\\Shell\\Open\\command]
@="winebrowser \\"%1\\""
_EOF_
POL_Wine regedit $REPERTOIRE/tmp/pdfnativereader.reg

POL_Wine start /unix "$ARCHIVE" || POL_Debug_Fatal "$(eval_gettext 'Error while installing archive')"

POL_Wine_WaitExit "$TITLE"

# Can only get lots of looping sounds (2s loops) without native DirectSound
# (and emulated sound outputs?)
POL_Call POL_install_dsound

# Sound output: default (emulated) [hopefully]
# Should avoid looping [has proven to shorten some samples instead?]
#cat <<_EOFINI_ > "$REPERTOIRE/tmp/dsoundbuiltinoutput.reg"
#REGEDIT4
#
#[HKEY_CURRENT_USER\\Software\\Ubisoft\\Beyond Good & Evil\\SettingsApplication.INI\\Sound]
#"Audio board GUID"=hex:00,18,ad,c2,43,b2,ce,11,a8,a4,00,aa,00,6c,45,00
#_EOFINI_
#POL_Wine regedit "$REPERTOIRE/tmp/dsoundbuiltinoutput.reg"
#rm "$REPERTOIRE/tmp/dsoundbuiltinoutput.reg"

# GoG work!
Set_OS winxp

# Has problems when unconstrained
Set_Desktop "On" "1024" "768"

POL_SetupWindow_VMS "32"
 
## PlayOnMac Section
[ -n "$PLAYONMAC" ] && Set_SoundDriver "alsa"
[ -n "$PLAYONMAC" ] || Set_Managed "Off"
## End Section

# Doesn't hurt ;)
POL_Wine_reboot

convert "$WINEPREFIX/drive_c/$PROGRAMFILES/GOG.com/Beyond Good and Evil/game.ico" "$REPERTOIRE/icones/32/$SHORTCUT_NAME"
POL_Shortcut "BGE.exe" "$SHORTCUT_NAME"
# Fixes a problem with CPU management on modern computers (specially laptops):
# BGE doesn't handle variable frequency, so make sure they stay at top frequency
# with a background busy loop (other means are less portable and/or require root privileges)
POL_Shortcut_InsertBeforeWine "$SHORTCUT_NAME" 'schedtool -a 0x1 $$'
POL_Shortcut_InsertBeforeWine "$SHORTCUT_NAME" 'nice -19 bash -c "while true; do let i=1; done" &'
POL_Shortcut_InsertBeforeWine "$SHORTCUT_NAME" 'BUSYLOOP_PID=$!'
POL_Shortcut_InsertBeforeWine "$SHORTCUT_NAME" 'trap "kill $BUSYLOOP_PID" EXIT'

POL_Shortcut "start.exe" "$SHORTCUT_DOC" "" "'C:/$PROGRAMFILES/GOG.com/Beyond Good and Evil/manual.pdf'"
POL_Shortcut "start.exe" "$SHORTCUT_README" "" "'C:/$PROGRAMFILES/GOG.com/Beyond Good and Evil/readme.txt'"

POL_SetupWindow_Close

cat <<_EOF_ > "$REPERTOIRE/configurations/configurators/$SHORTCUT_NAME"
#!/bin/bash
[ -z "\\$PLAYONLINUX" ] && exit 0
source "\\$PLAYONLINUX/lib/sources"
export WINEPREFIX="$REPERTOIRE/wineprefix/$PREFIX"
export WINEDEBUG=""

POL_LoadVar_PROGRAMFILES

cd "\\$WINEPREFIX/drive_c/\\$PROGRAMFILES/GOG.com/Beyond Good and Evil/" || exit 1

TITLE="$TITLE"

POL_Wine "SettingsApplication.exe"

exit
_EOF_

exit

Edited by petch