9.4 KiB
Fiche LISIB-SPEC — Niveau N2 — Modèle prévu Opus 5.5 (orchestrateur) | utilisé claude-opus-5-5 — Agent orchestrateur (session LISIB) — Skills lp-lot, sk-protocol, lp-ue-compat
LISIB-SPEC : rendre lisibles les textes de l'interface hors Settings (2026-10-10)
Statut : approuvée par l'utilisateur le 2026-10-10 (§ 8). Écriture de code après le tag LISIB-avant et
l'instantané ; compilation sur BUILD-GO de Big Boss. Base : LISIB-T1-CART.md et son annexe LISIB-T1-inventaire.md (identifiants A1-A56, B1-B20, C1-C50).
1. Cause
La SpinBox du moteur 5.8, quand l'asset ne fixe rien, écrit en gris clair #B7B7B7, taille 12, sur un pinceau gris
clair #E6E6E6 : le contraste est d'environ 1,6:1 (LISIB-T1-CART.md § 2). C'est le défaut vu par l'utilisateur dans
CharGen.
Une EditableTextBox sans couleur fixée hérite d'un texte clair, posé sur un fond blanc à 80 % : c'est la cause C1 de
STD-TXT-DIAG.md, corrigée pour le seul FilenameEntry de CharGen par STE-TXT.
Le comportement est identique en 5.5 : c'est un défaut d'origine, pas une régression (STE-TXT, décision de l'utilisateur).
2. Périmètre proposé (Q1)
-
Retenu (recommandé) :
- les 56 SpinBox du groupe A ;
- les 16 EditableTextBox du groupe B sans couleur de texte.
Ce sont tous les cas où le moteur impose un texte clair sur un fond clair, ainsi que les 3 SpinBox à texte noir 70 % (A41 et A52 : lignes de morphes de CharGen ; A47). Ensemble, ils couvrent le « comme dans de nombreux cas » : CharGen (morphes, AntiDeform, randomisation, X/Y/Z), BodyShapeMenu, Builder, CityMenu, ColorSlot, Scene, SexLight, StatAdjust, StatMenu, et les champs de recherche.
-
Hors périmètre par défaut : les 50 TextBlock du groupe C.
- Leur taille et leur couleur sont des choix de l'auteur, dans l'asset. Par exemple : les donateurs en 8, la version à 70 %, les textes rouges d'alerte.
- Plusieurs sont recolorés en jeu par le graphe (
LISIB-T1-CART.md§ 3). - Proposition : pendant le PIE, l'utilisateur désigne ceux qui gênent. Ils seront traités dans une fiche complémentaire, LISIB-T2, par MCP, widget par widget.
3. Méthode proposée (Q2) : C++ seul, aucun asset modifié
- Nouveau sous-système
ULPReadableTextSubsystem(GameInstanceSubsystem), dansSource\LifePlay\LPReadableTextSubsystem.h/.cpp. LPSettingsSubsystemn'est pas modifié : le panneau Settings garde son rendu actuel, et le retour arrière reste séparé. Le sous-système reprend les mêmes valeurs de style (§ 4), recopiées et commentées « comme Settings ».- Fonctionnement : un ticker (
FTSTicker), toutes les 0,25 s, parcourt lesUSpinBoxetUEditableTextBoxvivants.- Un widget est retenu si :
- il n'est ni objet par défaut ni archétype ;
- son
UUserWidgetpropriétaire appartient à la GameInstance ; - il n'est pas sous
SettingsScrollBox(déjà traité) ; - il n'a pas encore été traité (ensemble de pointeurs faibles).
- Le style est posé une fois par widget, puis la Slate le garde dans les membres UMG : il survit à
RebuildWidget.
- Un widget est retenu si :
- ERR-088 :
- EditableTextBox : le style passe uniquement par
ULPWidgetStyleLibrary::SetEditableTextBoxStyle, jamais parUEditableTextBox::SetWidgetStyleavec une valeur temporaire. - SpinBox :
USpinBox::SetWidgetStylerecopie dans le membre, puis la Slate pointe sur&WidgetStyle(SpinBox.cpp:111,:149-154). Aucun risque, c'est déjà l'usage de Settings.
- EditableTextBox : le style passe uniquement par
- Survie au graphe :
- aucun nœud ne repose le style d'une SpinBox ;
- le flash rouge de FilenameEntry (CharGen, StatMenu) recopie le
TextStylecourant, donc la couleur posée survit.
- Avantages :
- aucune écriture dans CharGen, MainMenu, StatMenu ou GI, donc aucun conflit avec STF-T5b ni STE ;
- un seul fichier à relire ;
- retour arrière par un seul revert ;
- couvre d'office une SpinBox ajoutée plus tard.
- Limite : le style n'est pas visible dans le designer UMG, seulement en PIE et en jeu.
- Autre méthode :
- par MCP, asset par asset : 72 widgets, 20 assets, dont CharGen et StatMenu, qui sont en file d'attente ;
- ou les deux méthodes.
4. Valeurs cibles proposées (Q3, Q4)
SpinBox (groupe A)
| Élément | Valeur proposée | Source |
|---|---|---|
| Fond | (0,06 ; 0,06 ; 0,06 ; 0,95), survol 0,12 / 0,98, actif 0,16 / 1 | comme Settings (LPSettingsSubsystem.cpp:337-342) |
| Remplissage actif (glissé) | bleu (0,2 ; 0,45 ; 0,9 ; 0,85) | comme Settings (:343) |
| Remplissage au repos et au survol | bleu sombre (0,1 ; 0,22 ; 0,45 ; 0,9) | nouveau. Settings le laisse gris clair (SSpinBox.cpp:240-241), mais les lignes de morphes (plage 0-1) en montrent beaucoup |
| Texte | blanc opaque, contour noir 2 px (0,95) | comme Settings (:344, :391-395) |
| Taille | minimum 16 (les 32 SpinBox en 12 passent à 16 ; celles en 16 ou 20 ne bougent pas) | Settings impose 18 ; 16 est proposé pour tenir dans les lignes étroites de Builder et CharGen |
| Opacité de rendu | 1 pour les SpinBox (A41, A52 : 0,7 aujourd'hui) | comme Settings (:389) |
| Activé / désactivé | inchangé (Settings force SetIsEnabled(true) ; ici, non) |
— |
EditableTextBox sans couleur (groupe B)
| Élément | Valeur proposée | Source |
|---|---|---|
| Couleur du texte | noir opaque (0,0,0,1) dans TextStyle.ColorAndOpacity, seulement si elle n'est pas fixée |
comme STE-TXT, approuvé en PIE (J2bis) |
| Fond | inchangé (blanc à 80 %) | — |
| Taille | minimum 14 (B9, B10, B13 : 9 aujourd'hui ; B20 caché : 10) | — |
| HintText | inchangé (gris voulu) | STE-TXT, fiche § 5 |
Les widgets déjà corrigés par STE-TXT (A40 CharGen.VarianceSpinBox et B6 CharGen.FilenameEntry) :
- B6 n'est pas touché, car sa couleur est fixée ;
- A40 prend le style SpinBox (fond sombre, texte blanc), comme A56 dans StatMenu, pour un rendu homogène. Si l'utilisateur préfère garder le noir de STE-TXT, A40 sera exclu par son nom.
5. Fichiers, essais et retour arrière
- Écrits :
Source\LifePlay\LPReadableTextSubsystem.het.cpp(neufs) ;- aucun
.uasset; - aucun autre fichier source (le module charge seul le nouveau sous-système).
- Entrée du lot :
git status --short -- Source/LifePlayvide ;- ticket TAG
LISIB-avant; - instantané
.\Tools\Snapshot.ps1 -Lot LISIB -Path Source\LifePlay.
- BUILD :
Tools\Build.ps1(éditeur), 0 erreur et 0 avertissement nouveau (lp-build), surBUILD-GO. - VAL (lp-validator) :
- relecture du diff ;
- fins de ligne ;
LPTestStringCompat;- recherche d'un appel direct à
UEditableTextBox::SetWidgetStyledans le nouveau code (0 attendu) ; - journal en jeu : compte des widgets traités par classe, à comparer à l'inventaire (56 / 16, moins les widgets non ouverts).
- PIE avec l'utilisateur (LISIB-J1), écran par écran :
- CharGen : morphes, AntiDeform, randomisation, X/Y/Z, Save Preset, avec flash rouge ;
- BodyShapeMenu ;
- CityMenu ;
- Builder et ColorSlot ;
- StatMenu (Save Preset) ;
- Scene (TimeoutHours), SexLight, StatAdjust ;
- champs de recherche : Cursor, TopRight, ContactMenu, CityMenu, Inventory, Journal, LoadExtImg ;
- Settings : contrôle de non-régression. Critère : le texte de chaque widget visité est lu sans effort, et aucune mise en page n'est cassée.
- Retour arrière : revert du commit, ou
Restore.ps1 -Lot LISIB, proposé, jamais lancé sans accord. Aucun asset n'est en jeu. - Report en 5.5 (
main) : hors périmètre. À proposer après la validation, si l'utilisateur le veut.
6. Coût et risques
- Complexité de l'IMPL : a1 b1 c1 d1 e1 f1 = 6 → N2 (lp-impl).
- Charge : le parcours des objets toutes les 0,25 s porte sur moins de 200 widgets. Coût négligeable, à mesurer dans le journal à la VAL.
- Risque de mise en page : le passage de 12 à 16 peut élargir une ligne (Builder). Le PIE le montre ; la taille minimale se règle par une seule constante.
7. Questions à l'utilisateur
- Q1 Périmètre :
- (a) A + B, soit 56 SpinBox et 16 champs [recommandé] ;
- (b) (a) + des TextBlock désignés pendant le PIE (fiche LISIB-T2) ;
- (c) A + B + les 50 TextBlock du groupe C.
- Q2 Méthode :
- (a) C++ seul, nouveau sous-système [recommandé] ;
- (b) assets par MCP ;
- (c) les deux.
- Q3 Aspect des SpinBox :
- (a) fond sombre et texte blanc, comme Settings, avec le remplissage au repos en bleu sombre [recommandé] ;
- (b) fond clair gardé, texte noir opaque, comme STE-TXT.
- Q4 Taille minimale des SpinBox :
- (a) 16 [recommandé] ;
- (b) 18, comme Settings ;
- (c) inchangée, couleur seulement.
- Q5 A40 (CharGen.VarianceSpinBox, noir par STE-TXT) :
- (a) style commun [recommandé] ;
- (b) exclu.
Réponses : à reporter ici (§ 8) avec la date, puis la fiche LISIB-IMPL est rédigée et BUILD-DEMANDE envoyée à Big Boss.
8. Décisions de l'utilisateur
2026-10-10, réponses aux questions de la session LISIB :
- Q1 : « SpinBox + champs (Recommandé) » → (a) ;
- Q2 : « C++ seul (Recommandé) » → (a) ;
- Q3 : « Comme Settings (Recommandé) » → (a), avec le remplissage au repos en bleu sombre. L'option approuvée inclut A40 au style commun, donc Q5 = (a) ;
- Q4 : « 16 (Recommandé) » → (a). Les champs de saisie en 9 passent à 14.
SPEC approuvée. Suite : fiche LISIB-IMPL, ticket TAG LISIB-avant, instantané, puis BUILD-DEMANDE.