76 KiB
Fiche STE-ORG — Niveau N3 — Modèle prévu (modèle de l'agent lp-cart) | utilisé claude-sonnet-5-5 — Agent lp-cart — Skills sk-protocol (préchargés avec l'agent : ue-cpp-build, lp-commandlets, lp-paths)
STE-ORG-AUDIT : bonus d'orgasme des scènes de sexe (2026-10-13, version 3 : build de l'auteur lu)
Hors gabarit : les sections suivent la rubrique 7 de la fiche (§ 1 à 5) et les ajouts de l'orchestrateur (chaîne maillon par maillon en tête du § 4 ; points 5 à 8 au § 6, notés P5 à P8 ; captures en jeu et build de l'auteur au § 4.4). Correspondance avec le gabarit CART : 1 objet = § 0 ; 2 commandes = § 7 ; 3 constats = § 1 à 4 et 6 ; 4 établi / estimé / incertain = colonne « Niveau » et § 8 ; 5 points à confirmer = § 5 ; 6 questions = Q# du § 5. Lecture seule : aucun éditeur, MCP, commandlet, build ni jeu ; l'exécutable de l'auteur n'a pas été lancé ; aucun fichier du projet modifié hormis ce livrable. Deux refus du crochet (§ 7, points 12 et 17), tous deux causés par un > dans mes propres commandes ; après le second, arrêt des lectures (rubrique 9) : ce qui n'a pas été lu est en § 5. Budget dépassé : 63 tours pour 60 (demandes successives de l'orchestrateur), sous le plafond de 70.
Sigles de fichiers (tous sous D:\Game\LifePlay-master 5.8\Docs\Migration\etat\ sauf mention)
| Sigle | Fichier | Contenu |
|---|---|---|
| P-STG | ST\STG\dumps\Person__EventGraph.txt |
dump LPDumpFunction de l'EventGraph de Person, copie de travail du 2026-10-13 (après STG/CAM) |
| P-STA | ST\STA\dumps\Person__EventGraph.txt |
idem, 2026-10-09 (avant STG/CAM, état de HEAD) |
| GI-P2 | ST\STE\dumps\GI__EventGraph_P2.txt |
EventGraph de GI, dernier dump STE |
| GI-PASA | ST\STA\dumps\GI__PlayAppropriateSexAnimation.txt |
fonction PlayAppropriateSexAnimation de GI (2026-10-09) |
| PC-STE | ST\STE\dumps\PC__EventGraph.txt |
EventGraph de PC (menu d'actions) |
| L6f-P / L6f-G | portage55\L6f\L6f_dump_Person.txt / L6f_dump_GI.txt |
dumps 5.5 de tous les graphes (2026-09-30, avant le passage en 5.8) |
| BUILD-A | D:\XxX\LifePlay_2023_04_Stable_64bit |
build compilé de l'auteur, version 2023.04 Stable (lecture seule) |
Les numéros de ligne sont ceux du fichier cité. Les dumps de PC, de P-STA et de GI-PASA portent le préfixe LogLPDump: Warning: sur chaque ligne (la numérotation reste celle du fichier). |
0. Objet et périmètre (CART 1)
Un domaine : le bonus d'orgasme des scènes de sexe et la chaîne qui y mène : jauge → seuils 90 et 100 → orgasme → bonus. Demande de l'utilisateur relayée par Big Boss (2026-10-13) : dans la dernière version compilée de Vinfamy, chaque personne qui avait un orgasme recevait un bonus ; il ne l'a jamais vu dans les sources livrées. Précisions : entre 90 et 100 une option permet d'éjaculer sur le partenaire, à 100 l'orgasme est automatique. Trois captures en jeu de l'utilisateur, prises dans la dernière version compilée de l'auteur (référence attendue, non nos sources) : texte rouge « Close to cumming… », actions « Cum on Face / Tits / Belly / Feet (new) », texte vert « Pick bonus reward for last person who came », grille 4 × 4 d'objets, puis, après l'orgasme, deux lignes de résultat « prone_to_orgasm -1.1 » et « fitness +1.1 » (descriptions de l'orchestrateur, capture 1 relue à l'image). Le build de l'auteur a été indiqué par l'utilisateur : D:\XxX\LifePlay_2023_04_Stable_64bit.
Hors périmètre (non lu) : le corps de ModifyStat, le graphe du widget SexAction, le graphe du widget Cursor, les nœuds désactivés au niveau du nœud (voir § 5).
1. Ce que fait le bonus dans nos sources (GiveOrgasmReward)
GiveOrgasmReward n'est pas une fonction : c'est un événement personnalisé de l'EventGraph de Person (P-STG:16059-16061, K2Node_CustomEvent_87). Il s'exécute sur la personne qui jouit (self implicite : P-STG:16073, 16082). Déroulé, établi par lecture de P-STG :
OrgasmIrBoost()(appel P-STG:19074-19077,K2Node_CallFunction_1005, branché surthende l'événement, P-STG:16061). Corps (événement P-STG:19071-19073) :ForEachLoopsurRacesFucking(P-STG:19078-19087) →ModifyStat(Stat = 'likes_' + élément, Change = 0.25, DifficultyAdjusted = false, NoDisplay = true)(P-STG:19088-19101). Effet : +0,25 d'affinité pour chaque race partenaire, silencieux. Les statslikes_<race>n'existent que dans le module Interracial (Content\Modules\vin_Interracial\stats\likes_arab|asian|black|indian|latin|white.lpstat), etGI::GetRacesFuckingcommence parIsModEnabled('vin_Interracial')(L6f-G:49420-49427) : le « Ir » deOrgasmIrBoostest le module Interracial (estimé).IfThenElse_101surisPlayer(P-STG:16062-16069) :- joueur :
ModifyStat(mood, +20, DifficultyAdjusted = true, NoDisplay = false)(P-STG:16070-16078) ; - sinon,
IfThenElse_102(P-STG:16102-16106) siSexPersonscontientPlayerCharacter(P-STG:16094-16101) :ModifyStat(attractiontoplayer, Change, DifficultyAdjusted = true, NoDisplay = false)(P-STG:16079-16087) avec Change = 3 × (2 siCurrentTagscontient « Vaginal » ETWantsBabiescontientPrefix + SaveSlot, sinon 1), soit +6 ou +3 (P-STG:17453-17462, 17463-17485, 17486-17496) ; - sinon (PNJ sans le joueur dans la scène) : rien (
else (vide), P-STG:16106).
- joueur :
- Bénéficiaire : la seule personne dont l'événement
Cums'exécute (celui qui jouit). Le partenaire n'a un bonus que s'il jouit lui aussi. Aucun nœud deGiveOrgasmRewardne crée de widget ni ne propose un choix (les 6 nœuds atteints depuis l'événement 87 sont les deuxModifyStat, les deuxIfThenElse, l'appelOrgasmIrBoostet l'événement lui-même). Aucune écriture deprone_to_orgasmni defitnessdans cette chaîne : dans Person, ces deux stats ne sont que lues (QueryStat, P-STG:16755-16763 pourprone_to_orgasm, 15825-15833 pourfitness). - Conditions : aucune condition sur
prone_to_orgasm, le compteur ou un maintien de bouton.prone_to_orgasmrègle la vitesse de la jauge, pas le bonus (L6f-P:16378, 16680-16690 ;prone_to_orgasm.lpstat:2).Sex_OrgasmCountsdivise le gain de jauge suivant (L6f-P:16533-16555). La chaîne « Hold still for orgasm boost » n'apparaît dans aucun dump (le dumper n'imprime quePin->DefaultValue, pasDefaultTextValue:Source\LifePlayEditorTools\LPDumpFunctionCommandlet.cpp:57-59) ; elle est dansPerson.uasset(octets 10105696 et 13816200) et, d'après la lecture du build, dansPerson.uexpde l'auteur ; propriétaire inconnu (§ 5, L3). - Autre gain, indépendant de l'orgasme : à la fin de l'acte,
GI::EndSexapplique à chaque participantarousal -50puismood +50(GI-P2:7803-7811 et 9829-9837 ; atteints depuisEndSexGI-P2:6787, 53 nœuds). - Ce que dit l'auteur de ce bonus : le journal des versions de BUILD-A (
Docs\Change_Logs.txt:1017) décrit « chaque fois que vous amenez votre partenaire à l'orgasme, il gagne de l'attirance pour vous ; chaque fois que vous jouissez, vous gagnez de l'humeur », et:962un bonus pour les positions vaginales et les créampies avec quelqu'un qui veut un bébé. C'est exactementGiveOrgasmReward(mood joueur, attirance partenaire, facteur ×2 « Vaginal + WantsBabies ») : c'est le bonus ancien et automatique, présent chez nous.
2. Appelants et coupures
Chemin jusqu'à l'événement, établi (nœuds et liens lus ; vérifié par un parcours d'exécution automatique, script execwalk.py du scratchpad de session, v3, qui retrouve les 10 nœuds que la lecture manuelle donnait pour l'événement Cum de Person) :
- Un seul appel de
GiveOrgasmReward:K2Node_CallFunction_722(P-STG:16107-16110). Sonexecutevient dePlayCumParticle(P-STG:16751-16754) ←Sex_Orgasm := 0.0(P-STG:17282-17287) ← macroIncrementIntdeSex_OrgasmCounts(P-STG:16118-16125) ←PersonCumming := self(P-STG:17592-17597) ← événementCumde Person (P-STG:15920-15922). Sonthenva àSetText(CumText)(P-STG:15980-15984) puis auSwitchsur l'indice de la personne (P-STG:15936-15941) →GI::Cum(P-STG:15958-15973). Parcours d'exécution depuisCum: « 10 noeuds atteints sur 3702 » (722 compris). - Appelants de l'événement
Cumde Person : a) Orgasme automatique :IfThenElse_99testeSex_Orgasm == 100.0(P-STG:16030-16039) →Cum()(P-STG:16040-16043), dans la suite deUpdateOeChange:updateOrgasmChange(P-STG:15853) →updateEnergyChange(15858) →Sex_Orgasm := FClamp(Sex_Orgasm + Sex_Orgasm_Change, 0, 100)(15873-15878, 15896-15901) →Sex_Energy(15890-15907) →TogglePulloutNotification()(P-STG:17315-17318) →IfThenElse_99(P-STG:17317, 16036).UpdateOeChangeest appelé pour chaque personne deSexPersonspar le temporisateur de GI (GI-P2:27422-27438 ;K2_SetTimerDelegateen boucle, périodeSexDurationMult, GI-P2:27474-27487). b) Animation baliséeFinish:GI::PlayAppropriateSexAnimationtesteArray_Contains(Tags, 'Finish')(GI-PASA:348-357) →Person_C::Cum()surPersons[0](GI-PASA:358-361 et 87-90). Même câblage dans le dump 5.5 (L6f-G:25212-25220). - Appelant de
OrgasmIrBoost:GiveOrgasmRewardseulement (P-STG:19074). Aucun autre BP ne porte les trois nomsGiveOrgasmReward,OrgasmIrBoost,TogglePulloutNotification:grep -a -osur les 100.uassetdeContent\BPsetContent\UI→ seulBPs/Person.uasset : 6(3 noms × 2). - Chemin qui contourne le bonus : le bouton de fin d'acte (animation
Endsex, « Finish having sex », PC-STE:2483, 2670-2671) appelleGI::cum(pile du journal,STE-H3f-DIAG.md:30-32), l'événementCumde GI (GI-P2:10803-10809). Parcours depuis cet événement : « 22 noeuds atteints sur 6247 » (StopDirtyTalkAndDescription,DirtyTalkEnd,DescriptionEnd,PC::StopUpdateSpeed, temporisateur 10 s,PlayWorldCameraShake,SexInterface::ShowCumming,Person::CumOn,CumSound,AfterCumSpeed,CheckConceived,EndSex) : niPerson::Cum, niGiveOrgasmReward, niModifyStat, ni widget de choix. Preuve en jeu :PersonCummingvautNonedansAfterCumSpeedaprès un clic surEndsex(STE-H3f-DIAG.md:28-32, F2) ; même pile en 4.27 (STE-H3f-DIAG.md:74). - Branche constante : dans GI,
IfThenElse_182aCondition = 'true'(broche non reliée) et choisit le nouveau modèle (StartUpdateOeForSexPersons, GI-P2:27565-27573) contre l'ancien modèleToCum(else→ minuteurUpdateToCum, GI-P2:6964-6971, 7129-7210). Même littéral en 5.5 (L6f-G:71954-71956). L'ancien modèle ne démarre plus (P5). Ce n'est pas une coupure du bonus. - Nœud orphelin :
IfThenElse_184aexecute (vide)(GI-P2:27530-27534) : sans effet sur le bonus. - Nœud désactivé : aucun
ENodeEnabledState::Disableddans Person, GI, PC, Room, SexAction (grep -a -o= 0, § 7) ;DevelopmentOnlyprésent une fois chacun (nœud inconnu, sans doute unPrintString, ex. GI-P2:10857-10867). Le dumper ne dit pas quel nœud (§ 5, L2). - Variable jamais vraie / retour anticipé : aucun dans la chaîne lue.
FClamp(…, 0, 100)rend exactement 100.0 (P-STG:15896-15901) : le test== 100.0est atteignable. - Séparation HEAD / copie de travail : 11 motifs de la chaîne sur 12 tombent aux mêmes lignes dans P-STA (état de HEAD) et P-STG (11323, 11735, 11752, 14554, 16033, 16107, 16505, 16507, 17366, 17524, 18424 ; seul
OrgasmIrBoostpasse de 19080 à 19074). Les modifications non commitées dePerson.uasset(STG/CAM) ne touchent donc pas la chaîne (estimé : comparaison sur les lignes de correspondance). Le blob de HEAD ne contient aucunENodeEnabledState::Disabled.
3. 4.27, 5.5, modules et build de l'auteur
Recherche des textes exacts des maillons des captures par grep -a -l -F (un -o pour le build de l'auteur) dans BPs, UI, Structs de chaque arbre ; Content\Modules par Grep. « — » = aucun fichier.
| Texte | Copie de travail 5.8 | Copie 4.27 (2026-09-07) | Sources d'origine 2024 | Build 4.27 cuit LifePlay_Build_2026.9 |
BUILD-A (auteur, 2023.04 Stable) |
|---|---|---|---|---|---|
| « Close to cumming » | UI/SexInterface.uasset |
idem | idem | UI/SexInterface.uexp |
UI/SexInterface.uexp (2) |
| « Cum on Face / Tits / Belly / Feet » | BPs/GI.uasset (les 4) |
idem | — | BPs/GI.uexp |
BPs/GI.uexp (3 / 2 / 2 / 3) |
| « Encourage my partner to lead » | BPs/PC.uasset |
idem | — | BPs/PC.uexp |
BPs/PC.uexp (1) |
| « Sabotage condom » | BPs/PC.uasset |
idem | BPs/PC.uasset |
BPs/PC.uexp |
BPs/PC.uexp (1) |
| « Hold any mouse button to rotate camera » | UI/SexInterface.uasset |
idem | idem | UI/SexInterface.uexp |
non cherché |
| « Hold still for orgasm boost » | BPs/Person.uasset (2) |
idem (2) | — | non cherché | BPs/Person.uexp (1) |
GiveOrgasmReward, OrgasmIrBoost, TogglePulloutNotification |
BPs/Person.uasset |
idem | — | BPs/Person.uasset (1 chacun) |
BPs/Person.uasset (1 chacun) |
| « Pick bonus reward » et « last person who came » | — | — | — | — | UI/Cursor.uexp (2 et 2) |
- Modules :
Grepdecum on (face|tits|belly|feet)|\(new\)surContent\Modulesde la copie 5.8 → 0 ; surD:\XxX\LifePlay_2023_04_Stable_64bit\LifePlay\Content\Modulesde l'auteur,Cum on Face|Pick bonus reward|Close to cumming|Cum on Tits→ 0. Ces textes ne sont donc pas dans les modules texte, ni chez l'auteur ni chez nous ; ils sont dans les assets (GI,PC,SexInterface,Cursor).Mods\de la copie 5.8 est vide. Le suffixe « (new) » est fabriqué par le code de GI (InSuffix = ' (new)'GI-P2:20457 ; testsSubstring ' (new)'GI-P2:29863,'(new)'29891 ; mêmes nœuds en 5.5 : L6f-G:66226, 71172, 72139), pas par un module. - Sources d'origine 2024 :
Person.uasset(14 675 874 o, 2024-08-27) sans aucun des nomsGiveOrgasmReward,OrgasmIrBoost, « Hold still… »,TogglePulloutNotification. Copie 4.27 (19 799 322 o, 2026-09-07), builds cuits 2026.9 etDevelopment_427, commit L01122e17, HEAD, tagsv1.0àv1.5,ue5.5-final, build 5.5Shipping_V1.5:GiveOrgasmRewardprésent (1 ; 2 pour HEAD et la copie de travail, sérialisation 5.8). Dump 5.5 (L6f, 2026-09-30) : même câblage qu'en 5.8 (CumL6f-P:37118-37120,IfThenElse_9937233-37237,Cum()37238-37241, événement 37257-37259,mood37268-37276,attractiontoplayer37277-37285, appel 722 37305-37308,PlayCumParticle37958-37961,OrgasmIrBoost40298-40304). Coupure de portage (U5, L6, L7) : aucune sur la chaîne lue (estimé : nœuds de la chaîne comparés). - Build de l'auteur BUILD-A (lecture seule, exécutable non lancé) : version « 2023.04 Stable » (
Docs\Change_Logs.txt:1) ; moteur UE 4.20 (++UE4+Release-4.20dansLifePlay\Binaries\Win64\LifePlay-Win64-Shipping.exe, 48 952 832 o, 2023-05-04 13:36 ;LifePlay.exe304 128 o, 2023-05-04 13:35) ; aucun.pak(find … -iname "*.pak"sur 6 niveaux : rien) : les assets cuits sont en fichiers.uasset/.uexplistés dansManifest_UFSFiles_Win64.txt(1 895 791 o ; ex.LifePlay/Content/BPs/GI.uasset|.uexp,Person,PC,UI/SexAction,SexInterface,SexOrgasmEnergy, daté 2023-05-04T11:33Z) ; dossiersContent:BPs,Heavy,Modules,Movies,Render,Saves,Scenes,Structs,UI. Non chiffré : les chaînes ASCII sont lisibles pargrep -a(§ 7, point 15). Rien d'autre que nos propres builds n'a été trouvé sousD:\GamehorsBackupetLifePlay_Build_5.8_*:D:\Game\DC4\LifePlay-master(nos sources 5.5),LifePlay_Build_5.5_*(nos builds, avec.pak, non fouillés),LifePlay_Publication\stage_game_v1_4|v1_5|v2_0(nos archives Revival). - Journal des versions de BUILD-A (texte clair,
Docs\Change_Logs.txt) : version 5.26 (:36-39) : « chaque fois qu'il y a un orgasme pendant une scène adulte, cliquez n'importe où et vous avez une chance de choisir parmi 5 récompenses bonus, qui changent sensiblement une stat de la personne (rendements décroissants) ; sauf quelques-unes, les stats possibles dépendent des tags de la position qui a mené à l'orgasme » ; version 5.27 (:34) : ajout dans Esc > Settings de l'option « Disable Bonus Orgas[m] Rewards », « le plus gros changement du système de scènes adultes de la version précédente », ajoutée à cause de plantages autour des orgasmes. Anciennes versions ::992(animations « cum on face, tits, back… »),:1014-1019(barres d'énergie et d'orgasme séparées, attirance du partenaire et humeur du joueur à l'orgasme),:962(bonus vaginal / créampie). Lecture (estimé) : nos sources contiennent le bonus automatique ancien (GiveOrgasmReward), les actions « Cum on … » (absentes des sources d'origine 2024, présentes dès la copie 4.27), le message à 90, mais pas la grille « Pick bonus reward » de la version 5.26 de l'auteur. Nos sources sont donc antérieures à la version 5.26 de l'auteur (le fait établi : un texte du widgetCursordu build de l'auteur manque dans les quatre arbres ; la version exacte de nos sources n'est pas lue, § 5 L13). Ce que prouve la présence d'un nom dans un.uasset: un symbole déclaré ; l'appel est prouvé au § 2.
4. Verdict et correction estimée
4.1 La chaîne des captures, maillon par maillon (sources HEAD 5.8, 5.5, 4.27, modules)
| # | Maillon (capture) | État dans nos sources | Preuve | Niveau |
|---|---|---|---|---|
| 1 | Jauge ≥ 90 et texte rouge « Close to cumming, keep going to 100 to cum in place, or click anywhere to select where to cum » | présent et relié | Seuil 90 : constante GreaterEqual(Sex_Orgasm, 90.0) P-STG:17363-17367 → TextBlock_0 de SexInterface Visible (P-STG:17413-17428) ; chaîne dans UI/SexInterface.uasset des 4 arbres (§ 3) ; garde : première personne, homme ou « Penis », filtre MF, MM, FF + « Shemale » (P-STG:17334-17339, 17371-17401). Même seuil dans PC (PC-STE:6128-6142) |
établi (lecture) ; couleur rouge et affichage réel non vus |
| 2 | Actions « Cum on Face / Tits / Belly / Feet (new) » (menu filtré sur « Cum ») | présent, câblage non lu | Textes dans BPs/GI.uasset (5.8, 4.27) ; (new) ajouté par le code de GI (GI-P2:20457, 29863, 29891) ; animations Finish proposées seulement si Sex_Orgasm >= 90 (PC-STE:6075-6132) et exclues du tirage aléatoire (GI-P2:27885-27898) ; clic → Persons[0].Cum() (GI-PASA:343-361) |
établi pour les textes et la logique de filtre ; la liaison texte « Cum on … » ↔ animation Finish n'est pas lue (FText invisible au dumper, § 5 L12) |
| 3 | Orgasme automatique à 100 | présent et relié | Sex_Orgasm == 100.0 → Cum() (P-STG:16030-16043), pour chaque personne (GI-P2:27422-27438, 27474-27487) ; même câblage en 5.5 (L6f-P:37233-37241) |
établi (lecture) |
| 3b | Événement Cum → GiveOrgasmReward (mood +20 / attirance +3 ou +6 / likes_<race> +0,25) |
présent et relié (bonus ancien, automatique) | P-STG:15920-15922, 16107-16110, 16059-16106, 19071-19101 | établi (graphe) ; effet en jeu non mesuré |
| 4 | Grille « Pick bonus reward for last person who came » (4 × 4 objets, titre = nom de la personne) | ABSENT | 0 fichier dans les 4 arbres (§ 3) ; présent dans UI/Cursor.uexp de BUILD-A (2 occurrences) et décrit par Change_Logs.txt:39 (version 5.26) ; aucun widget de choix dans GiveOrgasmReward (P-STG:16059-16110) ni dans GI::Cum (parcours 22 nœuds) |
établi pour l'absence dans nos copies et la présence chez l'auteur |
| 5 | Application du bonus choisi (« prone_to_orgasm -1.1 », « fitness +1.1 ») | ABSENT | Aucune écriture de prone_to_orgasm ni fitness dans la chaîne orgasme : seules des lectures QueryStat (P-STG:16755-16763, 15825-15833) ; les deux lignes de la capture sont l'affichage d'un ModifyStat non silencieux (estimé, vu GiveOrgasmReward qui affiche mood de la même façon) |
établi pour l'absence ; valeurs des objets : inconnues (§ 5, L12) |
| 6 | Chemin Endsex → GI::cum |
présent mais coupé de Person::Cum |
GI-P2:10803-10809 + parcours 22 nœuds ; STE-H3f-DIAG.md:28-32 |
établi (graphe et pile) |
Premier maillon qui manque dans l'ordre de la chaîne : le maillon 4 (la grille), suivi du 5. Les maillons 1, 2, 3 et 3b existent et sont reliés (le 2 : câblage texte ↔ animation non lu). Premier maillon coupé : le maillon 6, pour le seul bouton de fin d'acte.
4.2 Verdict
- Bonus ancien et automatique (
GiveOrgasmReward) : ACTIF dans les sources 5.8 (HEAD et copie de travail), 5.5 et 4.27 (noms), par lecture statique des dumps, non vérifié en jeu ; absent sur le cheminEndsex; partenaire sans bonus sur le cheminFinish. - Bonus à choisir dans la grille (captures) : ABSENT des sources, à reconstruire. Il appartient à la version 5.26 de l'auteur (
Change_Logs.txt:39), que nos sources n'ont pas : le texte est dansUI/Cursor.uexpde BUILD-A et dans aucun de nos quatre arbres. Ce n'est donc ni « présent mais non affiché » ni « coupé » : c'est une fonctionnalité postérieure à nos sources. Le premier maillon manquant est celui de la grille (maillon 4). - Écart avec le souvenir de l'utilisateur : il se souvient d'un bonus reçu par chaque personne qui jouit. Dans la version de l'auteur ce bonus est à choisir (clic n'importe où après l'orgasme, 5 récompenses, effet de ±1 sur une stat, rendements décroissants, désactivable par une option de la version 5.27), alors que dans nos sources il est automatique et mineur (humeur du joueur, attirance du partenaire, affinités raciales silencieuses). Il n'a jamais vu le choix dans nos builds parce qu'il n'existe pas dans nos sources.
4.3 Correction estimée (non écrite ; aucune modification des scènes de sexe avant la release, correction après l'alpha)
- Chaîne 100 et
Finish: aucune correction. - Bonus sur
Endsex(si l'utilisateur le veut) : appelerPerson::GiveOrgasmReward(ouPerson::Cum) depuis le gestionnaire de clic du widgetSexActionpour la brancheEndsex, avantGI::cum; 1 à 3 nœuds dansSexAction.uasset. Risque : double bonus après une animationFinish;PersonCummingserait enfin renseigné (corrige F2 de H3f). À décider après lecture deSexAction(L1). - Reconstruction de la grille (maillons 4 et 5) — estimation grossière (estimé ; aucune lecture du graphe de l'auteur, ses assets sont cuits en UE 4.20 et ne s'ouvrent pas dans l'éditeur 4.27 / 5.x) :
- dans
Cursor(ou un nouveau widget) : texte vert, titre = nom de la personne, grille 4 × 4 de cases cliquables avec icônes d'objets (les icônes de la capture ressemblent à des objets de bondage / d'inventaire :Content\UI\Bondage.uasset,Inventorynon lus ; textures à confirmer) ; - un appel depuis
Person::Cumjuste aprèsGiveOrgasmReward(P-STG:16107-16110) pour la personne qui jouit (joueur seulement ?), qui passe les tags de la position (CurrentTags) ; - une fonction de tirage des stats candidates selon les tags (« quelques-unes » fixes, le reste dépend des tags), 5 récompenses proposées, un
ModifyStat(stat, ±~1,1, NoDisplay = false)à l'application, une atténuation selon le nombre d'orgasmes (Sex_OrgasmCountsexiste déjà, P-STG:16118-16125) ; - une option « Disable Bonus Orgasm Rewards » dans les réglages (menu, sauvegarde du réglage) ;
- gestion de la pause / du clic « n'importe où » du menu d'actions (
PC). Taille L (un widget, quelques dizaines de nœuds, données de récompenses, réglage, icônes) ; risque élevé (interface de scène de sexe, état de jeu en pause, sauvegarde, plantages signalés par l'auteur autour des orgasmes,Change_Logs.txt:34) ; à planifier après l'alpha, après les réponses Q1, Q2 et la lecture L9, L12. Source de logique la plus sûre : les identifiants et les textes deUI/Cursoret deBPs/GIdu build de l'auteur (noms de fonctions et de variables lisibles dans la table de noms du.uasset), à comparer à nosCursor.uasset/GI.uasset(L9).
- dans
4.4 Captures en jeu (images lues, chemins non recopiés)
- Capture 1 (lue à l'image) : menu de gauche « Encourage my partner to lead », « Switch camera », « Swap roles », « Sabotage condom », « Make out (new) » ; texte vert « Pick bonus reward for last person who came » ; grille 4 × 4 d'icônes d'objets avec le titre « John Smith » ; jauges en haut à droite (Lauren V : 22.2 (−0.16) et 0 (−0.31) ; John Smith : 49.9 (−0.07) et 11.4 (+0.66)) ; aide en bas avec des mentions « (NEW) » sur la caméra. Les jauges sont très probablement l'énergie et l'orgasme du widget
SexOrgasmEnergy(blocsenergy_change,orgasm_change:ST\LISIB\LISIB-T1-inventaire.md:126-127; mise à jourSexOrgasmEnergy_C::UpdateData()GI-P2:27467, 27613) ; la valeur négative est la baisse naturelle (prone_to_orgasm.lpstat:2). - Captures 2 et 3 (descriptions de l'orchestrateur, non relues) : avant l'orgasme, jauge de John à 95.4 (+1.12), texte rouge « Close to cumming… », menu filtré sur « Cum » (« Cum on Face / Tits / Belly / Feet (new) »), grille déjà affichée ; après l'orgasme, jauge de John à 0, dialogue d'après l'orgasme, lignes « prone_to_orgasm -1.1 » et « fitness +1.1 ». Ces deux lignes correspondent à l'application du bonus choisi (maillon 5).
- Les mentions « (NEW) » de l'aide ne prouvent pas un build plus récent que nos sources pour toutes les fonctions : « Sabotage condom » et « Close to cumming » sont dans les sources d'origine 2024 ; « Encourage my partner to lead » et « Cum on … » sont dans la copie 4.27 mais pas dans l'origine 2024 (§ 3). Seule la grille « Pick bonus reward » manque à tous nos arbres.
5. Lectures manquantes, ce qu'elles trancheraient, questions
| # | Lecture manquante (commande ou appel, non lancée) | Ce qu'elle trancherait |
|---|---|---|
| L1 | .\Tools\RunCommandlet.ps1 -Lot STE-ORG -Commandlet LPDumpFunction -Args '-BP=SexAction -Fn=EventGraph -Pins -Exec' -EtatDir 'D:\Game\LifePlay-master 5.8\Docs\Migration\etat\ST\STE' (éditeur fermé : .\Tools\UeState.ps1 -Kind Editeur) |
Ce que le clic sur chaque bouton appelle (Endsex seul → GI::cum ? une animation Finish ?) ; confirme les maillons 2 et 6 côté widget |
| L2 | MCP get_node_infos sur K2Node_CallFunction_722, 1005, 717, 853, K2Node_IfThenElse_99 de Person (EnabledState) |
Le dumper n'imprime pas l'état d'activation. Indice : aucun Disabled dans les tables de noms ; reste DevelopmentOnly (nœuds inconnus, ne joue qu'en Shipping) |
| L3 | MCP get_node_infos sur les K2Node_FormatText / SetText de Person (DefaultTextValue) |
Propriétaire de « Hold still for orgasm boost » (présent aussi chez l'auteur) |
| L4 | Dump 4.27 de l'EventGraph de Person (commande de etat\portage55\L5-diag\, non relue ici) |
Câblage 4.27 des maillons 3 et 3b |
| L5 | Essai en jeu (Development) : scène MF avec le joueur jusqu'à 100 ; .\Tools\LogStats.ps1 -Latest <journal> -Pattern 'mood','attractiontoplayer' |
Effet réel du bonus ancien ; vitesse de la jauge |
| L6 | Corps de ModifyStat (5.8 ; 5.5 : L6f-P:561-1689) pour mood, attractiontoplayer, likes_*, fitness, prone_to_orgasm |
Aucun garde-fou ne neutralise l'effet ; comportement d'un ModifyStat non silencieux (lignes « stat ±n ») |
| L7 | LPDumpFunction -BP=GI -Fn=GetRacesFucking ; écrivain de Person.RacesFucking |
OrgasmIrBoost boucle-t-il sur une liste remplie ? |
| L8 | Où le script résout toCum dans les conditions de texte (0 occurrence dans 9 dumps GI lus) |
Si les textes toCum > 70/90 sont encore atteints (P5) |
| L9 | Comparer les identifiants de UI/Cursor.uasset du build de l'auteur à ceux de la copie 5.8 (sans caractère de redirection dans la commande) : export LC_ALL=C; B="D:/XxX/LifePlay_2023_04_Stable_64bit/LifePlay/Content"; O="D:/Game/LifePlay-master 5.8/Content"; ext() { grep -a -o -E "[A-Za-z_][A-Za-z0-9_]{5,}" "$1" | sort -u; }; { ext "$B/UI/Cursor.uasset"; ext "$O/UI/Cursor.uasset"; ext "$O/UI/Cursor.uasset"; } | sort | uniq -c | awk '$1==1 {print $2}' (les identifiants vus une seule fois sont ceux du build seul) ; idem pour BPs/GI.uasset et BPs/Person.uasset ; phrases du widget : grep -a -o -E "[A-Za-z][A-Za-z0-9 .,'!?%+-]{7,}" "$B/UI/Cursor.uexp" | sort -u |
Fonctions, variables et textes que l'auteur a ajoutés pour la grille et l'application du bonus : base de la reconstruction (liste des récompenses, noms de stats) |
| L10 | Chercher dans GI.uexp, Person.uexp, Cursor.uexp du build de l'auteur les noms de stats (fitness, prone_to_orgasm, autres) et les valeurs (« 1.1 », atténuation) |
Ce que vaut chaque objet de la grille (stat et valeur) : non établi à ce jour |
| L11 | grep -rlaF "Bonus Orgas" "<racine>/BPs" "<racine>/UI" sur la copie 5.8, la copie 4.27 et le build de l'auteur (<racine> = Content) |
Si l'option « Disable Bonus Orgasm Rewards » (version 5.27) existe chez nous (attendu : non) |
| L12 | Lire dans GI.uasset le graphe qui porte « Cum on Face / Tits / Belly / Feet » (dumper LPDumpFunction sur la fonction concernée de GI, textes FText ; ou MCP get_node_infos) |
Si les quatre actions sont reliées au menu et à Persons[0].Cum() (maillon 2) |
| L13 | Lire la première ligne de D:\Game\LifePlay_Backup_5.5\ARCH427\LifePlay-master\Docs\Change_Logs.txt (s'il existe) et de nos Docs |
Version exacte de nos sources (attendu : antérieure à 5.26) |
Questions :
- Q1 (utilisateur) : le choix d'objet de la capture est-il bien le bonus qu'il attend ? Veut-il l'option « Disable Bonus Orgasm Rewards » ? Veut-il en plus un bonus sur
Endsexet pour le partenaire ? - Q2 (utilisateur / orchestrateur) : reconstruire la grille à partir des seules chaînes et noms du build de l'auteur (sans son graphe), ou obtenir de l'auteur les sources de la version 5.26 et suivantes (licence :
Licenses\Vinfamy_License.txt) ? - Q3 (orchestrateur) : L1, L2, L9 à L13 relèvent de CAM (MCP) ou d'une lecture simple : qui les lance, et avant la release ou après l'alpha ?
- Q4 (orchestrateur) : l'ancien modèle
ToCum(brancheelsedeIfThenElse_182) est-il à garder ? Il alimente encore les textes de module (P5). - Q5 (résolue) : version du build des captures = 2023.04 Stable, UE 4.20 (
D:\XxX\LifePlay_2023_04_Stable_64bit).
6. Points P5 à P8 de l'orchestrateur
| Point | État | Preuve | Niveau |
|---|---|---|---|
| P5. Où sont lus les seuils 90 et 100 ? | |||
| 90, côté Person | présent, constante de graphe GreaterEqual(Sex_Orgasm, 90.0) |
P-STG:17363-17367 | établi |
| 90, côté PC | présent, constante de graphe, sur SexPersons[0] |
PC-STE:6128-6142 | établi |
| 100, côté Person | présent, constantes == 100.0 et FClamp(…, 100) |
P-STG:16030-16034, 15896-15907 | établi |
| 100, ancien modèle | ToCum >= 100 (GI-P2:7206-7210) et ToCum < 100 (PC-STE:1372-1376) : constantes |
établi (lecture) | |
| Variable ou fichier de module pour 90 / 100 | absent : aucun .lpscene, .lpaction, .lpai, .lpstat ne lit toCum ; seuls vin_Base\DirtyTalks\1.lptalk (12) et vin_Base\Descriptions\1.lpdesc (20) l'emploient, en texte (« toCum > 70 », « > 90 ») ; Docs\Modding\FullGuides\Writing_Sex_Text.txt:57, 66 ; Grep toCum sur Content\Modules = 32 occurrences dans ces 2 fichiers |
établi | |
Texte de module toCum |
probablement coupé : ToCum n'est incrémenté que par l'ancien minuteur UpdateToCum (GI-P2:7129, 7155-7167, 7189-7193), démarré par la seule branche else de IfThenElse_182 (GI-P2:6964-6971), dont Condition = 'true' (GI-P2:27565-27569) ; les autres écritures le remettent à 0 (GI-P2:7180-7183, 10848-10851, 27838-27841) |
estimé ; résolution du nom toCum non retrouvée (L8) |
|
| P6. Qu'est-ce qui fait apparaître l'option d'éjaculation ? | |||
| Message rouge | présent : TextBlock_0 de SexInterface visible à ≥ 90 (P-STG:17424-17428) ; texte dans UI\SexInterface.uasset (« Close to cumming, keep going to 100 to cum in place, or click anywhere to select where to cum ») |
établi (visibilité et chaîne) ; lien TextBlock_0 ↔ chaîne estimé |
|
| Choix du lieu | présent : le menu d'actions de PC ne propose les animations Finish que si Sex_Orgasm >= 90 (PC-STE:6075-6132) ; exclues du tirage aléatoire (GI-P2:27885-27898) ; textes « Cum on Face / Tits / Belly / Feet » dans GI.uasset |
établi (lecture) ; liaison texte ↔ animation non lue (L12) | |
| Source | BP (SexInterface, PC, GI) ; ni bouton dédié ni module (Grep modules = 0, chez nous et chez l'auteur) ; Finish = tag d'animation (origine non lue) |
établi pour le BP | |
| Boutons voisins | « Pull out penis » (Pulloutpenis, PC-STE:1223-1237), « Promise / Ask to pull out » (PC-STE:5526-5532), Endsex (PC-STE:2483) |
établi | |
| P7. Orgasme automatique à 100 | présent : Sex_Orgasm == 100.0 → Cum() dans la suite de UpdateOeChange, pour chaque personne |
P-STG:16030-16043 ; GI-P2:27474-27487 | établi |
P8. Lien avec GiveOrgasmReward |
présent pour P7 et pour l'animation Finish (Persons[0]) ; coupé pour Endsex ; absent pour le partenaire sur le chemin Finish ; aucun lien entre GiveOrgasmReward et la grille (la grille n'existe pas chez nous) |
§ 2 ; P-STG:16107-16110 ; GI-PASA:358-361 | établi |
7. Commandes et lectures, comptes bruts (CART 2)
Outils : Read, Grep (tool) et Bash en lecture seule. Le Grep (tool) saute les dossiers ignorés par git : les dumps (etat\ST\*\dumps) ont été lus par chemin de fichier ou par grep -r en Bash (écart signalé ; piège déjà noté par STE-H3f-DIAG.md:149).
- Noms dans les
.uasset(grep -a -c, lignes) : Person :GiveOrgasmReward2,OrgasmIrBoost2,Hold still for orgasm boost2,updateOrgasmChange8,prone_to_orgasm8,Sex_OrgasmCounts1,OldOrgasmBar1,T_EnergyOrgasm1,SexOrgasmEnergy0,SexInterface3,PersonCumming1,AfterCumSpeed0. GI :GiveOrgasmReward0,OrgasmIrBoost0,updateOrgasmChange1,Sex_OrgasmCounts1,T_EnergyOrgasm1,SexOrgasmEnergy2,SexInterface3,PersonCumming1,AfterCumSpeed2. Room : 12 noms à 0. for f in BPs/*.uasset UI/*.uasset; do grep -a -o -E 'GiveOrgasmReward|OrgasmIrBoost|TogglePulloutNotification' $f | wc -l(100 fichiers) →BPs/Person.uasset : 6, aucun autre.ENodeEnabledState(Person / GI / PC / Room / SexAction) →ENodeEnabledState2,::Disabled0,::DevelopmentOnly1 chacun ;UI/SexInterface,SexOrgasmEnergy,SexQuicks,SexLight: 0 / 0 / 0 ;git show HEAD:Content/BPs/Person.uasset | grep -a -o 'ENodeEnabledState::[A-Za-z]*' | sort | uniq -c→1 ENodeEnabledState::DevelopmentOnly.- 4.27 :
LifePlay-master 4.27→size=19799322 GiveOrgasmReward=1 OrgasmIrBoost=1 HoldStill=2 TogglePullout=1 Disabled=0;LifePlay-master(origine) →size=14675874 GiveOrgasmReward=0 OrgasmIrBoost=0 HoldStill=0 TogglePullout=0 Disabled=0; builds cuits →GiveOrgasmReward=1 OrgasmIrBoost=1 TogglePullout=1 updateOrgasmChange=1 Sex_OrgasmCounts=1(Person),GiveOrgasmReward=0(GI). Dates : 2026-09-07 14:38 (copie 4.27), 2024-08-27 03:33 (origine). - Git (lecture) :
git show <rév>:Content/BPs/Person.uasset | grep -a -o 'GiveOrgasmReward' | wc -l→1122e17 : 1,HEAD : 2,v1.0àv1.5: 1 chacun,ue5.5-final: 1 ; copie de travail : 2 ; build 5.5Shipping_V1.5: 1. - Parcours d'exécution (script du scratchpad,
execwalk.pyv3, à ranger dansTools\si on le garde) : PersonCum→ « 10 noeuds atteints sur 3702 » ; GICum→ « 22 noeuds atteints sur 6247 » ; GIEndSex(--delegates) → « 53 noeuds atteints sur 6247 ». Contrôle : la v3 retrouve les 10 nœuds lus à la main. Les v1 et v2 (sans les entrées de macro) donnaient 2 puis 14 nœuds : écartées. grep -r -i -c 'orgasm|…' --include=*.txtsuretat:ST/STG/dumps/Person__EventGraph.txt:52,ST/STA/dumps/Person__EventGraph.txt:50,portage55/L6f/L6f_dump_Person.txt:74,portage55/L6f/L6f_dump_GI.txt:12.tocum(insensible à la casse) : 0 dansGI__getActorVar,CheckConditionsOther,CheckConditionsWho,Calculator,ReadSceneLine,GenerateAndApplyStrings,GetSpecific,GI__PlayAppropriateSexAnimation,GI__GetVariable_P2.- Chaîne de l'interface :
LC_ALL=C grep -a -o -E "[A-Za-z][A-Za-z0-9!.,'? -]{14,}" Content/UI/SexInterface.uasset | sort -u→ ligne « Close to cumming, keep going to 100 to cum in place, or click anywhere to select where to cum ». - Modules (copie 5.8) :
orgasm(insensible) → « Found 73 total occurrences across 41 files » ;toCum→ 32 dans 2 fichiers ;reward|boost|hold still|GiveOrgasm|OrgasmIr→ 79 dans 51 fichiers (non relues ligne à ligne : noms commegym_reward_cms,fantasy_stat_bonus) ;cum on (face|tits|belly|feet)|\(new\)→ 0 ;Grep orgasmsurSource→ 0 ;EnabledState|…surSource\LifePlayEditorTools→ 0. - Journaux de jeu :
grep -rIi -c -E "orgasm|Hold still" --include=*.logsurCOMMUN-2/essais,COMMUN-3/essais,COMMUN-4/essais,STE-H3e-J→ sortie vide (un seul.loglisté dansCOMMUN-2\essais). Zéro résultat : échec probable de la recherche, pas preuve d'absence ; aucun journal de jeu ne documente donc l'effet du bonus. - « Pick bonus reward » :
grep -rlaF "Pick bonus reward"surContent/BPs|UI|Structs|Scenes|Developers(5.8),git grep -a -c -Fsur HEAD,grep -rlaiE "bonus ?reward|BonusReward|PickBonus|RewardPick|ChooseReward", puisBPsetUIde la copie 4.27, de l'origine 2024 et du build cuit 2026.9 → sorties vides. Les textes ASCII voisins sont retrouvés par la même technique (point 13), donc l'absence est très probablement réelle (une chaîne UTF-16 ou fragmentée ne serait pas vue ; non testé). - Refus n° 1 du crochet : commande de comparaison de chaînes (boucle
grep -rlaF … 2>/dev/null | sed | tr). Message : « PreToolUse:Bash hook error: [python -I "%USERPROFILE%/.claude/hooks/ecriture-gardien.py"]: Refus du crochet ecriture-gardien. Agent : lp-cart Ecriture: redirection vers ' Cet agent n'a pas de droit d'ecriture (sk-protocol § 7) … Chemins libres : etat/, Saved/Logs/portage/, Saved//, le dossier temporaire. ». Cause : mon2>/dev/null. Commande refaite sans redirection (point 13). - Comparaison des textes (
LC_ALL=C grep -rlaF "<texte>" "<racine>/BPs" "<racine>/UI" "<racine>/Structs", 10 textes × 4 arbres) : voir le tableau du § 3 (sortie complète conservée dans ce tableau). - Disque :
find "D:/Game" -maxdepth 6 ( -path … -prune ) -o ( -iname "*.pak" -o -iname "LifePlay*.exe" -o -iname "*vinfamy*" -o -iname "*.utoc" ) -print(en excluantLauncher,LifePlay_Backup_5.5,LifePlay_Build_5.8_*, la copie 5.8, la copie 5.5, l'addon,LifePlay_ModulesGit) →.exe/.pak/.utocdes seuls dossiersLifePlay_Build_5.5_*(DC4, DebugGame, Development, Shipping_AP7, Shipping_V1.5, V1.5_essai-U8T6),DC4\LifePlay-master\Binaries\Win64\LifePlay.exe,LifePlay_Publication\stage_game_v1_4|v1_5|v2_0\…\LifePlay.exe, et les fichiersVinfamy_License.txt/12_Reconciliation_Vinfamy.md: tous issus de nos sources ; aucun build de l'auteur sousD:\Game(horsBackup, non fouillé) ; l'utilisateur a donnéD:\XxX\LifePlay_2023_04_Stable_64bit. - BUILD-A :
find "$B" -maxdepth 6 ( -iname "*.pak" -o -iname "*.exe" -o -iname "*.utoc" -o -iname "*.ucas" … ) -printf '%p %s o %TY-%Tm-%Td %TH:%TM'→LifePlay/Binaries/Win64/LifePlay-Win64-Shipping.exe 48952832 o 2023-05-04 13:36,LifePlay.exe 304128 o 2023-05-04 13:35,Manifest_UFSFiles_Win64.txt 1895791 o,Engine/Extras/Redist/en-us/UE4PrereqSetup_x64.exe; aucun.pak,.utoc,.ucas;grep -a -o -m1 -E "\+\+UE[45]\+Release-[0-9]+\.[0-9]+"sur le Shipping →++UE4+Release-4.20. Comptes (grep -rao -F -e … "$B/LifePlay/Content/BPs|UI|Structs" | sort | uniq -c) :BPs/GI.uasset:Sex_OrgasmCounts1,UpdateOeChange1,updateOrgasmChange1 ;BPs/GI.uexp:Cum on Belly2,Cum on Face3,Cum on Feet3,Cum on Tits2 ;BPs/PC.uexp:Encourage my partner to lead1,Sabotage condom1 ;BPs/Person.uasset:GiveOrgasmReward1,OrgasmIrBoost1,Sex_OrgasmCounts1,TogglePulloutNotification1,UpdateOeChange1,updateOrgasmChange1 ;BPs/Person.uexp:Hold still for orgasm boost1 ;UI/Cursor.uexp:Pick bonus reward2,UI/Cursor.uexp:last person who came2 ;UI/SexInterface.uexp:Close to cumming2.Grep(tool)reward|bonus|orgasm|cum on|pick|energysurDocsde BUILD-A →Change_Logs.txt:34, 39, 962, 992, 1014-1019(lus au § 3). Lecture deChange_Logs.txtlignes 1-46 :Version 2023.04 Stable:(l. 1),Version 5.27:(l. 25),Version 5.26:(l. 36).Grepdes quatre textes sur…\LifePlay\Content\Modulesde BUILD-A → 0. - Lecture de la capture 1 (Read de l'image) : voir § 4.4.
- Refus n° 2 du crochet : commande de comparaison des identifiants de
Cursor(3 pipelinesext()avec unechocontenant>=6). Message : « … Refus du crochet ecriture-gardien. Agent : lp-cart Ecriture: redirection vers =6 … ». Cause : un>dans le texte de l'echo(mon erreur, encore). Aucun contournement ; lectures arrêtées ; la commande corrigée est en L9. Les deux autres appels du même tour (lecture deChange_Logs.txt, Grep des modules de BUILD-A) ont abouti.
8. Établi / estimé / incertain (CART 4)
- Établi : existence, câblage et appelants de la chaîne 1, 2 (logique de filtre), 3, 3b en 5.8 (copie de travail et HEAD) et 5.5 ; chemin
EndsexsansPerson::Cum; seuils 90 et 100 en constantes de graphe ; aucun module n'appelle un bonus d'orgasme ni ne porte les textes « Cum on … » ; « Pick bonus reward » et « last person who came » présents dansUI/Cursor.uexpde BUILD-A et absents des quatre arbres de nos sources ; BUILD-A = version 2023.04 Stable, UE 4.20, sans.pak, non chiffré ; le journal de BUILD-A décrit la grille (version 5.26) et l'option de désactivation (5.27). - Estimé : « Ir » = Interracial ; ancien modèle
ToCuminactif donctoCumdes textes de module figé ; absence d'impact de STG/CAM sur la chaîne ; nos sources antérieures à la version 5.26 de l'auteur ; lignes « prone_to_orgasm -1.1 » / « fitness +1.1 » = affichage deModifyStat; plan et taille de la reconstruction. - Incertain : effet réel en jeu du bonus ancien ; état d'activation par nœud (
DevelopmentOnly) ; gestionnaire de clic deSexAction; câblage des textes « Cum on … » ; propriétaire de « Hold still… » ; câblage 4.27 ; remplissage deRacesFucking; résolution detoCum; valeurs des objets de la grille et liste des 5 récompenses ; existence chez nous de l'option « Disable Bonus Orgasm Rewards » ; version exacte de nos sources ; textes éventuellement en UTF-16.
Tours : 63 / 60 (écriture de cette version et remise du compte rendu comprises ; budget porté de 50 à 60 par l'orchestrateur, dépassé de 3 tours pour traiter les demandes successives sur la capture et le build de l'auteur ; plafond 70 respecté)
Constats
- F-ORG1 : les conditions de texte
toCum > 70/> 90des DirtyTalks et Descriptions devin_Basedépendent d'un compteur que le nouveau modèle ne met plus à jour (estimé, § 6 P5). À confirmer par L8. - F-ORG2 :
GI::EndSexdonnemood +50etarousal -50à chaque participant sans lien avec l'orgasme (GI-P2:7803-7811, 9829-9837). - F-ORG3 :
TogglePulloutNotificationexclut le filtreFMet ne vise que la personne d'indice 0 (P-STG:17334-17339, 17371-17401) : le message à 90 n'apparaît pas pour une femme d'indice 0. - F-ORG4 : le dumper
LPDumpFunctionn'imprime niEnabledState, niDefaultTextValue, niNodeComment(LPDumpFunctionCommandlet.cpp:57-59) : tout FText (formats, messages, libellés « Cum on … ») est invisible dans les dumps. - F-ORG5 : le build de l'auteur est un build UE 4.20 cuit sans
.pak: ses textes ASCII se lisent pargrep -adans les.uexp, ses noms dans les.uasset; aucun outil d'extraction n'est nécessaire pour comparer les chaînes, mais ses graphes ne s'ouvrent pas dans nos éditeurs. - Fichiers modifiés par cette fiche : le présent livrable seulement (écrit trois fois : versions 1, 2, puis celle-ci ; le script de lecture est resté dans le scratchpad de session).
- Fichiers à commiter :
A D:\Game\LifePlay-master 5.8\Docs\Migration\etat\ST\STE\STE-ORG-AUDIT.md(dépôt du jeu, brancheue5.8;.mdsuivi sousetat/).
Décision de l'utilisateur (2026-10-13, session STE)
- Bonus à choisir v5.26 (grille « Pick bonus reward ») : lectures seulement ; documenter le comportement du build de l'auteur (5 bonus, stats, valeurs, option « Disable Bonus Orgasm Rewards ») ; la reconstruction sera décidée plus tard.
- Vérifié par l'orchestrateur :
Docs\Change_Logs.txtdu build de l'auteur, section « Version 5.26 » (grille de 5 bonus à chaque orgasme, rendement décroissant).
9. Bonus v5.26 du build de l'auteur (reprise, tentative 2, 2026-10-13)
Fiche STE-ORG, reprise tentative 2 — Niveau N3 — Modèle prévu (modèle de l'agent lp-cart) | utilisé claude-sonnet-5-5 — Agent lp-cart — Skills sk-protocol (préchargés avec l'agent : ue-cpp-build, lp-commandlets, lp-paths)
Périmètre : lectures L9, L10, L11, L13 (GO de Big Boss), hors éditeur, en lecture seule ; L1, L2, L12 non faites (elles attendent le jeton UE). Outils : Read, Grep, Glob ; Bash en lecture seule (grep -a, od, awk, comm, ls, find) pour les binaires ; l'exécutable de l'auteur n'a pas été lancé ; aucun script écrit ; aucun fichier du projet modifié hormis ce livrable. Écart à la fiche : cet agent n'a pas Edit ; l'ajout est fait par un Write complet dont la première partie (lignes 1 à 181) est recopiée à l'identique (contrôle par diff avec une copie d'avant, § 9.10). Deux refus du crochet (§ 9.9, points 9 et 10), aucune commande exécutée dans les deux cas : (1) un Python en ligne, choix d'outil de ma part, non contourné (pas de script Python, ni en ligne ni en fichier ; la même lecture a été faite avec od et awk, outils de lecture seule) ; (2) un > dans mon propre filtre grep -v lors du contrôle du livrable (erreur de ma part, le même piège que les refus n° 1 et 2 de la tentative 1) ; commande refaite sans ce caractère.
Sigles : B = D:\XxX\LifePlay_2023_04_Stable_64bit\LifePlay\Content (BUILD-A) ; O = D:\Game\LifePlay-master 5.8\Content ; A4 = D:\Game\LifePlay_Backup_5.5\ARCH427\LifePlay-master 4.27\Content ; AO = D:\Game\LifePlay_Backup_5.5\ARCH427\LifePlay-master\Content (origine). Les nombres après un nom de fichier .uexp ou .uasset sont des offsets d'octets (grep -a -b -o, od -A d), pas des lignes.
9.1 Résumé
- Mécanisme (établi pour les noms, les appels et les constantes, estimé pour le filtre) : dans le build, l'événement
GiveOrgasmRewardde Person appelleGI.Cursor.PopulateBonusRewards(self, …)(Person.uexp:21246, appel unique par l'opcode d'appel virtuel). Cette fonction du widgetCursormélange les clés d'une tablestatTagsde 20 entrées (stat, signe, tags de position), en garde 10, les filtre, calcule pour chacune une valeur qui baisse quand la stat est haute, et crée des boutonsBonusRewardde texte « stat ±valeur » (9.4 à 9.6). - Les « 5 bonus » ne sont pas une liste fixe : c'est un tirage parmi 20 clés, selon les tags de la position (
CurrentTags). La liste des 20 est en 9.4. Le nombre 5 vient du journal de l'auteur (Change_Logs.txt:39) ; je ne l'ai pas retrouvé comme constante (incertain, 9.11). - Valeur (établi pour les constantes et l'enchaînement des fonctions) :
signe × ceil((2,0 − MapRangeClamped(|x|, 0, 100, 0, 1,9)) × 10) / 10, avec x = valeur actuelle de la stat (QueryStat). 2,0 pour une stat à 0, 1,1 pour une stat vers 50 (accord avec « fitness +1.1 » et « prone_to_orgasm -1.1 » des captures), environ 0,1 à 0,2 pour une stat à 100. - Option 5.27 : variable
DisableBonus(GameSettings,GI), case « Disable Bonus Orgasm Rewards » ; absente chez nous (0 fichier sur 3 arbres pour le libellé, 0 occurrence du nom dans 6 assets). - Version de nos sources : assets déclarés « LifePlay 5.9 Full Source », documents restés en v3.6 ; aucun élément de la v5.16 ni des suivantes (9.8).
- Rien n'est reconstruit (décision de l'utilisateur : lectures seulement).
9.2 Où vit le bonus v5.26 dans BUILD-A (L9)
| Fichier (sous B) | Preuve | Chez nous |
|---|---|---|
UI\BonusReward.uasset (11 463 o) et UI\BonusReward.uexp (7 163 o), 2023-05-04 |
widget d'une récompense : noms RewardButton, RewardText, Stat, Change, ModifyStat, Person_C, ui_positive ; format de texte {stat} {sign}{change} ; texte par défaut masochist +0.5 (9.9 point 3) |
absent des trois arbres (9.9 point 2) |
UI\Cursor.uasset et UI\Cursor.uexp |
noms absents de chez nous : PopulateBonusRewards, BonusRewardBox, ScrollBonuses, BonusReward_C, statTags, statTags_Value, countBR, lastCum, isPlayer, DisableBonus, K2Node_CustomEvent_Person, K2Node_CustomEvent_Tags, Tags_15_F32CD59B4662D8135A8FA0886F319DF5, CallFunc_Map_Keys_Keys, CallFunc_Map_Find_Value, CallFunc_Overlaps_Overlap, CallFunc_IsInterestedIn_Interested, CallFunc_QueryStat_Value, CallFunc_QueryStat_Bonus, CallFunc_Abs_ReturnValue, CallFunc_MapRangeClamped_ReturnValue, CallFunc_FCeil_ReturnValue, CallFunc_EndsWith_ReturnValue, CallFunc_Split_LeftS, CallFunc_Split_RightS ; texte « Pick bonus reward for last person who came » (Cursor.uexp:121497 et 126277) |
216 identifiants du build seul, 411 de chez nous seuls, 422 communs (9.9 point 5) ; aucun nom Bonus* ni Reward* chez nous |
BPs\Person.uasset et BPs\Person.uexp |
noms du build seul : PopulateBonusRewards, DisableBonus (+ CallFunc_QueryStat_Bonus1 à 22, sans lien) ; appel en Person.uexp:21246 |
1 942 identifiants du build seul, 1 344 de chez nous seuls, 2 302 communs |
BPs\GI.uasset |
noms du build seul : DisableBonus (+ CallFunc_QueryStat_Bonus1 à 7, Default__SexOrgasmEnergy_C) ; les propriétés Cursor et CurrentTags de GI sont lues par Person (9.3) |
3 173 / 4 888 / 5 499 |
BPs\GameSettings.uasset, UI\MainMenu.uasset, UI\SettingCheckbox.uasset |
nom DisableBonus (1 occurrence chacun) |
0 |
| Le diff des identifiants de GI et de Person est un diff de tables de noms (build cuit contre assets non cuits) : les gros écarts de nombre ne veulent rien dire en eux-mêmes ; seuls les mots-clés `Bonus | Reward | Orgasm |
9.3 Appel dans le build (Person.uexp) : établi pour les jetons, estimé pour le sens des branches
Jetons relevés dans B\BPs\Person.uexp entre les offsets 20400 et 21900 (sortie brute en 9.9 point 8) : 21111 JumpIfNot (cible 413) ; 21130 lecture de DisableBonus (propriété importée de GI_C, import −99 de Person.uasset) ; 21135 appel OrgasmIrBoost ; 21145 JumpIfNot ; 21155 appel ModifyStat avec la chaîne mood (21164) et la constante 20,0 (1e 00 00 a0 41) ; 21213 lecture de CurrentTags (import −18, GI_C) ; lecture de Cursor (import −524, GI_C) ; 21246 appel PopulateBonusRewards (nom 3564, arguments self et une variable locale) ; 21262 Jump ; 21306 SexPersons ; 21347 « Vaginal » ; 21395 CurrentTags ; 21520 WantsBabies ; 21610 ModifyStat avec « attractiontoplayer » (21619).
- Établi :
PopulateBonusRewardsn'a qu'un seul appel dans Person pour l'opcode d'appel virtuel (1b+ indice de nom 3564, recherché sur toutPerson.uexp: un résultat, 21246). L'appel est fait surGI.Cursor. Non cherché : les autres formes d'appel (LocalVirtualFunction). - Établi pour les jetons, estimé pour l'appartenance au même événement : le bonus ancien est conservé dans le build (
OrgasmIrBoost,mood+20, « Vaginal » etWantsBabies, « attractiontoplayer » à quelques dizaines d'octets de l'appel). Estimé : le bonus choisi s'ajoute à l'ancien, il ne le remplace pas. - Estimé : le second argument est
GI.CurrentTags(la lecture précède l'appel de 33 octets). - Incertain : quelle branche de
DisableBonus(21111,JumpIfNotsur la propriété) exécute l'appel ; la lecture « DisableBonus vrai : pas de grille » est l'hypothèse naturelle (texte deChange_Logs.txt:34) mais l'ordre des octets ne la prouve pas (les cibles de saut 413, 544, 348 ne se placent pas de façon cohérente avec un simple si / sinon). Lecture qui trancherait : suite du désassemblage (9.11, L15).
9.4 La table statTags : 20 entrées (établi, Cursor.uexp 4635 à 6410)
Forme : une table (clé = chaîne, valeur = structure à un champ tableau de chaînes, Tags_15_…), probablement la valeur par défaut de la variable statTags (estimé) ; compte \024 (20) à l'offset 4635, 20 clés relues. Une clé qui finit par - baisse la stat (9.5). « vide » = tableau de tags vide.
| # | Clé | Tags de position |
|---|---|---|
| 1 | perversion |
vide |
| 2 | masochist |
Aggressive, AggressiveFM |
| 3 | prone_to_orgasm |
vide |
| 4 | attractiontoplayer |
vide |
| 5 | fitness |
Penetration, Foreplay, Cum |
| 6 | likes_anal |
Anal |
| 7 | likes_boobjob |
Titfuck, Boobjob |
| 8 | likes_cowgirl |
Cow, Cowgirl |
| 9 | likes_doggy |
Doggy, Doggystyle |
| 10 | likes_handjob |
Handjob, RubPussy, FingerPussy |
| 11 | likes_missionary |
Missionary |
| 12 | likes_oral |
Oral, Blowjob, Cunnilingus, LickPussy, LickAss, Rimjob |
| 13 | likes_rcowgirl |
ReverseCow, ReverseCowgirl |
| 14 | likes_rough |
Aggressive, AggressiveFM |
| 15 | likes_sidefuck |
Spooning, Sidefuck, Spoon |
| 16 | likes_toys |
Toys, Dildo, Vibrator |
| 17 | likes_tribadism |
Tribadism, Scissor, Scissoring |
| 18 | likes_vaginal |
Vaginal |
| 19 | masochist- |
Aggressive, AggressiveFM |
| 20 | prone_to_orgasm- |
Penetration, Foreplay, Cum |
- Établi : les 18 stats (hors les deux clés en
-) existent comme.lpstatchez l'auteur et chez nous (find … -name "<stat>.lpstat": 1 / 1 pour chacune, 9.9 point 7). Les noms de tags sont ceux des positions (tags_energy_orgasm.txtles cite aussi :Missionary,Doggy,Cowgirl,Spooning…, fichier présent dans les quatre arbres ; il dit lui-même que ses valeurs « won't take effect in game » : documentation, pas la source des récompenses). - Estimé : « tags vides » (perversion, prone_to_orgasm, attractiontoplayer) correspond aux « quelques-unes » du journal (
Change_Logs.txt:39, « apart from a few ») sans condition de tags ; la façon dontOverlapstraite un tableau vide n'est pas lue (L14). - Estimé : les deux lignes de la capture 3, « prone_to_orgasm -1.1 » et « fitness +1.1 », sont les deux clés qui portent exactement le même jeu de tags {Penetration, Foreplay, Cum} (lignes 5 et 20). Elles ont le format du bouton
{stat} {sign}{change}. Ce sont donc très probablement les récompenses proposées (boutons), pas le résultat appliqué après un clic (correction de la lecture du § 4.4 et du maillon 5). À confirmer en relisant la capture. - Modules texte du build : aucun fichier de données des récompenses. Recherche
grep -rlai -E "bonus ?reward|PopulateBonus|DisableBonus"surB\Modules: sortie vide (9.9 point 6). La table est dans le graphe deCursor, pas dans un module.
9.5 Valeur et rendement décroissant (établi pour les constantes et les fonctions, calcul des exemples à la main)
Désassemblage par lecture des octets de Cursor.uexp, fonctions résolues par la table d'imports de Cursor.uasset (293 imports, table à l'offset 20318 ; sortie brute 9.9 point 4). Ordre des instructions de PopulateBonusRewards (offsets de Cursor.uexp) :
| Offset | Instruction (établi) | Sens |
|---|---|---|
| 7250 | Map_Keys sur statTags |
les 20 clés |
| 7295 | Array_Shuffle |
mélange |
| 7320 | Array_Resize(tableau, 10) (1d 0a 00 00 00 à 7330) |
ne garde que 10 candidates |
| 7394 à 7468 | Not_PreBool, Array_Length, Less_IntInt, BooleanAND |
boucle sur les candidates |
| 7524, 7565, 7620 | Array_Get, Map_Find(statTags, clé), Overlaps |
tags de la clé contre les tags de la position (estimé) |
| 7712 | NotEqual_StriStri(clé, "attractiontoplayer") (chaîne à 7722) |
cas particulier de cette stat (rôle : incertain) |
| 7970, 8149, 8292 | EndsWith(clé, "-", casse ignorée) |
clé négative ? ; Split(clé, "-", …) (import −130) isole le nom de la stat |
| 8210 | QueryStat(stat, false, false) sur la personne ; sorties Value (variable 0x16e) puis Bonus |
x = valeur actuelle |
| 8318 | SelectFloat(−1,0 ; 1,0 ; EndsWith) |
signe |
| 8349 | Abs(x) |
|
| 8370 | MapRangeClamped(|x| ; 0,0 ; 100,0 ; 0,0 ; 1,9) (constantes aux offsets 8385 et 8395) |
0 → 0 ; 100 → 1,9 |
| 8411 | Subtract(2,0 ; ·) (constante à 8416) |
2,0 − (0 à 1,9) |
| 8437 | Multiply(·, 10,0) (8447) |
|
| 8463, 8484 | FCeil, Conv_IntToFloat |
arrondi par excès |
| 8505 | Divide(·, 10,0) (8515) |
pas de 0,1 |
| 8531 | Multiply(·, signe) |
valeur signée |
| Formule : **changement = signe × ceil((2,0 − 1,9 × min( | x | , 100) / 100) × 10) / 10**. Exemples calculés à la main (nombres flottants 32 bits non rejoués) : x = 0 → 2,0 ; 10 → 1,9 ; 25 → 1,6 ; 50 → 1,1 ; 75 → 0,6 ; 90 → 0,3 ; 100 → 0,1 (ou 0,2 selon l'arrondi flottant). Le rendement décroissant dépend donc de la valeur actuelle de la stat, pas du nombre d'orgasmes (la chaîne d'instructions ci-dessus n'utilise que x). Contrôle de cohérence (estimé) : « fitness +1.1 » et « prone_to_orgasm -1.1 » correspondent à des stats voisines de 50 (valeur courante par défaut), cohérent avec 1,1 au milieu de l'échelle. Le « 0.5 » du widget BonusReward n'est que le texte de conception (masochist +0.5). |
9.6 Le widget BonusReward et le clic (établi pour les noms, estimé pour le déroulé)
BonusReward.uasset: unButton(RewardButton, événementOnClicked) contenant unTextBlock(RewardText) ; aucunImagedans la table de noms : une récompense est un bouton texte, sans icône. VariablesStatetChange; texteFormat("{stat} {sign}{change}")avec le signe choisi parLess_FloatFloatetSelectString; sonui_positive(/Game/Heavy/New2/Sound/ui_positive) ; appelModifyStatsurPerson(CallFunc_ModifyStat_Value).- Estimé : un clic appelle
ModifyStat(Stat, Change, …)sur la personne qui vient de jouir, ce qui produit les lignes « stat ±n » (commemooddansGiveOrgasmReward).Cursorrange ces boutons dansBonusRewardBox/ScrollBonuses(CallFunc_Create_ReturnValue1,…2,CallFunc_AddChild_ReturnValue1,…2). - Conséquence (estimé) : la grille 4 × 4 d'icônes de la capture 1 n'est probablement pas la liste des récompenses (boutons texte) ; c'est un autre élément de
Cursor(inventaire ou bondage). À confirmer sur la capture.
9.7 L'option « Disable Bonus Orgasm Rewards » (L11 ; établi)
| Où | Preuve (offsets d'octets) |
|---|---|
| Libellé de la case | B\UI\SettingCheckbox.uexp 1881 et 13432 ; B\UI\MainMenu.uexp 298391 et 306928 : « Disable Bonus Orgasm Rewards » |
| Message de crash | B\UI\SexInterface.uexp 42851 et 66743 : « If you get crashes during sex scenes, Esc > Settings > tick Disable Bonus Orgasm Rewards and save the game. Then report back on Discord's Bugs channel whether it stops the crashes.. » |
| Variable | nom DisableBonus (1 occurrence, grep -a -c -F) dans BPs\GameSettings.uasset, BPs\GI.uasset, BPs\Person.uasset, UI\Cursor.uasset, UI\MainMenu.uasset, UI\SettingCheckbox.uasset ; propriété de GI_C importée par Person (import −99) |
| Journal de l'auteur | Change_Logs.txt:34 (version 5.27) |
| Chez nous | grep -rlaF "Bonus Orgas" sur BPs, UI, Structs de O, A4 et AO : aucun fichier (code de sortie 1 trois fois) ; grep -a -c -F DisableBonus = 0 sur les six mêmes assets de O |
Verdict L11 : l'option n'existe pas chez nous (établi). Chez l'auteur, la variable est lue par Person au point 21111 (9.3) et se trouve dans GameSettings (donc enregistrée comme réglage du jeu, estimé). Ce qu'elle désactive exactement (la grille seule, ou aussi le bonus ancien) : incertain, car le bonus ancien est dans la même zone de code (9.3). |
9.8 Version exacte de nos sources (L13)
AO:…\ARCH427\LifePlay-master\Docs\Change_Logs.txt:1=Version 3.6:(établi ; fichiers datés 2024-08-27). Les sources d'origine 2024 du § 3 sont donc de la version 3.6 de l'auteur.- A4 :
Docs\Change_Logs.txt:1=Version 2026.9 Beta:; ligne 2 « Portage du projet vers Unreal Engine 4.27.2 (depuis la base v3.6) » ; ligne 4 : « Integration de l'integralite des assets non cuits de LifePlay 5.9 Full Source (8564 .uasset) en remplacement du dossier Heavy absent ». Copie 5.8 :Docs\Change_Logs.txt:1, 2, 4identiques,Version 3.6:à la ligne 15. - Mesure de cohérence O contre B (établi) : présents chez l'auteur et absents de chez nous : modules
vin_Lactationetvin_Vore; statslikes_lactation.lpstatetpolitics.lpstat; assetsUI\BonusRewardetUI\CustomJob; rien chez nous qui manque chez l'auteur (comm -13vides)..lpscene: 1 346 (B) contre 1 271 (O) ;.lpstat: 84 contre 82. - Journal de B : lactation en version 5.16 (
:133,:138-139), « Political leaning » en 5.24 (:51,:55), « Enquire about a vacancy » en 5.26 (:36,:38), module Vore en 2023.04 Beta (:5,:16). - Conclusion (estimé) : nos assets sont de la version 5.9 de l'auteur (déclaré par la ligne 4 de A4 et de la copie 5.8), nos documents et notre
Change_Logs.txtsont restés à la v3.6. Rien de nos sources ne vient d'une version 5.16 ou plus. Non mesuré : les marqueurs propres aux versions 5.10 à 5.15. - Corollaire (établi par le journal de B) : le bonus ancien est né en 3.11 (
:1013,:1017, mood du joueur et attirance du partenaire à l'orgasme), les animations « cum on … » en 3.14 (:989,:992), le bonus vaginal / créampie en 3.17 (:955,:962). L'origine (3.6) est plus ancienne que ces trois versions : c'est pourquoiGiveOrgasmRewardet « Cum on … » y manquent (§ 3), et c'est la copie 4.27, avec les assets 5.9, qui les apporte.
9.9 Commandes et sorties brutes de la reprise
Aucun > dans les commandes exécutées. B, O, A4, AO sont les sigles ci-dessus (variables du même nom dans les commandes) ; LC_ALL=C partout.
ls -lasurB/UI/BonusReward.uasset|.uexp,B/Modules/tags_energy_orgasm.txt,B/UI/Cursor.uasset|.uexp→1226 tags_energy_orgasm.txt (2020-10-01),11463 BonusReward.uasset,7163 BonusReward.uexp,122954 Cursor.uasset,136556 Cursor.uexp(2023-05-04).- Boucle sur O, A4, AO :
ls "$r/UI" | grep -i -E "bonus|reward"; ls "$r/Modules" | grep -i -E "tags_energy|orgasm"→ pour chacun des trois arbres, seule ligne :tags_energy_orgasm.txt; aucunBonusReward. L11 : boucle sur O, A4, AO, B :grep -rlaF "Bonus Orgas" "$r/BPs" "$r/UI" "$r/Structs"; echo "rc=$?"→rc=1(O),rc=1(A4),rc=1(AO), puis pour B :UI/MainMenu.uexp,UI/SettingCheckbox.uexp,UI/SexInterface.uexp,rc=0. grep -a -o -E "[ -~]{4,}" "$B/UI/BonusReward.uexp"→RewardText,change,stat,sign,{stat} {sign}{change}, deux identifiants hexadécimaux,masochist +0.5(×2). Même commande surBonusReward.uasset: table de noms lue en entier, dontBonusReward_C,RewardButton,RewardText,Stat,Change,ModifyStat,Person_C,ui_positive,Less_FloatFloat,SelectString,Button,ButtonSlot,TextBlock,OnClicked; pas deImage.- Table d'imports :
od -A n -t x1 -v "$B/UI/Cursor.uasset" | awk '…'(lecture de l'en-tête :header 122954 names 703 193 exports 764 28522 imports 293 20318, puis noms des imports) →import 100 (-101) Abs,101 (-102) Add_IntInt,104 (-105) Conv_IntToFloat,105 (-106) Divide_FloatFloat,109 (-110) FCeil,115 (-116) MapRangeClamped,116 (-117) Multiply_FloatFloat,119 (-120) SelectFloat,121 (-122) Subtract_FloatFloat,125 (-126) EndsWith,127 (-128) NotEqual_StriStri,129 (-130) Split,96 (-97) Array_Get,98 (-99) Array_Resize. Même méthode surB/BPs/Person.uasset:import 98 (-99) DisableBonus outer=-90 (GI_C),103 (-104) SmLoaded,17 (-18) CurrentTags,523 (-524) Cursor,36 (-37) mdsDiffuses,37 (-38) mdsNormals(tousouter=-90 (GI_C)) ;name 3564 = PopulateBonusRewards,3465 = OrgasmIrBoost,3342 = ModifyStat. Le programmeawk(sans>) lit tout le fichier avecod -A n -t x1 -v, calcule les offsets des tables à partir de l'en-tête (nombre de versions personnalisées à l'offset 20, 20 octets chacune), décode les noms (longueur sur 4 octets, chaîne, 4 octets de hachage) et les imports (28 octets, nom de l'objet à +20). La validité de cette lecture est contrôlée par ses résultats (noms et imports cohérents avec le bytecode, par exempleArray_Resizepour l'import −99 deCursor, appelé avec une constante entière). - Comparaison d'identifiants (commande L9,
commau lieu deuniq -c) :comm -23 <(ext B/…) <(ext O/…) | wc -l(build seul),comm -13(chez nous seul),comm -12(communs) →UI/Cursor.uasset : build-seul=216 nous-seul=411 commun=422;BPs/GI.uasset : build-seul=3173 nous-seul=4888 commun=5499;BPs/Person.uasset : build-seul=1942 nous-seul=1344 commun=2302. Liste complète des 216 du build seul pourCursorrelevée dans cette session ; les noms utiles sont en 9.2. - Modules :
grep -rlai -E "bonus ?reward|PopulateBonus|DisableBonus" "$B/Modules" | head -5→ sortie vide (lerc=0affiché ensuite est celui dehead, pas degrep).ls "$B/Modules":tags_energy_orgasm.txt,vin_Base,vin_BDSM,vin_Lactation,vin_Vore, etc. - Stats : pour chacune des 18 stats de 9.4,
find "$B/Modules" -name "<stat>.lpstat" | wc -let idem pour O →build=1 ours=1pour les 18.commdes listes : build seul =likes_lactation.lpstat,politics.lpstat; nous seul = vide ; modules : build seul =vin_Lactation,vin_Vore; nous seul = vide ; assetsUIetBPs: build seul =BonusReward.uasset,CustomJob.uasset. Comptes dansB:BPs/Person.uexpmasochist=3 perversion=6 fitness=12 prone_to_orgasm=4 attractiontoplayer=11 likes_=17 mood=6;BPs/GI.uexpmasochist=20 perversion=102 fitness=87 prone_to_orgasm=0 attractiontoplayer=9 likes_=17 mood=13;UI/Cursor.uexpmasochist=2 perversion=1 fitness=1 prone_to_orgasm=2 attractiontoplayer=2 likes_=13 mood=0(noms de stats seulement ; les valeurs ne sont pas dans ces comptes). - Jetons de Person :
( od -A n -t x1 -v "$B/BPs/Person.uasset"; echo "@@"; od -A n -t x1 -v -j 20400 -N 1500 "$B/BPs/Person.uexp" ) | awk '…'→21063: var SmLoaded,21111: JumpIfNot 413,21130: var DisableBonus,21135: call OrgasmIrBoost,21145: JumpIfNot 544,21155: call ModifyStat,21164: str "mood",21213: var CurrentTags,21246: call PopulateBonusRewards,21262: Jump 348,21306: var SexPersons,21347: str "Vaginal",21395: var CurrentTags,21520: var WantsBabies,21610: call ModifyStat,21619: str "attractiontoplayer",21667: call LoadDefaultTextures,21807: var HairstyleTable,21835: JumpIfNot 1778,21860: Push 1704(les quatre derniers sont sans lien : le relevé déborde de la zone). Appel unique : même méthode sur toutPerson.uexp(596 466 o) pour1b+ indice 3564 →CALL PopulateBonusRewards at 21246, une seule fois. Appels relevés dans le désassemblage deCursor.uexpentre 7250 et 8840, dédoublonnés (même méthode, avecCursor.uasset) :Map_Keys,Array_Shuffle,Array_Resize,Not_PreBool,Array_Length,Less_IntInt,BooleanAND,Array_Get,Map_Find,Overlaps,Array_Get,Add_IntInt,Array_Get,EndsWith,SelectString,Array_Get,EndsWith,SelectString,QueryStat,Array_Get,EndsWith,SelectFloat,Abs,MapRangeClamped,Subtract_FloatFloat,Multiply_FloatFloat,FCeil,Conv_IntToFloat,Divide_FloatFloat,Multiply_FloatFloat,NotEqual_IntInt(8613),Add_IntInt,Not_PreBool,IsInterestedIn(8731),Array_Contains(8790),BooleanAND(8840). À partir de 8897 :InitializeCursor,FilterActions,ShowCursorAndTextet d'autres appels dont le rôle n'a pas été lu. Constantes flottantes relevées entre 6500 et 14100 :0.2(7161),1.0(8328),100.0(8385),1.9(8395),2.0(8416),10.0(8447 et 8515),0.5(9859, rôle non lu),0.1(11828, 11912, 12760, 13121),1.0(12048),300.0et200.0(12869 à 13022, rôle non lu). - Refus n° 3 du crochet (tour 12 de la reprise) : commande
python -I -c "…"pour lire l'en-tête du.uasset. Message : « PreToolUse:Bash hook error: [python -I "%USERPROFILE%/.claude/hooks/ecriture-gardien.py"]: Refus du crochet ecriture-gardien. Agent : lp-cart Ecriture: python avec code en argument ou heredoc (sk-protocol § 7) … Chemins libres : etat/, Saved/Logs/portage/, Saved//, le dossier temporaire. ». Cause : mon choix d'outil, pas un>. Aucun retour à Python ; lecture refaite avecodetawk(point 4). - Refus n° 4 du crochet (tour 34 de la reprise) : commande de contrôle du second Write, avec un filtre
grep -vdont le motif contenait le caractère interdit. Message : « PreToolUse:Bash hook error: [python -I "%USERPROFILE%/.claude/hooks/ecriture-gardien.py"]: Refus du crochet ecriture-gardien. Agent : lp-cart Ecriture: redirection vers ' Cet agent n'a pas de droit d'ecriture (sk-protocol § 7) : il redige son livrable par un seul Write sous Docs/Migration/etat/ et liste en 'Fichiers a commiter' ce qu'un redacteur doit modifier. Chemins libres : etat/, Saved/Logs/portage/, Saved//, le dossier temporaire. ». Cause : mon erreur (le caractère dans le motif du filtre). Aucune commande exécutée ; contrôle refait avecgrep -E '^[0-9]', sans le caractère. - Contrôle du livrable : voir 9.10.
9.10 Contrôle de cet ajout
Copie d'avant dans le dossier temporaire de la session (181 lignes, 45 543 octets, fins de ligne LF : 0 octet CR par tr -cd '\r' | wc -c). Premier Write : diff de la copie d'avant et du livrable → 1 ligne différente (ligne 146, ; done ajouté par erreur de recopie), ajout 181a182,337 ; 0 octet CR ; 0 occurrence d'un nom d'utilisateur ou de C:\Users. Second Write : ligne 146 restaurée ; son contrôle a été refusé par le crochet (point 10). Troisième Write (celui-ci) : mêmes 181 premières lignes, ajout corrigé (refus n° 4, compte des tours) ; résultat du dernier diff dans le compte rendu.
9.11 Lectures qui restent, questions
| # | Lecture (non faite) | Ce qu'elle trancherait |
|---|---|---|
| L14 | Suite du désassemblage de PopulateBonusRewards dans Cursor.uexp : od -A d -t x1z -v -j 7200 -N 2600 -w28 "$B/UI/Cursor.uexp" (puis 9200 à 10300 et 10200 à 14011), ou un lecteur de Kismet cuit (aucun installé) |
Rôle exact de Overlaps avec un tableau vide, de IsInterestedIn, de Array_Contains, de la comparaison countBR ≠ 3 (appel à 8613, constante 1d 03 00 00 00 à 8623), du test sur « attractiontoplayer » (7712) ; d'où vient le nombre 5 (aucune constante entière 5 trouvée : recherche \x1d[\x02\x04\x05\x0a]\x00\x00\x00 sur Cursor.uexp, seul résultat 8211, qui est un indice de nom ; la branche \x0a ne peut pas correspondre avec grep, qui coupe les lignes sur cet octet, mais la constante 10 a été vue à la main à 7330) ; ce qui se passe quand moins de 5 candidates passent le filtre (la capture n'en montre que 2) |
| L15 | Suite du désassemblage de GiveOrgasmReward du build (Person.uexp 20700 à 21700) |
Quelle branche de DisableBonus appelle PopulateBonusRewards ; si le bonus ancien reste actif quand l'option est cochée |
| L16 | Relire la capture 3 (image) | Les deux lignes sont-elles des boutons (clic attendu) ou un résultat ? La grille 4 × 4 est-elle autre chose que la liste des récompenses ? |
| L1, L2, L12 | inchangées (§ 5) ; attendent le jeton UE | — |
Questions : Q2 (reconstruire ou demander les sources) se pose avec plus de précision : la donnée (20 entrées, formule, widget à bouton texte, un appel dans GiveOrgasmReward, une case de réglage) est maintenant connue ; seul le filtre de tirage et le nombre 5 restent à lire (L14). Q6 (utilisateur) : la reconstruction doit-elle reproduire la table de l'auteur (20 entrées) à l'identique, ou une table plus courte ? Aucune décision prise ici. |
9.12 Corrections aux sections précédentes (lues avec cette section)
- § 3, colonne « Sources d'origine 2024 » : il s'agit de la version 3.6 de l'auteur (9.8) ; le bonus ancien y manque parce qu'il date de la 3.11.
- § 3, dernier paragraphe et L13 : la version exacte de nos sources est lue (9.8) ; « antérieures à la 5.26 » devient « assets 5.9, aucun élément de 5.16 ou plus » (estimé).
- § 4.1 maillon 5 et § 4.4 : les lignes « prone_to_orgasm -1.1 » et « fitness +1.1 » sont plus probablement les boutons proposés que l'application du choix (9.4, estimé) ; le maillon 5 « application du bonus choisi » = un appel
ModifyStatpar le widgetBonusReward(9.6, estimé). - § 4.1 maillon 4, § 4.3 point 1 et § 4.4 : les récompenses sont des boutons texte (pas d'icônes) ; la grille 4 × 4 d'icônes n'est probablement pas leur liste (9.6, estimé).
- § 4.3, point 3 : « une atténuation selon le nombre d'orgasmes » est à remplacer par « une atténuation selon la valeur actuelle de la stat » (9.5, établi pour la formule).
- § 4.3 : le bonus choisi s'ajoute probablement au bonus ancien (9.3, estimé) ; la reconstruction n'aurait à retoucher
GiveOrgasmRewardque pour un appel. - Verdict du § 4.2 inchangé : bonus ancien ACTIF chez nous ; bonus à choisir ABSENT.
9.13 Établi / estimé / incertain (reprise)
- Établi : fichiers et noms du bonus v5.26 chez l'auteur (9.2) ; table
statTagsde 20 entrées avec ses tags (9.4) ; chaîne d'instructions et constantes de la valeur (9.5) ; appel unique (opcode virtuel) depuis Person et lecture deDisableBonusà côté (9.3) ; option 5.27 présente chez l'auteur, absente chez nous (9.7) ; version déclarée de nos assets (9.8) ; absence deBonusReward,PopulateBonusRewards,DisableBonuschez nous. - Estimé : sens de
Overlapset des tags vides ; les deux lignes de la capture = boutons ; widgetBonusRewardsans icône donc grille 4 × 4 différente ;DisableBonusvrai = pas de grille ; le bonus choisi s'ajoute à l'ancien ; assets 5.9, avant 5.16. - Incertain : origine du nombre 5 ; rôle de
countBR≠ 3 et de « attractiontoplayer » ; nombre de boutons affichés quand le filtre en laisse moins de 5 ; effet deDisableBonussur le bonus ancien ; comportement en jeu (build non lancé).
9.14 Constats
- F-ORG6 : la table de l'auteur contient deux entrées négatives (
masochist-,prone_to_orgasm-) : le jeu propose aussi de baisser une stat. - F-ORG7 : le bonus choisi dépend de la valeur actuelle de la stat (de +2,0 à +0,1) : une stat haute rapporte peu ; une stat basse beaucoup.
- F-ORG8 : l'option 5.27 existe parce que l'auteur n'a pas pu reproduire des plantages autour des orgasmes (
Change_Logs.txt:34) : le système de tirage est la zone suspecte désignée par l'auteur ; à garder en tête pour une reconstruction. - F-ORG9 :
Docs\Change_Logs.txtde notre copie 5.8 s'arrête à la v3.6 alors que les assets sont en 5.9 : le journal de nos sources ne dit rien des versions 3.7 à 5.9 de l'auteur (information, hors périmètre). - Fichiers modifiés par cette reprise : le présent livrable seulement (trois Write complets : premier jet, version corrigée, puis celle-ci).
- Fichiers à commiter :
A D:\Game\LifePlay-master 5.8\Docs\Migration\etat\ST\STE\STE-ORG-AUDIT.md(fichier non suivi à ce jour :git ls-files --eolne le liste pas).
Tours : 37 / 35 (reprise tentative 2, écriture, contrôles et compte rendu compris ; budget dépassé de 2 tours par les lectures de bytecode (au-delà de 28 tours, 80 % du budget) et la correction finale du livrable après un contrôle refusé par le crochet ; plafond 45 respecté ; à confirmer par FicheStats.py, qui fait foi)