5.5 KiB
Fiche STG-KO3c — Niveau N2 — Modèle prévu claude-opus-5-5 | utilisé claude-opus-5-5
IMPL de la piste (a+) du DIAG STG-KO3c-DIAG.md (joueur coincé dans le comptoir et le bureau du newsagent, COMMUN-4). GO de Big Boss
(2026-10-13), à partir de 8A680F80 / 3CDB4985. Écrit sans compiler, sous instantané ; VAL statique par un agent distinct.
Destination : COMMUN-5 ou le build Shipping de l'alpha, selon le verdict de COMMUN-4. Lot STG, registre STG-TACHES.md.
1. Instantané et MD5
| Fichier | Avant | Après |
|---|---|---|
Source/LifePlay/LPDirectControlSubsystem.cpp |
8A680F80111D742A924FF655FDB21B61 |
BAAA3982583B70A56602CBFE95BF4FA4 |
Source/LifePlay/LPDirectControlSubsystem.h |
3CDB498591DFF98DD53FCFD65D7322D0 |
77AE7007C77403F05C6697771029CC8C |
Instantané D:\Game\LifePlay_Backup_5.5\STG-KO3c\manifest.csv, pris depuis pwsh avec chemins entre guillemets simples (leçon de
STG-WALK), 2 copies. CRLF : 1 307 et 81 lignes, CR = LF. Diff : STG-KO3c.diff (format diff classique, .cpp puis .h).
2. Gestes
-
.h:TWeakObjectPtr<UPrimitiveComponent> SeatEscape→TArray<TWeakObjectPtr<class UPrimitiveComponent>> EscapeVolumes, plusfloat StuckTime = 0.f. -
EscapeOverlaps(Player, Room, Escape, Why), dans l'espace anonyme :- parcourt les
UPrimitiveComponentde l'acteur Room (GI.Room), et d'aucun autre acteur ; - exclut :
Room.Box(lu par propriété) ;- tout composant sans collision ;
- tout composant dont la réponse Pawn n'est pas Block (donc déjà en Ignore, comme les décors
fnt_extde S-F4b) ; - tout composant déjà dans la liste ;
- tout composant que la capsule ne chevauche pas (
CapsuleInside, capsule réduite de 1 cm) ;
- passe chaque composant retenu en Pawn Ignore et l'ajoute à la liste, avec une ligne par composant : « Marche : joueur dans le volume de (), Pawn en Ignore jusqu'a la sortie ».
- parcourt les
-
LeaveSeat(Player, Room, Escape): l'ancien bloc qui ne traitait que le meuble quitté est remplacé parEscapeOverlaps(…, "meuble quitte"). Le reste de KO3b est inchangé (référence invalide vidée,unOccupyFnt, garde après l'appel). -
UpdateEscape(Player, Room, Escape)remplaceUpdateSeatEscape. Pour chaque composant de la liste :- détruit (avec la pièce) : retiré de la liste ;
- toujours chevauché par la capsule, et appartenant encore à la Room courante : gardé ;
- sinon (capsule sortie de son volume, changement de pièce, joueur absent) : rendu en Pawn Block, avec une ligne par composant : « Marche : joueur sorti du volume de , Pawn rendu en Block ».
Appels :
- en tête de
Walk, à chaque image, avecGI.Room; - dans
Deinitialize, avec un joueur et une Room nuls, ce qui rend tout.
-
Walk, déclencheur (2). Conditions : touches enfoncées, accélération non nulle, vitesse 2D < 1 cm/s, liste vide.- Après 0,5 s d'affilée :
EscapeOverlaps(…, "bloque"). - Seuls les composants déjà chevauchés par la capsule sont ouverts. Un mur ou un meuble que l'on longe n'est pas chevauché : il reste solide, et rien n'est écrit au journal.
- La minuterie repart à zéro dès que le joueur avance ou lâche les touches.
- Après 0,5 s d'affilée :
3. Gardes exigées par Big Boss (à prouver par la VAL)
| Garde | Où |
|---|---|
jamais Room.Box |
Comp == Floor (propriété Box de Room) → ignoré |
| jamais un composant déjà en Ignore | GetCollisionResponseToChannel(ECC_Pawn) != ECR_Block → ignoré |
| jamais un autre acteur que Room | Room->GetComponents seulement ; personnages, GI.Wall et caméras sont d'autres acteurs |
| déclencheur (2) seulement si la capsule chevauche déjà le composant | CapsuleInside dans EscapeOverlaps, seul chemin vers Ignore |
rendu en Block à la sortie, à Deinitialize, au changement de pièce |
UpdateEscape : sortie du volume, Prim->GetOwner() != Room, joueur nul |
aucune action en scène ou avec SexOn |
Walk n'est appelé que hors menu, hors boîte de scène et hors SexOn (Tick, garde 3a) ; LeaveSeat et le déclencheur (2) sont dans Walk |
| une ligne au journal par composant basculé et par composant rendu | deux UE_LOG dans les boucles |
Nouveaux noms : EscapeOverlaps, UpdateEscape (espace anonyme), EscapeVolumes, StuckTime (membres). Chacun n'apparaît que dans ce
fichier et son en-tête.
4. Points à confirmer en VAL
- P1 : diff limité au § 2.
- P2 : API UE 5.8 :
TInlineComponentArray,AActor::GetComponents,GetCollisionEnabled,TArray<TWeakObjectPtr<…>>::Containsavec unUPrimitiveComponent*,RemoveAt,UCharacterMovementComponent::GetCurrentAcceleration, constness. - P3 : gardes du § 3.
- P4 : KO3b (« quitte », « meuble d'une piece quittee », garde après l'appel), WALK, C1-Walk et 3a inchangés.
- P5 : compilation (au build).
5. Essai prévu
- Newsagent : action « acheter » au comptoir
fnt_new123, puis ZQSD. Le joueur sort ; au journal, une ligne « dans le volume de » par composant (au moins_214et_220), puis une ligne « sorti du volume de » pour chacun. - Pousser contre un mur, puis contre un meuble sans y être entré : aucune ligne « bloque », et ils restent solides.
- Étagère de variety_store (non-régression de KO3b).
6. Fichiers à commiter
Source/LifePlay/LPDirectControlSubsystem.cpp, .h (après build et VAL), Docs/Migration/etat/ST/STG/STG-KO3c-DIAG.md,
STG-KO3c-IMPL.md, STG-KO3c.diff, STG-KO3c-VAL.md.