title: Full Tilt! Pinball
date: 2018-03-04
tags: Linux, wine, Jeux, MIDI
url: full-tilt-pinball
slug: full-tilt-pinball


## Full Tilt! Pinball

![Photo de la boîte du jeu. Source : wikipedia](/images/fulltilt/cover.jpg)

Ce jeu de flippers est sorti en 1995, et comprenait 3 tables :

 * Dragon's Keep
 * Skulduggery
 * Space Cadet

Si le nom "Space Cadet" vous dit quelque chose, c'est normal. J'en parlerai un
peu plus tard.

Full Tilt! Pinball a été développé par Cinematronics, et publié par Maxis (Sim
City, Les Sims, …)

### Points communs

Les trois tables sont en fait trois jeux distincts, situés dans des
répertoires séparés. Le disque contient les jeux pour Windows 3.1 (16 bits) et
Windows 95 (32 bits). La version Windows 95 fonctionne également sous Windows
XP.

La résolution du jeu n'est pas fixe. On peut choisir 640x480, 800x600 et
1024x768.

Les sons sont au format Wave PCM 11 kHz (donc pas vraiment d'excellente
qualité), et les musiques sont au format MIDI – un synthétiseur MIDI ou un
expandeur MIDI est alors nécessaire pour pouvoir entendre les musiques.

Au niveau réalisme, il ne faut pas s'attendre à une simulation parfaite de la
physique (Pour ça, il vaut mieux jouer à 3D Pro Pinball, Timeshock! par
exemple). Le comportement est à peu pros cohérent dans Space Cadet, un peu
hasardeux dans Skulduggery et complètement irréaliste dans Dragon's Keep.
D'ailleurs, la bille a parfois tendance à disparaître de l'écran, voire à se
téléporter, ce qui est plutôt pénible.

Les contrôles sont simples :

 * une touche pour lancer la bille
 * deux touches pour actionner les flippers
 * trois touches pour faire bouger le flipper vers la gauche, la droite ou vers le bas, pour modifier le comportement de la bille.

### Les différentes tables

#### Dragon's Keep

![Capture d'écran de Dragon's Keep, sous Windows 3.1 - Dosbox](/images/fulltilt/DragonsKeep.png)

Cette table représente un univers de Fantasy, avec différentes « missions »,
comme « trouver l'antre du dragon », « sauver une jeune vierge », « vaincre le
dragon », « voler le trésor gardé par le dragon », avec des objets à collecter
comme des sorts, des armes et des armures.

#### Skulduggerry

![Capture d'écran de Skuldugerry, sous Windows 3.1 - Dosbox](/images/fulltilt/Skulduggery.png)

Cette table représente un univers de pirates du 17e siècle (caraïbes). Au
moment de lancer la bille, une liste de « modes » défile. Je ne pourrai pas en
dire plus, je n'ai pas tout à fait compris comment cela fonctionnait.

#### Space Cadet

![Capture d'écran de Space Cadet, sous Windows 3.1 - Dosbox](/images/fulltilt/SpaceCadet.png)

Cette table représente un univers spatial. Le but est de monter en grade
(cadet, sous-officier, lieutenant…), en effectuant différentes missions, comme
attaquer les bumpers, gravir la rampe de lancement, recharger (régulièrement)
en carburant.

### Pinball 3D pour Windows - Cadet de l'espace

![Capture d'écran de Pinball 3D pour Windows - Cadet de l'espace, sous Windows ME Millenium Edition](/images/fulltilt/3DPinball.png)

Cette version, intégrée dans Windows NT4, 2000, ME et XP (32 bits), est une
version légèrement réduite de Full Tilt! Space Cadet.

En effet, il n'y a plus qu'une seule musique, la résolution est limitée à
640x480. Il n'y a plus de « ball saved » lorsqu'une mission est accomplie.

D'autres modifications, d'ordre cosmétique sont également visibles (couleurs
de texte, bannière, police de caractère…)

Contrairement à mes souvenirs, cette version n'était pas incluse dans Windows
95. Elle était intégrée dans l'extension Microsoft Plus! pour Windows 95,
vendue séparément.

### Jouer au jeu

Pour cela, il y a plusieurs méthodes

#### Nativement

Il suffit d'insérer le disque du jeu, et de l'installer sur n'importe quel PC
fonctionnant sous Windows 3.1, 95, 98, ME ou XP.

À noter : À partir de Windows 95, le synthétiseur MIDI utilisé pour jouer les
musiques est le SoftSynth Microsoft GM/GS, basé sur une version réduite du
SC-55. Sous Windows XP, on peut installer le synthétiseur Yamaha XG WDM (basé
sur le MU50), qui est de meilleure qualité. Sinon, on peut utiliser un
expandeur Akai, Roland, Yamaha, Korg… en MIDI (via MPU 401, port manette 15
broches et un adaptateur, interface MIDI USB…).

#### Dosbox

Si Windows 3.1 ou 95 est installé dans Dosbox, il suffit d'accéder au lecteur
CD-ROM depuis Windows puis installer le jeu. À noter : si le lecteur n'est pas
accessible, on peut copier tout le contenu du disque dans un répertoire
accessible depuis Dosbox.

#### Wine

Le jeu fonctionne également avec Wine. Il suffit de copier la version Windows
95 dans un répertoire situé dans le $WINEPREFIX.

La principale difficulté avec Wine, c'est pour avoir les musiques. L'une des
solutions est l'utilisation de Fluidsynth (déjà évoqué avec Touhou08, cf.
<https://blog.chibi-nah.fr/touhou-08-imperishable-night-sous-gnu-linux> ).

Bien entendu, cela n'a pas fonctionné, parce que mon matériel a évolué depuis
(plus utilisation de jack2 comme serveur de son principal).

Heureusement, la documentation WINE est très claire et à jour.
<https://wiki.winehq.org/MIDI>

Donc, lancement de l'un des flippers (ici Space Cadet) via la ligne de
commande :



   WINEDEBUG=+msacm wine CADET.EXE


Puis observation de ce qui arrive dans le terminal (attention, ça défile très
très vite dès que la musique commence à jouer).

Dans mon cas, les lignes intéressantes sont les suivantes :



   008e:trace:msacm:MIDIMAP_FindPort L"SC-8820 - SC-8820 Part A"
   008e:trace:msacm:MIDIMAP_FindPort L"SC-8820 - SC-8820 Part B"
   008e:trace:msacm:MIDIMAP_FindPort L"jack_midi - port"
   008e:trace:msacm:MIDIMAP_FindPort L"a2jmidid - port"
   008e:trace:msacm:MIDIMAP_FindPort L"Midi Through Port-0"
   008e:trace:msacm:MIDIMAP_FindPort L"USB Uno MIDI Interface MIDI 1"
   008e:trace:msacm:MIDIMAP_FindPort L"SC-8820 - SC-8820 MIDI"
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 0] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 1] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 2] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 3] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 4] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 5] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 6] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 7] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 8] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 9] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[10] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[11] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[12] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[13] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[14] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[15] => 0


Intéressons-nous d'abord à MIDIMAP_FindPort. On constate d'abord qu'il y a 7
sorties MIDI.

Si on compare avec la commande aconnect -o, on n'obtient pas du tout le même
résultat



   client 14: 'Midi Through' [type=noyau]
       0 'Midi Through Port-0'
   client 20: 'USB Uno MIDI Interface' [type=noyau,card=1]
       0 'USB Uno MIDI Interface MIDI 1'
   client 24: 'SC-8820' [type=noyau,card=2]
       0 'SC-8820 Part A  '
       1 'SC-8820 Part B  '
       2 'SC-8820 MIDI    '


Les sorties ne sont pas dans le même ordre, et on obtient que les sorties pour
ALSA. Celles de jack n'apparaissent pas.

Donc, reprenons ce qui est sorti de wine, et numérotons les sorties, en
commençant par 0 et non pas par 1 :



   0 : "SC-8820 - SC-8820 Part A"
   1 : "SC-8820 - SC-8820 Part B"
   2 : "jack_midi - port"
   3 : "a2jmidid - port"
   4 : "Midi Through Port-0"
   5 : "USB Uno MIDI Interface MIDI 1"
   6 : "SC-8820 - SC-8820 MIDI"


Si on regarde le mappage des canaux MIDI, on constate ceci :



   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 0] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 1] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 2] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 3] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 4] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 5] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 6] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 7] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 8] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 9] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[10] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[11] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[12] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[13] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[14] => 0
   008e:trace:msacm:MIDIMAP_LoadSettings chnMap[15] => 0


Les 16 canaux sont assignés à la sortie 0, qui correspond à "SC-8820 - SC-8820
Part A". Là, cela tombe bien, parce que j'ai un expandeur (matériel) qui
correspond. Si ce n'était pas le cas (par exemple, "jack_midi - port"), cela
poserait quelques problèmes, du genre pas de son.

Admettons que je veuille que la sortie par défaut soit "USB Uno MIDI Interface
MIDI 1", il faut donc que wine utilise la sortie 5.

Pour cela, sortons l'éditeur de base de registre.



   wine regedit


Si nécessaire, créer la clef suivante :



   HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Multimedia\MIDIMap


Si nécessaire, créer la valeur chaîne avec le nom suivant :



   CurrentInstrument


Puis éditer cette valeur chaîne, en saisissant #5 comme valeur.

![Capture d'écran de Regedit, montrant le chemin complet vers la clé, et une
fenêtre montrant le changement de la valeur de la chaîne
CurrentInstrument.]/images/fulltilt/regedit.png)

Relancer le jeu, et vérifier que la nouvelle sortie est bien prise en compte



   009a:trace:msacm:MIDIMAP_LoadSettings chnMap[ 0] => 5
   009a:trace:msacm:MIDIMAP_LoadSettings chnMap[ 1] => 5
   009a:trace:msacm:MIDIMAP_LoadSettings chnMap[ 2] => 5
   009a:trace:msacm:MIDIMAP_LoadSettings chnMap[ 3] => 5
   009a:trace:msacm:MIDIMAP_LoadSettings chnMap[ 4] => 5
   009a:trace:msacm:MIDIMAP_LoadSettings chnMap[ 5] => 5
   009a:trace:msacm:MIDIMAP_LoadSettings chnMap[ 6] => 5
   009a:trace:msacm:MIDIMAP_LoadSettings chnMap[ 7] => 5
   009a:trace:msacm:MIDIMAP_LoadSettings chnMap[ 8] => 5
   009a:trace:msacm:MIDIMAP_LoadSettings chnMap[ 9] => 5
   009a:trace:msacm:MIDIMAP_LoadSettings chnMap[10] => 5
   009a:trace:msacm:MIDIMAP_LoadSettings chnMap[11] => 5
   009a:trace:msacm:MIDIMAP_LoadSettings chnMap[12] => 5
   009a:trace:msacm:MIDIMAP_LoadSettings chnMap[13] => 5
   009a:trace:msacm:MIDIMAP_LoadSettings chnMap[14] => 5
   009a:trace:msacm:MIDIMAP_LoadSettings chnMap[15] => 5


Normalement, il n'y a pas besoin de vérifier, on est censé entendre la musique
:)

### Vidéos

Ci dessous, trois vidéos montrant les différentes table, en mode
démonstration.

À noter : les jeux ont été lancés via WINE 3.2 sous Debian SID. Pour la
musique, c'est un expandeur (matériel) qui est utilisé.


#### Dragon's Keep

<iframe width="560" height="315" sandbox="allow-same-origin allow-scripts allow-popups" src="https://tube.nah.re/videos/embed/103c6a18-bf5b-4d6d-9a10-0a12e357b9d8" frameborder="0" allowfullscreen></iframe>

#### Skulduggery

<iframe width="560" height="315" sandbox="allow-same-origin allow-scripts allow-popups" src="https://tube.nah.re/videos/embed/931a9b45-916f-4d6f-9db6-75be393f8229" frameborder="0" allowfullscreen></iframe>

#### Space Cadet

<iframe width="560" height="315" sandbox="allow-same-origin allow-scripts allow-popups" src="https://tube.nah.re/videos/embed/1b747888-e6dc-4c27-ad87-60d31b00c099" frameborder="0" allowfullscreen></iframe>

### Conclusion

Pour conclure, avec un peu d'efforts, on peut toujours faire fonctionner ces
flippers en 2018, que cela soit nativement (avec un vieux PC) ou via
l'émulation (dosbox), voire l'exécution (via wine) sous GNU/Linux.

Pour la question « Où peut-on trouver ces jeux », mis à part les sites de
ventes de produits d'occasion ou les brocantes, je ne vois pas vraiment où on
peut le trouver.

### Remerciements

L'anar geek, pour avoir évoqué 3D Pinball sous Windows XP, ce qui n'a donné
l'envie de ressortir la version « originale ».

Trit' pour m'avoir indiqué que non, 3D Pinball Space Cadet n'était pas intégré
à Windows 95.