12 KiB
CAM-B2p-G-SPEC : C3 dans le cycle C du sexe, recadrage sur le couple, caméra qui suit le couple (2026-10-14)
Demande de l'utilisateur (COMMUN-11, relayée par Big Boss) : « Je perds la vue du couple en mode scene. Il faudrait ajouter aussi C3 au show pour récupérer le focus ou recentrer la vue sur le MC ou le couple ». Cela remplace la règle « deux modes seulement ». SPEC en lecture seule ; aucune IMPL avant le GO.
1. DIAG (journal COMMUN-11, 11:15 à 11:24 UTC, lu sans le modifier)
-
Bornes (F2, 11:15:53) :
X [-3131897, -3131172] Y [-14967563, -14966863] … source murs Wall*, murs 4, plafond trouve 1(283) ; solBox±3200 cm. F1 marche : quatre murs reconnus, intérieur de 7,25 × 7 m. -
La caméra de scène ne suit jamais le couple. Pendant la scène, le couple est déplacé :
- glisser : de (-3131756, -14967071) à (-3131637, -14967030), puis à (-3131483, -14967023) ;
- flèches : à 11:23:18-20, vers (-3131552, -14966953) ;
- hauteur : Z de 100 à 127 (molette,
deplace hors prise … +9à 11:23:16), soit la racine à 141 cm au-dessus du sol (« hauteur sur la surface 203 cm » à la prise).
SceneCamerareste pourtant où le jeu l'a posée (le cadrage depickPreset, au début de la scène). Elle ne bouge que par l'orbite (B2n, ZQSD) et le tangage (souris Y,RotateCamera), sans jamais se réorienter vers le couple. Le couple finit hors du cadre. Cause établie par l'absence de toute écriture de position de caméra liée au couple dans le code (B2n, P3 et Room 125 tournent ou avancent la caméra, sans cible) ; estimée pour le cadrage exact à l'écran. -
Les clics sans prise (11:23:47 à 11:24:02,
G=1 prise=0) en sont la conséquence. La sélection demande que le curseur soit à moins de 120 px du segment bassin-tête projeté à l'écran. Couple hors du cadre ou derrière la caméra : la projection échoue, et il n'y a pas de prise. C'est voulu. -
Un mur entre la caméra et le couple n'est pas exclu, mais le journal ne le montre pas (il n'y a pas de témoin d'occlusion en mode Scene).
-
Remarque pour Big Boss : aucune ligne
Show couple : place reprisedans ce journal, alors que plusieurs poses ont déplacé le meneur (11:22:15, 11:22:21). À vérifier : G3 (CAM03D85D28+ STE) est-il dans le build COMMUN-11 ?
2. Conception proposée
G-a, recadrage (C++, LPCameraModeSubsystem)
RecenterSceneCamera() place SceneCamera sur le couple :
- cible = pivot du couple, plus 60 cm au-dessus de la racine du maillage (le milieu du corps) ;
- distance par défaut 300 cm, hauteur +120 cm. L'azimut de la caméra actuelle autour du couple est gardé, pour limiter le saut ;
- caméra bornée dans l'intérieur réel (F1), à 20 cm des murs et sous le plafond. Un tracé Visibility de la cible vers la caméra (couple ignoré) la ramène devant le premier obstacle, comme un bras de caméra ;
- rotation : regard sur la cible ;
- une ligne au journal :
Sexe : vue recadree sur le couple (raison).
G-b, recadrage à l'entrée en mode Scene (C++)
À chaque passage de la vue vers SceneCamera pendant le sexe (entrée en scène, retour depuis le dernier POV), on
appelle RecenterSceneCamera() une fois.
G-c, la caméra de scène suit le couple (C++)
- En mode Scene, quand le pivot du couple bouge hors d'un glisser (flèches, molette, borne E1, jeu),
SceneCamerase déplace du même vecteur, à la même image. Le cadrage est gardé. - Pendant un glisser, la caméra reste figée (B2p-D) ; au relâcher, elle ne saute pas.
- Borne de distance douce : au-delà de 900 cm du couple, la caméra est ramenée à 900 cm sur l'axe actuel.
G-d, C3 dans le cycle C du sexe : nouveau cycle Scene → C3 → POV 1 → … → POV n → Scene
La touche C est gérée par le PC (Blueprint) : IfThenElse_44 (SexCameraIndex inférieur au nombre de personnes →
POV suivant ; sinon → Scene). Deux façons de faire :
-
Option 1 (recommandée) : PC, par MCP, petit ajout.
- Une variable
SexC3(bool) dans le PC. - Dans la voie sexe de la touche C (
IfThenElse_23.then), avant44: Branche (POVOnfaux ETSexC3faux) :- vrai :
SexC3= vrai, fin (la vue ne change pas) ; - sinon, si
SexC3est vrai :SexC3= faux, puis44(POV 1, comme aujourd'hui).
- vrai :
- La voie « Scene » (else de 44) remet
SexC3à faux. - Le C++ suit
PC.SexC3par réflexion :- au front montant,
RecenterSceneCamera(); - tant qu'il est vrai, l'indicateur affiche « Camera: C3 Couple ».
- au front montant,
En C3, l'orbite, ZQSD, la molette et le glisser marchent comme en Scene (même caméra).
- Volume : environ 6 nœuds et 1 variable dans le PC (MCP, GO du PC nécessaire), plus environ 20 lignes de C++.
- Une variable
-
Option 2 (C++ seul, sans asset) : intercepter C. On ne la recommande pas. Le C++ voit l'appui sur C en mode Scene, laisse le PC passer en POV 1, puis le défait une image plus tard (vue,
POVOn,SexCameraIndex). Mais la voie POV du PC change aussi des visibilités (cheveux, panneauWall, tête), et il faudrait les défaire. C'est fragile, avec une image de POV visible.
G-e, Room
Room n'est pas touché. La vue Scene est déjà SceneCamera (B2p-R) ; le reste est en C++. Seul le PC est touché
dans l'option 1.
3. Estimation
- C++ (G-a, G-b, G-c, suivi de
SexC3, indicateur) : environ 150 lignes, 1 h 30 d'écriture, 25 min de VAL statique, sans jeton. - PC (option 1) : instantané, environ 30 appels MCP (lp-mcp-bp), VAL V5 et V6 par un agent distinct. Environ 40 min d'éditeur sous UE-GO. Le PC doit être dans le GO.
- Essais :
- CAM-76 : C en scène, ordre Scene → C3 → POV 1 → POV 2 → Scene ;
- CAM-77 : C3 recadre sur le couple, même après un glisser ou des flèches ;
- CAM-78 : entrée en Scene recadrée ;
- CAM-79 : flèches et molette, la caméra suit le couple ;
- CAM-80 : caméra jamais hors de la pièce ni derrière un mur au recadrage.
4. Risques
- G-c : un déplacement du couple par le jeu (changement d'animation, recalage) déplace aussi la caméra. C'est le but,
mais le cadrage de
pickPresetn'est plus gardé. - Option 1 : la variable
SexC3reste vraie si la scène se termine en C3. La voie de fin de scène doit la remettre à faux. Le C++ la remet aussi à faux quandSexOnpasse à faux (réflexion, variable du PC). - Le recadrage peut tomber derrière un meuble haut : le tracé ramène la caméra devant l'obstacle (vue plus proche).
5. Compléments COMMUN-11 (R4) : G-e (lit), G-f (dessus des meubles), G-g (panneau des positions)
5.1 DIAG (journal COMMUN-11, lu sans le modifier)
- La hauteur de pose est fausse depuis le début de la scène. Toutes les prises disent
hauteur sur la surface 189 cm(couple au sol, Z = 87), puis 203 et 206 cm (établi : lignescouple prisde 11:17 à 11:31).- Au sol, la racine du maillage est à 87 − 88 = −1, soit 101 cm au-dessus du sol (−102) : le couple flotte.
- B2p-D garde cet écart pris à la prise (
GrabHeight) et le reporte sur chaque nouvelle surface. Un couple qui flotte au départ flotte donc partout, et il « se pose » 2 m au-dessus d'un meuble (Z = 150 à 11:31).
- Le tracé vertical (canal Visibility) ne voit pas le lit (estimé, fort). Au-dessus du lit, il traverse jusqu'au
sol : depuis E2, la surface vaut au moins le dessus du sol. La hauteur prise sur le lit vaut alors l'écart au sol.
STE, lui, met les meubles en Block sur le canal Pawn pendant la scène (
Show couple : Pawn chambre Block=14). Le tracé de CAM doit utiliser ce canal-là. NODE_AddStaticMeshComponent-0_60est un meuble où une PNJ est assise (Occupied by Jasmine, dessus à −52,3). Son maillage n'est pas nommé dans le journal : ce peut être un lit au nom inattendu, ou un siège voisin. Le témoin de refus écrira désormais le nom du maillage. La règle des lits reste celle de STE (IsBedMesh).- « pour lit je dois passer latéralement » : avec une hauteur fausse (lit non vu, écart de 189 cm), la boîte de test de G1 est placée trop haut ou trop bas par rapport au cadre et à la tête de lit. Elle recouvre un meuble voisin ou le bout du lit, et le pas est refusé. Une hauteur juste règle l'essentiel ; G1 garde le refus des meubles qui dépassent la surface.
5.2 G-e : pose sur le lit (C++)
- Tracé vertical sur le canal Pawn (même réglage que STE pendant la scène), avec la règle « surface ≥ dessus du sol » de E2.
- Hauteur = surface + écart racine-acteur + 3 cm : la racine du maillage est posée sur la surface, comme dans les
poses du jeu (COMMUN-6 :
root=-46pour un lit à −49). Elle ne dépend plus de l'écart pris à la prise. Un couple qui flottait retombe sur la surface au premier glisser. - La ligne
couple prisdonne l'écart racine-surface réel, et le nom du composant de surface.
5.3 G-f : surfaces admises (C++)
- Au glisser, la surface sous la place visée doit être le sol de la pièce (
Room.Box, ou aucun impact au-dessus du sol) ou un lit (règleIsBedMeshde STE : nom contenant « bed »,fnt_ext011,fnt_new045,fnt_new235). - Toute autre surface (commode, bureau, armoire) : le couple ne va pas là ; il reste à la dernière place admise. Une
ligne est écrite par changement :
Sexe : surface refusee <composant> (<maillage>). - Les lignes
place refusee(G1) donnent aussi le nom du maillage.
5.4 G-g : panneau des positions au clavier et au clic molette (PC + C++)
DIAG (dump du PC) :
- un clic court (bouton tenu moins de 0,2 s,
HoldTime) du gauche ou du droit, pendant le sexe, passe parIfThenElse_42→110→123(SexOn) →CallFunction_35LeftMouseSexOn, ou parIfThenElse_43→111→19→15(SexOn) →IfThenElse_10; LeftMouseSexOn(CustomEvent_11) →IfThenElse_10(Cursor.BelowCursorvisible) : vrai →ExitSexActions(cache le panneau), faux →GI.SexInterface.TextBlock_1visible (montre le panneau). C'est la bascule du panneau des actions et positions ;- la barre espace est l'action
Pause:InputAction_3(estimé : seule action qui basculeGI.GamePaused) →63(BuilderOn) →40→277PlayClick→GamePaused = NOT GamePaused. Pendant le sexe, Espace met donc le jeu en pause ; - le clic molette sert à l'orbite (action
RotateCamera: molette ou Alt ;MoveCameraestimé).
Correctif proposé :
- PC (MCP, sous UE-GO) :
- (1) couper la bascule par les clics pendant le sexe :
break_pins123.then→35et15.then→10(2 coupures). Hors sexe, les brancheselsene changent pas ; - (2) Espace pendant le sexe : dans la voie
Pause, une Branche (GI.SexOn) entre40.thenet277. Vrai → un nouvel appelLeftMouseSexOn(bascule du panneau, sans pause) ; faux →277(pause, inchangée). Cela fait 2 nœuds et 4 liens.
- (1) couper la bascule par les clics pendant le sexe :
- C++ : clic molette court pendant le sexe (appui puis relâcher en moins de 0,2 s, souris immobile à 5 px près)
→
PC.LeftMouseSexOnparProcessEvent(événement sans paramètre). Une glissée à la molette reste l'orbite. Une ligneSexe : panneau bascule (clic molette). - Retour à la sortie : tout est conditionné par
SexOn. Hors sexe, les clics gauche et droit (elsede 123 et de 15) et Espace (pause) sont inchangés, et le C++ n'agit pas. - À confirmer à l'essai :
InputAction_3est bienPause(Espace). L'éditeur MCP le montrera au passage (nom de l'action du nœud).
5.5 Estimation revue
- C++ en plus (G-e, G-f, noms de maillage dans les refus, clic molette) : environ 70 lignes, 45 min, 20 min de VAL statique.
- PC en plus (G-g : 2 coupures, 2 nœuds, 4 liens), dans le même passage MCP que
SexC3(G-d) : environ 50 appels au total, environ 55 min d'éditeur, puis VAL V5 et V6. - Essais :
- CAM-81 : glisser sur le lit, de face et d'en haut, posé sur le matelas ;
- CAM-82 : glisser sur une commode, refusé ;
- CAM-83 : clics gauche et droit sans bascule du panneau ; Espace et clic molette basculent ;
- CAM-84 : hors sexe, Espace met en pause et les clics font comme avant.