Das Forum

Ultima 8 (GoG)

Autor Antworten
Xodetaetl Wednesday 8 May 2013 at 21:09
XodetaetlAnonymous

Mon premier script, basé sur du code de Petch. Retours bienvenus. :)

Images : 22x 48x top left

[code language=playonlinux]#!/bin/bash
# Date : (2013-05-08 21-02)
# Last revision : (2013-06-02 23-54)
# Wine version used : 1.4-dos_support_0.6
# Distribution used to test : Xubuntu 12.10
# Author : Pascal Reinhard dev@ovocean.com
# Script licence : GPL v.2
# Program licence : Retail
# Depend :

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

GOGID="ultima_8_gold_edition"
PREFIX="Ultima8_gog"
WORKING_WINE_VERSION="1.4-dos_support_0.6"

TITLE="GOG.com - Ultima 8 Gold Edition"
SHORTCUT_NAME="Ultima 8: Pagan"

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 1684
POL_Debug_Init

POL_SetupWindow_presentation "$TITLE" "Origin Systems / Electronic Arts" "http://www.gog.com/gamecard/$GOGID" "Pascal Reinhard" "$PREFIX"

POL_Call POL_GoG_setup "$GOGID" "379e4ad340f878d2288080191231e9c9"
POL_Wine_SelectPrefix "$PREFIX"
POL_Wine_PrefixCreate "$WORKING_WINE_VERSION"

# Language choice
POL_SetupWindow_menu "Choose the game's language" "Language" "English-German-French" "-"
U8LANGUAGE=$APP_ANSWER

# Country code
U8LANG="en"
[ "$U8LANGUAGE" = "German" ] && U8LANG="de"
[ "$U8LANGUAGE" = "French" ] && U8LANG="fr"

# Message about hand-picking the language
if [ "$U8LANG" != "en" ]
then
    POL_SetupWindow_message "$(eval_gettext 'IMPORTANT:
    \\n\\nOn the installation window coming next, do NOT click the Options button, it would mess up the language selection.')" "$TITLE"
fi

POL_Call POL_GoG_install

GAMEROOT="$GOGROOT/Ultima VIII - Pagan/$U8LANGUAGE/"

# Dosbox config
cat <<_EOFCFG_ > "$WINEPREFIX/playonlinux_dos.cfg"
manual_mount=true
sdl_output=overlay
render_aspect=true
render_scaler=advinterp2x
cpu_cycleup=1000
cpu_cycledown=1000
mixer_prebuffer=50
sblaster_sbtype=sbpro1
sblaster_sbbase=220
sblaster_irq=5
sblaster_dma=1
dos_keyboardlayout=$U8LANG
_EOFCFG_

# Set audio default to Sound Blaster Pro
if type -t POL_unbase64 > /dev/null; then
    POL_unbase64 <<-'_EOFINF_' > "$GAMEROOT/U8.INI"
    AgAgAgUAAQADACAC/////+4U2P+EDToSCA0AAGT+3zpo/qIBCv/fOqIBlQgKABIARgAYADAAAAO4/0luc3RhbGwAdXNpYyBDb25maWd1cmE=
    _EOFINF_
   
    # Copy pilot
    rm "$GAMEROOT/AILXMI.DLL"
    cp "$GAMEROOT/SOUND/A16SBFM.DLL" "$GAMEROOT/AILXMI.DLL"
fi


cat <<_EOFAE_ > "$WINEPREFIX/drive_c/autoexec.bat"
mount D "$GAMEROOT"
_EOFAE_

cat <<_EOFBAT_ > "$GAMEROOT/Ultima8.bat"
@ECHO OFF
D:
U8.EXE
EXIT
_EOFBAT_

POL_Shortcut "Ultima8.bat" "$SHORTCUT_NAME" "$SHORTCUT_NAME.png" "" "Game;RolePlaying;"
POL_Shortcut_Document "$SHORTCUT_NAME" "$GAMEROOT/manual.pdf"

POL_SetupWindow_Close

exit 0
[/code]

Editiert von: Xodetaetl

petch Wednesday 8 May 2013 at 22:05
petch

Bonsoir Xodetaetl,
Bon en premier lieu je dois dire qu'il n'y a pas de souci majeur dans ton script, donc ce qui suit n'est que des remarques ou des suggestions. J'ai essayé d'être exhaustif, certains points peuvent n'être là que pour information :

SHORTCUT_NAME="Ultima VIII: Pagan"

Les entrées dans l'interface de PoL sont classées alphabétiquement, attention avec les chiffres romains, jusqu'à VIII ils sont compatibles avec l'ordre alphabétique, mais ensuite IX < VIII, ça pourrait être embêtant plus tard

if [ $U8LANGUAGE = "French" ]
then
    U8LANG="fr"
elif [ $U8LANGUAGE = "German" ]
then
    U8LANG="de"
else
    U8LANG="en"
fi

C'est une question de goût, mais je trouve cette syntaxe un peu volumineuse; On peut la condenser en
if [ $U8LANGUAGE = "French" ]; then
    U8LANG="fr"
elif [ $U8LANGUAGE = "German" ]; then
    U8LANG="de"
else
    U8LANG="en"
fi

Voire
U8LANG="en"
[ "$U8LANGUAGE" = "French" ] && U8LANG="fr"
[ "$U8LANGUAGE" = "German" ] && U8LANG="de"


if [ $U8LANG = "fr" -o $U8LANG = "de" ]

En fait d'un point de vue purement logique le souci va se poser pour tout les langages autres que l'anglais; J'admet que c'est un peu du coupage de cheveux en 4 (à moins que GOG dégote une nouvelle traduction d'U8), mais c'est toujours une bonne idée que le code reflète l'intention du programmeur :
if [ "$U8LANG" != "en" ]


cat <<_EOFCFG_ >> "$WINEPREFIX/playonlinux_dos.cfg"
sdl_output=Overlay
sdl_fullscreen=false
dosbox_machine=svga_s3

Il n'y a pas à l'heure actuelle d'interface permettant aux utilisateurs de régler DOSBox, mais les deux premières lignes tiennent de la configuration de DOSBox pour l'ordinateur de l'utilisateur plutôt que de la configuration de DOSBox pour le jeu.
La dernière ligne est une correction d'un micro bug de 1.4-dos_support_0.6 qui prend pour valeur par défaut dosbox_machine=vga qui n'existe pas, mais je ne suis pas convaincu que le script soit dans son rôle en essayant de corriger ça (surtout que c'est sans conséquence: DOSBox utilise alors svga_s3 comme valeur par défaut).

cat <<_EOFCFG_ >> "$WINEPREFIX/playonlinux_dos.cfg"
...
speaker_pcrate=44100
pcrate_tandyrate=44100

Une optim, que je ne fais d'ailleurs pas systématiquement moi-même, est plutôt de désactiver tout ce qui n'est pas utilisé:
cat <<_EOFCFG_ >> "$WINEPREFIX/playonlinux_dos.cfg"
...
speaker_pcspeaker=false
speaker_tandy=off
speaker_disney=false
gus_gus=false


mount D "$WINEPREFIX/drive_c/GOG Games/Ultima VIII - Pagan/$U8LANGUAGE"

Attention ici, il est impératif d'utiliser la pseudo configuration manual_mount=true pour réaliser ensuite des montages; Par défaut et pour la cohérence PoL essaye de reproduire un environnement DOSBox aussi conforme que possible à l'environnement Wine du même préfixe, et on peut se retrouver avec des conflits de lettres de lecteurs. manual_mount=true assure que seul C: est monté dans DOSBox.

# Warning about MIDI music
...

J'ai quelques scripts dans le même cas (Gabriel Knight 1, Tex Murphy Pandora
Directive, Wing Commander Privateer), je préconfigure DOSBox pour envoyer les événements MIDI sur le port 128:0 qui est le port par défaut de Timidity:
if [ "$POL_OS" = "Linux" ]; then
    # use pmidi -l or aconnect -o list to check your (emulated) midi device
    # 128:0 is just default software emulation port (usually Timidity)
    cat <<-'_EOFCFG_' >> "$WINEPREFIX/playonlinux_dos.cfg"
    midi_mididevice=alsa
    midi_midiconfig=128:0
    _EOFCFG_
fi
if [ "$POL_OS" = "Mac" ]; then
    cat <<-'_EOFCFG_' >> "$WINEPREFIX/playonlinux_dos.cfg"
    midi_mididevice=coreaudio
    _EOFCFG_
fi

Mais je reconnais n'avoir que penser à ajouter un avertissement aux utilisateurs, c'est une excellent initiative même si je me questionne sur la meilleure façon de gérer cette question de la musique MIDI en général :
- est-ce qu'il y a encore beaucoup de cartes qui gèrent la synthèse au niveau matériel ?
- est-ce qu'on peut automatiser la détection du support MIDI, par une carte ou par Timidity ?
- vers quel "How to" diriger les utilisateurs qui voudraient installer et configurer Timidity ?

Cordialement,
Pierre.

Editiert von: petch

Xodetaetl Thursday 9 May 2013 at 1:02
XodetaetlAnonymous

Merci pour ce retour exhaustif ! Je corrigerai et répondrai dès que je trouverai le temps.
Xodetaetl Thursday 9 May 2013 at 16:09
XodetaetlAnonymous


if [ $U8LANG = "fr" -o $U8LANG = "de" ]

En
fait d'un point de vue purement logique le souci va se poser pour tout
les langages autres que l'anglais; J'admet que c'est un peu du coupage
de cheveux en 4 (à moins que GOG dégote une nouvelle traduction d'U8),
mais c'est toujours une bonne idée que le code reflète l'intention du
programmeur :
if [ "$U8LANG" != "en" ]

Quote from petch
Quel amateur je fais. 8)


cat <<_EOFCFG_ >> "$WINEPREFIX/playonlinux_dos.cfg"
sdl_output=Overlay
sdl_fullscreen=false
dosbox_machine=svga_s3

Il n'y a pas à l'heure actuelle d'interface permettant aux utilisateurs de régler DOSBox, mais les deux premières lignes tiennent de la configuration de DOSBox pour l'ordinateur de l'utilisateur plutôt que de la configuration de DOSBox pour le jeu.
La dernière ligne est une correction d'un micro bug de 1.4-dos_support_0.6 qui prend pour valeur par défaut dosbox_machine=vga qui n'existe pas, mais je ne suis pas convaincu que le script soit dans son rôle en essayant de corriger ça (surtout que c'est sans conséquence: DOSBox utilise alors svga_s3 comme valeur par défaut).

Quote from petch

Tout ce qui est options Dosbox ou presque, je n'ai fait que reporter les différences entre la conf GoG et la conf par défaut. Je n'y connais pas grand chose donc tout ce que je peux faire c'est tester empiriquement les options une par une et noter s'il y a un changement en jeu...
Ce que je viens de faire pour un certain nombre d'option, dont j'ai viré un certain nombre. :)

Pour output=overlay, en opengl c'est vraiment lent chez moi, overlay beaucoup mieux. Je n'ai aucune idée de ce qu'est l'overlay techniquement cela dit... donc peut-être pas adapté pour une config par défaut.

if [ "$POL_OS" = "Linux" ]; then
    # use pmidi -l or aconnect -o list to check your (emulated) midi device
    # 128:0 is just the default software emulation port (usually Timidity)
    cat <<-'_EOFCFG_' >> "$WINEPREFIX/playonlinux_dos.cfg"
    midi_mididevice=alsa
    midi_midiconfig=128:0
    _EOFCFG_
fi
if [ "$POL_OS" = "Mac" ]; then
    cat <<-'_EOFCFG_' >> "$WINEPREFIX/playonlinux_dos.cfg"
    midi_mididevice=coreaudio
    _EOFCFG_
fi

Quote from petch
Ça m'a l'air bien mais ça gèle le script en collant ça après le premier cat.


Mais je reconnais n'avoir que penser à ajouter un avertissement aux utilisateurs, c'est une excellent initiative même si je me questionne sur la meilleure façon de gérer cette question de la musique MIDI en général :
- est-ce qu'il y a encore beaucoup de cartes qui gèrent la synthèse au niveau matériel ?
- est-ce qu'on peut automatiser la détection du support MIDI, par une carte ou par Timidity ?
- vers quel "How to" diriger les utilisateurs qui voudraient installer et configurer Timidity ?

Quote from petch
- D'après ce que je viens de voir, le support MIDI ne se fait plus, même sur les cartes son haut de gamme pour pc de bureau.
- Ah ça, c'est pas de mon domaine. :)
- Ce qu'on va trouver sur le web sera en fonction de telle ou telle distro. Le mieux c'est d'écrire un Howto "nous"-même. Je ne me propose pas pour cette tâche non plus, mes connaissances linuxiennes étant trop limitées.


Tout ce à quoi je n'ai pas répondu, je suis d'accord avec et j'ai modifié mon script en conséquence.

Editiert von: Xodetaetl

petch Thursday 9 May 2013 at 22:02
petch


Pour output=overlay, en opengl c'est vraiment lent chez moi, overlay
beaucoup mieux. Je n'ai aucune idée de ce qu'est l'overlay techniquement
cela dit... donc peut-être pas adapté pour une config par défaut.

Zitat

Il me semble que c'est le mécanisme utilisé pour faire de l'incrustation vidéo (Xv), mais je peux me tromper. En tout cas les performances des différents modes ont donc l'air de dépendre de la carte et du pilote.
Pour 1.4-dos_support_0.7, ce serait bien de pouvoir changer les paramètres par défaut avec un ~/.PlayOnLinux/playonlinux_dos.cfg, quitte à n'avoir l'outil pour l'éditer que plus tard.
(j'ai ouvert une demande de fonctionnalité : http://www.playonlinux.com/fr/issue-2258.html)


Ça m'a l'air bien mais ça gèle le script en collant ça après le premier cat.

Zitat

L'"astuce",
c'est que <<- permet de garder l'indentation de code que <<
ne permet pas... à condition d'indenter avec des caractères de
tabulation uniquement.

Pour le MIDI c'est bien le souci, c'est un
domaine un peu spécifique. Je me demande si DJYoshaBYD a des infos là
dessus, c'est un modérateur du forum anglais, un musicos, mais je doute
qu'il vienne souvent sur le forum français.
(demandé en privé)

Editiert von: petch

Xodetaetl Friday 17 May 2013 at 16:20
XodetaetlAnonymous

Il me semble que [overlay] c'est le mécanisme utilisé pour faire de l'incrustation vidéo (Xv), mais je peux me tromper. En tout cas les performances des différents modes ont donc l'air de dépendre de la carte et du pilote.

Quote from petch

La doc de Dosbox ne donne aucune info sur les types de sorties. Ce que j'ai pu retirer de sites divers (ici, ici, ici, ici) :
- "surface" ne permet pas le scaling : à exclure dans la majorité des cas.
- "overlay" offre une bonne compatibilité et rapidité.
- "ddraw", ok sous windows, mais wine ?
- "opengl", apparemment lent avec les cartes ATI (et ma Nvidia GTX 660M...). Applique du filtrage bilinéaire (floutage des pixels) en cas de scaling, donc vaut mieux utiliser le mode "openglnb" qui n'applique pas ce filtrage dans la majorité des cas je suppose.

Pour le MIDI c'est bien le souci, c'est un
domaine un peu spécifique. Je me demande si DJYoshaBYD a des infos là
dessus, c'est un modérateur du forum anglais, un musicos, mais je doute
qu'il vienne souvent sur le forum français.
(demandé en privé)

Quote from petch
Des news ?

Editiert von: Xodetaetl

petch Friday 17 May 2013 at 19:23
petch


Des news ?

Quote from Xodetaetl

Partielles. Pour lui une carte audio digne de ce nom implique de la synthèse matérielle, mais je continue de douter que ce soit le cas des cartes que l'on trouve (par défaut) dans la plupart des PC.
Pour la détection il y a sûrement possibilité de détecter timidity, avec les outils fournis avec.
Plus généralement il doit aussi être possible de détecter les séquenceurs compatibles ALSA, comme le démontre


$ aplaymidi -l      
 Port    Client name                      Port name
 14:0    Midi Through                     Midi Through Port-0
128:0    TiMidity                         TiMidity port 0
128:1    TiMidity                         TiMidity port 1
128:2    TiMidity                         TiMidity port 2
128:3    TiMidity                         TiMidity port 3

ça reste limité à ALSA mais ce serait déjà pas mal.
petch Friday 17 May 2013 at 19:50
petch

Xodetaetl Friday 17 May 2013 at 21:21
XodetaetlAnonymous

Super merci !
Xodetaetl Friday 17 May 2013 at 22:54
XodetaetlAnonymous

Evidemment j'ai un changement à faire maintenant que je ne peux plus toucher au script...
J'ai oublié d'augmenter le prebuffer dans la config dosbox, sans quoi le son a des ratées.

Mis à jour le script avec quelques autres optimisations (enlevé options qui ne servaient à rien).
petch Saturday 18 May 2013 at 0:01
petch

Mis à jour, et poussé sur git aussi, puisque tu l'utilises ;)
Xodetaetl Saturday 18 May 2013 at 19:16
XodetaetlAnonymous

Ai ajouté les images dans mon premier post.
petch Saturday 18 May 2013 at 22:05
petch

Ajoutées
(et ajoutées dans le git: https://github.com/petchema/playonlinux/commit/1e3d70123daae9a5cd4fe031d3be796b28f92dd1 )
Xodetaetl Monday 3 June 2013 at 0:22
XodetaetlAnonymous

J'ai modifié le script pour ajouter la présélection de la Sound Blaster Pro à la place du Midi par défaut. Et nettoyé le reste.

J'ai envoyé ça sur le git, petch.
petch Monday 3 June 2013 at 21:01
petch

Script mis à jour (et j'ai modifié $TITLE pour correspondre au nom exact sous lequel le script a été validé, sinon ça casse le report automatique de bugs).
Xodetaetl Monday 3 June 2013 at 22:14
XodetaetlAnonymous

Ah oui, je n'avais pas remarqué avoir donné un titre différent dans le script et sur le site...

Bon sinon, j'ai réinstallé, testé le début, tout m'a l'air en ordre donc tu peux le sortir du Testing.
petch Monday 3 June 2013 at 22:34
petch