Connaissances / Guides /

Pourquoi les fichiers GUI de Ren'Py semblent inutilisés — mais les supprimer casse votre jeu

Mars 2026 4 min de lecture Gestion des assets
Ren'Py Analyse d'assets gui/ Nettoyage sécurisé

Si vous avez déjà exécuté un scanner d'assets sur un projet Ren'Py, vous avez probablement vu ceci : des dizaines de fichiers dans game/gui/ signalés comme non référencés. Ils n'apparaissent ni dans script.rpy ni dans aucun autre fichier .rpy. Un scanner naïf les traite comme du poids mort.

Les supprimer casse silencieusement l'interface de votre jeu. Voici pourquoi.

Comment Ren'Py charge les fichiers GUI

Les projets Ren'Py standards chargent leur interface via gui.rpy — un fichier généré fourni avec chaque nouveau projet. Ce fichier contient des centaines d'affectations de variables comme celles-ci :

## The images used for the main and game menus. define gui.main_menu_background = "gui/main_menu.png" define gui.game_menu_background = "gui/game_menu.png" ## The image used for the window background. define gui.window_background = Transform("gui/window.png", xsize=gui.width) ## Buttons define gui.button_image = "gui/button/idle.png" define gui.button_hover_image = "gui/button/hover.png"

Aucune de ces affectations n'est une instruction image. Aucune n'utilise show ou scene. Un scanner qui recherche ces mots-clés ne trouvera jamais gui/window.png, gui/main_menu.png, ni aucun des dizaines d'autres chemins affectés via les variables gui.*.

Le moteur lit gui.rpy au démarrage et charge ces images directement. Votre script n'est jamais impliqué.

Le problème fondamental L'analyse des scripts est la mauvaise technique pour les assets gérés par le moteur. L'absence d'un fichier dans les sources .rpy ne vous dit rien sur le fait que le moteur essaiera de le charger à l'exécution.

Qu'y a-t-il réellement dans game/gui/

Un projet Ren'Py par défaut est livré avec au moins 30 fichiers dans gui/, couvrant chaque couche visuelle du système d'interface intégré :

  • Arrière-plans des menus (main_menu.png, game_menu.png)
  • Cadres de la fenêtre de dialogue (window.png, frame.png)
  • États des boutons (button/idle.png, button/hover.png, button/selected_idle.png)
  • Graphiques de barres de défilement et de curseurs
  • États des cases à cocher et boutons radio
  • Images de remplissage et de vide pour les barres

Ces éléments sont chargés de manière inconditionnelle au démarrage de votre jeu — pas lorsqu'un joueur visite un label spécifique ou déclenche une scène particulière. Ils font partie de la séquence de démarrage du moteur.

Ce qui casse si vous les supprimez Les images GUI manquantes produisent des erreurs Missing image immédiatement au lancement — avant que le joueur ait vu votre scène d'ouverture. Comme ces images sont chargées par le propre code d'initialisation du moteur, la trace de la pile peut même ne pas pointer vers quoi que ce soit de reconnaissable dans vos fichiers de projet.

Le même problème s'applique aux autres chemins gérés par le moteur

gui/ est l'exemple le plus visible, mais Ren'Py maintient plusieurs autres chemins qui ne sont jamais référencés par les scripts écrits par l'utilisateur :

  • renpy/ — Bibliothèque principale de Ren'Py et assets internes
  • common/ — Code de la bibliothèque commune Ren'Py
  • launcher/ — Assets spécifiques au launcher
  • fonts/ — Fichiers de police pouvant être chargés indirectement via config.font_* ou des définitions de styles

Tout outil qui traite « non référencé dans un fichier .rpy » comme équivalent à « sûr à supprimer » produira des faux positifs sur tous ces chemins.

Comment BranchPy gère cela

BranchPy classifie chaque fichier avant de vous le présenter. Les fichiers dans les chemins gérés par le moteur reçoivent une classification PROTÉGÉ et sont exclus de tout ensemble actionnable — que ces fichiers apparaissent ou non dans les scripts.

La protection est appliquée à deux couches :

  • Aucune case à cocher n'est rendue pour les fichiers protégés dans l'onglet Non référencés. Il n'y a aucun élément d'interface à sélectionner.
  • Le gestionnaire de suppression valide indépendamment l'ensemble de fichiers avant qu'il ne soit envoyé où que ce soit, extrayant tout chemin protégé même s'il apparaissait dans l'ensemble.

L'intention est qu'un seul bug n'importe où dans la couche de rendu ne puisse pas entraîner la suppression d'un fichier géré par le moteur.

Ce que BranchPy affiche à la place Les fichiers protégés apparaissent dans le navigateur de médias avec une icône 🛡️ et une chaîne de raison — par exemple, « Géré par le moteur Ren'Py : système GUI » — afin que vous compreniez pourquoi ils sont classifiés ainsi, pas seulement qu'ils le sont.

Ce que cela signifie pour votre projet

Si vous évaluez un scanner d'assets pour un travail Ren'Py, la question clé à poser est :

« Cet outil connaît-il les chemins qui sont chargés par le moteur, pas seulement les chemins référencés par mes scripts ? »

Si la réponse est non, chaque résultat « fichier inutilisé » qu'il produit est un faux positif potentiel dans les parties de votre projet les plus critiques pour que votre jeu se lance.

Résumé

  • Les fichiers game/gui/ sont chargés par le système GUI de Ren'Py au démarrage, pas par vos scripts.
  • Les scanners basés sur les scripts les signaleront toujours comme non référencés — c'est une limitation du scanner, pas un problème de projet.
  • Les supprimer casse le jeu immédiatement, avant que le moindre code écrit par l'auteur ne s'exécute.
  • La bonne approche est de classifier et protéger ces chemins avant de présenter les résultats, pas après.