LifePlay-Revival/Docs/Migration/etat/sandbox/S5/S5-VAL.md
edujiro5972 04b053554f Sandbox addon : brancher le jeu sur LifePlay-Sandbox (plugin LPSandbox).
Charge le plugin via AdditionalPluginDirectories, conserve ShowCouple et les commandlets anim côté jeu, et documente les lots S0–S8 (CHG-212 à CHG-220).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-06 21:10:53 +02:00

73 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# S5-VAL — Validation du lot S5 (`LPCoupleSim` partagé jeu ↔ addon)
- **Date :** 2026-10-06
- **Fiche :** S5-T3 | **Rôle :** A-VAL
- **Modèle prévu :** `claude-sonnet-5-5-high` | **Modèle utilisé :** `claude-sonnet-5-5-high`
- **Pin addon :** `c1fdd29e2c1036c7d6365ba6389eff5d2f8c8c96` (`HEAD` = `origin/main` de `D:\Game\LifePlay-Sandbox`, arbre propre ; `S5-T2`)
- **Références :** `S5-CART.md` (S5-T1), `S5-IMPL-H.md` (S5-T2), `S4-VAL.md`
## Verdict : **PASS** (PASS runtime Pair, PASS-STATIC ShowCouple)
| # | Contrôle | Résultat |
|---|---|---|
| 1 | Bat Pair depuis le jeu (~45 s demandées, session laissée ~90 s) : plugin monté, GameMode Pair | **PASS** |
| 2 | `LogLPSandbox` : chemin `FitCoupleBox` (maintenant `LPCoupleSim`) exécuté, pas de crash couple box | **PASS** |
| 3 | Aucun `Fatal`, assertion, `ensure`, `Access violation`, aucun nouveau dossier `Saved/Crashes` | **PASS** |
| 4 | `LifePlayEditor Win64 Development` à jour (`Target is up to date`), DLL postérieures aux sources S5 | **PASS** |
| 5 | `LPShowCoupleSubsystem` : compile + branché sur `LPCoupleSim` (34 références), copies locales supprimées | **PASS-STATIC** |
| 6 | Parcours show en jeu (sélection du couple, `Engage` → `KeepTogether` → `Release`) | **non exercé** (voir §4) |
| 7 | Processus tué après essai | **PASS** |
## 1. Runtime : bat Pair (jeu)
Équivalent du bat `Tools/debug/LifePlay_pair_sandbox.bat` (même URL `game=/Script/LPSandbox.LPPairSandboxGameMode`, `Saved/sandbox_mode.txt` = `Pair`), lancé à 20:42:10. Le processus a répondu à partir de ~20:43:07 (initialisation de la carte ~50 s), puis a été laissé jusqu'à ~20:43:50 avant d'être arrêté. Journal copié : `Saved/Logs/S5-VAL-runtime-game.log` (source `LifePlay.log`, 1 709 lignes ; copie locale non versionnée).
Binaires utilisés : `UnrealEditor-LPAnimMeasure.dll` 20:36:29, `UnrealEditor-LPSandbox.dll` 20:36:36, `UnrealEditor-LifePlay.dll` 20:37:15, tous postérieurs aux sources S5 (`LPCoupleSim.h` 20:28, `LPCoupleSimCore.cpp` 20:32, `LPShowCoupleSubsystem.cpp` 20:35). L'essai a donc bien exercé le code S5-T2.
| Constat | Journal |
|---|---|
| Plugin monté | `LogPluginManager: Mounting External plugin LPSandbox` |
| GameMode résolu | `LogLoad: Game class is 'LPPairSandboxGameMode'` |
| Initialisation sandbox | 16 lignes `LogLPSandbox` : mur ×4, collision (54 meubles, 0 absent), éclairage, interaction (286 actions), Quaternius 43 anims, corps `bridget_gp` / `michael`, boîte, pose |
| **Boîte du couple** | `Sandbox boite AgMakeout : centre X=20.831 Y=1.400 Z=-0.534, etendue X=41.180 Y=50.958 Z=89.466` |
| Poses | `AgMakeout_F` sur Bridget, `AgMakeout_M` sur Michael, puis `B_/M_Idle_Loop` |
| Suite de session | séquence automatique de mesure (9 caméras, `AUTO arret`), sans erreur ; session restée active (`Responding = True`) jusqu'à l'arrêt manuel |
| Erreurs module / lien / GameMode | 0 |
| `: Error:` hors lot | 1 × `LogLifePlay: Error: Coiffures : GI.HairstyleTable ou GI.MorphableHairs introuvable` (déjà connu, S3-VAL / S4-VAL) |
**Lecture de la boîte.** La ligne `Sandbox boite` est produite par le chemin refactoré (`MeshToActor` → `AccumulateAnimBounds` → `FitFromAnimBounds` → `EnsureBox` → `ApplyBoxFit`). Fond de boîte : `Center.Z - Extent.Z = -0.534 - 89.466 = -90.000`, soit exactement `18 - PlayerSpot.Z` (= −90) : l'écart de plancher sandbox / jeu de 2 cm (jeu = −88), **conservé volontairement** par S5-T2 (§4 de `S5-IMPL-H.md`), est donc inchangé. Pas de NaN, pas de rejet (`bValid`), extension sous le plafond de 800 cm.
Limite de la comparaison avant / après : aucune capture antérieure de cette paire (`AgMakeout`) n'a été archivée ; le contrôle de parité numérique stricte (écart attendu : aucun) n'est pas fait. Le fond à −90,000 cm et des valeurs plausibles pour une paire debout sont la seule preuve de parité disponible ici.
## 2. Compilation
```powershell
& 'D:\Game\Launcher\Engine\UE_5.5\Engine\Build\BatchFiles\Build.bat' LifePlayEditor Win64 Development `
-Project='D:\Game\LifePlay-master 5.5\LifePlay.uproject' -WaitMutex
```
Résultat : `Target is up to date` (journal `Saved/Logs/S5-VAL-build.log`). La compilation effective des deux cibles (`LPSandboxEditor` non-unity, `LifePlayEditor` unity, 0 erreur / 0 avertissement) est documentée par `S5-IMPL-H.md` §6 ; cette fiche confirme qu'aucune source n'a changé depuis (DLL postérieures).
## 3. ShowCouple : PASS-STATIC
| Contrôle | Résultat |
|---|---|
| `LPShowCoupleSubsystem.cpp` référence `LPCoupleSim` / `ResolveCoupleMove` / `EnsureBox` | 34 occurrences |
| `AddPose`, `FSavedMove` imbriquée, `SweepMultiByChannel` dans le jeu | 0 (supprimés) |
| Algorithme de balayage / échantillonnage de pose dans l'addon | une seule implémentation : `LPCoupleSimCore.cpp` (+ déclarations de `LPCoupleSim.h`) ; plus de copie dans `LPSandbox/LPCoupleSim.cpp` |
| Dépendances `.Build.cs` | inchangées (`LifePlay` → `LPAnimMeasure` déjà public) |
| Le module `LifePlay` (qui contient le sous-système) charge au runtime Pair | oui (DLL du 20:37 chargée, aucun `LogModuleManager` en erreur) |
## 4. Limites et décision PASS-STATIC
- **Pas de parcours show automatique.** `LPShowCoupleSubsystem` ne s'active qu'avec un vrai couple en scène (GI, `Room`, `SexPersons`, `AP1/AP2`, clips du dossier `/Game/Heavy/New2/Daily/...`), donc depuis une sauvegarde et un Blueprint de scène ; le bat Pair utilise `GameInstance` brut (`-ini:...GameInstanceClass=/Script/Engine.GameInstance`) et ne l'exerce pas. Aucune ligne `Show couple` dans le journal Pair.
- **Conséquence :** `Engage` / `KeepTogether` / `Release` du jeu, la dépénétration, les lits (`IsBedMesh`), la coque `Wall*` et la diffusion `OnIgnoredShell` ne sont validés que par compilation et relecture (PASS-STATIC), pas par exécution.
- `LPPairCollisionTest` (commandlet de l'éditeur) **non relancé** dans cette fiche (hors consigne VAL ; recommandé en S5-T5 / S7 si disponible dans le module éditeur).
- Contrôle visuel non fait ; le mode Interaction n'est pas exercé.
- Alignement du plancher (−90 → −88) : **non décidé** ; reste à trancher par une capture avant / après sur une scène du jeu.
## 5. Reste ouvert
1. Un essai de show complet en jeu (nouvelle partie ou sauvegarde, scène à deux, comparer `Show couple : boite ...` avant / après `c1fdd29`).
2. Mise sous suivi git de `LPShowCoupleSubsystem.{h,cpp}` dans le repo jeu (non suivis, cf. `S5-IMPL-H.md`).
3. Tests unitaires du niveau pur (`MeshToActor`, `FitFromAnimBounds`, `FitFromLiveBounds`, `SlideWish`).