Het forum

Dungeon Keeper (GoG)

Auteur Antwoorden
Xodetaetl Donderdag 23 Mei 2013 om 22:28
XodetaetlAnonymous

Les méchants pixels du premier Dungeon Keeper manquaient âprement à la liste. :)

#!/bin/bash
# Date : (2013-05-22 22-00)
# Last revision : (2013-05-29 22-20)
# Wine version used : 1.4-dos_support_0.6
# Distribution used to test : Xubuntu 13.04
# Authors : Pascal Reinhard <dev@ovocean.com>, TonyFlow <tonyflow@rhcp.net>
# Script licence : GPL v.2
# Program licence : Retail
# Depend :

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

GOGID="dungeon_keeper"
PREFIX="DungeonKeeper_gog"
WORKING_WINE_VERSION="1.4-dos_support_0.6"

TITLE="GOG.com - Dungeon Keeper"
SHORTCUT_NAME="Dungeon Keeper"

POL_GetSetupImages "http://files.playonlinux.com/resources/setups/$PREFIX/top.png" "http://files.playonlinux.com/resources/setups/$PREFIX/left.jpg" "$TITLE"

POL_SetupWindow_Init
POL_SetupWindow_SetID 1712
POL_Debug_Init

POL_SetupWindow_presentation "$TITLE" "Bullfrog Productions / Electronic Arts" "http://www.gog.com/gamecard/$GOGID" "Xodetaetl" "$PREFIX"

POL_Call POL_GoG_setup "$GOGID" "e8f77a31da061460cd93bfb275270b45"

POL_Wine_SelectPrefix "$PREFIX"
POL_Wine_PrefixCreate "$WORKING_WINE_VERSION"

POL_Call POL_GoG_install

GOGPATH="$GOGROOT/Dungeon Keeper"
  
# Enable the high-resolution mode by default
if type -t POL_unbase64 > /dev/null; then
    POL_unbase64 <<-_EOF_ > "$GOGPATH/SAVE/SETTINGS.DAT"
    AAQDAAEBf1oBAAANAAAAyADQAMsAzQAdACoA0wDRAMcAzwAUACYAJgEZARQEFAEjABEAHwAUAiIAMAAjASIBMAEhAB4AKgBSAA4AGQAyAAEABg==
    _EOF_
    POL_SetupWindow_message "$(eval_gettext 'Tip: The high-resolution mode has been activated, if it is too slow, you can disable it by pressing Alt+R while in game.)')" "$TITLE"
else
    POL_SetupWindow_message "$(eval_gettext 'Tip: You can enable a higher-resolution mode by pressing Alt+R during the game.')" "$TITLE"
fi

# Dosbox config
cat <<_EOFCFG_ > "$WINEPREFIX/playonlinux_dos.cfg"
manual_mount=true
sdl_output=overlay
render_aspect=true
dosbox_memsize=30
mixer_prebuffer=100
cpu_cycles=130000
cpu_cycleup=5000
cpu_cycledown=5000
_EOFCFG_

# Batch launcher with image disk mount
cat <<_EOFBAT_ > "$GOGPATH/DK.bat"
@echo off
cd C:\\GOGGAM~1\\DUNGEO~1
imgmount D GAME~1.INS -t iso -fs iso
KEEPER.EXE
exit
_EOFBAT_

POL_Shortcut "DK.bat" "$SHORTCUT_NAME" "$SHORTCUT_NAME.png" "" "Game;StrategyGame;"
POL_Shortcut_Document "$SHORTCUT_NAME" "$GOGPATH/manual.pdf"

POL_SetupWindow_Close
exit 0

Aangepast door Xodetaetl

petch Donderdag 23 Mei 2013 om 22:54
petch
Developer

Personnellement je ne vois rien à redire...
Xodetaetl Donderdag 23 Mei 2013 om 23:17
XodetaetlAnonymous

Alors pouf ! je l'envoie pour signature.
Et puis ce sera tout pour ce soir. :)
petch Vrijdag 24 Mei 2013 om 7:21
petch
Developer

J'ai validé les 3 scripts !
Ne manque plus que des descriptions et des captures d'écran, et on pourra faire des "news" pour annoncer les scripts que tu voudras (par exemple Wizardry 8 à mon avis vaudrait bien une news ;))...
Xodetaetl Vrijdag 24 Mei 2013 om 15:44
XodetaetlAnonymous

Arh, si je ne le fais pas, personne ne le fera, n'est-ce pas ?

J'ai laissé tomber les descriptions parce que je bloque pour écrire trois lignes inintéressantes sur un jeu qu'on est sensé connaître si on cherche à l'installer... À moins d'avoir une info technique à donner. Bref, pas motivé.

Pour les screenshots, il y a une interface web pour les envoyer ? Je n'ai pas trouvé.
petch Vrijdag 24 Mei 2013 om 18:38
petch
Developer

J'ai "ajouter une capture d'écran" dans les actions sur les scripts, mais je suppose qu'il faut avoir les droits de scripteur pour la voir, donc.
C'est peut-être un peu gros pour les faire passer par git, mais si je peux les récupérer autrement je veux bien les poster ensuite sur le site.
TonyFlow Zaterdag 25 Mei 2013 om 2:21
TonyFlow

Tiens tiens ! Je m'étais posé des questions au sujet de DK justement (j'ai la version GoG), et des jeux DOS en général...

Je dois avouer avoir eu des réticences à l'idée de passer par PoL pour utiliser wine pour utiliser dosbox... Au lieu d'utiliser simplement un dosbox (natif linux) ça me parait un peu overkill !

Ceci dit je n'étais pas sûr de bien comprendre comment tout ça se mettait en place : d'un côté GoG installe un dosbox.exe, de l'autre j'ai vu que wine intégré un support dosbox. Du coup c'est sur ce dernier que PoL s'appuie, le dosbox.exe de GoG n'étant pas du tout utilisé. J'ai bon jusque là ?

Si vous avez des précisions à m'apporter sur le support dosbox dans wine et dans PoL, n'hésitez pas, je suis curieux (mais peut-être un peu flemmard c'est vrai, j'ai cherché quelques infos, mais j'ai pas creusé plus encore).


Concernant le script de Xodetaetl :
[code]# The game expects itself at the root directory of C:mv "$WINEPREFIX/drive_c/GOG Games/Dungeon Keeper" "$WINEPREFIX/drive_c/DKeeper"[/code]
Hmmm... vraiment ?
Je n'ai pas l'impression que le chemin d'origine pose problème.

J'ai testé sans les déplacements/renommages (y compris pour le game.inst) et ça m'a l'air d'être okay. Par contre, forcément les chemins sont moins jolis, mon lanceur .bat donne ceci :
[code]@echo off
cd C:\\GOGGAM~1\\DUNGEO~1
imgmount D GAME~1.INS -t iso -fs iso
KEEPER.EXE
exit[/code]

Donc est-ce que ces modifications sont juste pour éviter les noms tronqués en "~1" ? Ou y a-t'il d'autres raisons valables qui m'échappent (bien que je puisse considérer valable d'éviter les "~1", mais le commentaire "The game expects itself..." est faux :p) ?



Xodetaetl Zaterdag 25 Mei 2013 om 3:25
XodetaetlAnonymous

Je crois bien que tu as tout juste TonyFlow. :)

/Off to bed
TonyFlow Zaterdag 25 Mei 2013 om 4:42
TonyFlow

Il est temps que je me couche aussi...

Pour me répondre, le dosbox utilisé semble donc être cet exécutable linux : ~/.PlayOnLinux/wine/linux-x86/1.4-dos_support_0.6/bin/DOSBox


Sinon Xodetaetl m'a redonné l'astuce pour améliorer la résolution (alt-r). Je croyais que c'était une option de dosbox, mais pas du tout, c'est une option du jeu (pour ça que je trouvais rien dans la doc de dosbox ><).

Par défaut le jeu se lance en 320x200, mais alt-r permet de switcher avec le mode 640x480, ce qui est beaucoup mieux, même indispensable ! Mais pas simple à deviner :/ Et à part ce raccourci, le jeu ne semble pas proposer d'autre moyen pour le spécifier... J'ai donc cherché où le paramètre était mémorisé.

Ca se passe dans le fichier SAVE/SETTINGS.DAT, avec le 12ème octet à passer de 01 à 0D. Du coup je suggère fortement que ce "patch" soit appliqué par défaut à l'installation du jeu (étonnant que GoG n'y ait pas pensé).

Voici une version modifiée du script tenant compte de mes diverses observations :

[ -z "$PLAYONLINUX" ] && exit 0
source "$PLAYONLINUX/lib/sources"
 
GOGID="dungeon_keeper"
PREFIX="DungeonKeeper_gog"
WORKING_WINE_VERSION="1.4-dos_support_0.6"
 
TITLE="GOG.com - Dungeon Keeper"
SHORTCUT_NAME="Dungeon Keeper"
 
POL_GetSetupImages "http://files.playonlinux.com/resources/setups/$PREFIX/top.png" "http://files.playonlinux.com/resources/setups/$PREFIX/left.jpg" "$TITLE"
 
POL_SetupWindow_Init
POL_SetupWindow_SetID 1712
POL_Debug_Init
 
POL_SetupWindow_presentation "$TITLE" "Bullfrog Productions / Electronic Arts" "http://www.gog.com/gamecard/$GOGID" "Xodetaetl" "$PREFIX"
 
POL_Call POL_GoG_setup "$GOGID" "e8f77a31da061460cd93bfb275270b45"
 
POL_Wine_SelectPrefix "$PREFIX"
POL_Wine_PrefixCreate "$WORKING_WINE_VERSION"
 
POL_Call POL_GoG_install
 
GOGPATH="$GOGROOT/Dungeon Keeper"
 
# Dosbox config
cat <<_EOFCFG_ > "$WINEPREFIX/playonlinux_dos.cfg"
manual_mount=true
sdl_output=overlay
render_aspect=true
dosbox_memsize=30
mixer_prebuffer=100
dosbox_machine=svga_s3
_EOFCFG_
 
# Enable the high-resolution mode by default
if type -t POL_unbase64 > /dev/null; then
    POL_unbase64 <<-_EOF_ > "$GOGPATH/SAVE/SETTINGS.DAT"
    AAQDAAEBf1oBAAANAAAAyADQAMsAzQAdACoA0wDRAMcAzwAUACYAJgEZARQEFAEjABEAHwAUAiIAMAAjASIBMAEhAB4AKgBSAA4AGQAyAAEABg==
    _EOF_
else
    POL_SetupWindow_message "$(eval_gettext 'You should enable manually the high-resolution mode\\nby pressing alt-r during the game.')" "$TITLE"
fi
 
# Batch launcher with fake CD mount
cat <<_EOFBAT_ > "$GOGPATH/DK.bat"
@echo off
cd C:\\GOGGAM~1\\DUNGEO~1
imgmount D GAME~1.INS -t iso -fs iso
KEEPER.EXE
exit
_EOFBAT_
 
POL_Shortcut "DK.bat" "$SHORTCUT_NAME" "$SHORTCUT_NAME.png" "" "Game;StrategyGame;"
POL_Shortcut_Document "$SHORTCUT_NAME" "$GOGPATH/manual.pdf"
 
POL_SetupWindow_Close
exit 0


PS: j'ai repris le unbase64 vu dans un autre script pour recopier tout le ficher, vu qu'il est très court, ça semble une méthode simple et appropriée.

PS2: j'ai viré tous les 'mv', après si vous préférez faire quelques changements pour éviter les noms tronqués~1 ça ne me dérange pas pour autant.

PS3: j'ai ajouté un "dosbox_machine=svga_s3" pour la config de dosbox, mais ce serait sûrement mieux de le faire dans les configs par défaut (vu que l'option "vga" est obsolète)

PS4: GoG fourni 3 config dosbox : single, client & server. Je sais pas si le mode réseau est envisageable (j'y connais pas grand chose, c'est avec ipx, et ça ne m'a jamais trop réussi jusque là)... Mais ya pt'être quelque chose à essayer ?

petch Zaterdag 25 Mei 2013 om 9:43
petch
Developer

En un mot : polymorphisme.

Quelle que soit la version de "Wine" installée, POL_Wine appelle ~/.PlayOnLinux/wine/architecture/wineversion/bin/wine.
Mais dans le cas de 1.4-dos_support_0.6, ce bin/wine est un petit broker en Bash qui détermine si le paramètre est un programme MS-DOS ou Windows, et passe le contrôle à soit DOSBox, soit Wine :
[code language=playonlinux]
$ cat ~/.PlayOnLinux/wine/linux-x86/1.4-dos_support_0.6/bin/wine
#!/bin/bash

# Is it a windows or a dos binary ?

if [ "$1" = "--force-dos" ]; then
wrapper="dosbox-wrapper"
shift
fi

if [ "$1" = "--force-win" ]; then
wrapper="wine.real"
shift
fi

windows_app="$1"

if [ ! -e "$wrapper" ]; then
if [ ! -e "$windows_app" ] ; then
# We are in path, it's wine
wrapper="wine.real"
elif [ "$(file "$1" | grep 'DOS executable')" = "" -a "$(file "$1" | grep 'DOS batch')" = "" ]; then
wrapper="wine.real"
else
wrapper="dosbox-wrapper"
fi
fi

exec "$wrapper" "$@"
exit 0
[/code]

Aangepast door petch

Xodetaetl Dinsdag 28 Mei 2013 om 18:02
XodetaetlAnonymous

TonyFlow, j'ai enfin eu le temps et l'occasion de tester tes modifs et en fin de compte je pense que ce n'est pas une bonne idée d'activer le mode "haute-résolution" par défaut, pour la triste raison que ça rame sur mon PC, qui n'est pas une vieillerie - loin de là.

Par contre ça vaut le coup d'informer les gens de l'existence de ce raccourci.
J'ai donc corrigé ta correction, j'enverrai ça sur le dépôt git de Petch quand ça aura bien mûri. :)

PS3: j'ai ajouté un "dosbox_machine=svga_s3" pour la config de dosbox, mais ce serait sûrement mieux de le faire dans les configs par défaut (vu que l'option "vga" est obsolète)

Quote from TonyFlow
Je ne l'ai pas laissé parce qu'il n'y a pas de raison de s'écarter de l'option par défaut pour ce script, il faudrait juste corriger la config Dosbox générale. En attendant ça fonctionne correctement donc pas la peine de faire un workaround, à mon avis.

PS4: GoG fourni 3 config dosbox : single, client & server. Je sais pas si le mode réseau est envisageable (j'y connais pas grand chose, c'est avec ipx, et ça ne m'a jamais trop réussi jusque là)... Mais ya pt'être quelque chose à essayer ?

Quote from TonyFlow
Il y a très certainement moyen de faire fonctionner le multi, d'après mon inspection rapide. Je m'en occuperai certainement un de ces jours (pour les autres jeux que j'ai scripté également), mais si tu veux me précéder, n'hésite pas. ;)

Aangepast door Xodetaetl

TonyFlow Woensdag 29 Mei 2013 om 21:15
TonyFlow

en fin de compte je pense que ce n'est pas une bonne idée d'activer le mode "haute-résolution" par défaut, pour la triste raison que ça rame sur mon PC, qui n'est pas une vieillerie - loin de là.

Quote from Xodetaetl

Wow... dingue ça :/

Si c'est pas trop indiscret, tu as quel type de matériel ?

Je crois avoir lu que la version DOS de DKeeper n'avait aucune accélération matérielle (contrairement à Dkeeper95.exe qui devait utiliser du direct3d, mais qui n'est pas fournit avec la version GoG). C'est peut-être là l'explication (perso j'ai un i5-2500, donc effectivement, à défaut d'avoir une vraie carte gfx, je ne manque pas de ressource cpu).

Faudrait que je teste KeeperFX prochainement, quand je trouverais le temps... D'ailleurs pt'être que ce serait intéressant aussi à packager pour PoL ?
Xodetaetl Woensdag 29 Mei 2013 om 22:18
XodetaetlAnonymous

Si c'est pas trop indiscret, tu as quel type de matériel ?

Quote from TonyFlow
C'est un portable LDLC gamer bas de gamme acheté il y a quatre mois avec Pentium 2020M et GeForce GTX 660M. Donc une CG correcte mais un processeur qui ne crache pas des flammes.

Je crois avoir lu que la version DOS de DKeeper n'avait aucune accélération matérielle (contrairement à Dkeeper95.exe qui devait utiliser du direct3d, mais qui n'est pas fournit avec la version GoG). C'est peut-être là l'explication (perso j'ai un i5-2500, donc effectivement, à défaut d'avoir une vraie carte gfx, je ne manque pas de ressource cpu).

Quote from TonyFlow
C'est exact, la version DOS est sans accélération matérielle. J'ai la version D3D en CD mais celle-ci ne passe pas sous Wine.

Faudrait que je teste KeeperFX prochainement, quand je trouverais le temps... D'ailleurs pt'être que ce serait intéressant aussi à packager pour PoL ?

Quote from TonyFlow
J'ai testé et ça marche bien, sauf le menu très lent. Par contre le "mod" contient pour le moment des fichiers originaux de DK sous copyright, donc sa distribution n'est pas légale. Je ne sais pas si en proposant un script pour télécharger et installer cette affaire, PoL est dans son bon droit.
Personnellement je n'y vois pas de mal vu que l'installation de KeeperFX nécessite le CD (ou l'image CD de GOG dans notre cas) d'installation du jeu original.

Aangepast door Xodetaetl

Xodetaetl Woensdag 29 Mei 2013 om 23:19
XodetaetlAnonymous

Finalement j'ai remarqué qu'en mettant un nombre de cycles CPU fixe, ça élimine les pics de ralentissements que j'avais.

Du coup, va pour le mode haute-res par défaut + message pour indiquer comment le désactiver si c'est trop lent.
petch Donderdag 30 Mei 2013 om 0:01
petch
Developer

(à noter que certains jeux DOS peuvent utiliser Glide, mais que cela demande une version de DOSBox patchée pour fournir cette API, ce qui n'est pas le cas de la version utilisée dans 1.4-dos_support_0.6:
http://www.playonlinux.com/fr/issue-1374.html )
Xodetaetl Donderdag 30 Mei 2013 om 0:12
XodetaetlAnonymous

Bon à savoir.
Pour ce qui est de Dungeon Keeper, il n'y a pas de version Glide mais une version Direct3D, donc Windows.
TonyFlow Donderdag 30 Mei 2013 om 20:38
TonyFlow

Finalement j'ai remarqué qu'en mettant un nombre de cycles CPU fixe, ça élimine les pics de ralentissements que j'avais.

Du coup, va pour le mode haute-res par défaut + message pour indiquer comment le désactiver si c'est trop lent.

Quote from Xodetaetl


Voilà une bonne nouvelle ! Merci pour tes tests ;)