23 KiB
Fiche FIX1-F6-PRE — Niveau N2 — Modèle prévu non précisé par la fiche | utilisé claude-sonnet-5-5 — Agent lp-cart — Skills sk-protocol, ue-cpp-build, lp-commandlets, lp-paths
FIX1-F6-PRE : étude préliminaire de dimensionnement de F6, ERR-042, personnages de partie dans Content\Saves (2026-10-20)
Hors gabarit : étude préliminaire (pas une CART complète). Les rubriques 1 à 6 du gabarit CART sont gardées ; la rubrique 3 suit les quatre questions de la fiche (existant, localisation, dimensionnement, recommandation). Lecture seule : ni copie UE, ni MCP, ni éditeur, ni commandlet. Seul ce fichier est écrit.
Résumé (à lire en premier)
- Ce qui reste d'ERR-042 : les fichiers
.lpcharacterd'une partie sont lus et écrits dans<dossier du jeu>\Content\Saves\…, hors du nouveau dossier%LOCALAPPDATA%\LifePlay-Revival\Saved(établi :Docs/Registre_Erreurs.md:49,README.md:82-83). - Point d'étranglement unique en C++ : tous les accès Blueprint à ces fichiers passent par
UModdingExtraBPLibrary::LoadTxtet::SaveTxt, qui préfixentFPaths::ProjectContentDir()(établi :Plugins/ModdingExtra/Source/ModdingExtra/Private/ModdingExtraBPLibrary.cpp:190, 236). Rediriger les cheminsSaves/…à cet endroit demande 1 fichier C++ et 0 Blueprint (estimé, à prouver en SPEC). - GI n'est pas exigé par cette voie (estimé). La voie Blueprint, elle, toucherait GI (29 littéraux
Saves/…) et au moins 3 widgets UI : à écarter. - La ligne du doc 37 est mal classée :
37_Feuille_De_Route_Alpha2.md:171range F6 dans « petits correctifs Blueprint par MCP,lp-mcp-bp». L'existant dit autre chose : c'est un correctif C++ dans un plugin, sur le chemin de lecture de toutes les données du jeu. - Recommandation : lot N3 ; SPEC par un modèle opus (effort medium) ; IMPL par
lp-impl(Sonnet) sur une SPEC qui dicte les lignes, oulp-impl-maxsi la SPEC laisse des choix ; BUILDlp-builder; VALlp-validatordistinct ; essai en jeu sous le jeton de la copie UE. Build 1 sous condition (porte au J4), sinon build 2 et la limite connue reste documentée. Détail en § 3.4.
1. Objet et périmètre
Un domaine : l'emplacement des fichiers .lpcharacter d'une partie (ERR-042, reste). Question posée par Big Boss : quel agent et quel modèle pour F6 (doc 37 § 1.2, ligne 59), build 1 (gel 2026-10-24) ou build 2. Hors périmètre : le dossier SaveGames et les réglages *.ini (déjà traités par REL-SAV), le contenu des modules, toute correction.
2. Commandes et lectures (exactes) avec compte brut
| # | Commande ou lecture | Résultat brut |
|---|---|---|
| 1 | Grep ERR-042 dans Docs |
ligne Registre_Erreurs.md:49 ; 37_Feuille_De_Route_Alpha2.md:59 ; BOSS-JOURNAL.md:983 |
| 2 | Glob **/SAV1* sous Docs/Migration/etat |
No files found (aucun dossier SAV1) |
| 3 | Glob **/REL-SAV* sous Docs/Migration/etat |
13 fichiers dans REL/SAV/ (DIAG, SPEC, IMPL, VAL, ESSAIS, DOC, TACHES, RESULTATS-COMMUN8, fiches/T1-T4) et REPO/tickets/REL-SAV-R1.md |
| 4 | Read REL-SAV-DIAG.md, REL-SAV-SPEC.md, REL-SAV-IMPL.md, Registre_Erreurs.md:49, 37_…:30-100, 140-198 |
cités en § 3 |
| 5 | Grep lpcharacter dans Source (insensible à la casse) |
1 résultat : Source/LifePlay/LPStringCompat.h:9 (commentaire) |
| 6 | Grep Content[\\/]+Saves|"Saves|/Saves/ dans Source |
No matches found |
| 7 | Grep "Saves|/Saves/|Content/Saves|lpcharacter dans Plugins (*.cpp,*.h,*.cs,*.py,*.ini) |
No files found (Plugins/Marketplace et McpAutomationBridge, ignorés par git, non parcourus) |
| 8 | Grep Saves dans Config |
No matches found |
| 9 | Glob Content/Saves/* |
No files found (dossier absent de la copie 5.8 ; .gitignore:84 : /Content/Saves/) |
| 10 | Grep 'Saves/ dans Docs/Migration/etat/portage55/L6f/L6f_dump_GI.txt (dump 5.5 de toutes les fonctions de GI, 2026-09-30) |
29 lignes (liste § 3.2) |
| 11 | Grep = 'Saves/|'Saves/ en *.txt sous etat |
38 fichiers, tous des dumps GI (ou 1 fichier CAM-T6) |
| 12 | Grep appel ModdingExtraBPLibrary::(LoadTxt|SaveTxt) dans L6f_dump_GI.txt |
45 lignes (nœuds d'appel dans GI) |
| 13 | rg -a -l -e "Saves/_session" -e "Saves/Characters" -e "\.lpcharacter" -g "*.uasset" -g "*.umap" Content (Bash, depuis la racine) |
6 fichiers : Content/UI/BodyShapeMenu, UI/CharGen, UI/ContactMenu, UI/Contact, UI/StatMenu, BPs/GI (.uasset) ; code de sortie 0 |
| 14 | rg -a -o -e 'Saves[A-Za-z_/]*' -e '[A-Za-z]*\.lpcharacter' <fichier> puis sort | uniq -c |
tableau § 3.2 (comptes bruts de correspondances dans le binaire, pas de nœuds) |
| 15 | git ls-files Plugins/ModdingExtra | wc -l ; git check-ignore -v Content/Saves/x |
8 ; .gitignore:84:/Content/Saves/ |
Écart de méthode à signaler : les commandes 13 et 14 passent par rg -a en Bash. L'outil Grep ne lit pas un .uasset en mode texte quand il parcourt un dossier : le Grep sur le dossier Content (motif Saves/_session, *.uasset) a rendu No files found, alors que le Grep sur le seul fichier Content/BPs/GI.uasset rend 54 occurrences. Un résultat vide d'un Grep de dossier sur des .uasset ne prouve donc rien (à verser).
3. Constats fichier:ligne
3.1 État de l'existant (question 1)
| Constat | Source | Niveau |
|---|---|---|
ERR-042 porte le lot « SAV1 » et dit : dossier de sauvegarde partagé avec le jeu d'origine ; REL-SAV a posé la garde LPSaveRelaunch ; E9 PASS sur le Shipping 2026.10.2.1a ; reste : « les personnages d'une partie sauvegardée restent dans le dossier du jeu (LifePlay\Content\Saves), annoncé comme limite connue de l'alpha » ; E5 non fait (facultatif) ; Mod Manager à refaire avec un zip |
Docs/Registre_Erreurs.md:49 |
établi |
Le lot SAV1 n'a aucun dossier etat/ propre ; son travail est le lot REL-SAV (etat/REL/SAV/). Le Cahier des charges le cite (§ 6) |
Glob n° 2 et n° 3 ; Registre_Erreurs.md:49 ; Docs/21_Sandbox_Addon.md:213 |
établi |
Option retenue : B+ seul (garde dans le jeu qui relance l'exe avec -UserDir), aucun lanceur livré (option B écartée) |
REL-SAV-SPEC.md:7-16 (« Aucun lanceur n'est donc livré », l. 16) |
établi |
| Aucune reprise des anciennes sauvegardes (décision R0) | REL-SAV-TACHES.md:19 |
établi |
Déjà fait : dossier %LOCALAPPDATA%\LifePlay-Revival\Saved (Config, Logs, LPDataCache, SaveGames) créé et utilisé en Shipping ; code LPSaveRelaunch.cpp (396 l.), LPSaveRelaunch.h, LifePlay.cpp (+3 l.) |
Registre_Erreurs.md:49 ; REL-SAV-IMPL.md:13-15 |
établi |
Le dossier du jeu est hors du lot : Player.lpcharacter est dans Content\Saves, « le renommage ne la touche pas ; le défaut existant (SAV1 / ERR-042) reste ouvert » |
REL-SAV-DIAG.md:58 |
établi |
| Conséquence pour le joueur : « une sauvegarde est donc répartie entre les deux dossiers » | REL/ALPHA/REL-ALPHA-T6b.md:24 |
établi |
Texte public actuel : limite connue (« keep the game folder when you update, or copy LifePlay\Content\Saves to the new one ») |
README.md:82-83 ; repris MEN/MEN1/MEN1-B-PROPOSITION.md:24, 105-106 |
établi |
Statut de F6 : « ERR-042 : personnages de partie dans Content\Saves (reste) », rubrique Fix ; FIX1 = « F6, F7, F8 : petits correctifs Blueprint par MCP · lp-mcp-bp · 7e jeton » |
37_Feuille_De_Route_Alpha2.md:59, 171 |
établi |
| ERR-042 avait été « non retenu » pour l'après-alpha (2026-10-14), puis F6 est entré dans la liste d'avant gel | BOSS-ETAT.md:259 ; 37_…:59 |
établi |
Cartographie des dossiers de sauvegarde d'une partie, aujourd'hui :
| Quoi | Où | Preuve |
|---|---|---|
Emplacements .sav (UE SaveGame) et GameSettings.sav |
<…>\Saved\SaveGames → nouveau dossier Revival |
Registre_Erreurs.md:49 |
Réglages LP*.ini |
<…>\Saved\Config\Windows → nouveau dossier |
LPKeyboardSubsystem.cpp:77, LPColorGradeSubsystem.cpp:27, LPVideoQualitySubsystem.cpp:71 |
| Personnages de la partie en cours (copie de travail) | <jeu>\Content\Saves\_session\Characters\… |
dump GI CAM-B1-PRE_LPDumpFunction_20261013-083048.txt:6469, 9655, 18018, 25060 |
| Personnages d'une partie enregistrée | <jeu>\Content\Saves\<Slot>\Characters\<N>.lpcharacter, F<N>, C<N>, OldPlayer, Player |
même dump : événement DuplicateCharacters l. 8397-8431 ; copies N l. 8459-8489, F l. 15288-15320, OldPlayer l. 18924-18955, C l. 19003-19020, Player l. 8505-8534 |
| Sens de la copie | Load = vrai : Saves/<Slot>/Characters/ → _session ; Load = faux : l'inverse |
même dump l. 8400, 8402-8413 |
3.2 Où sont les accès (question 2)
C++ (un seul fichier d'E/S, établi)
| Point | Ligne | Rôle |
|---|---|---|
LoadTxt : lecture FFileHelper::LoadFileToString(…, ProjectContentDir() + FileNameA) |
ModdingExtraBPLibrary.cpp:190 |
lecture (1 point) |
LoadTxt : relecture de contrôle si le cache est en mode vérification |
ModdingExtraBPLibrary.cpp:195 |
lecture de contrôle (même chemin) |
SaveTxt : FFileHelper::SaveStringToFile(…, ProjectContentDir() + FileNameB) |
ModdingExtraBPLibrary.cpp:236 |
écriture (1 point) |
GetAllFilesFromFolder, GetAllSubfolders, ContentDirectory : base ProjectContentDir() |
ModdingExtraBPLibrary.cpp:50, 120, 254 |
listes et chemin absolu ; usage sur Saves/ non démontré (inconnu) |
Le cache de données ne couvre que Modules : « pour tout chemin hors Modules, la lecture se fait sur le disque » |
LPDataCache.h:10-11 ; LPDataCache.cpp:25, 104, 110 |
établi : Saves/ n'est pas servi par le cache |
Aucun autre code C++ du jeu ne cite Saves ni lpcharacter : Grep n° 5 à 8 (Source : 1 commentaire ; Plugins et Config : rien). Le module d'outils de l'éditeur (LPDumpSaveCommandlet.cpp) ne lit que des .sav.
Blueprint (chemins littéraux, base relative à Content)
| Asset | Correspondances brutes rg -a -o |
Lecture |
|---|---|---|
Content/BPs/GI.uasset |
Saves/_session/Characters/ 41 ; …/F 10 ; …/C 4 ; …/OldPlayer 4 ; Saves/ 7 ; Saves 5 ; .lpcharacter 80 ; OldPlayer.lpcharacter 5 ; Player.lpcharacter 4 ; presets de modèles elf/orc/vampire/thirties/twenties |
GI porte la quasi-totalité des accès |
Content/UI/Contact.uasset |
Saves/_session/Characters/ 4 ; …/C 2 ; …/F 2 ; .lpcharacter 4 |
3 familles de chemins ; ≈ 4 littéraux (estimé : chaque littéral apparaît 2 fois dans le binaire) |
Content/UI/ContactMenu.uasset |
Saves/_session/Characters/ 2 ; .lpcharacter 2 |
≈ 1 littéral (estimé) |
Content/UI/BodyShapeMenu.uasset |
F.lpcharacter 2 ; appel SaveTxt |
≈ 1 chemin ; écrit un personnage |
Content/UI/CharGen.uasset, Content/UI/StatMenu.uasset |
.lpcharacter 2 chacun ; appels LoadTxt, GetAllFilesFromFolder (3 chacun) |
pas de littéral Saves ; presets de Modules ; passent par GI.SavePreset / LoadPreset (CG2-CART-01.md:44-45, 55, 74) |
Littéraux Saves/… dans les graphes de GI (dump 5.5 L6f_dump_GI.txt, 29 lignes) : 22 dans 17 fonctions, 7 dans l'EventGraph. Lignes du dump, rattachées aux fonctions par l'ordre des en-têtes (déduit) : GeneratePerson (17478, 17709), GetAllGeneratedCharacters (23601, 23632, 23694), getPerson (24098), GetSpecific (26089, 26773), getRelative (29595), isMarried (29924), GetNameFromSlot (31346), cloneFrom (32249), UpdateChildrenAges (32922, 33014), GetFratBros (33397), calculateStaffIntelligence (34570), calculateStaffInterpersonal (34673), GenerateCreature (36231), getCreature (36531), saveOldPlayer (37959), GenerateHomeAndWork (43519), populateGlassesAndVirgins (44889). EventGraph : 55001, 56563, 56568, 56582, 57538, 64195, 69938, identiques aux 7 lignes du dump 5.8 CAM-B1-PRE…txt:6469, 8405, 8410, 8428, 9655, 18018, 25060.
Autres constats utiles :
GI.SavePresetchoisit le préfixe d'après le chemin :StartsWith(File, "Saves")sinon"Modules/"(L6f_dump_GI.txt:2325-2336). Un chemin d'une autre forme tomberait dansModules/: une migration par Blueprint devrait garder ce test (et la redirection C++ le laisse intact).- Appels
LoadTxt/SaveTxtdans GI : 45 nœuds (grep n° 12).SavePreseten compte 2 écritures (l. 1134, 2288) et 2 lectures (l. 2188, 3045),LoadPreset1 lecture (l. 3310) ; le sous-ensemble sur des cheminsSavesn'a pas été isolé par flux de données (inconnu, estimé 20 à 25). - Message à l'écran quand les fichiers manquent : « The save you just loaded is missing crucial *.lpcharacter files. Please copy your old LifePlay\Content\Saves folder into the directory of the current version of the game… » (
CAM-B1-PRE…txt:14822-14823,EventGraphde GI) : devient faux si F6 aboutit. - Les fichiers de presets de mods sont lus dans
Modules/<mod>/Presets/…(L6f_dump_GI.txt:17506, 35316-35326) et non dansSaves.
3.3 Dimensionnement (question 3)
| Critère | Établi | Estimé | Inconnu |
|---|---|---|---|
| Écritures | 1 point C++ (SaveTxt, .cpp:236) |
côté Blueprint : DuplicateCharacters (5 familles de fichiers), SavePreset (2 SaveTxt), saveOldPlayer, BodyShapeMenu ; toutes passent par SaveTxt |
écritures hors SaveTxt (aucune trouvée dans Source, Plugins, ni dans les noms d'appel de GI) |
| Lectures | 1 point C++ (LoadTxt, .cpp:190) ; 45 nœuds d'appel dans GI |
≈ 20 à 25 sur des chemins Saves |
lectures par GetAllFilesFromFolder ou ContentDirectory sur Saves |
| BP ou C++ | le chemin réel est construit en C++ (ProjectContentDir() + chemin relatif) |
C++ seul si la redirection est faite dans LoadTxt/SaveTxt : ≈ 40 à 80 lignes dans 1 fichier (helper de résolution, repli de lecture, journal) |
helper commun aux 3 fonctions de liste si elles servent Saves |
| Voie BP (non retenue) | 29 littéraux dans GI + ≈ 6 dans 3 widgets UI ; le test StartsWith "Saves" de SavePreset ; ≈ 35 modifications par MCP |
— | — |
| GI touché ? | non, par la voie C++ | le texte du message (CAM-B1-PRE…txt:14823) reste faux jusqu'à la build 2 |
— |
| GI touché ? (voie BP) | oui : 17 fonctions + EventGraph |
contraire à la règle « GI.uasset n'est révisé qu'une fois, en build 2 » | — |
| Migration des fichiers existants | R0 déjà décidé pour SaveGames (REL-SAV-TACHES.md:19) |
repli de lecture vers l'ancien Content\Saves : aucune copie, aucune suppression ; l'écriture va dans le nouveau dossier |
granularité du repli (par fichier ou par dossier de slot) : voir risque R2 |
| Saves déjà faites (alpha 2026.10.2.1a, V1.x) | les .sav sont dans …\SaveGames, les personnages dans <jeu>\Content\Saves (REL-ALPHA-T6b.md:24) |
avec le repli, une partie chargée depuis l'ancien emplacement fonctionne ; au premier enregistrement, les personnages passent dans le nouveau dossier | cas d'un joueur qui supprime l'ancien dossier du jeu avant d'avoir réenregistré |
| Compatibilité des mods | le format .lpcharacter ne change pas ; les presets de mods sont dans Modules (L6f_dump_GI.txt:17506) ; le cache ne touche pas Saves (LPDataCache.h:10-11) |
le contrat de données des mods n'est pas modifié | les guides de modding décrivent l'emplacement : Docs/Modding/ShortGuides/explanation.lpcharacter:3, FullGuides/Creating_Presets.txt:7, 13, 15 (Content/Saves, _session, Saves/Default) : texte à corriger, décision de l'utilisateur car le contrat est « figé » (REL-SAV-DIAG.md:48) |
| Éditeur et Development | ProjectSavedDir() = <copie>\Saved hors paquet (REL-SAV-DIAG.md:59) |
les parties de test se rangeraient dans Saved au lieu de Content\Saves |
règle de copie d'une sauvegarde de test (21_Sandbox_Addon.md:213 ; REF/REF1/REF1-CART-02.csv:65) et règle « Content/Saves doit exister mais rester vide » (REF1-CART-01.csv:41) à réécrire |
Dossier cible et -UserDir |
ProjectSavedDir() suit déjà -UserDir (REL-SAV-DIAG.md:19-20) |
le nouveau chemin suit donc le dossier choisi par le joueur | création de dossiers : SaveTxt crée les sous-dossiers de slot aujourd'hui (le dossier Content/Saves est livré vide, REF1-CART-01.csv:41), donc FFileHelper crée l'arborescence (déduit) |
Saves/Default |
cité par Creating_Presets.txt:13 |
— | lu ou non par GI, livré ou non : non vérifié |
3.4 Recommandation (question 4)
Agent et niveau (estimé)
| Étape | Agent | Modèle | Niveau | Raison |
|---|---|---|---|---|
| SPEC | Big Boss, ou une fiche opus (effort medium) | opus | N3 | décisions à prendre (racine, repli par slot, journal, interrupteur de retour arrière, texte des guides) ; chemin chaud |
| IMPL | lp-impl |
Sonnet | N2 | ≈ 40 à 80 lignes dans 1 fichier, si la SPEC donne la signature et les cas ; passer à lp-impl-max (opus) si la SPEC laisse des choix |
| BUILD | lp-builder |
— | N1 à N2 | compilation d'un plugin du jeu, sans l'addon |
| VAL | lp-validator distinct de l'IMPL |
— | N2 | relecture du diff ; branche « hors Saves/ » inchangée octet pour octet |
| Essai en jeu | Big Boss, sous le jeton de la copie UE | — | — | nouvelle partie, sauvegarde, Continuer, ancien dossier présent / absent |
| DOC | lp-writer |
— | N1 | README, guides de modding, lp-validate, REF1, annonces, ERR-042 |
À ne pas confier : lp-mcp-bp (aucun Blueprint à modifier par cette voie ; GI est réservé à la build 2) ; un agent xhigh (pas d'analyse profonde nécessaire une fois la SPEC écrite). Le niveau « lot » à porter dans FIX1-TACHES : N3 (le chemin touché est lu par toutes les données du jeu et l'essai exige la copie UE).
Durée (estimée, non mesurée) : SPEC 20 à 30 tours ; IMPL 15 à 25 tours, sans la copie UE ; compilation incrémentale du plugin (durée non mesurée) ; VAL 15 à 20 tours ; essai en jeu 30 à 60 minutes sous le jeton ; DOC 10 à 15 tours. Environ une journée de session répartie sur J2 à J4, dont un seul créneau sur la copie UE (compilation et essai).
Risques
- R1, chemin chaud :
LoadTxtsert toutes les données du jeu. Le testSaves/doit précéder tout et laisser les autres chemins inchangés (VAL par relecture du diff et par le bilanModdingExtra.LoadTxtStatsau démarrage). - R2, mélange de deux parties : un repli de lecture par fichier pourrait relire un personnage de l'ancienne partie du même numéro de slot. Préférer un repli par dossier de slot (si le dossier du slot existe dans le nouveau dossier, ne plus regarder l'ancien).
- R3, retour arrière : prévoir un interrupteur (argument de lancement ou variable de configuration) qui rétablit le chemin d'origine, pour tenir le gel du 24.
- R4, textes périmés : message de GI (
CAM-B1-PRE…txt:14823), README (:82-83, et:117qui cite encore l'ancien dossier, non vérifié), annoncesREL/ALPHA/REL-ALPHA-ANNONCE-*.md, guides de modding. - R5, file de la copie UE déjà chargée (
37_…:171, 179-185) : un créneau de plus.
Build 1 ou build 2 (estimé, décision de l'utilisateur)
- Build 1 est tenable sous trois conditions : (a) la voie C++ seule est confirmée par la SPEC (aucune modification de GI) ; (b) la SPEC est acceptée le J2 (2026-10-21) pour que l'IMPL se fasse hors copie UE ; (c) l'essai en jeu a lieu au J3 ou au J4 dans le créneau voisin de FIX1 (
37_…:183-184). Porte : si l'essai n'est pas concluant au J4 soir, F6 passe en build 2 et la limite reste dans le README. - Build 2 est préférable si CG2 ou CAM2 glissent : F6 change l'emplacement des données de tous les joueurs juste avant le gel, pour un gain limité (une limite déjà annoncée). Le message de GI pourrait alors être corrigé avec la révision unique de GI.
- Dans les deux cas, GI n'est pas touché en build 1.
4. Établi / estimé / incertain (synthèse)
Établi (relu à la source) : texte d'ERR-042 et ses mises à jour ; B+ seul retenu, aucun lanceur ; R0 ; LPSaveRelaunch livré et E9 PASS ; limite connue au README ; chemins de personnages Saves/_session/Characters/… et Saves/<Slot>/Characters/… ; point d'E/S unique LoadTxt/SaveTxt sur ProjectContentDir() ; aucun autre code C++ ne cite Saves ; 29 littéraux dans les graphes de GI (dump 5.5) dont 7 dans l'EventGraph (dump 5.8) ; 6 assets contiennent ces chaînes ; le cache de données ne couvre que Modules ; guides de modding qui citent Content/Saves.
Estimé (déduit) : la redirection en C++ suffit sans toucher GI ; le nombre de modifications Blueprint si on avait choisi cette voie (≈ 35) ; 20 à 25 nœuds LoadTxt/SaveTxt sur chemins Saves ; le repli de lecture couvre les parties existantes ; FFileHelper crée les dossiers ; durées et niveaux de § 3.4.
Incertain, essai qui trancherait :
- Les dumps de fonctions de GI (29 littéraux) datent du 2026-09-30 (5.5) :
LPDumpFunction -BP=GI -Fn=<chaque fonction> -Pinssur la 5.8, éditeur fermé, rendrait le compte actuel (utilise la copie UE). - Usage de
GetAllFilesFromFolder/GetAllSubfolders/ContentDirectorysurSaves: suivi du flux de données dans ces dumps-Pins. Saves/Default: lu ou non, livré ou non.- Comportement réel d'un Shipping avec un repli de lecture : essai en jeu seulement.
5. Points à confirmer (repris par la fiche suivante)
- Rafraîchir par commandlet (copie UE) le relevé des littéraux
Savesde GI en 5.8 et isoler, par flux de données, les nœudsLoadTxt/SaveTxtsur cheminsSaves. - Chercher les usages de
GetAllFilesFromFolder,GetAllSubfoldersetContentDirectoryavec une baseSaves. - Lire
LPDataCache::OnWritten(LPDataCache.cpp:269) pour confirmer qu'elle ignore les chemins horsModules(non lu ici). - Vérifier que
FFileHelper::SaveStringToFilecrée l'arborescence dans le moteur 5.8 installé (Engine/Source/Runtime/Core/…/FileHelper.cpp) : déduit ici d'un comportement observé, non relu dans le moteur. - Statuer sur
Saves/Default(guides de moddingCreating_Presets.txt:13). - Vérifier
README.md:117(cite encore%LOCALAPPDATA%\LifePlay\Saved). - Corriger la classe de la ligne FIX1 du doc 37 (F6 n'est pas un correctif Blueprint) quand l'utilisateur aura tranché.
6. Questions pour la SPEC ou l'utilisateur
- Racine du nouveau dossier :
ProjectSavedDir()/Saves/…(même arbre queSaveGames) ouProjectSavedDir()/SaveGames/Characters/…? - Repli de lecture sur l'ancien
Content\Saves: oui ou non ; par slot (recommandé) ou par fichier ; durée de vie (jusqu'à quelle version) ? - Copie des anciens personnages vers le nouveau dossier au premier chargement, ou aucune copie (cohérent avec R0) ?
- Guides de modding (
explanation.lpcharacter:3,Creating_Presets.txt:7, 13, 15) : corriger le texte, sachant que le contrat des mods est « figé » ? - Texte du message de GI (
CAM-B1-PRE…txt:14823) : le laisser en build 1 et le corriger avec la révision unique de GI en build 2 ? - Interrupteur de retour arrière : sous quelle forme (argument de lancement,
.ini) ? - F6 en build 1 sous la porte du J4, ou directement en build 2 ?
- Où classer la ligne FIX1 : garder
lp-mcp-bppour F7 et F8, et sortir F6 de FIX1 vers un lot propre (ex. FIX1-F6) piloté en C++ ?
Tours : 26 / 20 (budget « environ 20 » dépassé de 6 : recherche des chaînes dans les assets binaires et rattachement des littéraux aux fonctions de GI ; Tools/FicheStats.py fait foi)