From 6f87c8b92005f49ab1a174796e38a29a64122c7f Mon Sep 17 00:00:00 2001 From: edujiro5972 <336072401+edujiro5972@users.noreply.github.com> Date: Sat, 3 Oct 2026 00:07:36 +0200 Subject: [PATCH] H3 : etude des assets apportes par les mods (plugins Mods/, cuisson DLC) Co-Authored-By: Claude Opus 5.5 --- Docs/Migration/16_H3_Mods_Paquets.md | 68 +++++++++++++++++++++++++ Docs/Migration/Journal_Modifications.md | 1 + Docs/Migration/README.md | 1 + 3 files changed, 70 insertions(+) create mode 100644 Docs/Migration/16_H3_Mods_Paquets.md diff --git a/Docs/Migration/16_H3_Mods_Paquets.md b/Docs/Migration/16_H3_Mods_Paquets.md new file mode 100644 index 0000000..d8a3a9e --- /dev/null +++ b/Docs/Migration/16_H3_Mods_Paquets.md @@ -0,0 +1,68 @@ +# 16. H3 : assets apportés par les mods (étude, 2026-10-03) + +Objectif : qu'un mod apporte ses propres maillages, textures et matériaux (coiffures d'abord, puis vêtements, meubles, +animations) **sans recompiler ni recuire le jeu**. Aujourd'hui, un mod `Content/Modules/` ne contient que du texte : +tout asset doit être cuit avec le jeu (lots H1, H2). + +## 1. Constats (lecture du moteur 5.5 et de la configuration du projet) + +| Point | Constat | Source | +|---|---|---| +| Dossier des mods | Dans un jeu empaqueté, le gestionnaire de plugins lit **toujours** `/Mods/` (« Always add the mods from the loose directory ») ; chaque `Mods//.uplugin` devient un plugin de type `Mod` | `PluginManager.cpp`, `ReadAllPlugins` | +| Activation | un plugin `Mod` est considéré comme chargé depuis le projet : **activé par défaut** | `FPlugin::IsEnabledByDefault` | +| Paquets | pour un plugin de contenu, les paquets `Mods//Content/Paks/Windows/*.pak` (et leurs conteneurs IoStore `.utoc`/`.ucas`) sont **montés au démarrage** ; ses assets ont le préfixe `//` | `PluginManager.cpp`, montage des paquets de plugins | +| Registre d'assets | au démarrage, le registre ajoute le `AssetRegistry.bin` de chaque plugin de contenu activé : les assets du mod sont trouvables par classe et par nom (`GetAssetsByClass`, utilisé par le jeu pour vêtements, animations, meubles…) | `AssetRegistry.cpp`, `LoadPremadeAssetRegistry_Plugins` | +| Signature | aucun `DefaultCrypto.ini` : paquets non signés, non chiffrés | `Config/` | +| Shaders | `bShareMaterialShaderCode=False` : les shaders sont dans les matériaux eux-mêmes, pas de bibliothèque partagée à fournir ; une instance de matériau (`DazHair`) n'en ajoute aucun | `DefaultGame.ini` | +| Format | le jeu est cuit en conteneurs IoStore (O2) : un mod doit l'être aussi, avec le même moteur et contre la **même version cuite** du jeu | `DefaultGame.ini` | + +Le mécanisme existe donc dans le moteur ; il n'a jamais été utilisé par LifePlay. + +## 2. Architecture proposée + +``` +/LifePlay/Mods//.uplugin descripteur (plugin de contenu, type Mod) +/LifePlay/Mods//AssetRegistry.bin registre des assets du mod +/LifePlay/Mods//Content/Paks/Windows/*.pak/.utoc/.ucas assets cuits +/LifePlay/Content/Modules//.lpmod module LifePlay (texte, comme aujourd'hui) +/LifePlay/Content/Modules//Hairstyles/*.lphair HAIRSTYLE: //Hairs/X.X +``` + +Un mod se distribue en une archive à extraire dans le dossier du jeu. Le texte reste dans `Modules` (gestionnaire de +mods, activation, données) ; les assets sont dans `Mods` (moteur). Désactiver le module retire ses coiffures +(H1) ; le paquet reste monté mais n'est plus utilisé. + +**Fabrication d'un mod** (par un moddeur, avec le projet source publié) : + +1. créer un plugin de contenu dans `Mods/` du projet ; +2. y importer ses assets (coiffures : `Tools/HairPipeline.ps1` avec `folder` = `//Hairs`) ; +3. cuire **ce seul plugin** en DLC contre la version publiée du jeu : + `RunUAT BuildCookRun ... -cook -stage -pak -iostore -dlcname= -basedonreleaseversion=2026.10.4` ; +4. assembler l'archive du mod (plugin cuit + module texte). + +**Côté jeu** : rien à recompiler pour le montage. À ajuster : + +- `LPHairstyleSubsystem` : contrôle d'une coiffure par le registre (déjà) avec repli sur + `FPackageName::DoesPackageExist` si le registre du mod manquait ; +- **version de référence** : chaque publication doit produire `Releases//Windows/` (option + `-createreleaseversion=` du build de distribution) et la livrer avec les sources ; un mod est cuit contre + elle. Pour la V1.4 publiée, elle se recrée par une cuisson incrémentale (contenu inchangé depuis le tag `v1.4`). + +## 3. Risques et inconnues à lever par un prototype + +| Risque | Conséquence | Vérification | +|---|---|---| +| Cuisson DLC dans ce projet (plugin dans `Mods/`, `-basedonreleaseversion`) | outil des moddeurs inutilisable | cuisson d'un mod d'essai | +| Compatibilité du conteneur IoStore du mod avec celui du jeu publié | mod non chargé, ou plantage au chargement | montage dans une copie du build Shipping V1.4 | +| Références du mod vers le jeu (squelette Genesis, matériau `DazHair`) | coiffure sans matériau ou sans squelette | contrôle visuel en jeu | +| Mod cuit contre une version, joué avec une autre | incompatibilités si les assets référencés changent | règle : un mod indique la version du jeu ; les assets de base référencés (squelettes, matériaux maîtres) ne sont plus renommés | +| Taille de `Releases/` à livrer avec les sources | dépôt alourdi | mesure ; hors git si volumineux (archive des sources seulement) | +| Mods malveillants | un paquet ne contient que des assets cuits (pas de code) ; les plugins de code ne sont pas chargés dans un jeu Shipping sans binaire compatible | rien à faire au-delà de l'avertissement | + +## 4. Lots proposés + +| Lot | Contenu | Sortie | +|---|---|---| +| **H3a, prototype** | version de référence `Releases/2026.10.4` ; mod d'essai `LPHairSample` (une coiffure Pocolov non encore intégrée, ex. Pocolov 05/07) ; cuisson DLC ; installation dans une **copie** du build Shipping V1.4 | coiffure du mod visible et fonctionnelle en jeu, sans recuire le jeu | +| **H3b, outillage** | `Tools/BuildMod.ps1` (squelette de plugin, cuisson DLC, archive du mod) ; option `HairPipeline` vers `//` ; repli `DoesPackageExist` dans le sous-système | un mod de coiffures en une commande | +| **H3c, documentation moddeurs** | guide (anglais) : créer, cuire, distribuer, compatibilité de version ; intégration de la création de `Releases/` au protocole de publication | guide publié avec la version suivante | diff --git a/Docs/Migration/Journal_Modifications.md b/Docs/Migration/Journal_Modifications.md index 37d8248..1c6e4d8 100644 --- a/Docs/Migration/Journal_Modifications.md +++ b/Docs/Migration/Journal_Modifications.md @@ -944,3 +944,4 @@ Validation L7c/L7d (2026-10-02, parc, même cadrage) : la nuit reste claire (sol | CHG-097 | 2026-10-02 | V1.4 | archives de publication (`D:\Game\LifePlay_Publication`) : sources `LifePlay_Revival_V1.4_UE5.5_Full_Source_Code.7z` (4 942 392 569 octets, 12 766 entrées, SHA-256 `bda44e52e8f45775e09fdea51b613bb64fc5e0c7fd0ec76108804e0bb39b3426`, script `make_archive_v1_4.cmd`) ; jeu `LifePlay_Revival_V1.4_Windows_Game.7z` (1 301 813 923 octets, racine `LifePlay_Revival_V1.4`, SHA-256 `d4a36542550ae2bcc7f3f634255125fc6c7520f5cf29df4b74ae3bbc0ac55a9f`, script `make_game_v1_4.cmd`) ; modules optionnels `LifePlay_Revival_V1.4_Optional_Modules.zip` (875 812 octets, SHA-256 `cd8b4ffa9f676d3703fce9d2b42a0f61682c6c04bda30d033630c8f1be8fd236`) | contrôles : tests 7-Zip ; sources : aucun `.mcp.json`/`.claude`/`McpAutomationBridge`/`Saved`/`Intermediate`/jeton, 17 modules, 10 fichiers identiques au tag `v1.4`, `.git` = `a83ea56` ; jeu : 3 modules (`vin_Base`, `lp_Revival`, `vin_VanillaRealistic`), ni `Saved` ni `.pdb` | liens Mega à ajouter après envoi | | CHG-098 | 2026-10-02 | V1.4 | `README.md` : archive des sources V1.4 en téléchargement principal (lien Mega), V1.3 ajoutée aux versions précédentes | lien Mega de l'archive développeur reçu ; liens du jeu et des modules optionnels à venir | — | | CHG-099 | 2026-10-02 | V1.4 | `README.md` : section V1.4, point des modules optionnels reformulé (plus de nom d'archive ni de mode d'installation) | décision utilisateur : les archives du jeu et des modules optionnels ne sont pas annoncées sur GitHub (la documentation technique garde les détails de l'outil) | `git revert` du commit | +| CHG-100 | 2026-10-03 | H3 | nouveau `Docs/Migration/16_H3_Mods_Paquets.md` | préparation de H3 (demande utilisateur) : étude en lecture seule du moteur 5.5 (dossier `Mods/` lu par le gestionnaire de plugins en jeu empaqueté, plugins Mod activés par défaut, paquets de plugins montés au démarrage, registre `AssetRegistry.bin` des plugins chargé) et de la configuration (paquets non signés, shaders intégrés aux matériaux, IoStore) ; architecture, risques, lots H3a à H3c | — (documentation) | diff --git a/Docs/Migration/README.md b/Docs/Migration/README.md index 4c37c3a..73d86e4 100644 --- a/Docs/Migration/README.md +++ b/Docs/Migration/README.md @@ -26,6 +26,7 @@ La migration a été reprise le 2026-09-29, après l'échec d'un premier portage | [13_Protocole_Coiffure.md](13_Protocole_Coiffure.md) | protocole | ajouter une coiffure (FBX statique, Fab) : import, ajustement sur la tête de Bridget, matériaux, fichier `.lphair`, contrôles | | [14_Interface_V1.4.md](14_Interface_V1.4.md) | lot | menu principal : version année.mois.publication, crédits (Vinfamy, auteur original), liens Donate et Discord, bouton Commission masqué | | [15_Modules_Optionnels.md](15_Modules_Optionnels.md) | lot | build Shipping réduite aux modules essentiels, modules optionnels dans une archive séparée (`Tools/SplitModules.ps1`) | +| [16_H3_Mods_Paquets.md](16_H3_Mods_Paquets.md) | étude | H3 : assets apportés par les mods (plugins `Mods/`, cuisson DLC contre la version publiée) ; constats, architecture, risques, lots H3a à H3c | | [Journal_Modifications.md](Journal_Modifications.md) | traçabilité | `CHG-001` à `CHG-057`, chacune avec son retour arrière | | [Registre_Erreurs.md](Registre_Erreurs.md) | traçabilité | `ERR-001` à `ERR-037`, statut et lot | | `correctifs/` | relecture | écarts de code 4.27 → 5.5 en patchs (`P01` à `P06`) |