Se servir des variables
Afficher le nom d’un jeu, choisir une image selon le système.
Une variable s’écrit ${…} et Recalbox la remplace au moment d’afficher.
<text name="titre">
<text>Bienvenue sur ${system}</text>
</text>
→ « Bienvenue sur Super Nintendo ».
Dans un chemin d’image : le plus utile
<image name="console" extra="true">
<path>${root}/data/arts/consoles/${system.name}.png</path>
</image>
Une seule ligne, et chaque système affiche sa propre image. Il suffit que les fichiers portent le nom interne du système : snes.png, megadrive.png…
Où chaque variable fonctionne
C’est la règle qui surprend le plus, et elle vient du moteur :
| Famille | Vues où elle est résolue |
|---|---|
${system…} | Systèmes et Liste de jeux — une liste appartient toujours à un système |
${game…} | Liste de jeux et Écran de veille — là où il y a un jeu survolé |
${recalbox…} ${settings…} ${hardware…} ${display…} | partout |
Une variable employée là où elle n’existe pas n’est pas remplacée : le texte brut s’affiche tel quel, ${game.name} compris. Le studio ne propose que celles qui fonctionnent sur la vue en cours.
Quand la ligne survolée n’est pas un jeu
Dans la liste de jeux, le curseur ne traverse pas que des jeux : il passe aussi sur les dossiers et sur les en-têtes de tri, ces intertitres que Recalbox ajoute dès que la liste est triée autrement que par ordre alphabétique. Les ${game…} répondent quand même, mais ils décrivent alors une ligne qui n’a pas de jeu :
| Ligne survolée | ${game.name} | ${game.releasedate} | ${game.file.name} |
|---|---|---|---|
| un jeu | son nom | sa date de sortie | le fichier de la rom |
| un dossier | le nom du dossier | INCONNU | le nom du dossier |
| un en-tête de tri | rien | INCONNU | rien |
Un composant qui affiche une donnée du jeu n’a donc plus rien à dire sur ces lignes — et il y reste pourtant affiché, par-dessus le nom du dossier que Recalbox écrit au même moment. Limitez-le aux lignes de jeu :
<text name="sortie" extra="true" showIf="game">
<text>Sortie : ${game.releasedate}</text>
</text>
Le studio s’en charge : dès qu’un composant emploie une donnée du jeu, sa visibilité passe sur « un jeu ». L’onglet Visibilité du composant permet de la rouvrir aux dossiers et aux en-têtes quand c’est voulu.
${root} — à ne jamais oublier
${root} désigne la racine du thème sélectionné. Sans lui, les chemins sont relatifs au fichier qui les écrit, et votre thème casse dès qu’on le range autrement.
<path>${root}/data/arts/fond.jpg</path> <!-- ✅ -->
<path>../data/arts/fond.jpg</path> <!-- fragile -->
Les anciennes variables $…
Vous croiserez dans de vieux thèmes des variables sans accolades :
| Ancienne | Ce qu’elle donne | Équivalent actuel |
|---|---|---|
$system | le nom court — « snes » | ${system.name} |
$theme | le dossier du thème | ${root} |
⚠️ $system et ${system} ne donnent pas la même chose : le premier rend « snes », le second « Super Nintendo ». Elles sont encore acceptées, mais dépréciées : n’écrivez plus que la forme à accolades.
Le tirage au sort
<path>${random.between(fond1.jpg,fond2.jpg,fond3.jpg)}</path>
<fontSize>${random.range(1,10)}</fontSize>
random.between choisit une valeur au hasard dans la liste, random.range un nombre entre deux bornes. Le tirage a lieu au chargement du thème, pas à chaque affichage.