Ajouter un thème imposait autrefois de modifier quatre endroits à la main — la palette du générateur, la forme, un skin, une ressource de préréglage. Une seule commande les met désormais tous en place.
python3 addons/gohud/tools/new_theme.py neon --from scifi_dark --title "Neon"
python3 addons/gohud/tools/make_theme.py neon # thème .tres + illustrations des contrôles
godot --headless --path . --import # importe les nouvelles illustrations une fois
GoUi.use_preset(&"neon") # terminé — il apparaît aussi dans le sélecteur
La première ligne écrit themes/palettes/neon.json et themes/presets/neon.tres. Le
JSON porte chaque valeur du thème dont il hérite, entièrement détaillée : il sert donc aussi de liste
de ce que vous pouvez changer — supprimez une clé pour garder la valeur du parent, écrivez-en une pour la
redéfinir. Les préréglages sont trouvés en parcourant themes/presets/ : aucun code de
registre à modifier — la liste déroulante du paramètre de projet le reprend elle aussi.
Ce que vous pouvez changer — sur une seule page
| Où | Quoi | Comment |
|---|---|---|
from | le thème parent | dark · light · scifi_dark · medieval_dark · … ou un autre thème JSON. Les clés omises héritent de ses valeurs ; un cycle d'héritage échoue |
palette | le fond · trois surfaces · la bordure · trois tons de texte · l'accent · quatre couleurs d'état · le voile · l'ombre · la gouttière des barres | "#RRGGBB", l'alpha sous la forme "#RRGGBB@0.35" |
couleurs vives réservées au remplissage *_vivid | gardent les barres saturées même quand la couleur du texte doit s'assombrir — omettez-en une et le générateur le signale | |
| lisibilité | pas réglée à la main. Le texte, les bordures, l'accent et le libellé posé dessus sont poussés par le générateur jusqu'à franchir les seuils — ne changez que l'accent et les vérifications passent toujours | |
shape | kind | flat (arrondi) · cut (coins chanfreinés) · medieval (cadres forgés) |
| tailles | radius · radius_small · radius_large · gap · gap_small · gap_large · padding · button_height · button_padding[4] — les tokens suivent, si bien que les panneaux et les calculs des widgets ne divergent jamais | |
cut uniquement | cut_ratio · cut_max · corners (diagonal|all) · glow · edge | |
medieval uniquement | material (0 fer · 1 cuir · 2 parchemin) · grain_alpha · ornament_scale · bevel_strength · fonts — title, subtitle, caption, body, button associés à des fichiers de police res:// internes à l'add-on | |
skin | base — la famille pour les endroits que le code dessine lui-même (joystick, emplacements, badges, anneau du repère guidé, puces, séparateurs) | default · scifi · medieval |
dials — les nombres de ces endroits : largeur et teinte de la bordure d'un emplacement, marge intérieure des badges, opacité des puces et des alertes, largeur et opacité de l'anneau du joystick, tailles des chanfreins science-fiction, halo et crochets | Chaque valeur du parent est détaillée dans le JSON. Le générateur les écrit dans themes/skins/gohud_skin_<id>.tres — aucun code de skin n'est touché. Ce n'est que pour changer les dessins eux-mêmes que vous lancez --new-skin, qui échafaude une sous-classe de GoSkin | |
icons | le jeu d'icônes | un chemin res:// vers une ressource GoIconSet — conservé depuis un parent JSON s'il est omis |
dark · title | comment le sélecteur l'affiche | booléen · chaîne |
Toutes les molettes
Le tableau ci-dessous est rempli par tools/make_site.py directement depuis les lignes
@export des scripts de skin — ajoutez une molette ou changez une valeur par défaut et le tableau
suit. Utilisez ces noms sous skin.dials dans le JSON. Une molette dont la valeur par défaut
s'écrit 14 est un entier, celle qui s'écrit 10.0 un flottant — écrivez l'une ou
l'autre forme dans le JSON et le générateur convertit vers le type du script.
Skin par défaut GoSkin — 17
| Molette | Valeur par défaut | Ce qu'elle règle |
|---|---|---|
chip_fill_alpha | 0.16 | Opacité du remplissage du panneau d'une puce. |
chip_edge_alpha | 0.45 | Opacité de l'arête du panneau d'une puce. |
alert_tint | 0.1 | À quel point le panneau d'une boîte d'alerte est teinté vers sa couleur d'état. |
slot_tint_lit | 0.24 | Teinte d'accent du panneau d'un emplacement rapide pendant son temps de recharge. |
slot_tint_idle | 0.08 | Teinte d'accent du panneau d'un emplacement rapide au repos. |
slot_border_lit | 2 | Largeur (dp) de la bordure d'un emplacement rapide pendant son temps de recharge. |
slot_border_idle | 1 | Largeur (dp) de la bordure d'un emplacement rapide au repos. |
badge_pad_x | 5 | Marge intérieure horizontale (dp) d'un badge (quantité, temps restant). |
badge_pad_y | 1 | Marge intérieure verticale (dp) d'un badge. |
badge_edge_alpha | 0.6 | Opacité de l'arête du panneau d'un badge. |
float_shadow_alpha | 0.45 | Opacité de l'ombre des cartes flottantes (repère guidé, carte d'invite). |
float_shadow_size | 14 | Flou (dp) de l'ombre des cartes flottantes. |
float_shadow_lift | 4 | Décalage vers le bas (dp) de l'ombre d'une carte flottante. |
float_glow_size | 10.0 | Distance (dp) du halo d'un panneau flottant qui rayonne au lieu de projeter une ombre, comme le panneau chanfreiné science-fiction. |
joystick_base_alpha | 0.42 | Opacité du disque de base du joystick. |
joystick_ring_alpha | 0.45 | Opacité de l'anneau du joystick. |
joystick_ring_width | 2.0 | Largeur (dp) de l'anneau du joystick. |
Skin science-fiction GoSkinSciFi — 10
| Molette | Valeur par défaut | Ce qu'elle règle |
|---|---|---|
cut_chip | 7.0 | Taille (dp) du chanfrein du panneau d'une puce. |
cut_skeleton | 5.0 | Taille (dp) du chanfrein d'un panneau squelette. |
cut_alert | 8.0 | Taille (dp) du chanfrein d'une boîte d'alerte. |
cut_segment | 8.0 | Taille (dp) du chanfrein d'un contrôle segmenté. |
cut_slot | 6.0 | Taille (dp) du chanfrein du panneau d'un emplacement rapide. |
cut_disc_ratio | 0.24 | Chanfrein des avatars et des disques = diamètre × ce rapport. |
slot_glow_alpha | 0.45 | Opacité du halo d'un emplacement dont le temps de recharge s'écoule. |
slot_glow_size | 6.0 | Distance (dp) du halo d'un emplacement dont le temps de recharge s'écoule. |
bracket_arm | 12.0 | Longueur (dp) des branches du crochet de visée du repère guidé. |
bracket_thickness | 2.0 | Épaisseur (dp) du trait du crochet de visée du repère guidé. |
Skin médiéval GoSkinMedieval — 5
| Molette | Valeur par défaut | Ce qu'elle règle |
|---|---|---|
slot_radius | 4.0 | Rayon (dp) des coins du cadre d'emplacement rapide médiéval. |
leather_grain_alpha | 0.035 | Opacité des discrètes marques de cuir à l'intérieur des emplacements rapides. |
ornament_scale | 1.0 | Échelle des décorations métalliques aux coins des emplacements rapides. Les cadres de menu utilisent shape.ornament_scale. |
bevel_strength | 0.18 | Intensité du reflet métallique le long des arêtes des emplacements rapides. |
slot_rivets | 1 | Afficher de petits rivets métalliques sur les emplacements rapides : 0 les masque, 1 les montre. |
Dériver le skin (facultatif)
Seul ce que le thème et la forme n'atteignent pas — l'hexagone du joystick, les badges des emplacements,
le crochet de visée du repère guidé — vit dans un skin. Dérivez GoSkin, ne redéfinissez que ces
méthodes, et faites pointer la clé skin du JSON vers cette ressource. Un thème qui ne change
que les couleurs saute cette étape.
tools/check_scaffold.sh crée un thème jetable à chaque
exécution — change l'accent, met le rayon à 4 — et vérifie la génération, la propagation des tokens et un
passage de contraste sans faute avant de le supprimer. Dès la première exécution, un thème dont seul l'accent
avait changé échouait sur 8 paires : le générateur poussait les couleurs de texte mais utilisait
l'accent tel quel. Il pousse désormais l'accent et le libellé posé dessus.