LifePlay-Revival/Docs/Migration/etat/CAM/CAM-B2p-I-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

11 KiB

CAM-B2p-I-SPEC : aide des contrôles du sexe derrière une icône « i » du panneau des actions (DIAG + SPEC, 2026-10-14)

Demande de l'utilisateur, relayée par Big Boss : « utilise l'icone information à coté de faq pour afficjer les informations sur les controles en lieu et place du texte. ce texte appartient à la zone de filre ». Lecture seule ; aucune IMPL sans GO. Le build COMMUN-12 tournait chez STG pendant la DIAG : ni éditeur ni commandlet. La DIAG repose sur les octets des assets (grep -a, noms et chaînes), le dump du PC de B2p-G (CAM-B2p-G-PC-VAL_LPDumpFunction_20261014-135527.txt) et le C++. Les points marqués à confirmer se liront par MCP ou LPDumpFunction après le build.

1. DIAG

1.1 Les 4 lignes : SexInterface, TextBlock_1

  • Établi : les 4 phrases (« Click any mouse button for action menu », « (NEW!) Hold any mouse button to rotate camera », « (NEW!) Scroll mouse wheel or press WASD to move camera », « (NEW!) Hold Shift while doing any of the above to rotate / move the people instead ») ne sont que dans Content/UI/SexInterface.uasset (recherche dans tout Content, Source, Config). Ce sont des chaînes de l'asset, sans table de localisation (aucun dossier Content/Localization ; DefaultGame.ini:38-40 : InternationalizationPreset=English, CulturesToStage=en).
  • Établi : SexInterface n'a que deux blocs de texte, TextBlock_0 (liaison de visibilité Get_TextBlock_0_Visibility) et TextBlock_1 (liaison de texte Get_TextBlock_1_Text, avec Conv_StringToText).
  • Établi (dump du PC) : le PC montre SexInterface.TextBlock_1 en même temps que le panneau des actions et le cache avec lui :
    • ouverture : LeftMouseSexOn → IfThenElse_10.else → CallFunction_154 SetVisibility(Visible) sur TextBlock_1 → CallFunction_124 Cursor.MoveCursorToMouse (l. 3021-3043, 997-1000) ;
    • fermeture : CallFunction_1394 SetInputMode_GameOnly → CallFunction_38 SetVisibility(Hidden) sur TextBlock_1 (l. 1171-1176, 4003-4007). C'est pourquoi l'utilisateur voit ce texte comme une partie de la zone du filtre.
  • Estimé fort, à confirmer : TextBlock_1 porte les 4 lignes. Get_TextBlock_1_Text peut aussi rendre un autre texte (l'asset contient « Close to cumming, keep going to 100… » et la variable CumText). Le graphe de la liaison sera lu par LPDumpFunction -BP=SexInterface -Fn=Get_TextBlock_1_Text_0 -Pins -Exec.

1.2 Le panneau des actions : Cursor

  • Établi : le champ « Type keyword to filter actions » est l'EditableTextBox SearchAction du widget Content/UI/Cursor.uasset (Cursor_C, PC.CursorREF). Ses boutons nommés : MoveHomeButton, RandomButton, ShuffleActor, StripAllButton, TranslateButton, ActionButton, et deux boutons à appui et relâcher (ComponentBoundEvent_2 à _5). Les libellés « << » et « >> » sont des textes de l'asset.
  • Établi : TranslateButton appelle la traduction Google de GI (https://translate.google.com/?sl=en&tl=zh-CN), vers le chinois.
  • Estimé, à confirmer : le bouton « ? » est RandomButton (action au hasard ; le texte d'aide d'origine dit « press Space to change to a random… »). Il a déjà un rôle : on ne le réutilise pas. Le soutien-gorge est StripAllButton.
  • À confirmer : le parent de SearchAction (l'asset a HorizontalBox_0, WrapBox, ScrollBox_3, CanvasPanel), où l'icône sera insérée.

1.3 L'icône FAQ

  • Établi : MainMenu a FAQButton, FAQBack, FAQSection et la texture /Game/Heavy/New/info (Content/Heavy/New/info.uasset, 13 866 octets), la seule texture « info » du menu. Elle est cuite, puisque MainMenu la référence.
  • Estimé fort, à confirmer : c'est l'image de FAQButton (le cercle avec un i). Vérification par MCP : get_widget du bouton, ou une ligne au premier essai.

1.4 Langue

  • Établi : le jeu est en anglais seulement (preset ICU English, seule la culture en est cuite). Toute l'interface, y compris les ajouts C++ (« Keyboard », « Camera: C3 Couple »), est en anglais. « Selon le jeu » donne donc l'anglais. Une détection du français par la culture ne marcherait pas, faute de données fr cuites. FPlatformMisc::GetDefaultLanguage() (langue du système) serait possible, mais ce n'est pas la langue du jeu.

1.5 LPReadableText

  • Établi (LPReadableTextSubsystem.h:1-12) : ce sous-système ne restyle que les SpinBox et les Text Box. Il ne touche ni une info-bulle ni un TextBlock. Il n'est pas nécessaire : une info-bulle UMG a déjà son fond sombre et son texte clair ; une boîte d'aide créée en C++ reçoit son style à la création (blanc, contour noir, fond sombre, comme l'indicateur de caméra).

1.6 Contrôles réels pendant le sexe (B2p-C à B2p-H)

Action Contrôle Source
Vue suivante : Scene → C3 → yeux de chaque partenaire → Scene C (SwitchCamera) B2p-G (PC G-d)
Tourner autour du couple, avancer ou reculer (Scene, C3) axes MoveRight et MoveForward (ZQSD sur le clavier de l'utilisateur) B2p-C
Regarder autour (vue des yeux) mêmes axes B2p-C
Tourner la caméra bouton tenu hors du couple, et la souris PC MoveCamera
Déplacer le couple, sur le sol ou un lit glisser au clic gauche sur le couple B2p-D, H
Tourner le couple glisser au clic droit sur le couple B2p-D
Déplacer le couple au clavier flèches (LeftRight et DownUp) Room (B2p-R, O1)
Monter ou descendre le couple molette (ScrollDownUp, Room) estimé (COMMUN-11 : molette, Z +9)
Ouvrir ou fermer le panneau des actions Espace ou clic molette B2p-G (PC G-g), H5
Voie d'origine du jeu Maj + bouton tenu + souris Room, laissée par B2p-D

2. SPEC

2.1 Option 1, recommandée : C++ seul (LPCameraModeSubsystem), sans asset ni nœud

Précédent : LPKeyboardSubsystem::AttachButton (LPKeyboardSubsystem.cpp:578-601) ajoute un bouton UMG à la volée dans un widget du jeu.

  • I-a, icône : pendant le sexe, quand le Cursor_C du jeu est à l'écran, une fois par instance :
    • un UButton LPControlsHelp (fond transparent), contenant un UImage de la texture /Game/Heavy/New/info (LoadObject<UTexture2D>), de la taille des autres icônes du panneau (24 à 32 px, à régler sur la capture) ;
    • inséré dans le parent de SearchAction, juste après lui ;
    • si le parent n'est pas un panneau connu ou si la texture manque : rien n'est inséré, une ligne au journal.
  • I-b, survol : ToolTipText = texte d'aide (§ 2.3), l'info-bulle native d'UMG.
  • I-c, clic : affiche ou cache une boîte d'aide (UBorder sombre et UTextBlock blanc avec contour, police 14) sous le panneau, au même endroit que les 4 lignes. Elle se cache aussi quand le panneau se ferme.
  • I-d, les 4 lignes : la liaison Get_TextBlock_1_Text est retirée sur l'instance (TextBlock_1 de GI.SexInterface) et le texte est vidé, une fois par instance. Le PC peut le rendre visible, il n'affiche rien, sans clignotement. Si § 1.1 montre que la liaison rend aussi le texte de jouissance, on ne la retire pas : on cache le bloc seulement quand il porte l'aide (comparaison avec le début « Click any mouse button »). C'est à trancher après le dump.
  • I-e, touches lues : les noms de touches viennent des mappages en cours (UInputSettings : MoveForward, MoveRight, SwitchCamera, Pause, LeftRight, DownUp). Un remappage par le menu Keyboard est donc suivi, et l'utilisateur voit Z Q S D.
  • Hors du sexe, rien ne change : on ne touche ni l'icône ni le texte. L'icône reste dans l'instance du Cursor, mais le panneau n'est ouvert que pendant le sexe ; à confirmer pour d'autres usages du Cursor, et la cacher hors sexe si besoin.
  • Coût : environ 150 à 200 lignes de C++, 2 h d'écriture et 30 min de VAL statique. 0 nœud, pas d'UE-GO hors du build. Une lecture MCP courte (lp-mcp, environ 6 appels, sous UE-GO, lecture seule) pour confirmer § 1.1 à 1.3 avant l'IMPL ; sinon, le C++ écrit au journal ce qu'il trouve, et le premier essai tranche.

2.2 Option 2 : Blueprint par MCP (non recommandée)

  • Cursor : ajouter un bouton et une image dans l'arbre du designer. Il faut un outil MCP d'édition de l'arbre des widgets, non vérifié dans unreal-mcp (aucun lot ne l'a fait).
  • SexInterface : changer Get_TextBlock_1_Text (environ 3 nœuds) ou la visibilité.
  • PC : retirer CallFunction_154 (1 coupure et 1 lien).
  • Coût estimé : environ 25 à 40 appels, 3 assets touchés, et une langue figée dans l'asset.

2.3 Texte d'aide proposé (anglais, langue du jeu ; <…> = nom de touche lu à l'exécution)

CAMERA
  <C>: next view (Scene > C3 couple close-up > each partner's eyes)
  <Z><S>: move closer / away   <Q><D>: orbit around the couple (eyes view: look around)
  Hold a mouse button away from the couple and move the mouse: rotate the camera
COUPLE
  Left-drag the couple: move it (floor or bed only)
  Right-drag the couple: turn it
  Arrow keys: move the couple   Mouse wheel: raise / lower
ACTIONS
  <Space> or middle click: show / hide this panel

Variante française, si l'utilisateur la préfère (constante du C++, pas une détection) :

CAMÉRA
  <C> : vue suivante (Scene > C3 plan du couple > yeux de chaque partenaire)
  <Z><S> : avancer / reculer   <Q><D> : tourner autour du couple (vue des yeux : regarder)
  Bouton de souris tenu hors du couple + souris : tourner la caméra
COUPLE
  Glisser le couple au clic gauche : le déplacer (sol ou lit seulement)
  Glisser le couple au clic droit : le tourner
  Flèches : déplacer le couple   Molette : monter / descendre
ACTIONS
  <Espace> ou clic molette : afficher / cacher ce panneau

La ligne « Molette » reste à confirmer à l'essai (§ 1.6) ; on la retire si la molette ne déplace pas le couple.

3. Risques

  • R1 : le parent de SearchAction est un CanvasPanel (placement absolu) : l'icône exige un ancrage calculé. On le lit avant l'IMPL.
  • R2 : TextBlock_1 porte aussi le texte de jouissance (§ 1.1) : I-d devient conditionnel.
  • R3 : une instance de Cursor recréée (changement de scène) : l'insertion se refait, par nom (LPControlsHelp), comme AttachButton.
  • R4 : les infobulles UMG apparaissent après un délai (0,5 s environ) : le clic reste le moyen sûr.

4. Essais proposés (après le build qui suivra le GO)

  • CAM-86 : panneau ouvert, l'icône « i » est à côté du filtre, avec la même image que FAQ ; les 4 lignes ont disparu.
  • CAM-87 : le survol montre l'aide ; le clic l'affiche et la cache ; la fermeture du panneau la cache.
  • CAM-88 : après un remappage (Keyboard), l'aide montre les nouvelles touches.
  • CAM-89 : hors du sexe, aucun changement, et le texte de jouissance est toujours affiché s'il existe.

5. Questions pour le GO

  1. Option 1 (C++ seul) ?
  2. Langue : anglais (langue du jeu), ou la variante française ?
  3. Lecture MCP courte avant l'IMPL (sous UE-GO, environ 6 appels), ou confirmation au premier essai ?