5.7 KiB
Fiche STG-C6b-IMPL — Niveau N3 — Modèle prévu claude-opus-5-5 | utilisé claude-opus-5-5 — Agent orchestrateur STG (session principale) — Skills lp-lot, sk-change-safety
STG-C6b-IMPL : boîte de scène comptée comme menu seulement si elle montre quelque chose (2026-10-14)
GO de Big Boss du 2026-10-14, après la réponse de l'utilisateur au DIAG : « non pour Z, non pour le dialogue ». Pendant la fenêtre A,
Scene_C était compté comme menu (menus=[Scene_C] sceneOn=1) et coupait la marche alors qu'aucune boîte n'était visible.
Correctif C6-b de STG-COMMUN6-DIAG.md § 5. Sans UE ni compilation ; VAL statique par un agent distinct ; il entre au build suivant, avec
M1e. Lot STG, registre STG-TACHES.md.
1. Instantané
Snapshot.ps1 -Lot STG-C6b (état M1e) : LPDirectControlSubsystem.cpp AD60A24FB3E3075299C1F4EC5F087011, .h
979AE0ADA261655CBBE9AEFD6969E833 (D:\Game\LifePlay_Backup_5.5\STG-C6b\manifest.csv).
2. Changements (STG-C6b.diff, contre l'instantané : 66 lignes ajoutées, 0 retirée)
LPDirectControlSubsystem.cpp (CRLF) :
-
includes
Blueprint/WidgetTree.h,Components/Button.h,Components/RichTextBlock.hetComponents/TextBlock.h(module UMG, déjà dansLifePlay.Build.csl. 38) ; -
ShownUpToRoot(Child): le widget et chacun de ses parents dans l'arbre sontIsVisible(), avec une opacité de rendu > 0,01 ; -
ShowsContent(Widget): vrai si l'arbre du widget contient, visible jusqu'à la racine :- un
UButton; - un
UTextBlockou unURichTextBlockau texte non vide ; - un
UUserWidgetimbriqué visible qui lui-même montre quelque chose (récursion bornée à 8 niveaux).
Opacité de rendu du widget ≤ 0,01 : faux. Arbre illisible (
WidgetTreenul) ou profondeur dépassée : vrai (prudence : on ne débloque pas sur une donnée manquante). - un
-
MenuReason: pour la seule classeScene_C, siShowsContentest faux, le widget n'est pas compté. On passe au widget suivant (breakde la boucle des classes), et l'indicateurEmptySceneSeen()est levé. Les neuf autres classes de menus, le panneau Clavier et la saisie de texte ne changent pas. -
WitnessMoveKeys: une ligne à chaque changement de l'indicateur,C6-b : boite Scene_C dans le viewport sans contenu visible, la marche n'est pas coupee, puisC6-b : plus de boite Scene_C vide dans le viewport.
LPDirectControlSubsystem.h : le membre bLoggedEmptyScene.
Signatures relues sur les en-têtes UE 5.8 (D:\Game\Launcher\Engine\UE_5.8\Engine\Source\Runtime\UMG\Public) :
UTextBlock::GetText() const(TextBlock.h l. 95) etURichTextBlock::GetText() const(RichTextBlock.h l. 196) ;UWidgetTree::ForEachWidget(TFunctionRef<void(UWidget*)>) const(WidgetTree.h l. 78) ;UWidget::IsVisible() const(l. 582),GetRenderOpacity() const(l. 598) etGetParent() const(l. 769).UPanelWidgetest complet pour la conversion versUWidget*:Blueprint/WidgetTree.hl. 11 inclutComponents/PanelWidget.h(point « à confirmer » de la VAL, levé à la lecture).
3. D10 reste vrai (contrôle demandé par Big Boss)
D10 (BOSS\COMMUN-3-TESTS.md l. 25) : pendant qu'une boîte de dialogue de scène est à l'écran, ZQSD ne fait pas bouger le personnage.
- Une vraie boîte de scène montre son texte et ses boutons de choix. Elle a donc au moins un
UTextBlocknon vide ou unUButtonvisible jusqu'à la racine, d'oùShowsContentvrai,MenuReasonqui renvoieScene_Cet la marche coupée, comme avant. - Si le texte ou les boutons sont dans un widget imbriqué, la récursion les trouve.
- Si l'arbre n'est pas lisible, la boîte compte, comme avant.
- Le seul cas qui change : un
Scene_Cdans le viewport,Visible, dont aucun bouton ni texte non vide n'est visible jusqu'à la racine (fenêtre A). - Estimé, non mesuré : la structure réelle de
/Game/UI/Scenen'a pas été lue (pas d'UE). Si la boîte vide de la fenêtre A cache son contenu autrement (couleur à alpha 0, position hors écran, texte non vide mais transparent), C6-b ne la reconnaîtra pas. La marche resterait alors coupée, et M1e l'écrirait :marche coupee par le menu Scene_C, sans ligneC6-b. - Effet de bord à essayer en jeu : pendant une scène, une boîte qui s'ouvre sans texte pour un instant (≤ 0,25 s) ne coupe pas la marche pendant cet instant.
4. Ce qui n'a pas été fait
- Compilation et essai : au prochain build commun.
- La garde
PlayerBusydeLPOutdoorRoomSubsystem(copie de l'ancienne liste) n'est pas modifiée. UneScene_Cvide y retarde seulement le relevage du joueur, sans le bloquer. Elle pourra être alignée après l'essai. - La ligne
WALK … menus=[…]deLPDebugSubsystemcompte toujoursScene_Csans ce filtre. Pour savoir si la marche est coupée, la ligne à lire est désormaisM1e/C6-b.
5. Points à confirmer (essai du prochain build)
- Fenêtre A rejouée (scène de sexe terminée, sans boîte visible) : ligne
C6-b : boite Scene_C … sans contenu visible, et ZQSD fait marcher. - D10 : boîte de scène visible, ZQSD sans effet,
M1e : marche coupee par le menu Scene_C.
6. MD5 après
| Fichier | MD5 |
|---|---|
LPDirectControlSubsystem.cpp |
44ACE47D29424101B4127BA12E789BEB |
LPDirectControlSubsystem.h |
ACFF924AE6E03548546EF3FB2E430EB8 |
7. Retour arrière (proposé, jamais lancé sans accord)
Restore.ps1 -Lot STG-C6b, qui ramène l'état M1e (AD60A24F… / 979AE0AD…). Avant tout, prendre l'instantané STG-C6b-retour.
8. Fichiers à commiter
Source/LifePlay/LPDirectControlSubsystem.cpp, Source/LifePlay/LPDirectControlSubsystem.h, Docs/Migration/etat/ST/STG/STG-C6b-IMPL.md,
Docs/Migration/etat/ST/STG/STG-C6b.diff.
Tours : 7