# đŸ—ïž Architecture du Projet — ProjectF > **Ce document est la rĂ©fĂ©rence d'architecture du projet, destinĂ©e en prioritĂ© aux modĂšles d'IA (Claude, etc.) qui vont lire, modifier ou crĂ©er du contenu dans ce projet Unreal Engine.** > Il doit permettre de comprendre **oĂč se trouve chaque systĂšme, quel fichier est responsable de quoi, et oĂč ajouter du nouveau contenu** — sans avoir Ă  explorer tout le projet Ă  chaque session. > > ⚠ **Ce document doit rester Ă  jour.** Voir la section [10. Maintenir ce document Ă  jour](#10-maintenir-ce-document-Ă -jour) et le skill `maintain-architecture-doc`. --- ## 1. Vue d'ensemble du projet ### 1.1 Nature du projet - **Moteur** : Unreal Engine **5.8**. - **Aucun code C++** : il n'y a pas de dossier `Source/`. Tout le gameplay est Ă©crit en **Blueprint visuel**, dans `Content/`. - **Genre** : jeu de survie / extraction en vue 3e personne avec un **inventaire en grille façon "Escape from Tarkov"** (armure, sac Ă  dos, armes, munitions, craft sur feu de camp/fonderie, gĂ©nĂ©rateurs, lecteurs de carte magnĂ©tique, coffres, PNJ pillables, vĂ©hicules). - **Multijoueur** : le systĂšme d'inventaire est rĂ©pliquĂ© (RPC client/serveur visibles partout dans `Inventory_Player`, ex. `Request Switch Weapon SERVER`, `Disarm Request SERVER`). Le projet doit donc ĂȘtre pensĂ© serveur-autoritaire pour tout ce qui touche Ă  l'inventaire, aux stats et au combat. ### 1.2 Les grandes couches du projet Le projet est construit par empilement de **trois grands blocs** de contenu, plus une couche d'outillage IA : 1. **Framework de personnage / locomotion ("Sandbox Character")** — `Content/Systems/Blueprints/` BasĂ© sur le sample officiel Epic "Motion Matching" (plugins `Mover`, `MotionWarping`, `MotionTrajectory`, `Chooser`, `AnimationLocomotionLibrary`, `AnimationWarping`). GĂšre le mouvement, la camĂ©ra, le Motion Matching, le traversal (vault/mantle/climb), les modes de mouvement personnalisĂ©s. **Ce framework est en grande partie template/tiers** : n'y toucher qu'en connaissance de cause. 2. **SystĂšme d'inventaire AGIS** ("Advanced Grid Inventory System", asset marketplace) — `Content/Core/Coreinventory/`, `Content/Systems/Inventory/`, `Content/UI/Inventory_UI/`, `Content/Data/Inventory_Data/`. C'est le **cƓur du gameplay** : inventaire en grille, Ă©quipement, craft, loot, sauvegarde. La quasi-totalitĂ© des systĂšmes de jeu ajoutĂ©s par l'Ă©quipe (stats, mort, sĂ©lection rapide d'Ă©quipement, interactables) se branchent sur ce systĂšme. 3. **SystĂšmes de jeu spĂ©cifiques au projet**, ajoutĂ©s par-dessus AGIS — `Content/Systems/Stats/`, `Content/Systems/Scent/`, `Content/Systems/Movable_Object/`, `Content/Systems/Door/`, `Content/PCG/`, `Content/Items/`, `Content/UI/Widgets/` (HUD, pause menu). C'est ici que la majoritĂ© des Ă©volutions de gameplay futures doivent ĂȘtre ajoutĂ©es. 4. **Outillage IA** — plugins `VibeUE`, `EditorToolset`, `ModelContextProtocol`, `Terminal` (dĂ©clarĂ©s dans `ProjectF.uproject`) + `.mcp.json` Ă  la racine. Ils exposent l'Ă©diteur Unreal (Blueprints, Widgets, Input, PCG, Landscape, Niagara, etc.) Ă  un serveur MCP local (`http://127.0.0.1:8000/mcp`) pilotĂ© par des agents Claude. **C'est le mĂ©canisme par lequel un modĂšle d'IA lit/modifie ce projet** — voir la section [9. Notes pour les IA](#9-notes-pour-les-ia-piĂšges-connus-de-loutillage) pour les piĂšges connus. En plus de cela, deux couches d'assets tiers volumineuses sont prĂ©sentes mais **ne contiennent pas de logique de gameplay propre au projet** : le pack mĂ©tĂ©o **UltraDynamicSky** (`Content/Systems/Weather/UltraDynamicSky/`) et diverses bibliothĂšques d'assets 3D Fab/Megascans/Quixel (`Content/Fab/`, `Content/Megaplant_Library/`, une bonne partie de `Content/Animations/` et `Content/Characters/`). ### 1.3 DĂ©pendances principales entre systĂšmes ``` Character (Pawn, gĂ©rĂ© par le framework "Sandbox Character") │ ├─ Composant Inventory_Player (Content/Core/Coreinventory/Inventory_Player) │ └─ hĂ©rite de Inventory_Equipper (Ă©quipement d'armes/objets) │ └─ hĂ©rite de Inventory__Main (cƓur gĂ©nĂ©rique AGIS : slots, containers, rĂ©seau) │ │ Inventory_Player pilote/possĂšde : │ ├─ WB_InventoryScreen (UI d'inventaire complĂšte, créée Ă  la demande) │ │ └─ WB_InventoryPart1 / WB_InventoryPart2 │ │ └─ WB_EquipSlot → WB_Container → WB_InventorySlot → WB_Item │ ├─ WB_QuickSelect (roue de sĂ©lection rapide d'Ă©quipement, 4 slots) │ └─ Les Input Actions IA_*AGIS via l'IMC_AGIS_Character / IMC_AGIS_InventoryTab │ ├─ Composant AC_Stats (Content/Systems/Stats/AC_Stats) │ └─ Vie, mort (OnDeath), Revive → dĂ©clenche WB_YouDied et le respawn du Character │ ├─ Composants de mouvement (Content/Systems/Movement/, Systems/Blueprints/MovementModes/) │ └─ AC_ClimbingComponent, AC_Cover, AC_TraversalLogic, AC_PreCMCTick, AC_VisualOverrideManager
 │ └─ Autres composants gameplay (AC_ScentPoint, etc.) Interactables (Content/Systems/Inventory/Interactables/*) └─ ImplĂ©mentent BPI_Interactable, exposent un inventaire via un composant Inventory_Storage / Inventory_Vendor / Inventory_Crafting (mĂȘmes bases AGIS que le joueur) → consultĂ©s par Inventory_Player lors d'une interaction (touche IA_InteractAGIS) DonnĂ©es d'items (Content/Data/Inventory_Data/, Content/Items/) └─ DT_Items (DataTable), ItemDefaults / ItemInfo (structs), DD_Item (DataAsset par item) alimentent Ă  la fois l'UI d'inventaire ET les Blueprints d'objets sous Content/Items/BP_Item_* ``` ### 1.4 Conventions de nommage des assets | PrĂ©fixe | Signification | Exemple | |---|---|---| | `BP_` | Blueprint d'acteur | `BP_Campfire`, `BP_Item_Helmet` | | `WB_` / `WBP_` | Widget Blueprint (UMG) | `WB_InventoryScreen`, `WBP_PauseMenu` | | `AC_` | ActorComponent | `AC_Stats`, `AC_ClimbingComponent` | | `IA_` | Input Action (Enhanced Input) | `IA_InteractAGIS`, `IA_QuickSelectAGIS` | | `IMC_` | Input Mapping Context | `IMC_AGIS_Character` | | `E_` / `EM_` | Enum | `E_MovementMode`, `EM_Road_Type` | | `S_` / `ST_` | Struct | `S_TraversalCheckInputs`, `ST_Weather_Zone_forecasts` | | `M_` | Material | `M_Road`, `M_Campfire` | | `MI_` | Material Instance | `MI_Black`, `MI_Bottle` | | `SM_` | Static Mesh | `SM_Campfire`, `SM_RifleAdvanced` | | `SKM_` | Skeletal Mesh | `SKM_BodyArmor` | | `PA_` | Physics Asset | `PA_BodyArmor` | | `T_` | Texture | `T_Helmet` | | `RT_` | Render Target | `RT_InspectRenderer` | | `DT_` | Data Table | `DT_Items` | | `DD_` | Data Definition (DataAsset) | `DD_Item` | | `ML_` | Macro Library (Blueprint) | `ML_InventoryMacros` | | `SG_` | SaveGame | `SG_AGIS_UID`, `SG_AGIS_World` | | `GM_` / `PC_` | GameMode / PlayerController | `GM_Sandbox`, `PC_Sandbox` | | `CR_` | Control Rig | `CR_ClimbingGraphV2` | | `ABP_` | Animation Blueprint | `ABP_GenericRetarget` | | `AM_` | Anim Modifier / Anim Montage | `AM_ReloadHip` | | `NS_` | Niagara System | `NS_Tornado` | | `BPI_` | Blueprint Interface | `BPI_Interactable` | Le suffixe `AGIS` sur beaucoup d'assets (`IA_InteractAGIS`, `WB_...AGIS`, fonctions "Target is Inventory Player") signale qu'ils appartiennent au **socle marketplace AGIS**, par opposition aux ajouts spĂ©cifiques au projet. ### 1.5 Conventions importantes Ă  respecter - **Ne jamais renommer/dĂ©placer** les assets du socle AGIS (`Content/Core/Coreinventory/`, une bonne partie de `Content/Systems/Inventory/`, `Content/UI/Inventory_UI/Widgets/WB_Container|WB_EquipSlot|WB_InventorySlot|WB_Item`) sans nĂ©cessitĂ© — de nombreuses rĂ©fĂ©rences internes au plugin marketplace en dĂ©pendent. - **Nouveau systĂšme de gameplay** → crĂ©er un dossier dĂ©diĂ© sous `Content/Systems//`, Ă  l'image de `Systems/Stats/`, `Systems/Scent/`, `Systems/Movable_Object/`. - **Nouvel objet d'inventaire (item)** → suivre le patron existant dans `Content/Items/` : un Blueprint `BP_Item_` (hĂ©ritant de `_BP_ItemBase` ou d'une base spĂ©cialisĂ©e dans `Items/BaseBlueprints/`), ses assets (mesh/matĂ©riau/texture) dans un sous-dossier `Content/Items//` ou `Content/Items/Resources//`, et une entrĂ©e dans `DT_Items` / les DataAssets sous `Content/Data/Inventory_Data/DataAssets/`. - **Nouvel Input Action liĂ© Ă  l'inventaire** → `Content/Systems/Inventory/Other/Inputs/Actions/`, mappĂ© dans `IMC_AGIS_Character` ou `IMC_AGIS_InventoryTab`. **Input Action de dĂ©placement/camĂ©ra gĂ©nĂ©rique** → `Content/Core/PlayerController/Input/`, mappĂ© dans `IMC_Sandbox`. - **Nouveau widget d'inventaire** → `Content/UI/Inventory_UI/Widgets/`. **Nouveau widget hors inventaire** (HUD, menus) → `Content/UI/Widgets/`. - Le clavier cible est **AZERTY** ; privilĂ©gier des touches identiques physiquement sur QWERTY/AZERTY pour les nouveaux raccourcis (ex. `V`, `B`). - RĂ©plication rĂ©seau : toute action qui modifie l'Ă©tat du jeu cĂŽtĂ© inventaire/stats doit suivre le patron `Request X SERVER` (Custom Event `...SERVER`, `Replicated From Client, Executes On Server`) dĂ©jĂ  prĂ©sent dans `Inventory_Player`. --- ## 2. Vue d'ensemble de l'arborescence racine ```text ProjectF/ ├── .gitattributes → RĂšgles Git (LFS, line-endings) ├── .gitignore → Exclut Binaries/, Intermediate/, Saved/, DerivedDataCache/, .vscode/
 ├── .mcp.json → DĂ©clare le serveur MCP "unreal-mcp" (http://127.0.0.1:8000/mcp) utilisĂ© par les agents IA ├── ProjectF.uproject → Fichier projet UE5.8 : liste des plugins activĂ©s (voir §1.2/§8) ├── README.md → Description minimale du projet ├── Architecture_Projet.md → CE DOCUMENT │ ├── .claude/ → Skills et configuration Claude Code pour ce projet │ └── skills/ │ └── maintain-architecture-doc/SKILL.md → Skill de maintenance de ce document (voir §10) │ ├── .codex/, .cursor/, .gemini/, .vscode/ → Configuration d'IDE / d'agents IA tiers (mcp.json, config.toml
) │ ├── Config/ → Configuration moteur & jeu (voir dĂ©tail §7) ├── Content/ → Tous les assets du jeu (voir dĂ©tail §3 Ă  §6) │ ├── Binaries/, Intermediate/, Saved/, DerivedDataCache/ → GĂ©nĂ©rĂ©s par l'Ă©diteur, exclus de Git, jamais Ă  Ă©diter/documenter ``` ### 2.1 ⚠ Fichiers isolĂ©s directement Ă  la racine de `Content/` Quelques fichiers importants vivent directement sous `Content/`, hors de toute organisation par dossier — Ă  connaĂźtre avant de chercher "oĂč est le personnage" ou "oĂč est le GameInstance" : ```text Content/ ├── SandboxCharacter_CMC.uasset → ⭐ Le Blueprint du PERSONNAGE JOUEUR lui-mĂȘme (Character/Pawn). RĂ©fĂ©rencĂ© par GM_Dev, GM_Sandbox, PC_Sandbox, Gamemode_AGIS, WB_InventoryScreen, WBP_PauseMenu, BP_Moveble_Object, BP_Simply_Door, AC_PreCMCTick, AC_ClimbingComponent et son propre Anim BP (Systems/Blueprints/SandboxCharacter_CMC_ABP). C'est le point d'entrĂ©e central de tout le gameplay. ├── BP_GameInstance.uasset → GameInstance rĂ©ellement utilisĂ© par le projet (Ă  ne pas confondre avec `Core/Coreinventory/GameInstance_AGIS`, la base du plugin — vĂ©rifier lequel des deux est configurĂ© comme GameInstance par dĂ©faut avant de supposer que c'est l'un ou l'autre). └── DT_DemoTags.uasset (+ .T3D) → DataTable de tags, probablement un reste de test/dĂ©mo. Aucune rĂ©fĂ©rence trouvĂ©e dans le projet au 2026-09-04 — candidate Ă  la suppression, mais volontairement laissĂ©e en l'Ă©tat (non confirmĂ©e inutile). ``` --- ## 3. `Content/Core/` — Socle inventaire (AGIS) + Player Controller + Tick Le cƓur technique de l'inventaire et des entrĂ©es gĂ©nĂ©riques du joueur. ```text Content/Core/ ├── Coreinventory/ → CƓur du plugin AGIS (composants, donnĂ©es, sauvegarde) │ ├── Inventory__Main.uasset → ActorComponent BASE : logique gĂ©nĂ©rique de containers/slots, rĂ©plication rĂ©seau. Racine de la hiĂ©rarchie d'inventaire. │ ├── Inventory_Equipper.uasset → hĂ©rite de Inventory__Main : ajoute la logique d'Ă©quipement (armes/objets tenus en main) │ ├── Inventory_Player.uasset → hĂ©rite de Inventory_Equipper : composant d'inventaire du JOUEUR. Contient toute la logique spĂ©cifique projet ajoutĂ©e cette session (SelectQuickSlot, ToggleQuickEquip, GetQuickSlotItemInfo, graphe INPUTS avec tous les bindings Enhanced Input du joueur) │ ├── Inventory_Storage.uasset → Inventaire des containers de stockage (coffres, trunk, etc.) │ ├── Inventory_Vendor.uasset → Inventaire des PNJ vendeurs │ ├── Inventory_Crafting.uasset → Inventaire des stations de craft (campfire, smelter, gĂ©nĂ©rateur) │ ├── BP_AttachmentHandler.uasset → ActorComponent gĂ©rant les attachements sur les armes (silencieux, lampe, chargeur
) │ ├── CombatComponent.uasset → ActorComponent : logique de combat (tir, dĂ©gĂąts) liĂ©e aux armes AGIS │ ├── BP_SM_DroppedMesh.uasset → Acteur reprĂ©sentant un objet lĂąchĂ© au sol (mesh statique + interaction de ramassage) │ ├── ItemMesh_STATIC.uasset / ItemMesh_Skeletal.uasset → Acteurs gĂ©nĂ©rant le rendu 3D d'un item tenu/lĂąchĂ© (mesh statique ou squelettal) │ ├── DD_Item.uasset → DataAsset dĂ©crivant un item (rĂ©fĂ©rencĂ© par ItemDefaults) │ ├── FL_AGIS.uasset → Function Library : fonctions statiques utilitaires du plugin AGIS │ ├── ML_AGISDefaults.uasset → Macro Library : macros par dĂ©faut du plugin │ ├── ML_AGIS_UMG.uasset → Macro Library : macros dĂ©diĂ©es Ă  l'UI (UMG) │ ├── ML_InventoryMacros.uasset → Macro Library : macros gĂ©nĂ©riques d'inventaire │ ├── GameInstance_AGIS.uasset → GameInstance de base du plugin (Ă©tat persistant entre les maps) │ ├── Gamemode_AGIS.uasset → GameMode de base du plugin (indĂ©pendant de GM_Sandbox, voir §4) │ ├── PlayerController_AGIS.uasset → PlayerController de base du plugin │ └── SG_AGIS_UID.uasset / SG_AGIS_World.uasset → SaveGame : compteur d'UID uniques / Ă©tat persistant du monde (sauvegarde) │ ├── PlayerController/ → Input gĂ©nĂ©rique du joueur (mouvement, camĂ©ra), indĂ©pendant de l'inventaire │ ├── IA_InitiateClimb / IA_LeapFromClimb / IA_MovingClimb.uasset → Input Actions liĂ©es Ă  l'escalade │ └── Input/ │ ├── IMC_Sandbox.uasset → Input Mapping Context PRINCIPAL du personnage (mouvement, camĂ©ra, saut
) │ └── IA_Move, IA_Look, IA_Jump, IA_Sprint, IA_Run, IA_Walk, IA_Crouch, IA_Prone, IA_Strafe, │ IA_Aim, IA_Interact, IA_ESC, IA_NextPawn, IA_Traverse, IA_TeleportToTarget, │ IA_SwimmingDeep, IA_TwinStick_AimDirection, IA_Move_WorldSpace, IA_Look_Gamepad, │ IA_NextVisualOverride, IA_rool.uasset → Input Actions individuelles mappĂ©es dans IMC_Sandbox │ └── Tick/ → SystĂšme de gestion centralisĂ©e du Tick (perf) ├── BPI_TickManager.uasset → Interface implĂ©mentĂ©e par les acteurs qui veulent ĂȘtre "tickĂ©s" par le manager ├── BP_TickManager.uasset → Acteur central qui distribue les ticks (probablement Ă  frĂ©quence configurable) └── E_TickFrequency.uasset → Enum des frĂ©quences de tick disponibles ``` --- ## 4. `Content/Systems/` — SystĂšmes de gameplay ### 4.1 `Systems/Inventory/` — Extension du socle AGIS pour ce projet ```text Content/Systems/Inventory/ ├── BP_Spawner.uasset → Acteur de spawn (probablement spawn d'items/loot en dĂ©but de partie) ├── DT_Items.uasset → DataTable listant tous les items du jeu (clĂ© pour crĂ©er/reconnaĂźtre un item) │ ├── Interactables/ → Tout ce que le joueur peut "interagir" avec (touche IA_InteractAGIS) │ ├── BP_EnemyPuppet.uasset → PNJ/mannequin pillable │ ├── BP_Vendor.uasset → PNJ vendeur (utilise Inventory_Vendor) │ ├── CraftingInteractables/ │ │ ├── Campfire/BP_Campfire.uasset → Station de cuisson/craft (feu de camp) + ses assets (mesh, matĂ©riaux) │ │ └── Smelter/BP_Smelter.uasset → Station de fonte de minerai + ses assets │ ├── FuelGenerator/BP_Generator.uasset → GĂ©nĂ©rateur Ă©lectrique (consomme du carburant) │ ├── KeycardReader/BP_KeycardReader.uasset → Lecteur de carte magnĂ©tique (dĂ©verrouillage) │ ├── Other/BP_SimpleDoor.uasset → Porte interactable simple │ └── Storages/ │ ├── BP_StorageBox.uasset, BP_Trunk.uasset, BP_SphereStorage.uasset, _BP_StorageBase.uasset → Coffres/contenants de stockage (hĂ©ritent de _BP_StorageBase) │ └── Deadbody/BP_Deadman.uasset → Cadavre pillable │ ├── Interfaces/ → Interfaces Blueprint (contrats partagĂ©s) │ ├── BPI_Interactable.uasset → Contrat pour tout objet interactible (implĂ©mentĂ© par tous les Interactables ci-dessus) │ ├── BPI_SlotWidgets.uasset → Contrat pour les widgets de slot d'inventaire │ ├── BPI_HoldableItem.uasset → Contrat pour un item tenable en main │ ├── BPI_WeaponAGIS.uasset → Contrat pour les armes │ ├── BPI_DamageFeedback.uasset → Contrat de retour visuel/sonore lors de dĂ©gĂąts │ └── BPI_GameInstance_AGIS.uasset → Contrat exposĂ© par le GameInstance cĂŽtĂ© AGIS │ ├── Other/ → Assets d'appoint de l'inventaire │ ├── Animations/ → Animations liĂ©es aux armes/mains nues (Jog, Rifle, TurnInPlace, WALK) — clips Motion Matching (MM_*) et montages (AM_*) │ ├── Fonts/ → Polices utilisĂ©es par l'UI d'inventaire │ ├── Inputs/ │ │ ├── Actions/ → **Toutes** les Input Actions liĂ©es Ă  l'inventaire (IA_*AGIS), y compris IA_QuickSelectAGIS et IA_QuickEquipAGIS (sĂ©lection rapide, ajoutĂ©es pour ce projet) │ │ ├── IMC_AGIS_Character.uasset → Mapping Context actif en jeu (personnage) : touches 1/2/3/4, F, V, B, etc. │ │ └── IMC_AGIS_InventoryTab.uasset → Mapping Context actif quand l'inventaire plein Ă©cran est ouvert │ ├── InspectCapture/ → Rendu d'inspection d'objet (RT_InspectRenderer + BP_InspectRenderer + M_Inspect) │ └── Materials/ → MatĂ©riaux gĂ©nĂ©riques rĂ©utilisĂ©s par les items (MI_Black, MI_Red, M_Metal, M_Outline
) │ └── Utilities/ → Outils d'Ă©diteur (Editor Utility Widgets) pour la crĂ©ation de containers/inventaires ├── EUW_ContainersCreator.uasset, EUW_WidgetToInventoryData.uasset └── Others/WB_ContainerSpecsUtility.uasset, WB_CreatorContainerUtility.uasset ``` ### 4.2 `Systems/Blueprints/` — Framework de personnage / locomotion ("Sandbox Character") Contenu trĂšs largement issu du sample Epic **Motion Matching** (plugins `Mover`, `MotionTrajectory`, `Chooser`, `AnimationLocomotionLibrary`). À traiter comme un framework tiers : prĂ©fĂ©rer l'Ă©tendre plutĂŽt que le réécrire. ```text Content/Systems/Blueprints/ ├── BPI_SandboxCharacter_Pawn.uasset → Interface du Pawn joueur (point d'entrĂ©e du framework de locomotion) ├── BPI_SandboxCharacter_ABP.uasset → Interface de l'Anim Blueprint du personnage ├── AC_TraversalLogic.uasset → ActorComponent : logique de traversal (vault/mantle/climb contextuel) ├── AC_PreCMCTick.uasset → ActorComponent : logique exĂ©cutĂ©e avant le tick du mouvement (Mover/CMC) ├── AC_VisualOverrideManager.uasset → ActorComponent : gestion des overrides visuels du personnage ├── GM_Sandbox.uasset / PC_Sandbox.uasset → GameMode / PlayerController du framework de locomotion (indĂ©pendants de Gamemode_AGIS/PlayerController_AGIS, voir §3) │ ├── Cameras/ → SystĂšme de camĂ©ra (Camera Rigs modulaires) │ ├── CameraAsset_SandboxCharacter, CameraDirector_SandboxCharacter, CHT_CameraRig │ ├── E_CameraMode.uasset, E_CameraStyle.uasset │ └── Rigs/CameraRig_* (Close/Medium/Far × Aim/Freecam/Strafe, CrouchOffset, CollisionOffset, TwinStick
) │ ├── MovementModes/ → Modes de mouvement personnalisĂ©s (plugin Mover) │ ├── BP_MovementMode_Walking / _Falling / _Slide │ ├── BP_MovementTransition_ToSlide / _FromSlide │ └── BP_ClimbingMode.uasset │ ├── ControlRigs/CR_Biped_FootPlacement.uasset → Control Rig : placement des pieds (foot IK) ├── RetargetedCharacters/ABP_GenericRetarget.uasset → Anim BP gĂ©nĂ©rique pour le retargeting │ ├── AnimModifiers/ → Anim Modifiers (post-traitement de clips d'animation Ă  l'import) ├── AnimNotifies/ → Anim Notifies personnalisĂ©es (BP_AnimNotify_FoleyEvent*, BP_NotifyState_EarlyTransition/MontageBlendOut) + enums associĂ©s │ ├── Data/ → Structs/Enums/Curves partagĂ©s par tout le framework de locomotion │ ├── E_Gait, E_Stance, E_MovementMode, E_MovementState, E_MovementDirection(Bias), E_RotationMode, │ │ E_AnalogStickBehavior, E_ExperimentalStateMachineState, E_TraversalActionType │ ├── S_CharacterPropertiesForAnimation / _ForCamera / _ForTraversal, S_BlendStackInputs, │ │ S_MoverCustomInputs, S_PlayerInputState, S_TraversalCheckInputs/Result, │ │ S_TraversalChooserInputs/Outputs, S_ChooserOutputs, S_MovementDirectionThresholds, │ │ S_RotationOffsetCurveChooser_Inputs, S_DebugGraphLineProperties │ ├── Curve_RotationOffset_* , Curve_StrafeSpeedMap, CHT_RotationOffsetCurve → Curve Tables pilotant les offsets d'animation │ └── BFL_HelpfulFunctions.uasset, BPI_InteractionTransform.uasset │ ├── SmartObjects/ → IntĂ©gration du plugin SmartObject (points d'ancrage d'animation contextuelle) │ ├── CHPA_SmartObject, AC_SmartObjectAnimation │ └── SmartObjectAnimationPayload, SmartObjectSelectionInputs/Outputs │ └── SandboxCharacter_CMC_ABP.uasset → Anim Blueprint principal du personnage joueur (pilotĂ© par `/Game/SandboxCharacter_CMC`). Anciennement Ă©garĂ© dans un dossier `d/` mal nommĂ© — dĂ©placĂ© ici (nettoyage du 2026-09-04). ``` ### 4.3 Autres systĂšmes de gameplay (ajouts spĂ©cifiques au projet) ```text Content/Systems/ ├── Stats/ │ └── AC_Stats.uasset → ActorComponent ACTIF : gĂšre la vie du personnage (Health), la mort (bIsDead, dispatcher OnDeath), Heal, Revive (voir §1.3). AjoutĂ© cette session pour le systĂšme de mort/respawn. │ ├── Door/ │ ├── Garage_Door/BP_Garage_door.uasset → Porte de garage interactable │ └── Simply_Door/BP_Simply_Door.uasset → Porte simple interactable │ ├── Movement/ │ ├── Climbing/AC_ClimbingComponent.uasset, CR_ClimbingGraphV2.uasset (Control Rig), CR_Mannequin_BasicFootIK.uasset, ClimbingMaterial.uasset │ └── Cover/AC_Cover.uasset → ActorComponent : systĂšme de couverture (cover system) │ ├── Scent/BP_ScentPoint.uasset → Point Ă©metteur d'odeur (probablement pour une IA de traque par l'odorat) ├── Movable_Object/BP_Moveble_Object.uasset → Objet physique dĂ©plaçable par le joueur ├── Interact_Interface.uasset → Interface d'interaction gĂ©nĂ©rique (racine de Systems/, Ă  distinguer de BPI_Interactable dans Inventory/Interfaces/) │ └── Weather/ ├── Tornado/BP_Tornado.uasset, NS_Tornado.uasset → Tornade dynamique (acteur + systĂšme Niagara), spĂ©cifique au projet └── UltraDynamicSky/ → đŸ§© **Asset marketplace tiers complet** (~789 fichiers : Blueprints, matĂ©riaux, sons, textures de ciel/mĂ©tĂ©o dynamique). Ne pas modifier directement ; utiliser ses points d'extension documentĂ©s par le plugin (Weather_Presets, Climate_Presets, Sky_Modifiers). Structure interne : Blueprints/ (Enum, Functions, Occlusion, Sky_Modifiers, Sound, System, Tools, Utilities, Weather_Effects, Widgets), Materials/, Meshes/, Particles/, Sound/, Textures/, Maps/ (map de dĂ©mo du plugin). ``` --- ## 5. `Content/Data/` — Structures de donnĂ©es globales ```text Content/Data/ ├── DataTable/DT_Season.uasset → DataTable des saisons (mĂ©tĂ©o) │ ├── Enums/ │ ├── E_CoverD.uasset, E_WeaponType.uasset │ ├── Enums/E_BodyPart.uasset │ └── Movement_enum/Weapon_Equip.uasset │ (⚠ Ă  ne pas confondre avec Data/Inventory_Data/Enumerations/ ci-dessous — deux emplacements d'enums coexistent) │ ├── Structure/Weather/ → Structs mĂ©tĂ©o (ST_Season, ST_WeatherZoneState, ST_Weather_Zone_CurentWeather/forecasts/_Data, ST_Zone_Influance) │ └── Inventory_Data/ → DonnĂ©es du systĂšme d'inventaire AGIS ├── DataAssets/ │ ├── AttachmentData/ → AttachmentData (base) + AttachmentData_AdvancedRifle, AttachmentData_Flashlight : configuration des attachements d'armes │ ├── ContainerGroupData/ → Un DataAsset par "groupe de containers" (Backpack BIG/SMALL, Box/Chest Storage, Vest_1/2, ExampleStorage
) : dĂ©finit la mise en page des slots d'un contenant │ └── InventoryData/ → Un DataAsset par inventaire prĂ©dĂ©fini (PlayerInventoryPart1/2, CardReader_Inventory, Generator_Inventory, Vehicle_Inventory) ├── Enumerations/ → Enums spĂ©cifiques AGIS : EAnimOverlayState, EBallDirections, EFourDirections/ETwoDirections, EInteractionType, EItemActions, ENestingRules, EPrintType, EReloadType, EServerVerificationType, ESlotAppearance, EVendorBuyOption └── Structures/ → Structs spĂ©cifiques AGIS ├── ItemDefaults.uasset → Struct CENTRALE dĂ©crivant un item (Name, etc.) — lue par WB_Item et par la logique de sĂ©lection rapide (Inventory_Player) ├── ItemInfo, SlotInfo, SlotAddress, SlotAppearance, SubItemInfo, RandomSubItem ├── ContainerInfo, ContainerAppearance ├── AttachmentInfo, EquipSlot_KeySettings/_OwnContainersSettings/_TextureSettings/_TitleSettings ├── ClientWidgetData, CombinedTexturesInfo, TextureInfo ├── CraftingSlotRowInfo, DragSounds, DebugPrint, FindResult, InspectCameraInfo, InteractCosmetics, ItemActorInfo, MenuActions └── SaveStructures/SaveData_Player, SaveData_Storages, Savedata_ItemActor → Structures de sauvegarde (non encore branchĂ©es Ă  un vrai systĂšme de save, voir §1.3 du systĂšme de mort) ``` --- ## 6. `Content/UI/` — Interfaces utilisateur ```text Content/UI/ ├── Inventory_UI/ → TOUTE l'UI de l'inventaire (socle AGIS + ajouts projet) │ ├── MaterialResources/ → MatĂ©riaux/Material Instances de fond des slots (MI_Background_*, M_RuntimeItemMaterial
) │ └── Widgets/ │ ├── WB_Container.uasset → Widget reprĂ©sentant un container (grille de slots) — contient SlotWidgets[] │ ├── WB_EquipSlot.uasset → Widget d'un slot d'Ă©quipement (arme/speed) — contient Container │ ├── WB_InventorySlot.uasset → Widget d'un slot individuel dans une grille — expose "ItemWidget On Slot" │ ├── WB_Item.uasset → Widget reprĂ©sentant un item posĂ© dans un slot — expose "Item Defaults" (struct ItemDefaults) │ │ │ ├── InventoryMenu/ │ │ ├── WB_InventoryScreen.uasset → Widget racine de l'inventaire plein Ă©cran (contient InventoryPart1/InventoryPart2) │ │ ├── WB_InventoryPart1.uasset → Contient les 4 slots d'Ă©quipement (EquipSlotWEAPON, EquipSlotWEAPON2, EquipSlotSpeed1, EquipSlotSpeed2) + autres slots d'Ă©quipement (casque, gilet, gants, sac Ă  dos
) │ │ └── WB_InventoryPart2.uasset → Grille(s) d'inventaire principale(s) │ │ │ ├── ItemActionsMenu/WB_ItemMenu.uasset, WB_GeneralButton.uasset → Menu contextuel d'actions sur un item │ │ │ ├── LootWidgets/ → FenĂȘtres de pillage, une par type de source (Human, Storage, Vendor, Vehicle, Generator, KeycardReader) hĂ©ritant de _WB_LootWidgetBASE ; LootingCrafting/ pour les stations de craft │ │ │ ├── MovableWindows/ → SystĂšme de fenĂȘtres dĂ©plaçables (_WB_Window_Base) : ItemInspect/ (inspection 3D d'un item), ItemInventory/ (fenĂȘtre d'inventaire flottante), WB_TitleBar_Window (barre de titre commune) │ │ │ └── Other/ │ ├── WB_QuickSelect.uasset → 🆕 Roue de sĂ©lection rapide (4 slots : Arme1/Arme2/Speed1/Speed2 + "Aucun"). RĂ©sout seule son Inventory_Player propriĂ©taire au Construct (GetOwningPlayerPawn → GetComponentByClass). Ouverte/fermĂ©e depuis Inventory_Player (touche V maintenue). │ ├── WB_YouDied.uasset → Écran "Vous ĂȘtes mort" (systĂšme de mort/respawn) │ ├── WB_ActionScreen, WB_InteractScreen, WB_InteractBall, WB_PickupDisplay → Feedback d'interaction/pickup au sol │ ├── WB_CombatHUD, WB_DisplayHUD, WB_WeaponAmmoInfo → HUD de combat/munitions │ ├── WB_InventoryBackground, WB_ItemInfo, WB_SlotTitle → ÉlĂ©ments visuels d'appoint │ └── WidgetTextures/ → IcĂŽnes des slots d'Ă©quipement (T_EquipSlot_*) et textures d'UI diverses │ ├── TextureUI/M_CharacterUI.uasset, RT_CharacterView.uasset → Rendu de la vue personnage dans l'UI (ex. Ă©cran d'inspection du personnage) │ └── Widgets/ → UI HORS inventaire ├── HUD/WB_HUD.uasset, WB_New_HUD.uasset, WB_New_InterfacePlayer.uasset ├── PauseMenu/WBP_PauseMenu.uasset, WBP_Options.uasset └── interaction/WB_Interact.uasset ``` --- ## 7. `Content/Items/`, `Content/PCG/`, `Content/Maps/`, `Content/VFX/`, `Content/Prop/` ```text Content/Items/ → Objets ramassables/Ă©quipables du jeu ├── BaseBlueprints/ │ ├── _BP_ItemBase.uasset → Blueprint BASE de tout item (racine de hiĂ©rarchie) │ ├── BP_Item_HoldableBase.uasset → Base des items tenables en main │ ├── BP_Item_Armor_Base.uasset → Base des items d'armure/Ă©quipement portĂ© │ └── BP_Item_Skeletal_Base.uasset → Base des items avec mesh squelettal │ ├── BP_Item_AdvancedRifle / _Backpack_Camper / _Backpack_Sport / _BodyArmor / _Flashlight / │ _Gloves / _Helmet / _KevlarVest / _LightVest / _Siren.uasset → Blueprints d'items "portĂ©s" (racine d'Items/) ├── Attachments/BP_Item_MagazineBase, BP_Item_RifleFlashlight, BP_Item_Suppressor.uasset → Attachements d'armes ├── ItemObjects/BPI_MergeableItemObject, ItemObject__BASE, ItemObject_ConsumableBASE, ItemObject_Magazine.uasset → Objets "monde" associĂ©s aux items (empilables, consommables, munitions) │ ├── Ammo/, Weapon/ (Base_Bow, Base_knife), Tool/ (saucepan), Water/ (water_bottle), │ Food/ (Red_Apple, meat, cooked_Meat, Burnt_Meat), Resource/ (Stick, Stone) │ → Chaque sous-dossier contient les assets (mesh/matĂ©riau/texture/Thumbnail) d'un item ; les Blueprints correspondants sont soit Ă  la racine d'Items/, soit dans Resources/ │ ├── Resources/ → Assets 3D (mesh/matĂ©riau/texture) groupĂ©s par Ă©quipement portĂ©, + cas particuliers │ ├── Backpack_Camper/, Backpack_Sport/, BodyArmor/, Gloves/, Helmet/, KevlarVest/, LightVest/, Rifle/ │ ├── _Others/ → Assets des petits objets (Keycard, Log, Meat, AmmoBox, Battery, Flashlight, FuelCanister, GoldIngot/GoldOre, Headphone, MoneyBag, WaterBottle) │ └── ABP_SkeletalEquippables.uasset → Anim Blueprint partagĂ© par les items squelettaux Ă©quipĂ©s │ └── ItemTextures/ → Textures d'icĂŽnes/inventaire communes Ă  tous les items (T_*) Content/PCG/ → GĂ©nĂ©ration procĂ©durale de contenu (plugin PCG) ├── Road/ │ ├── PCG_Road.uasset → Graphe PCG gĂ©nĂ©rant la route procĂ©durale (matĂ©riaux vieillis/mousse/humiditĂ©, potholes via GeometryScript) │ ├── BP_AbandonedRoad.uasset → Acteur portant le graphe PCG │ ├── M_Road.uasset, ST_Road_data.uasset, EM_Road_Type.uasset → MatĂ©riau, struct de donnĂ©es et enum de types de route ├── Vegetation/TreeTest.uasset → Graphe PCG de placement de vĂ©gĂ©tation (arbres, gĂ©nĂ©rĂ©s via PVE pour la route) └── test/NewPCGGraph1.uasset → Graphe de test/brouillon Content/Maps/DevMap/ ├── MapDev1.umap → đŸ—ș Map de dĂ©veloppement PRINCIPALE (GameDefaultMap / EditorStartupMap, voir Config/DefaultEngine.ini) ├── GM_Dev.uasset → GameMode utilisĂ© sur MapDev1 (hĂ©rite directement de GameModeBase, indĂ©pendant de GM_Sandbox/Gamemode_AGIS) ├── pcg_Test_Dev.umap → Map de test PCG └── PCG_Test_Dev_HLODLayer_*, Untitled_HLOD0_Instancing.uasset → Assets HLOD gĂ©nĂ©rĂ©s pour les maps de test Content/VFX/ ├── Firetrail/BP_FireTrail.uasset, Effects/P_BulletTrail.uasset, Materials/M_BulletTrail.uasset → TraĂźnĂ©e de balle └── MI_MuzzleFlash, M_MuzzleFlash, MuzzleFlash, P_MuzzleFlash → Effet de tir (bouche de canon) ├── M_Blood.uasset, T_Blood.uasset → Effet de sang └── crosshair.uasset, hitmarker.uasset → ÉlĂ©ments de HUD de tir Content/Prop/Wooden_Door/ → Prop de porte en bois (mesh + matĂ©riaux), utilisĂ© par les BP de porte interactable ``` --- ## 8. Assets tiers / bibliothĂšques (peu ou pas de logique de gameplay) Ces dossiers contiennent des assets achetĂ©s/importĂ©s (Marketplace, Fab/Quixel Megascans, Megaplant, packs d'animation mocap). Ils sont volumineux (des centaines de fichiers) et **ne sont volontairement pas dĂ©taillĂ©s fichier par fichier** ici — voir §10 pour la rĂšgle sur quand les documenter. ```text Content/Animations/ → Clips de mocap tiers : DeerAndDoe/, Fox/, Wolf/, humain/ (Armed_mov, Avoid, Carrying, Cover, Effect_Animation, INteraction, Prone, Push, SwimmingAnimation
) Content/Characters/ → Meshes/matĂ©riaux/textures des personnages et animaux (Animal/DeerStagAndDoe|Fox|Wolf, UEFN_Mannequin/ avec ses donnĂ©es de Motion Matching : AimOffset, Crouch, Idle, Jump, MotionMatchingData/ [Channels, Databases, Normalization_Sets, Schemas], Poses, Run, Slide, Sprint, Traversal, Walk, Rigs, Materials, Meshes, Textures) Content/Fab/ → Assets Fab/Quixel Megascans : MaterialFunctions/, MaterialParameterCollection/, Materials/ (Standard/VT), Megascans/Plants/ (Common_Hemp_Nettle, Wild_Grass ×2), Megascans/Surfaces/ (Damaged_Asphalt, Dirt_Ground, Forest_Floor), Textures/ (Standard/VT) Content/Megaplant_Library/ → VĂ©gĂ©tation Megaplant : Plant_Bilberry/, Tree_European_Aspen/, Tree_Hornbeam/ (chacun avec Instances/, Materials/, Textures/) Content/Thumbnails/ → Miniatures gĂ©nĂ©rĂ©es pour la Content Browser Content/Collections/ → Collections d'assets (vide actuellement) Content/Developers/catry/ → Dossier de dĂ©veloppeur personnel (playground, Collections/) — non partagĂ©/gameplay Content/Misc/ → SandboxAnimCurveCompressionSettings.uasset (rĂ©glages de compression d'anim) Content/__ExternalActors__/ → ⚙ GĂ©nĂ©rĂ© automatiquement par World Partition (donnĂ©es par-acteur des maps, ex. LocomotionAnimPack). Content/__ExternalObjects__/ → ⚙ GĂ©nĂ©rĂ© automatiquement par World Partition (objets externes liĂ©s aux maps). → Ces deux derniers dossiers ne doivent JAMAIS ĂȘtre Ă©ditĂ©s ou documentĂ©s Ă  la main : leur contenu suit automatiquement les maps et les acteurs qu'elles contiennent. ``` --- ## 9. Notes pour les IA : piĂšges connus de l'outillage Ce projet est modifiĂ© via le plugin **VibeUE** (service MCP `unreal-mcp`, voir `.mcp.json`), qui expose des services Python (`unreal.BlueprintService`, `unreal.WidgetService`, `unreal.InputService`, `unreal.EnumStructService`, etc.) pour piloter l'Ă©diteur Unreal sans l'ouvrir manuellement. Quelques piĂšges rencontrĂ©s et leurs solutions : - **`build_graph`** attend un champ **`"ref"`** pour identifier chaque nƓud dans la liste `nodes` (pas `"id"`). Un mauvais nom de champ Ă©choue silencieusement (retourne `None` sans erreur explicite). - Les **variables locales Ă  une fonction** (paramĂštres, locals créés via `add_object_variable` avec `graph=...`) ne sont pas fiables avec `build_graph`'s `variable_get`/`variable_set` : prĂ©fĂ©rer des **variables membres** du Blueprint. - Un `K2Node_VariableSet`/`Get` créé via un spawner_key gĂ©nĂ©rique (`discover_nodes` + `create_node_by_key`) peut se rĂ©soudre sur la **mauvaise classe** si plusieurs Blueprints chargĂ©s ont une variable de mĂȘme nom affichĂ© (ex. "Owner Inventory" existe Ă  la fois sur `WB_Container` et sur un widget créé cette session) — toujours vĂ©rifier les pins du nƓud créé (`get_node_pins`) avant de cĂąbler, ou utiliser `build_graph` avec `type: "variable_set"` + `params.variable` en contexte "self" qui est fiable. - Appeler une fonction Blueprint **prĂ©existante** (créée dans une session antĂ©rieure/par le plugin marketplace) sur un **autre** Blueprint peut Ă©chouer silencieusement selon la mĂ©thode utilisĂ©e. PrivilĂ©gier l'accĂšs direct aux propriĂ©tĂ©s (`member_get`, fiable) plutĂŽt que l'appel de fonction cross-Blueprint quand c'est possible ; sinon tester `add_function_call_on_variable` et vĂ©rifier le rĂ©sultat via `get_node_pins`/`get_nodes_in_graph`. - Écrire une valeur littĂ©rale sur un pin de type `Text`, `Object` ou `Class` via `set_node_pin_value` Ă©choue souvent **silencieusement Ă  l'affichage** (`get_node_pins` renvoie toujours `default_value: ""`) mĂȘme quand l'assignation a rĂ©ellement fonctionnĂ© — vĂ©rifier via une **compilation** (erreurs de compilation manquantes = probablement OK) plutĂŽt que via une relecture du pin. - **Toujours compiler ET sauvegarder** un Blueprint aprĂšs modification (`BlueprintEditorLibrary.compile_blueprint` + `EditorAssetLibrary.save_loaded_asset`), puis **tester en PIE** et lire les logs (`EditorToolset.LogsToolset.GetLogEntries`, filtrer sur `"Blueprint Runtime Error"`) pour dĂ©tecter les erreurs Ă  l'exĂ©cution qu'une compilation rĂ©ussie ne rĂ©vĂšle pas (ex. accĂšs Ă  un Ă©lĂ©ment de tableau hors limites). - Le clavier cible du jeu est **AZERTY** : vĂ©rifier les mappings de touches existants (`IMC_Sandbox`, `IMC_AGIS_Character`, `IMC_AGIS_InventoryTab`) avant d'assigner une nouvelle touche, et choisir des touches physiquement identiques entre QWERTY/AZERTY. --- ## 10. Maintenir ce document Ă  jour Ce document **doit toujours reflĂ©ter l'Ă©tat rĂ©el du projet**. Un skill dĂ©diĂ© — **`maintain-architecture-doc`** (`.claude/skills/maintain-architecture-doc/SKILL.md`) — rappelle systĂ©matiquement aux modĂšles d'IA de : 1. Consulter ce document avant de modifier la structure du projet. 2. Le mettre Ă  jour aprĂšs toute crĂ©ation/suppression/dĂ©placement/renommage de fichier ou dossier important. 3. Ajouter une description pour tout nouveau fichier important. 4. Retirer les entrĂ©es obsolĂštes (fichiers supprimĂ©s). 5. Corriger les chemins aprĂšs un dĂ©placement. 6. Mettre Ă  jour les descriptions quand un systĂšme Ă©volue significativement. 7. VĂ©rifier pĂ©riodiquement la cohĂ©rence entre ce document et l'arborescence rĂ©elle. 8. Ne jamais laisser ce document dans un Ă©tat sciemment obsolĂšte aprĂšs une modification de structure. **RĂšgle de detail** : un fichier "important" Ă  documenter est un Blueprint/Widget/Data Asset/Struct/Enum/Input Action qui porte de la **logique ou des donnĂ©es de gameplay**. Les assets purement artistiques individuels (textures, meshes, clips d'animation, miniatures) n'ont pas besoin d'entrĂ©e dĂ©diĂ©e — il suffit que leur **dossier parent** soit listĂ© et dĂ©crit (cf. §8). *Historique de nettoyage :* - *2026-09-04 : `Content/Systems/Blueprints/d/SandboxCharacter_CMC_ABP` renommĂ©/dĂ©placĂ© vers `Content/Systems/Blueprints/SandboxCharacter_CMC_ABP` via l'outil de renommage Unreal (les 7 rĂ©fĂ©rences ont Ă©tĂ© recĂąblĂ©es automatiquement, compilation vĂ©rifiĂ©e OK).* - *2026-09-04 : suppression de 8 redirecteurs Unreal morts (rĂ©sidus de renommages passĂ©s, 0 rĂ©fĂ©rence chacun, confirmĂ©s sans danger) : `Content/Systems/Stats/ACStats.uasset`, `Content/Systems/Movement/BPC_ClimbingComponent.uasset`, `Content/Systems/Movement/ClimbingMaterial.uasset`, `Content/Systems/Movement/CR_ClimbingGraphV2.uasset`, `Content/Systems/Movement/CR_Mannequin_BasicFootIK.uasset`, `Content/BP_TickManager.uasset`, `Content/dqs.uasset`, `Content/E_WeaponType.uasset`. Les vraies versions de ces assets restent Ă  `Content/Systems/Movement/Climbing/`, `Content/Core/Tick/BP_TickManager` et `Content/Data/Enums/E_WeaponType`.* *Point de nettoyage identifiĂ© mais volontairement non traitĂ© : `Content/DT_DemoTags.uasset` (+ `.T3D`) — aucune rĂ©fĂ©rence trouvĂ©e, semble ĂȘtre un reste de test, laissĂ©e en l'Ă©tat Ă  la demande de l'utilisateur (voir §2.1).*