Files
ProjectFGame/Architecture_Projet.md
T
DodoandClaude Sonnet 5 d29748b8ab Sélection rapide d'équipement, mort par chute, fixes inventaire/audio
- Ajoute le menu de sélection rapide (WB_QuickSelect, IA_QuickSelectAGIS/IA_QuickEquipAGIS)
  et l'écran de mort (WB_YouDied) sur Inventory_Player.
- Corrige le mauvais placement des items dans les slots d'équipement (désalignement
  entre PlayerInventoryPart1/2 et les widgets d'équip slot).
- Corrige le bourdonnement audio permanent causé par une double instance de
  Ultra_Dynamic_Weather créée en PIE.
- Renomme Systems/Blueprints/d/SandboxCharacter_CMC_ABP vers son bon dossier.
- Met à jour Architecture_Projet.md et ajoute le skill de maintenance associé.
- Inclut le fix de config audio (DefaultEngine.ini) et les changements de config
  moteur associés.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-04 17:06:28 +02:00

42 KiB
Raw Blame History

đŸ—ïž 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 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 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/<NomDuSysteme>/, Ă  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_<Nom> (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/<Nom>/ ou Content/Items/Resources/<Nom>/, 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

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" :

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.

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

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.

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)

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

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

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/

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.

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).