LifePlay-Revival/Docs/Migration/etat/ST/LISIB/LISIB-SPEC.md
edujiro5972 8084622450 LifePlay UE 5.8 : état de développement au 2026-10-19
Tickets : REP1-T4

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 22:57:42 +02:00

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), dans Source\LifePlay\LPReadableTextSubsystem.h/.cpp.
  • LPSettingsSubsystem n'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 les USpinBox et UEditableTextBox vivants.
    • Un widget est retenu si :
      • il n'est ni objet par défaut ni archétype ;
      • son UUserWidget proprié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.
  • ERR-088 :
    • EditableTextBox : le style passe uniquement par ULPWidgetStyleLibrary::SetEditableTextBoxStyle, jamais par UEditableTextBox::SetWidgetStyle avec une valeur temporaire.
    • SpinBox : USpinBox::SetWidgetStyle recopie dans le membre, puis la Slate pointe sur &WidgetStyle (SpinBox.cpp:111, :149-154). Aucun risque, c'est déjà l'usage de Settings.
  • Survie au graphe :
    • aucun nœud ne repose le style d'une SpinBox ;
    • le flash rouge de FilenameEntry (CharGen, StatMenu) recopie le TextStyle courant, 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.h et .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/LifePlay vide ;
    • 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), sur BUILD-GO.
  • VAL (lp-validator) :
    • relecture du diff ;
    • fins de ligne ;
    • LPTestStringCompat ;
    • recherche d'un appel direct à UEditableTextBox::SetWidgetStyle dans 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.