118 lines
9 KiB
Markdown
118 lines
9 KiB
Markdown
|
|
# Fiche STG-C3a — Niveau N3 — Modèle prévu claude-opus-5-5 | utilisé claude-opus-5-5
|
|||
|
|
|
|||
|
|
Analyse STG de l'essai COMMUN-3 (demande de Big Boss, 2026-10-13 : KO 1 à 5), DIAG en lecture seule. Bilan de l'essai :
|
|||
|
|
`etat/BOSS/COMMUN-3-BILAN.md`. Lot STG, registre `STG-TACHES.md`. Heures du journal en UTC (locale = UTC + 2).
|
|||
|
|
|
|||
|
|
| Repère | Fichier (`D:\Game\LifePlay_Backup_5.5\COMMUN-3\essais\`) | MD5 |
|
|||
|
|
|---|---|---|
|
|||
|
|
| S1 | `LifePlay_commun3_session1_definitif_BOSS.log` (41 986 lignes) | `27e654cc…` |
|
|||
|
|
| S2 | `LifePlay_commun3_session2_ferme_BOSS.log` (17 624 lignes) | `61e37cf3…` |
|
|||
|
|
|
|||
|
|
**Écart de méthode à signaler.** Ton message précédent demandait un DIAG en lecture seule pour les points 2 et 3. J'ai en plus
|
|||
|
|
écrit le correctif C++ (KO3b) dans `LPDirectControlSubsystem`, sans compiler et sous instantané (`Backup_5.5\STG-KO3b`). Il est
|
|||
|
|
détaillé dans `STG-KO3b-DIAG.md` (.cpp `827f19c0`, .h `3cdb4985`) et sa VAL statique est **PASS-STATIC** (`STG-KO3b-VAL.md`). Ce n'est pas encore accepté : à
|
|||
|
|
toi de le garder pour COMMUN-4 ou de demander le retour aux fichiers de COMMUN-3 (.cpp `64766f64`, .h `7b8fed0e`), restaurés depuis
|
|||
|
|
l'instantané.
|
|||
|
|
|
|||
|
|
## 1. Passants enfoncés le long de la rambarde (D1, exception) — position établie, cause estimée
|
|||
|
|
|
|||
|
|
Relevés M1 (personnages visibles dont les pieds sont sous -125, en street) :
|
|||
|
|
|
|||
|
|
| Session | Acteur | Relevés | Premier | x | z | pieds | plancher trouvé |
|
|||
|
|
|---|---|---|---|---|---|---|---|
|
|||
|
|
| S1 | `…980` | 4 | 18:25:21 | -3131401,4 | -80,3 | -165,5 | `_223` à -105,1 |
|
|||
|
|
| S1 | `…908` | 4 | 18:26:46 | -3131401,4 | -89,9 | -170,3 | `_0` à -105,1 |
|
|||
|
|
| S1 | `…956` | 2 | 18:26:46 | -3131677,3 | -48,0 | -138,0 | `_0` à -105,1 |
|
|||
|
|
| S2 | `…932` | 11 | 18:56:59 | -3131401,4 | -87,1 | -177,1 | `_0` à -105,1 |
|
|||
|
|
| S2 | `…908` | 11 | 18:56:59 | -3131401,4 | -82,7 | -172,7 | `_0` à -105,1 |
|
|||
|
|
| S2 | `…980` | 5 | 18:56:59 | -3131677,5 | -59,8 | -149,8 | `_0` à -105,1 |
|
|||
|
|
|
|||
|
|
Lecture :
|
|||
|
|
- Tous ces passants sont sur **deux abscisses fixes** de la street : centre de Room (-3131543) + 141,6 et − 134,5 cm. Ce sont les
|
|||
|
|
bords de la zone de marche, côté rambarde. Au milieu de la rue, tout le monde a les pieds au pavé (D1 OK).
|
|||
|
|
- Ils y arrivent par `standIdle` (« test270522 found a spot within distance », S2 18:56:55 pour `…980`), c'est-à-dire posés sans
|
|||
|
|
balayage (`moveTo` → `SetActorLocation`) sur un point du navmesh. Bas de capsule de -138 à -178 : **24 à 64 cm sous le
|
|||
|
|
dessus de la `Box`** (-114,4) et sous le plan de marche `fnt_nav01` (-105,1), d'où « jusqu'aux hanches ».
|
|||
|
|
- Ils restent immobiles à cette hauteur jusqu'à leur destruction (`MOVE_Walking`, plancher trouvé au-dessus d'eux).
|
|||
|
|
- Ce n'est pas le piège `fnt_ext` : S-F4b est actif (« 1 decor(s) fnt_ext en Pawn Ignore » à chaque entrée). Le décor est le
|
|||
|
|
même (`street___vin01.lpworld` n'a que deux objets : `fnt_ext001` et `fnt_nav01`), mais le défaut est la **hauteur du point
|
|||
|
|
posé**.
|
|||
|
|
- Cause estimée : au bord de la rue, le navmesh suit la géométrie basse du décor (caniveau, pied de rambarde de
|
|||
|
|
`fnt_ext001`), et non le pavé. Le personnage y est posé, puis reste coincé sous le plan de marche. C'est la piste S-F2 de
|
|||
|
|
`STG-SF4b-DIAG.md` § 4.
|
|||
|
|
|
|||
|
|
**Correctif proposé pour COMMUN-4 : S-F5 (C++, `LPOutdoorRoomSubsystem`, sans asset).**
|
|||
|
|
- En extérieur, toutes les 0,5 s (même minuterie que S-F4b), pour chaque `Person` visible, sans meuble (`OccupyingFnt` vide) et
|
|||
|
|
dont la capsule n'est pas en `NoCollision` : si le bas de la capsule est **plus de 15 cm sous le dessus de la `Box`**,
|
|||
|
|
relever l'acteur à « dessus de la `Box` + demi-hauteur + 2 cm », même x et y, avec une ligne au journal.
|
|||
|
|
- Environ 30 lignes. Risque : un passant relevé à l'aplomb de la rambarde reste au bord de la rue, mais visible en entier.
|
|||
|
|
- Alternative en Blueprint (filtrer les points trop bas dans `getStandSpots` ou `standIdle`) : touche Room ou Person. Plus
|
|||
|
|
lourd, et non recommandé avant l'alpha.
|
|||
|
|
|
|||
|
|
## 2. Joueur piégé dans une étagère (D6) — voir `STG-KO3b-DIAG.md` § 3
|
|||
|
|
|
|||
|
|
Établi : l'action `fnt_new038-f-0-look` pose le joueur dans le volume de collision de l'étagère `_56` (`floorHit 0`, trace
|
|||
|
|
arrêtée sur `_56` au-dessus de la tête). 3b libère la place, mais la capsule reste dans le volume : `accel 2048`, `speed 0`
|
|||
|
|
pendant 70 s, jusqu'à ce que le jeu replace le joueur (18:59:59).
|
|||
|
|
|
|||
|
|
Correctif (piste (b)) : Pawn en Ignore sur ce meuble jusqu'à la sortie du volume. Il est écrit (voir l'écart en tête).
|
|||
|
|
|
|||
|
|
## 3. Boucle de 469 « le joueur quitte » (S1, 18:27) — voir `STG-KO3b-DIAG.md` § 2
|
|||
|
|
|
|||
|
|
Établi : 461 lignes de 18:27:01 à 18:27:11, jusqu'à une par image, sur `_1`, juste après un changement de pièce (18:26:59)
|
|||
|
|
(recompte de la VAL). La
|
|||
|
|
référence `OccupyingFnt` désigne un composant de la pièce quittée : `unOccupyFnt` (Blueprint) le voit comme non valide et ne
|
|||
|
|
le vide pas, alors que le C++ le voit comme non nul (cas H-D5).
|
|||
|
|
|
|||
|
|
Correctif : vider la référence invalide directement, plus une garde après l'appel. Écrit dans KO3b.
|
|||
|
|
|
|||
|
|
## 4. PNJ `…1884` debout dans un fauteuil (community_centre) — estimé, hors STG probable
|
|||
|
|
|
|||
|
|
- S2, 18:55:24 : « Laura plays socialize (test2805) », puis `fnt_chair14-f-0-sit` (deux fois), puis « play fnt » et
|
|||
|
|
« `_17` Occupied by Laura ». Relevés suivants : `occupyingFnt _17`, `currentAnimation = fnt_chair14-f-0-sit`, `meshZ -90`,
|
|||
|
|
pieds à -102,1 (au sol), `anim bp:Daily_F_C`.
|
|||
|
|
- Dans S1 et S2, l'activité **socialize** donne 12 fois sur 12 une place `fnt_chair14-*-0-sit` (10 f, 4 m d'après les lignes
|
|||
|
|
qui la suivent). La place est attribuée par le chemin normal (`getFntAnim` → `PlayFntAnim`).
|
|||
|
|
- Ce n'est pas une place partagée (K8) : à 18:49:53, trois personnes sont sur `chair14`, chacune sur un composant différent
|
|||
|
|
(`_14`, `_17`, `_18`).
|
|||
|
|
- M1 ne lit pas la pose jouée par l'Anim BP, et les pieds d'une personne assise sont aussi au sol : le relevé ne peut pas
|
|||
|
|
trancher entre « pose assise non jouée » et « animation de l'activité (debout) jouée sur la place ».
|
|||
|
|
- Aucun correctif STG ne touche la pose : B1 et G-B1a portent sur `moveToPersonStand`, K8-a seulement sur la valeur écrite
|
|||
|
|
dans `OccupiedFnts`.
|
|||
|
|
- Proposition : CART d'animation (`PlayFntAnim`, animation `fnt_chair14-f-0-sit` présente ou non en 5.8, activité socialize),
|
|||
|
|
puis la question « le défaut existe-t-il dans le build 5.5 DC4 ? ». Hors alpha, sauf décision de l'utilisateur.
|
|||
|
|
|
|||
|
|
## 5. Tri des `CLOSE` (S1 : 43 ; S2 : 32)
|
|||
|
|
|
|||
|
|
| Session | Paire | Relevés | Contexte | Classement |
|
|||
|
|
|---|---|---|---|---|
|
|||
|
|
| S1 | joueur / `…1884` | 20 + 3 (gap -40) | `NoCollision` des deux, `sexOn = 1`, `MF_kol07`, `MF_sp01` (`pregnant_trap`) | exception Q-STG-5 |
|
|||
|
|
| S2 | joueur / `…1884` | 18 + 4 + 6 + 2 (gap -40) | idem, `SF_ft07`, `FF_dildo02`, `FF_gf04`, `SF_ft02` | exception Q-STG-5 |
|
|||
|
|
| S1 | `…980` / `…908` | 3 + 11 (gap -0,3) | extérieur (échelle Z 0,4), `fnt_new084-m-0-use` / `fnt_new085-f-0-use` : deux meubles voisins (`_226`, `_225`) | places de deux meubles distincts, posées par les données du lieu ; hors règle B-CHEV (ni repos libre, ni marche) |
|
|||
|
|
| S1 | joueur / `…932` | 4 (gap -29,1) | `fnt_new198-m-1-buy` / `m-0-buy` : deux places d'un même comptoir. L'`occupyingFnt` du joueur est déjà vidé (`-`), d'où l'absence de filtrage | places d'un même meuble : pas un chevauchement au sens du filtre CLOSE |
|
|||
|
|
| S1 | joueur / `…1884` | 1 (gap 0,8) | deux fauteuils voisins (`new216`, `new236`) | données du lieu |
|
|||
|
|
| S1 | `…980` / `…956` | 1 (gap -4,4) | street, `work_hourly`, debout sans meuble | **vrai chevauchement résiduel** (1 relevé sur 502) |
|
|||
|
|
| S2 | joueur / `…932` | 1 (gap 0,5) | joueur assis (`new037` place 1), `…932` debout à côté | ponctuel (< 10 cm, sans recouvrement) |
|
|||
|
|
| S2 | joueur / `…980` | 1 (gap -9,8) | `new013-f-0-buy` / `new055-f-0-sit` : deux meubles voisins | données du lieu |
|
|||
|
|
|
|||
|
|
Bilan : hors exception, un seul vrai chevauchement de personnages debout (S1, 18:42:28, 1 relevé). Les autres cas viennent de
|
|||
|
|
places de meubles voisins, posées par les données des lieux.
|
|||
|
|
- **À corriger dans l'outil M1** : un personnage qui joue encore l'animation d'un meuble (`currentAnimation` en `fnt_…`) mais
|
|||
|
|
dont `occupyingFnt` vient d'être vidé (3b) doit être filtré comme s'il occupait toujours ce meuble.
|
|||
|
|
- **Hors alpha** : places de meubles voisins trop proches (donnée des `.lpworld`).
|
|||
|
|
|
|||
|
|
## 6. Synthèse et propositions pour COMMUN-4
|
|||
|
|
|
|||
|
|
| KO | État | Proposition |
|
|||
|
|
|---|---|---|
|
|||
|
|
| 1 rambarde | position établie, cause estimée | **S-F5** (C++, `LPOutdoorRoomSubsystem`) : relever les passants posés sous le pavé ; essai : bords de la street |
|
|||
|
|
| 2 étagère | établi | **KO3b** (écrit, VAL PASS-STATIC) |
|
|||
|
|
| 3 boucle | établi | **KO3b** (même correctif) |
|
|||
|
|
| 4 fauteuil | estimé | CART d'animation et comparaison avec DC4 5.5 ; hors alpha sauf décision |
|
|||
|
|
| 5 CLOSE | établi | rien à corriger dans le jeu ; outil M1 : filtre par `currentAnimation` (optionnel) |
|
|||
|
|
| C1 (CAM § 7, partie Walk) | proposé par CAM | à écrire dans `LPDirectControlSubsystem::Walk` à ton GO, dans le même build que la partie Room de CAM |
|
|||
|
|
|
|||
|
|
## 7. Fichiers à commiter
|
|||
|
|
|
|||
|
|
`Docs/Migration/etat/ST/STG/STG-COMMUN3-ANALYSE.md`.
|