Het forum

Tropico 3 Gold Edition (GoG)

Auteur Antwoorden
TonyFlow Vrijdag 30 Augustus 2013 om 16:04
TonyFlow

http://www.playonlinux.com/fr/app-1805.html

[code language=playonlinux]
#!/bin/bash
# Date : (2013-08-22 23-00)
# Last revision : (2013-08-29 18-00)
# Wine version used : 1.4.1
# Distribution used to test : Fedora 19
# Author : TonyFlow
# Script licence : GPL v.2
# Program licence : Retail
# Depend :
 
[ -z "$PLAYONLINUX" ] && exit 0
source "$PLAYONLINUX/lib/sources"
 
GOGID="tropico_3_gold_edition"
PREFIX="Tropico3GE_gog"
WORKING_WINE_VERSION="1.4.1"
 
TITLE="GOG.com - Tropico 3 Gold Edition"
SHORTCUT_NAME="Tropico 3 - Gold Edition"
 
POL_GetSetupImages "http://files.playonlinux.com/resources/setups/$PREFIX/top.jpg" "http://files.playonlinux.com/resources/setups/$PREFIX/left.jpg" "$TITLE"
 
POL_SetupWindow_Init
POL_SetupWindow_SetID 1805
POL_Debug_Init
 
POL_SetupWindow_presentation "$TITLE" "Kalypso / Haemimont Games" "http://www.gog.com/gamecard/$GOGID" "TonyFlow" "$PREFIX"
 
POL_Call POL_GoG_setup "$GOGID" "1b04a69dbcc27102b49e11f32df3df64" "e8338935181d9e008ac1f9304e6402b4" "87df8073671e233aace5d4d52df95ea3"
 
POL_Wine_SelectPrefix "$PREFIX"
POL_Wine_PrefixCreate "$WORKING_WINE_VERSION"
 
POL_Call POL_GoG_install
 
# GoG work!
Set_OS winxp
 
# Install DirectX9c
POL_Call POL_Install_directx9
 
POL_SetupWindow_VMS "256"
 
# Doesn't hurt ;)
POL_Wine_reboot
 
# Language selection for the manual shortcut
POL_SetupWindow_menu "$(eval_gettext 'What is your preferred language?')" "$(eval_gettext 'Language')" "en: English~fr: French~de: German~it: Italian~sp: Spanish" "~"
MAN_LANG=$(echo "${APP_ANSWER}" | cut -d ':' -f 1)
 
# Configure the shortcut
GOGPATH="$GOGROOT/Tropico 3 GOLD"
#POL_Shortcut "Language.exe" "$SHORTCUT_NAME" "$SHORTCUT_NAME.png" "" "Game;StrategyGame;"
POL_Shortcut "tropico3.exe" "$SHORTCUT_NAME" "$SHORTCUT_NAME.png" "" "Game;StrategyGame;"
if [ "$MAN_LANG" = "en" ]; then
    POL_Shortcut_Document "$SHORTCUT_NAME" "$GOGPATH/Manual.pdf"
else
    POL_Shortcut_Document "$SHORTCUT_NAME" "$GOGPATH/manual_$MAN_LANG.pdf"
fi
 
 
# Tropico 3 was preset in full screen mode with a resolution that can be too high...
# Furthermore full screen mode can only be enabled or disabled in the config file...
# And unfortunately default config file is encrypted, so overwrite it with a clear one !
# http://forum.kalypsomedia.com/showthread.php?tid=4484&pid=149693#pid149693
mv "$GOGPATH/config.lua" "$GOGPATH/config_orig.lua"
cat <<_EOF_ > "$GOGPATH/config.lua"
config.IsFullscreen = 0
config.RunUnfocused = 0

config.WriteToRegistry = 1
config.AutoOptions = 1
config.ColorBits = 32
config.DepthBits = 24
config.VSync = 0
config.RefRast = 0
config.MeshVertexBufferChunkSizeKb = 1280
config.MeshIndexBufferChunkSizeKb = 512
config.MapSlotReserveSize = 12

config.SoundListenerMinUpdatePeriod = 50
config.FmodMemory = 10485760

config.XInput = 0

config.MaxGameObjectCount = 200000
config.MaxGameObjectExCount = 10000
config.MaxGameRenderObjCount = 20000

config.MainMenu = 1

hr.UpdateLights = 0
_EOF_
 
 
# Configurator script (full screen mode ; language selection)
cat <<_EOF_ > "$POL_USER_ROOT/configurations/configurators/$SHORTCUT_NAME"
#!/bin/bash
[ -z "\\$PLAYONLINUX" ] && exit 0
source "\\$PLAYONLINUX/lib/sources"
export WINEPREFIX="\\$POL_USER_ROOT/wineprefix/$PREFIX"
export WINEDEBUG="-all"
 
cd "\\$WINEPREFIX/drive_c/Program Files/GOG.com/Tropico 3 GOLD/" || exit 1
TITLE="$TITLE"
 
# Ask for full screen mode
POL_SetupWindow_Init
POL_Debug_Init
POL_SetupWindow_menu_list "\\$(eval_gettext 'Full screen:')" "$TITLE" "on~off" "~"
if [ "\\$APP_ANSWER" = "on" ]; then
    sed -i.old -e 's/^config.IsFullscreen =.*$/config.IsFullscreen = 1/' config.lua
else
    sed -i.old -e 's/^config.IsFullscreen =.*$/config.IsFullscreen = 0/' config.lua
fi
POL_SetupWindow_Close
 
# Launch the language setup
POL_Wine Language.exe
exit 0
_EOF_
 
 
POL_SetupWindow_Close
 
# Launch the language setup
POL_Wine "$GOGPATH/Language.exe"
 
exit 0
[/code]


Il y a quelques trucs un peu particuliers pour ce script...

Le principal problème rencontré, c'est que le jeu refusé de se lancer en se plaignant que je n'avais pas une carte graphique assez récente compatible directx9... genre ! Apparement cette erreur est dûe au lancement en plein écran avec une résolution non supportées (une en 4/3 trop haute pour ma config 16/10 ?). Seulement on ne peut changer la résolution que via le jeu... Par contre le plein écran est activé par défaut dans un fichier de config, mais ce dernier est fourni en version binaire !

Du coup, je remplace le fichier config.lua par une version en texte lisible (ce qui ne change rien pour le jeu, il accepte les 2 formes). Au passage je désactive le plein écran pour éviter les soucis lors du 1er lancement et permettre l'accès aux réglages dans le jeu.

Par contre il n'y a pas d'option dans le jeu pour le remettre en plein écran, il faut éditer ce fichier config.lua... Ayant découvert les "configurators" de POL, j'en propose donc un afin d'activer ou désactiver plus facilement le plein écran.

Le jeu s'installe avec un programme language.exe permettant de sélectionner la langue, j'ai donc ajouté son appel à la fin de mon script de configuration ainsi qu'à la fin du script d'installation.

Dernier point, le jeu nécessite une install de DirectX9c, j'ai utilisé POL_Install_directx9 mais je ne sais toujours pas trop s'il vaut mieux utiliser cette directive, ou POL_Install_d3dx9, ou bien chercher à n'installer qu'un des sous-ensembles...

Enfin les éléments graphiques pour l'installeurs et les raccourcis sont disponibles ici : http://greg.rhcp.net/POL/tropico3/

petch Zaterdag 31 Augustus 2013 om 9:13
petch
Developer

Bonjour TonyFlow,

MAN_LANG=$(echo "${APP_ANSWER}" | cut -d ':' -f 1)

Juste pour info on peut aussi faire
MAN_LANG=$(cut -d ':' -f 1 <<< "$APP_ANSWER")

Mais le plus court est sûrement
MAN_LANG="${APP_ANSWER%:*}"



cat <<_EOF_ > "$POL_USER_ROOT/configurations/configurators/$SHORTCUT_NAME"
...
POL_Debug_Init

J'ai appris à la dure à ne pas utiliser POL_Debug_Init dans les configurateurs : il écrase les logs d'installation !


    sed -i.old -e 's/^config.IsFullscreen =.*$/config.IsFullscreen = 1/' config.lua

Le sed de MacOS, d'origine BSD, n'implémente pas -i, pour des raisons de portabilité il vaut mieux faire l'équivalent manuellement (copier le fichier d'origine sous un autre nom, lancer sed dessus, envoyer sa sortie standard dans le fichier d'origine).



Dernier
point, le jeu nécessite une install de DirectX9c, j'ai utilisé
POL_Install_directx9 mais je ne sais toujours pas trop s'il vaut mieux
utiliser cette directive, ou POL_Install_d3dx9, ou bien chercher à
n'installer qu'un des sous-ensembles...

Quote from TonyFlow

Certains tests réussis sur l'AppDB n'utilisent pas l'installation de DirectX9 en natif, c'est curieux. Bref.
J'avais essayé de comparer les différents composants à base de DirectX9, mais j'ai dû abandonner, chacun a ses spécificités.
d3dx9 doit être le plus "léger", dxfullsetup le plus "lourd"; directx9 n'est pas le plus utilisé, mais si c'est ce qui marche...

Aangepast door petch

TonyFlow Zondag 1 September 2013 om 20:07
TonyFlow

Bonjour Petch,


Juste pour info on peut aussi faire

MAN_LANG=$(cut -d ':' -f 1 <<< "$APP_ANSWER")

Mais le plus court est sûrement
MAN_LANG="${APP_ANSWER%:*}"

Quote from petch

Ce que je redoute avec le shell, c'est les syntaxes trop exotiques ou modernes dont j'ignore si elles passent bien partout... Je n'ai pas réussi à trouver d'info sur le '<<<' (et c'est pas simple de faire une recherche sur des symboles ^^'). La dernière syntaxe c'est propre à du bash "récent" il me semble ? Quelque part j'aime bien, elles permettent pas mal de manipulations de chaines plutot fastidieuses sinon, par contre elles ne sont malheureusement pas très explicites :/



J'ai appris à la dure à ne pas utiliser POL_Debug_Init dans les configurateurs : il écrase les logs d'installation !

Quote from petch

J'en prends bonne note !
Ca m'apprendra à prendre de mauvais exemples (presque tous les scripts de mon dossier "configurators" contiennent la directive) :p



Le sed de MacOS, d'origine BSD, n'implémente pas -i, pour des raisons de portabilité il vaut mieux faire l'équivalent manuellement (copier le fichier d'origine sous un autre nom, lancer sed dessus, envoyer sa sortie standard dans le fichier d'origine).

Quote from petch

Après quelques recherches, je crois comprendre que le sed osx/bsd gère aussi le -i. La différence serait qu'il oblige la présence du suffixe ensuite. Du coup je suis parti pour le laisser, je trouve ça plus élégant.



Pour le reste, je refais quelques tests au sujet de directx9...
petch Zondag 1 September 2013 om 20:36
petch
Developer

<<< date de Bash 2.05b-alpha1 (http://wiki.bash-hackers.org/scripting/bashchanges)
Les % %% # ## étaient déjà présents en Bash 1.14.7, je n'ai pas trouvé les sources de version plus ancienne.
Autant dire que non, ce ne sont pas des syntaxes récentes.

TonyFlow Zondag 1 September 2013 om 21:24
TonyFlow

<<< date de Bash 2.05b-alpha1 (http://wiki.bash-hackers.org/scripting/bashchanges)
Les % %% # ## étaient déjà présents en Bash 1.14.7, je n'ai pas trouvé les sources de version plus ancienne.
Autant dire que non, ce ne sont pas des syntaxes récentes.

Quote from petch


Merci beaucoup pour ces infos (et le lien très utile !). J'adopte donc le % :)


Revenons maintenant sur le dernier point : Directx9

Je confirme que ça plante si je n'ajoute aucune bibliothèque, voici le log :

fixme:win:EnumDisplayDevicesW ((null),0,0x32ed08,0x00000000), stub!
fixme:d3dcompiler:D3DCompile data 0x7100d8, data_size 1002, filename (null), defines (nil), include (nil), entrypoint "main",
target "ps_2_0", sflags 0, eflags 0, shader 0x32f874, error_messages (nil) stub!
fixme:d3dcompiler:D3DCompile data 0x7104c8, data_size 1077, filename (null), defines (nil), include (nil), entrypoint "main",
target "ps_2_0", sflags 0, eflags 0, shader 0x32f874, error_messages (nil) stub!
fixme:d3dx:d3dx9_base_effect_init HLSL ascii effects not supported, yet
fixme:d3dx:ID3DXEffectCompilerImpl_CompileEffect iface 0x138c7088, flags 0x8000, effect 0x32f734, error_msgs 0x32f55c stub
fixme:dbghelp:elf_search_auxv can't find symbol in module


A priori ça marche aussi bien en ajoutant directx9 que d3dx9, donc je vais mettre ce dernier si c'est le plus léger et le plus courant.

Voilà, script mis à jour... donc en ce qui me concerne la requête pour signature est lancée !
petch Dinsdag 3 September 2013 om 20:36
petch
Developer