From b2fe07180b8f602298dc0fbbf1cf0467ccd182ad Mon Sep 17 00:00:00 2001 From: CatryBenoit Date: Sat, 19 Sep 2026 17:31:31 +0200 Subject: [PATCH] update 19/09/26 --- Architecture_Projet.md | 64 +++++++++++++++++-- Content/Characters/MEtahuman/test.uasset | 3 + .../CHT_PoseSearchDatabases_Mover.uasset | 3 + .../Meshes/SK_UEFN_Mannequin.uasset | 4 +- .../Character/SandboxCharacter_CMC.uasset | 2 +- .../Character/SandboxCharacter_Mover.uasset | 4 +- .../SandboxCharacter_Mover_Ragdoll.uasset | 4 +- .../Coreinventory/Inventory_Equipper.uasset | 2 +- ...-b7c982d4d9744a70-skinned_Anim_UEFN.uasset | 3 + Content/Kimodo/Source/IK_Kimodo_SOMA30.uasset | 3 + .../Kimodo/Source/RTG_Kimodo_to_UEFN.uasset | 3 + .../kimodo-b7c982d4d9744a70-skinned.uasset | 3 + ...imodo-b7c982d4d9744a70-skinned_Anim.uasset | 3 + ...c982d4d9744a70-skinned_PhysicsAsset.uasset | 3 + ...o-b7c982d4d9744a70-skinned_Skeleton.uasset | 3 + Content/Maps/DevMap/GM_Dev.uasset | 2 +- .../Animation/ABP_Clothing_PostProcess.uasset | 3 + .../Common/Animation/ABP_MH_LiveLink.uasset | 3 + .../Common/Animation/CR_PlaceHolder.uasset | 3 + .../Common/Body/ABP_Body_PostProcess.uasset | 3 + .../Body_LODSettings_High.uasset | 3 + .../Common/Common/MetaHuman_ControlRig.uasset | 3 + .../Controls/CRSL_MetaHuman_Gizmo.uasset | 3 + .../Controls/M_RigControlActor_Black.uasset | 3 + .../Controls/SM_MetaHuman_Faceboard_2x.uasset | 3 + .../SM_MetaHuman_Faceboard_Convergence.uasset | 3 + .../SM_MetaHuman_Faceboard_FollowGrp.uasset | 3 + .../MetaHumans/Common/Face/ABP_Face.uasset | 3 + .../Common/Face/ABP_Face_PostProcess.uasset | 3 + .../ARKit/AS_MetaHuman_ARKit_Mapping.uasset | 3 + .../ARKit/PA_MetaHuman_ARKit_Mapping.uasset | 3 + .../CR_MetaHuman_HeadMovement_IK_Proc.uasset | 3 + .../Face/Face_Archetype_Skeleton.uasset | 3 + .../Face/Face_ControlBoard_CtrlRig.uasset | 3 + .../Common/Face/Face_LODSettings.uasset | 3 + .../Common/Face/Face_LODSettings_High.uasset | 3 + .../MetaHumans/Common/Face/PHYS_Face.uasset | 3 + .../MetaHumans/Common/Face/SKM_Face.uasset | 3 + .../Common/Face/SKM_Face_DNA.uasset | 3 + .../Body/metahuman_base_skel.uasset | 3 + .../Common/Material_Functions/MF_UDIMs.uasset | 3 + ...HM_QualitySwitch_MaterialAttributes.uasset | 3 + .../MF_UHM_QualitySwitch_Scalar.uasset | 3 + .../MF_UHM_QualitySwitch_Vector3.uasset | 3 + .../Material_Functions/MF_blendNormals.uasset | 3 + .../MF_color_LinearTosRGB.uasset | 3 + .../MF_color_sRGBToLinear.uasset | 3 + .../MF_normalRotator.uasset | 3 + .../MF_normalStrength.uasset | 3 + .../Common/Material_Functions/MF_ruler.uasset | 3 + .../Placeholders/T_Flat_Black_M.uasset | 3 + .../Placeholders/T_Flat_Black_M_VT.uasset | 3 + .../Placeholders/T_Flat_Grey_C.uasset | 3 + .../Placeholders/T_Flat_Grey_C_VT.uasset | 3 + .../Placeholders/T_Flat_Grey_HDR_C.uasset | 3 + .../Placeholders/T_Flat_Grey_linear.uasset | 3 + .../Textures/Placeholders/T_Flat_N.uasset | 3 + .../Textures/Placeholders/T_Flat_N_VT.uasset | 3 + .../Placeholders/T_Flat_White_C.uasset | 3 + .../Placeholders/T_Flat_White_C_VT.uasset | 3 + .../Common/Textures/T_MH_BentNormal_AO.uasset | 3 + .../Common/Textures/T_MicroDetail001_N.uasset | 3 + .../Common/Textures/T_TilingNoise_001.uasset | 3 + .../Material_Functions/MF_circularMask.uasset | 3 + .../Material_Functions/MF_customIris.uasset | 3 + .../Material_Functions/MF_pupilScale.uasset | 3 + .../Material_Functions/MF_refractedUVs.uasset | 3 + .../Eye/Materials/Baked/MI_EyeL_Baked.uasset | 3 + ..._eye_eyeball_unified_MH_preset_left.uasset | 3 + .../MI_eye_lacrimal_fluid_unified.uasset | 3 + .../Materials/MI_eye_occlusion_unified.uasset | 3 + .../Materials/M_eye_eyeball_unified.uasset | 3 + .../M_eye_lacrimal_fluid_unified.uasset | 3 + .../Materials/M_eye_occlusion_unified.uasset | 3 + .../Eye/Materials/SSP_eye_unified.uasset | 3 + .../Eye/Textures/Iris/T_Iris_H_M.uasset | 3 + .../Eye/Textures/Iris/T_Iris_I_M.uasset | 3 + .../Eye/Textures/Iris/T_iris_H_N.uasset | 3 + .../Eye/Textures/Iris/T_iris_I_N.uasset | 3 + .../Eye/Textures/Iris/feather_N.uasset | 3 + .../Textures/T_Base_Tile_DetailNormal.uasset | 3 + .../Eye/Textures/T_EV_DustPanner_01.uasset | 3 + .../Textures/T_EyeMidPlaneDisplacement.uasset | 3 + .../Eye/Textures/T_EyeSclera_D.uasset | 3 + .../Eye/Textures/T_EyeSclera_N.uasset | 3 + .../Lookdev_UHM/Eye/Textures/T_Eye_N.uasset | 3 + .../Eye/Textures/T_Iris001_01_D.uasset | 3 + .../Eye/Textures/T_Shared_Eye_AO.uasset | 3 + .../Lookdev_UHM/Eye/Textures/T_Veins_D.uasset | 3 + .../Eye/Textures/T_alice_sun_painted.uasset | 3 + .../Eye/Textures/T_iris_color_picker.uasset | 3 + .../Eye/Textures/T_lacrimal_N.uasset | 3 + .../MF_Skin_ScalableNormals.uasset | 3 + .../MF_Skin_ScalableNormals_Regions.uasset | 3 + .../MF_skin_animated.uasset | 3 + .../MF_skin_bakedInputs.uasset | 3 + .../MF_skin_bentNormalsAO.uasset | 3 + .../Material_Functions/MF_skin_fakeAO.uasset | 3 + .../MF_skin_fuzzApply.uasset | 3 + .../MF_skin_globalAdjustmentsPostBake.uasset | 3 + .../MF_skin_microSkinDetails.uasset | 3 + .../MF_skin_mipmapAdjustments.uasset | 3 + .../MF_skin_scalability.uasset | 3 + .../MF_skin_scatterAnisotropyPT.uasset | 3 + .../Material_Functions/MF_skin_utils.uasset | 3 + .../Skin_Animated/MF_AnimatedMaps.uasset | 3 + .../Skin_Animated/MF_HeadMask_01A.uasset | 3 + .../Skin_Animated/MF_HeadMask_02A.uasset | 3 + .../Skin_Animated/MF_HeadMask_03A.uasset | 3 + .../MF_HeadMask_TexArraySample.uasset | 3 + .../Baked/MI_Head_Baked_LOD0_VT.uasset | 3 + .../Materials/M_skin_unified_baked.uasset | 3 + .../Skin/Materials/SSP_skin_unified.uasset | 3 + .../Scalable_Normals/T_Pores_FlowMap.uasset | 3 + .../T_Pores_Horizontal_Normal3C.uasset | 3 + .../T_Pores_Neutral_Normal3C.uasset | 3 + .../T_Pores_Nose_Normal3C.uasset | 3 + .../Scalable_Normals/T_Pores_PoreMask.uasset | 3 + .../T_Pores_RegionMask.uasset | 3 + .../T_Pores_Vertical_Normal3C.uasset | 3 + .../Skin_Animated/T_head_wm13_msk_01.uasset | 3 + .../Skin_Animated/T_head_wm1_msk_01.uasset | 3 + .../Skin_Animated/T_head_wm1_msk_02.uasset | 3 + .../Skin_Animated/T_head_wm1_msk_03.uasset | 3 + .../Skin_Animated/T_head_wm1_msk_04a.uasset | 3 + .../Skin_Animated/T_head_wm2_msk_01.uasset | 3 + .../Skin_Animated/T_head_wm2_msk_02.uasset | 3 + .../Skin_Animated/T_head_wm2_msk_03a.uasset | 3 + .../Skin_Animated/T_head_wm3_msk_01.uasset | 3 + .../Skin_Animated/T_head_wm3_msk_02.uasset | 3 + .../Skin_Animated/T_head_wm_msk_Array.uasset | 3 + .../Skin/Textures/T_SkinMicro3_N.uasset | 3 + .../Skin/Textures/T_skinMicro3_CAV.uasset | 3 + .../Teeth/Materials/MI_teeth_unified.uasset | 3 + .../MI_teeth_unified_MH_preset.uasset | 3 + .../Teeth/Materials/M_teeth_unified.uasset | 3 + .../Teeth/Materials/SSP_teeth_unified.uasset | 3 + .../Teeth/Textures/T_Teeth_BaseColor.uasset | 3 + .../Textures/T_Teeth_DetailNormal.uasset | 3 + .../Teeth/Textures/T_Teeth_Masks_001.uasset | 3 + .../Teeth/Textures/T_Teeth_Masks_002.uasset | 3 + .../Teeth/Textures/T_Teeth_Normal.uasset | 3 + .../Teeth/Textures/T_Teeth_SharpNormal.uasset | 3 + .../Common/Materials/MF_GrayNormal.uasset | 3 + .../Common/Materials/MF_RGB2YCbCr.uasset | 3 + .../Common/Materials/MF_RedHairBoost.uasset | 3 + .../Common/Materials/MF_YCbCr2RGB.uasset | 3 + .../MF_YCbCrAdjustments_BoostRedness.uasset | 3 + .../Materials/MI_Eyelashes_HigherLODs.uasset | 3 + .../Materials/MI_Eyelashes_LowerLODs.uasset | 3 + .../Common/Materials/M_Eyelashes_Cards.uasset | 3 + .../Materials/M_GrayTexture_Eyes.uasset | 3 + .../Materials/M_GrayTexture_Head.uasset | 3 + .../Materials/M_GrayTexture_Teeth.uasset | 3 + .../MetaHumans/Common/Materials/M_Hide.uasset | 3 + .../Common/Materials/T_Black_Linear.uasset | 3 + .../BodyTextures/T_Skin_Microtiling_M.uasset | 3 + .../T_Eyelashes_S_Sparse_Coverage.uasset | 3 + .../Common/Textures/T_Gray_Eyes_D.uasset | 3 + .../Common/Textures/T_Gray_Head_D.uasset | 3 + .../Common/Textures/T_Gray_N.uasset | 3 + .../Common/Textures/T_Gray_Teeth_D.uasset | 3 + .../Systems/Aiming/ABP_AimingMaster.uasset | 4 +- .../Aiming/ABP_AimingMaster_UEFN.uasset | 4 +- .../Systems/Movement/Cover/AC_Cover.uasset | 4 +- .../Mover/AC_VisualOverrideManager.uasset | 2 +- .../BP_MovementMode_Swimming.uasset | 3 + .../BP_MovementMode_Walking.uasset | 4 +- .../Mover/SandboxCharacter_Mover_ABP.uasset | 4 +- Content/Systems/Weapons/AC_Weapon.uasset | 4 +- Content/test/BP_test.uasset | 3 + Content/test/Body/Baked/T_Body_BC_VT.uasset | 3 + Content/test/Body/Baked/T_Body_N_VT.uasset | 3 + Content/test/Body/Baked/T_Body_SRMF_VT.uasset | 3 + .../test/Body/Baked/T_Body_Scatter_VT.uasset | 3 + .../Body/Materials/MI_Body_Baked_VT.uasset | 3 + Content/test/Body/PHYS_test.uasset | 3 + Content/test/Body/SKM_test_BodyMesh.uasset | 3 + .../test/Body/SKM_test_BodyMesh_DNA.uasset | 3 + .../test/Face/Baked/T_BakedNormal_LOD3.uasset | 3 + .../test/Face/Baked/T_BakedNormal_LOD4.uasset | 3 + .../test/Face/Baked/T_BakedNormal_LOD5.uasset | 3 + Content/test/Face/Baked/T_EyeIrisL_BC.uasset | 3 + Content/test/Face/Baked/T_EyeIrisL_N.uasset | 3 + Content/test/Face/Baked/T_EyeIrisR_BC.uasset | 3 + Content/test/Face/Baked/T_EyeIrisR_N.uasset | 3 + .../test/Face/Baked/T_EyeScleraL_BC.uasset | 3 + Content/test/Face/Baked/T_EyeScleraL_N.uasset | 3 + .../test/Face/Baked/T_EyeScleraR_BC.uasset | 3 + Content/test/Face/Baked/T_EyeScleraR_N.uasset | 3 + .../test/Face/Baked/T_Head_LOD1_BC_VT.uasset | 3 + .../test/Face/Baked/T_Head_LOD1_N_VT.uasset | 3 + .../Face/Baked/T_Head_LOD1_SRMF_VT.uasset | 3 + .../Face/Baked/T_Head_LOD1_Scatter_VT.uasset | 3 + Content/test/Face/Baked/T_Teeth_BC.uasset | 3 + Content/test/Face/Baked/T_Teeth_N.uasset | 3 + Content/test/Face/Baked/T_Teeth_SRM.uasset | 3 + .../test/Face/Baked/T_Teeth_Scatter.uasset | 3 + .../test/Face/Materials/MI_EyeL_Baked.uasset | 3 + .../test/Face/Materials/MI_EyeR_Baked.uasset | 3 + .../Face/Materials/MI_Face_EyeShell.uasset | 3 + .../Face/Materials/MI_Face_Eyelashes.uasset | 3 + .../Materials/MI_Face_EyelashesHiLODs.uasset | 3 + .../Materials/MI_Face_LacrimalFluid.uasset | 3 + .../MI_Face_Skin_Baked_LOD1_VT.uasset | 3 + .../MI_Face_Skin_Baked_LOD3_VT.uasset | 3 + .../MI_Face_Skin_Baked_LOD5to7_VT.uasset | 3 + .../test/Face/Materials/MI_Teeth_Baked.uasset | 3 + Content/test/Face/SKM_test_FaceMesh.uasset | 3 + .../test/Face/SKM_test_FaceMesh_DNA.uasset | 3 + .../T_Face_Basecolor_Animated_CM1.uasset | 3 + .../T_Face_Basecolor_Animated_CM2.uasset | 3 + .../T_Face_Basecolor_Animated_CM3.uasset | 3 + .../T_Face_Normal_Animated_WM1.uasset | 3 + .../T_Face_Normal_Animated_WM2.uasset | 3 + .../T_Face_Normal_Animated_WM3.uasset | 3 + 216 files changed, 686 insertions(+), 28 deletions(-) create mode 100644 Content/Characters/MEtahuman/test.uasset create mode 100644 Content/Characters/UEFN_Mannequin/Animations/MotionMatchingData/CHT_PoseSearchDatabases_Mover.uasset create mode 100644 Content/Kimodo/Retargeted/kimodo-b7c982d4d9744a70-skinned_Anim_UEFN.uasset create mode 100644 Content/Kimodo/Source/IK_Kimodo_SOMA30.uasset create mode 100644 Content/Kimodo/Source/RTG_Kimodo_to_UEFN.uasset create mode 100644 Content/Kimodo/Source/kimodo-b7c982d4d9744a70-skinned/SkeletalMeshes/kimodo-b7c982d4d9744a70-skinned.uasset create mode 100644 Content/Kimodo/Source/kimodo-b7c982d4d9744a70-skinned/SkeletalMeshes/kimodo-b7c982d4d9744a70-skinned_Anim.uasset create mode 100644 Content/Kimodo/Source/kimodo-b7c982d4d9744a70-skinned/SkeletalMeshes/kimodo-b7c982d4d9744a70-skinned_PhysicsAsset.uasset create mode 100644 Content/Kimodo/Source/kimodo-b7c982d4d9744a70-skinned/SkeletalMeshes/kimodo-b7c982d4d9744a70-skinned_Skeleton.uasset create mode 100644 Content/MetaHumans/Common/Animation/ABP_Clothing_PostProcess.uasset create mode 100644 Content/MetaHumans/Common/Animation/ABP_MH_LiveLink.uasset create mode 100644 Content/MetaHumans/Common/Animation/CR_PlaceHolder.uasset create mode 100644 Content/MetaHumans/Common/Body/ABP_Body_PostProcess.uasset create mode 100644 Content/MetaHumans/Common/Body/IdentityTemplate/Body_LODSettings_High.uasset create mode 100644 Content/MetaHumans/Common/Common/MetaHuman_ControlRig.uasset create mode 100644 Content/MetaHumans/Common/Controls/CRSL_MetaHuman_Gizmo.uasset create mode 100644 Content/MetaHumans/Common/Controls/M_RigControlActor_Black.uasset create mode 100644 Content/MetaHumans/Common/Controls/SM_MetaHuman_Faceboard_2x.uasset create mode 100644 Content/MetaHumans/Common/Controls/SM_MetaHuman_Faceboard_Convergence.uasset create mode 100644 Content/MetaHumans/Common/Controls/SM_MetaHuman_Faceboard_FollowGrp.uasset create mode 100644 Content/MetaHumans/Common/Face/ABP_Face.uasset create mode 100644 Content/MetaHumans/Common/Face/ABP_Face_PostProcess.uasset create mode 100644 Content/MetaHumans/Common/Face/ARKit/AS_MetaHuman_ARKit_Mapping.uasset create mode 100644 Content/MetaHumans/Common/Face/ARKit/PA_MetaHuman_ARKit_Mapping.uasset create mode 100644 Content/MetaHumans/Common/Face/CR_MetaHuman_HeadMovement_IK_Proc.uasset create mode 100644 Content/MetaHumans/Common/Face/Face_Archetype_Skeleton.uasset create mode 100644 Content/MetaHumans/Common/Face/Face_ControlBoard_CtrlRig.uasset create mode 100644 Content/MetaHumans/Common/Face/Face_LODSettings.uasset create mode 100644 Content/MetaHumans/Common/Face/Face_LODSettings_High.uasset create mode 100644 Content/MetaHumans/Common/Face/PHYS_Face.uasset create mode 100644 Content/MetaHumans/Common/Face/SKM_Face.uasset create mode 100644 Content/MetaHumans/Common/Face/SKM_Face_DNA.uasset create mode 100644 Content/MetaHumans/Common/Female/Medium/NormalWeight/Body/metahuman_base_skel.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Common/Material_Functions/MF_UDIMs.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Common/Material_Functions/MF_UHM_QualitySwitch_MaterialAttributes.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Common/Material_Functions/MF_UHM_QualitySwitch_Scalar.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Common/Material_Functions/MF_UHM_QualitySwitch_Vector3.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Common/Material_Functions/MF_blendNormals.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Common/Material_Functions/MF_color_LinearTosRGB.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Common/Material_Functions/MF_color_sRGBToLinear.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Common/Material_Functions/MF_normalRotator.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Common/Material_Functions/MF_normalStrength.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Common/Material_Functions/MF_ruler.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Common/Textures/Placeholders/T_Flat_Black_M.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Common/Textures/Placeholders/T_Flat_Black_M_VT.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Common/Textures/Placeholders/T_Flat_Grey_C.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Common/Textures/Placeholders/T_Flat_Grey_C_VT.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Common/Textures/Placeholders/T_Flat_Grey_HDR_C.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Common/Textures/Placeholders/T_Flat_Grey_linear.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Common/Textures/Placeholders/T_Flat_N.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Common/Textures/Placeholders/T_Flat_N_VT.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Common/Textures/Placeholders/T_Flat_White_C.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Common/Textures/Placeholders/T_Flat_White_C_VT.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Common/Textures/T_MH_BentNormal_AO.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Common/Textures/T_MicroDetail001_N.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Common/Textures/T_TilingNoise_001.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Material_Functions/MF_circularMask.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Material_Functions/MF_customIris.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Material_Functions/MF_pupilScale.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Material_Functions/MF_refractedUVs.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Materials/Baked/MI_EyeL_Baked.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Materials/MI_eye_eyeball_unified_MH_preset_left.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Materials/MI_eye_lacrimal_fluid_unified.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Materials/MI_eye_occlusion_unified.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Materials/M_eye_eyeball_unified.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Materials/M_eye_lacrimal_fluid_unified.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Materials/M_eye_occlusion_unified.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Materials/SSP_eye_unified.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Textures/Iris/T_Iris_H_M.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Textures/Iris/T_Iris_I_M.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Textures/Iris/T_iris_H_N.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Textures/Iris/T_iris_I_N.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Textures/Iris/feather_N.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Textures/T_Base_Tile_DetailNormal.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Textures/T_EV_DustPanner_01.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Textures/T_EyeMidPlaneDisplacement.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Textures/T_EyeSclera_D.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Textures/T_EyeSclera_N.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Textures/T_Eye_N.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Textures/T_Iris001_01_D.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Textures/T_Shared_Eye_AO.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Textures/T_Veins_D.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Textures/T_alice_sun_painted.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Textures/T_iris_color_picker.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Eye/Textures/T_lacrimal_N.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Material_Functions/MF_Skin_ScalableNormals.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Material_Functions/MF_Skin_ScalableNormals_Regions.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Material_Functions/MF_skin_animated.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Material_Functions/MF_skin_bakedInputs.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Material_Functions/MF_skin_bentNormalsAO.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Material_Functions/MF_skin_fakeAO.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Material_Functions/MF_skin_fuzzApply.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Material_Functions/MF_skin_globalAdjustmentsPostBake.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Material_Functions/MF_skin_microSkinDetails.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Material_Functions/MF_skin_mipmapAdjustments.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Material_Functions/MF_skin_scalability.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Material_Functions/MF_skin_scatterAnisotropyPT.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Material_Functions/MF_skin_utils.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Material_Functions/Skin_Animated/MF_AnimatedMaps.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Material_Functions/Skin_Animated/MF_HeadMask_01A.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Material_Functions/Skin_Animated/MF_HeadMask_02A.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Material_Functions/Skin_Animated/MF_HeadMask_03A.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Material_Functions/Skin_Animated/MF_HeadMask_TexArraySample.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Materials/Baked/MI_Head_Baked_LOD0_VT.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Materials/M_skin_unified_baked.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Materials/SSP_skin_unified.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Textures/Scalable_Normals/T_Pores_FlowMap.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Textures/Scalable_Normals/T_Pores_Horizontal_Normal3C.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Textures/Scalable_Normals/T_Pores_Neutral_Normal3C.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Textures/Scalable_Normals/T_Pores_Nose_Normal3C.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Textures/Scalable_Normals/T_Pores_PoreMask.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Textures/Scalable_Normals/T_Pores_RegionMask.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Textures/Scalable_Normals/T_Pores_Vertical_Normal3C.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Textures/Skin_Animated/T_head_wm13_msk_01.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Textures/Skin_Animated/T_head_wm1_msk_01.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Textures/Skin_Animated/T_head_wm1_msk_02.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Textures/Skin_Animated/T_head_wm1_msk_03.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Textures/Skin_Animated/T_head_wm1_msk_04a.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Textures/Skin_Animated/T_head_wm2_msk_01.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Textures/Skin_Animated/T_head_wm2_msk_02.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Textures/Skin_Animated/T_head_wm2_msk_03a.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Textures/Skin_Animated/T_head_wm3_msk_01.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Textures/Skin_Animated/T_head_wm3_msk_02.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Textures/Skin_Animated/T_head_wm_msk_Array.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Textures/T_SkinMicro3_N.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Skin/Textures/T_skinMicro3_CAV.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Teeth/Materials/MI_teeth_unified.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Teeth/Materials/MI_teeth_unified_MH_preset.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Teeth/Materials/M_teeth_unified.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Teeth/Materials/SSP_teeth_unified.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Teeth/Textures/T_Teeth_BaseColor.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Teeth/Textures/T_Teeth_DetailNormal.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Teeth/Textures/T_Teeth_Masks_001.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Teeth/Textures/T_Teeth_Masks_002.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Teeth/Textures/T_Teeth_Normal.uasset create mode 100644 Content/MetaHumans/Common/Lookdev_UHM/Teeth/Textures/T_Teeth_SharpNormal.uasset create mode 100644 Content/MetaHumans/Common/Materials/MF_GrayNormal.uasset create mode 100644 Content/MetaHumans/Common/Materials/MF_RGB2YCbCr.uasset create mode 100644 Content/MetaHumans/Common/Materials/MF_RedHairBoost.uasset create mode 100644 Content/MetaHumans/Common/Materials/MF_YCbCr2RGB.uasset create mode 100644 Content/MetaHumans/Common/Materials/MF_YCbCrAdjustments_BoostRedness.uasset create mode 100644 Content/MetaHumans/Common/Materials/MI_Eyelashes_HigherLODs.uasset create mode 100644 Content/MetaHumans/Common/Materials/MI_Eyelashes_LowerLODs.uasset create mode 100644 Content/MetaHumans/Common/Materials/M_Eyelashes_Cards.uasset create mode 100644 Content/MetaHumans/Common/Materials/M_GrayTexture_Eyes.uasset create mode 100644 Content/MetaHumans/Common/Materials/M_GrayTexture_Head.uasset create mode 100644 Content/MetaHumans/Common/Materials/M_GrayTexture_Teeth.uasset create mode 100644 Content/MetaHumans/Common/Materials/M_Hide.uasset create mode 100644 Content/MetaHumans/Common/Materials/T_Black_Linear.uasset create mode 100644 Content/MetaHumans/Common/Optional/BodyTextures/T_Skin_Microtiling_M.uasset create mode 100644 Content/MetaHumans/Common/Textures/Eyelashes/T_Eyelashes_S_Sparse_Coverage.uasset create mode 100644 Content/MetaHumans/Common/Textures/T_Gray_Eyes_D.uasset create mode 100644 Content/MetaHumans/Common/Textures/T_Gray_Head_D.uasset create mode 100644 Content/MetaHumans/Common/Textures/T_Gray_N.uasset create mode 100644 Content/MetaHumans/Common/Textures/T_Gray_Teeth_D.uasset create mode 100644 Content/Systems/Mover/MovementModes/BP_MovementMode_Swimming.uasset create mode 100644 Content/test/BP_test.uasset create mode 100644 Content/test/Body/Baked/T_Body_BC_VT.uasset create mode 100644 Content/test/Body/Baked/T_Body_N_VT.uasset create mode 100644 Content/test/Body/Baked/T_Body_SRMF_VT.uasset create mode 100644 Content/test/Body/Baked/T_Body_Scatter_VT.uasset create mode 100644 Content/test/Body/Materials/MI_Body_Baked_VT.uasset create mode 100644 Content/test/Body/PHYS_test.uasset create mode 100644 Content/test/Body/SKM_test_BodyMesh.uasset create mode 100644 Content/test/Body/SKM_test_BodyMesh_DNA.uasset create mode 100644 Content/test/Face/Baked/T_BakedNormal_LOD3.uasset create mode 100644 Content/test/Face/Baked/T_BakedNormal_LOD4.uasset create mode 100644 Content/test/Face/Baked/T_BakedNormal_LOD5.uasset create mode 100644 Content/test/Face/Baked/T_EyeIrisL_BC.uasset create mode 100644 Content/test/Face/Baked/T_EyeIrisL_N.uasset create mode 100644 Content/test/Face/Baked/T_EyeIrisR_BC.uasset create mode 100644 Content/test/Face/Baked/T_EyeIrisR_N.uasset create mode 100644 Content/test/Face/Baked/T_EyeScleraL_BC.uasset create mode 100644 Content/test/Face/Baked/T_EyeScleraL_N.uasset create mode 100644 Content/test/Face/Baked/T_EyeScleraR_BC.uasset create mode 100644 Content/test/Face/Baked/T_EyeScleraR_N.uasset create mode 100644 Content/test/Face/Baked/T_Head_LOD1_BC_VT.uasset create mode 100644 Content/test/Face/Baked/T_Head_LOD1_N_VT.uasset create mode 100644 Content/test/Face/Baked/T_Head_LOD1_SRMF_VT.uasset create mode 100644 Content/test/Face/Baked/T_Head_LOD1_Scatter_VT.uasset create mode 100644 Content/test/Face/Baked/T_Teeth_BC.uasset create mode 100644 Content/test/Face/Baked/T_Teeth_N.uasset create mode 100644 Content/test/Face/Baked/T_Teeth_SRM.uasset create mode 100644 Content/test/Face/Baked/T_Teeth_Scatter.uasset create mode 100644 Content/test/Face/Materials/MI_EyeL_Baked.uasset create mode 100644 Content/test/Face/Materials/MI_EyeR_Baked.uasset create mode 100644 Content/test/Face/Materials/MI_Face_EyeShell.uasset create mode 100644 Content/test/Face/Materials/MI_Face_Eyelashes.uasset create mode 100644 Content/test/Face/Materials/MI_Face_EyelashesHiLODs.uasset create mode 100644 Content/test/Face/Materials/MI_Face_LacrimalFluid.uasset create mode 100644 Content/test/Face/Materials/MI_Face_Skin_Baked_LOD1_VT.uasset create mode 100644 Content/test/Face/Materials/MI_Face_Skin_Baked_LOD3_VT.uasset create mode 100644 Content/test/Face/Materials/MI_Face_Skin_Baked_LOD5to7_VT.uasset create mode 100644 Content/test/Face/Materials/MI_Teeth_Baked.uasset create mode 100644 Content/test/Face/SKM_test_FaceMesh.uasset create mode 100644 Content/test/Face/SKM_test_FaceMesh_DNA.uasset create mode 100644 Content/test/Face/Textures/T_Face_Basecolor_Animated_CM1.uasset create mode 100644 Content/test/Face/Textures/T_Face_Basecolor_Animated_CM2.uasset create mode 100644 Content/test/Face/Textures/T_Face_Basecolor_Animated_CM3.uasset create mode 100644 Content/test/Face/Textures/T_Face_Normal_Animated_WM1.uasset create mode 100644 Content/test/Face/Textures/T_Face_Normal_Animated_WM2.uasset create mode 100644 Content/test/Face/Textures/T_Face_Normal_Animated_WM3.uasset diff --git a/Architecture_Projet.md b/Architecture_Projet.md index 7bb9a668..d33ba5e9 100644 --- a/Architecture_Projet.md +++ b/Architecture_Projet.md @@ -85,6 +85,11 @@ Character (Pawn, géré par le framework "Sandbox Character") │ PAS l'enum directement — UserDefinedEnum non utilisable comme type de variable membre via les outils, │ voir §9) configurée par arme sur le composant (1=Bow sur `BP_Item_Bow`, 4=Riffle sur │ `BP_Item_AdvancedRifle`), convertie via `Utilities|Enum|BytetoEnumWeapon_Equip` avant d'être assignée. + │ **Support du personnage Mover (2026-09-19)** : `Equip`/`Unequip` ne faisaient qu'un `Cast To + │ SandboxCharacter_CMC`. Sur `SandboxCharacter_Mover` (parent `Pawn`, aucune classe commune avec le CMC) + │ le cast échouait silencieusement → `Weapon`/`isArmed` jamais écrits, donc arme en main mais locomotion + │ toujours désarmée. Les deux fonctions ont désormais une branche `Cast Failed` → `Cast To + │ SandboxCharacter_Mover` → `SetEquippedWeapon(WeaponTypeByte)` (nouvelle fonction du pion Mover, voir §4.2.3). │ **Bras armé qui reste bloqué en pose par défaut à l'équipement (2026-09-06, CORRIGÉ)** : deux causes │ distinctes cumulées, toutes deux dans `SandboxCharacter_CMC_ABP` : │ (1) `Get_MMInterruptMode` (utilisée par `Update_MotionMatching` pour choisir le `PoseSearchInterruptMode` @@ -230,6 +235,7 @@ Quelques fichiers importants vivent directement sous `Content/`, hors de toute o ```text Content/ ├── Core/Character/SandboxCharacter_CMC.uasset → (déplacé depuis la racine le 2026-09-13) ⭐ 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. Son EventGraph contient aussi : la détection de mort par chute (suivi tick de `IsFalling`/`FallStartZ`, calcul de hauteur à `OnLanded`, dégâts scalés via `AC_Stats.TakeDamage` au-delà de 300 unités, létal au-delà de 800) et une touche de debug K (InputDebugKey) qui force la mort via ce même `TakeDamage` — ajoutés le 2026-09-04. +├── Core/Character/SandboxCharacter_Mover.uasset + _Mover_Ragdoll.uasset → Personnage alternatif basé sur le plugin **Mover** (pion par défaut de `GM_Dev` ; en PIE c'est la variante `_Ragdoll` qui est possédée). Décrits avec le reste du framework Mover en §4.2.1, et leurs systèmes cover/prone/nage en §4.2.2. ├── Core/BP_GameInstance.uasset → (déplacé depuis la racine le 2026-09-13 ; `Config/DefaultEngine.ini` → `GameInstanceClass=/Game/Core/BP_GameInstance.BP_GameInstance_C`) 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). └── Data/DT_DemoTags.uasset → (déplacé depuis la racine le 2026-09-13 ; l'export texte `DT_DemoTags.T3D` a été supprimé) ⚠️ **À NE PAS SUPPRIMER** : DataTable de gameplay tags du socle AGIS, déclarée dans `Config/DefaultGameplayTags.ini` (`+GameplayTagTableList=/Game/Data/DT_DemoTags`). Elle définit `General Inventory Slot` (indispensable à l'inventaire), `Human.*`, `Attachment.*` (singulier), `Flashlight.Battery`, `Other.*`, `Vehicle.*`. (Corrigé le 2026-09-13 : l'ancienne mention « aucune référence trouvée » était fausse — la référence passe par la config, invisible pour l'Asset Registry.) Dette connue : `DT_Items`, `Inventory_Player` et `AttachmentData_AdvancedRifle` utilisent `Attachments.*` (pluriel, tags inexistants → avertissements « Invalid GameplayTag »), antérieur au commit du 2026-09-04. ``` @@ -390,9 +396,10 @@ Copie du framework "Sandbox Character" du sample Epic **Game Animation Sample**, ```text Content/Systems/Mover/ -├── SandboxCharacter_Mover.uasset → Personnage basé sur le plugin Mover. (Vérifié le 2026-09-15) `GM_Dev` (GameMode de `MapDev1`) a `DefaultPawnClass = SandboxCharacter_Mover` ; en PIE sur `MapDev1` le pion obtenu est `SandboxCharacter_Mover_Ragdoll`. `SetupInput` ajoute `Core/PlayerController/Input/IMC_Sandbox` (même IMC que le CMC, inputs AGIS/inventaire compris) ; il porte aussi `Inventory_Player`, dont la propriété `Input Mapping Context` DOIT valoir ce même `IMC_Sandbox` (corrigé le 2026-09-15, elle valait `IMC_AGIS_Character`) : à la fermeture de l'inventaire, `WB_InventoryScreen.SwitchInput` fait `ClearAllMappings` puis ne ré-ajoute QUE cette variable — une mauvaise valeur coupe tous les contrôles (ZQSD, caméra) après fermeture. Même piège pour tout futur pion équipé d'`Inventory_Player`. Implémente `BPI_Interactable` depuis le 2026-09-17 (`GetTracePoint` = position/forward du composant `Camera`, comme `SandboxCharacter_CMC`) : sans cette interface, le trace d'interaction d'`Inventory_Player` (`Client Trace`, `Verify Trace`) part de (0,0,0) avec une direction nulle et aucun objet ne peut être ramassé. Tout futur pion équipé d'`Inventory_Player` doit aussi implémenter `BPI_Interactable::GetTracePoint` -├── SandboxCharacter_Mover_Ragdoll.uasset → Variante ragdoll du personnage Mover -├── SandboxCharacter_Mover_ABP.uasset → Anim Blueprint du Mover (utilise `Systems/Aiming/ABP_AimingMaster`) + ⚠️ (2026-09-18) `SandboxCharacter_Mover`, `_Ragdoll` (et l'ABP du CMC) vivent en réalité dans `Content/Core/Character/` — les deux lignes ci-dessous y correspondent, elles restent décrites ici pour garder le framework Mover d'un seul tenant. +├── SandboxCharacter_Mover.uasset → (dans `Content/Core/Character/`) Personnage basé sur le plugin Mover. (Vérifié le 2026-09-15) `GM_Dev` (GameMode de `MapDev1`) a `DefaultPawnClass = SandboxCharacter_Mover` ; en PIE sur `MapDev1` le pion obtenu est `SandboxCharacter_Mover_Ragdoll`. `SetupInput` ajoute `Core/PlayerController/Input/IMC_Sandbox` (même IMC que le CMC, inputs AGIS/inventaire compris) ; il porte aussi `Inventory_Player`, dont la propriété `Input Mapping Context` DOIT valoir ce même `IMC_Sandbox` (corrigé le 2026-09-15, elle valait `IMC_AGIS_Character`) : à la fermeture de l'inventaire, `WB_InventoryScreen.SwitchInput` fait `ClearAllMappings` puis ne ré-ajoute QUE cette variable — une mauvaise valeur coupe tous les contrôles (ZQSD, caméra) après fermeture. Même piège pour tout futur pion équipé d'`Inventory_Player`. Implémente `BPI_Interactable` depuis le 2026-09-17 (`GetTracePoint` = position/forward du composant `Camera`, comme `SandboxCharacter_CMC`) : sans cette interface, le trace d'interaction d'`Inventory_Player` (`Client Trace`, `Verify Trace`) part de (0,0,0) avec une direction nulle et aucun objet ne peut être ramassé. Tout futur pion équipé d'`Inventory_Player` doit aussi implémenter `BPI_Interactable::GetTracePoint` +├── SandboxCharacter_Mover_Ragdoll.uasset → Variante ragdoll du personnage Mover. ⚠️ C'est LUI le pion réellement possédé en PIE ; il surcharge le composant `CharacterMover` (ses propres `MovementModes`, dont `Ragdoll`) et `ProduceInput`/`On_MovementModeChanged_PostFinalize`. Toute modification du parent qui touche à ces éléments doit être vérifiée ici. +├── SandboxCharacter_Mover_ABP.uasset → Anim Blueprint du Mover (utilise `Systems/Aiming/ABP_AimingMaster`). (2026-09-18) Deux corrections majeures : (1) les nœuds `Evaluate Chooser` de `Update_MotionMatching` n'avaient AUCUN objet de contexte branché (au CMC il est relié à `self`) → le chooser ne pouvait résoudre aucune de ses colonnes, `ValidDatabases` restait vide et la branche Motion Matching de l'`AnimGraph` était morte ; `self` est désormais branché sur les deux nœuds. (2) Nouvelle variable `AnimBranchIndex` (affectée en fin d'`Update_Logic`) branchée sur l'`ActiveChildIndex` du *Blend Poses by int* de l'`AnimGraph`. Elle a d'abord piloté un hybride (Motion Matching en prone/nage, state machine GASP sinon) ; **depuis le 2026-09-18 elle vaut la constante `0`** : l'ABP du Mover est **100 % Motion Matching** (chooser `CHT_PoseSearchDatabases_Mover`), la state machine « State Controller » n'est plus jamais évaluée. Le nœud `Set AnimBranchIndex` et la variable sont conservés pour pouvoir rebasculer sur la voie 1 en changeant une seule valeur. Variables `Is Armed` et `IS Moving Object` ajoutées pour les colonnes du chooser copié. ├── GM_Sandbox.uasset / PC_Sandbox.uasset → GameMode (pawn = SandboxCharacter_Mover) et PlayerController du Mover ; création du widget de démo retirée le 2026-09-14 ├── AC_TraversalLogic.uasset → Traversal du personnage Mover (vault/mantle/hurdle/climb). (2026-09-15) La détection de rebords du sample (limitée aux blocs de démo `LevelBlock_Traversable`, retirée le 2026-09-14) est remplacée par celle de `Systems/Blueprints/AC_TraversalLogic` (CMC), portée à l'identique : variables `Min Ledge Width`, `Min Front Ledge Depth`, `Max Ledge Sideways Depth`, `Trace Complex`, `Show Trace`, `Persistent Show Trace`, `RespectPlayersFacingDir`, `Banned Tags` (mêmes valeurs par défaut) et fonctions `ComputeLedgeData`, `TraceAlongHitPlane`, `TraceCorners`, `TraceWidth`, `NudgeTraceTowardsObjectOrigin`, `Set Trace Hit Point`, `Tag Compare`. Dans `TryTraversalAction` : capsule trace sur `TraceTypeQuery1` (Visibility, au lieu du canal `Traversable`), `Hit` → tags acteur+composant → `ComputeLedgeData` → rebords avant/arrière écrits dans `TraversalCheckResult` (équivalent inliné de `TryAndCalculateLedges`, non recopiée car elle prend le struct Systems par référence), puis `Tag Compare` (tags bannis) avant le chooser `CHT_TraversalMontages_Mover`. Le déclenchement (`IA_Jump` → `CanDoTraversal` → `TryTraversalAction`) et l'exécution Mover (`PerformTraversalAction_Mover`, mode `Traversing`) sont inchangés. Les deux composants restent des doublons divergents (structs/BPI `Systems/Mover/` vs `Systems/Blueprints/`). ├── AC_PreCMCTick, AC_PostABPTick, AC_VisualOverrideManager → Composants du sample (versions GASP, divergentes de celles de `Systems/Blueprints/`) @@ -402,7 +409,7 @@ Content/Systems/Mover/ ├── Cameras/ → `CameraAsset_SandboxCharacter`, `CameraDirector_SandboxCharacter`, `CHT_CameraRig`, `CameraShake_Basic`, `Rigs/CameraRig_*` (16) ├── ControlRigs/CR_Biped_FootPlacement.uasset ├── Data/ → Structs GASP (`S_CharacterPropertiesFor*`, `S_Traversal*`, `S_CHT_*` des choosers Mover/GetUp/Interaction, `S_Ragdoll*`, `S_MoverCustomInputs*`…), `Curve_RotationOffset_*`, `CHT_RotationOffsetCurve`, `BFL_HelpfulFunctions`, `BPI_InteractionTransform` -├── MovementModes/ → `BP_MovementMode_Walking/Falling/Slide/Ragdoll`, `B_MovementMode_Flying`, `BP_MovementTransition_To/FromSlide` +├── MovementModes/ → `BP_MovementMode_Walking/Falling/Slide/Ragdoll`, `B_MovementMode_Flying`, `BP_MovementTransition_To/FromSlide`, **`BP_MovementMode_Swimming`** (2026-09-18). `BP_MovementMode_Walking` : la `Select` d'allure n'alimentait QUE Walk/Run/Sprint — les allures ajoutées (Prone, Swinning, SwinningSprint) donnaient vitesse ET accélération = 0 (personnage figé) ; ajout de la variable `ProneSpeed` (125) et câblage des entrées manquantes (prone → `ProneSpeed`/`WalkAcceleration`, nage → Walk/Run). `BP_MovementMode_Swimming` : enfant de `SimpleFlyingMode` (comme le mode vol), tag `Mover.IsSwimming`, `MaxSpeedOverride = 1` (l'entrée devient un pur vecteur d'intention) ; sa fonction `ComputeSwimTarget` lit le personnage propriétaire (cast `SandboxCharacter_Mover`) et produit la vitesse cible : en surface, Z = flottaison vers `WaterSurfaceZ - SurfaceOffset` (60) bornée par `MaxBobSpeed`, en plongée Z = intention caméra + `SwimVerticalInput` × `VerticalSpeed`, horizontal = intention × `SwimSpeed` (250) ou `SwimSprintSpeed` (450). ⚠️ Le `SwimmingMode` natif du plugin Mover (UE 5.8) n'est PAS utilisable : son `SimulationTick` est vide et rien n'alimente ses données d'eau (`CommonBlackboard::LastWaterResult`). └── SmartObjects/ → `AC_SmartObjectAnimation` (version GASP, aussi utilisée par des STT de `Systems/Blueprints/`), `CHPA_SmartObject`, `PSS_SmartObject`, `Bench/`, `TasksAndConditions/STT_*` Content/Systems/Aiming/ → Système de visée développé dans Project_F : `ABP_AimingMaster`, `ABP_AimingMaster_UEFN` (aim offset), choosers `CH_AO`, `CH_Base_AO_Animechooser` (enum `Data/Enums/E_WaponType`) @@ -410,6 +417,45 @@ Content/Systems/Aiming/ → Système de visée développé da Content/Blueprints/AnimNotifies/ → SEUL reste de `Content/Blueprints/` : 23 notifies du sample (`BP_AnimNotify_FoleyEvent*`, `BP_NotifyState_EarlyTransition`, `_MontageBlendOut`, `_MMI_*`, `BP_AnimNotify_TriggerRagdoll`, `_OverrideMovementMode`…) liés à 1278 animations de `Characters/UEFN_Mannequin`. Laissés en place volontairement : les déplacer réenregistrerait 1,78 Go d'animations. Pour la plupart doublons de `Systems/Blueprints/AnimNotifies/`. ``` +#### 4.2.2 Cover / prone / nage portés du CMC vers le personnage Mover (2026-09-18) + +Ces trois fonctionnalités n'existaient que sur `SandboxCharacter_CMC` (via le `CharacterMovementComponent`). Elles ont été reportées sur `Core/Character/SandboxCharacter_Mover`, en passant par les mécanismes du plugin Mover et non par des écritures directes sur la capsule. + +- **Composants ajoutés au Mover** : `Systems/Movement/Cover/AC_Cover` (le composant du CMC, générique : il travaille via `GetOwner`) et `Arrow1` (ArrowComponent, `(0,0,90)` / yaw 90). ⚠️ `Arrow1` DOIT être attaché au **SkeletalMesh** (comme au CMC) et non à la capsule : le mesh porte un yaw −90, donc l'arrow attaché au mesh se retrouve aligné sur l'acteur (avant = avant de l'acteur, droite = droite de l'acteur), ce qu'attend le sphere trace de `MoveAlongWall` (il part de 55 uu sur le côté puis trace 60 uu vers l'avant, dans le mur). Attaché à la capsule, ses axes sont tournés de 90° : le trace part dans le vide, `MoveAlongWall` ne produit aucun `AddMovementInput` et on ne peut pas se déplacer en couverture (bug corrigé le 2026-09-18). +- **Variables ajoutées au Mover** — catégorie `Cover` : `In Cover`, `Cover` (`E_CoverD`), `Edge L`, `Edge R` ; catégorie `Prone` : `IsProne`, `ProneHalfHeight` (40), `CrouchHalfHeight` (55) ; catégorie `Swimming` : `CurrentWaterBodyComp`, `IsSwimming`, `IsUnderwater`, `SwimSprint`, `WaterSurfaceZ`, `WaterDepth`, `SwimVerticalInput`, `SwimStartDepth` (95), `SwimStopDepth` (80), `SwimmingModeClass`. +- **Prone** : `IA_Prone` → `ToggleProne` (bascule `IsProne` + `WantsToCrouch`/`WantsToStrafe` dans `PlayerInputState`), refusé en nage ou en cover. La hauteur de capsule N'est PAS écrite directement (contrairement au CMC qui fait `SetCapsuleSize`) : `Apply_CrouchOrProne`, appelée depuis `On_PreSimulateTick`, règle `StanceSettings.CrouchHalfHeight` (40 en prone, 55 accroupi) et force un cycle `UnCrouch`→`Crouch` quand la capsule courante ne correspond pas — c'est le `FStanceModifier` du plugin qui redimensionne la capsule, replace l'acteur et décale le mesh. `IA_Crouch` en prone appelle `ExitProneToCrouch` (retour accroupi). +- **Nage** : les overlaps de la capsule (`OnComponentBegin/EndOverlap` → cast `WaterBody`) renseignent `CurrentWaterBodyComp` ; `Update_Swimming` (appelée depuis `On_PreSimulateTick`, voir l'encadré « tick » plus bas) lit `GetWaterSurfaceInfoAtLocation` (surface + profondeur), met à jour `SwimSprint` (depuis `PlayerInputState.WantsToSprint`) et `SwimVerticalInput` (valeurs brutes de `IA_Jump` − `IA_Crouch`), puis `StartSwimming` (profondeur ≥ `SwimStartDepth` → `QueueNextMovementMode("Swimming")`) / `StopSwimming` (< `SwimStopDepth` → `Falling`). `IA_SwimmingDeep` bascule `IsUnderwater` (plongée). Le mode « Swimming » est enregistré **au BeginPlay** par `AddMovementModeFromClass` (variable `SwimmingModeClass`) et non dans la map `MovementModes` du composant : une instance créée par script dans le template du parent est privée et empêchait la sauvegarde de `SandboxCharacter_Mover_Ragdoll` (« Illegal reference to private object »). +- **Cover** : l'événement `OnEntreredCover` d'`AC_Cover` recopie `InCover`/`cover`/`EdgeL`/`EdgeR` sur le personnage puis `ApplyCoverCrouch` (accroupi **et `WantsToStrafe` = en couverture** tant qu'on y est) ; `IA_Move` appelle `AC_Cover.MoveAlongWall` quand `In Cover`. Comme le Mover ignore `AddMovementInput`, `Get_MoveInput` renvoie, en cover, `ConsumeMovementInputVector` (le vecteur accumulé par le composant). `Update_Cover` (`On_PreSimulateTick`) met `CharacterMover.bAcceptExternalMovement` à la valeur d'`AC_Cover.InCover`, sinon le `MoveComponentTo` de collage au mur serait annulé par la simulation Mover. ⚠️ Le mode **strafe est indispensable** en couverture : sans lui le Mover réoriente le personnage dans la direction du glissement dès le premier pas, l'`Arrow1` tourne avec, le trace de `MoveAlongWall` rate le mur et le déplacement se bloque après quelques centimètres (bug corrigé le 2026-09-18). L'entrée en couverture reste sur la touche **P** : depuis le 2026-09-18 le corps de cet `InputKey` est déporté dans l'événement `ToggleCover` d'`AC_Cover` (la touche P l'appelle), ce qui permet de déclencher la couverture par script/test ou de la remapper plus tard sur une Input Action. +- **Alimentation de l'animation** : `Get_PropertiesForAnimation` renvoie désormais `Stance` = Swinning / SwinningDeep / Prone / Crouch / Stand, et `Get_Gait` renvoie Prone en prone, Swinning/SwinningSprint en nage. `Get_MoveInput` utilise la rotation caméra complète (input 3D) en plongée comme en vol. Le chooser `Characters/UEFN_Mannequin/Animations/MotionMatchingData/CHT_PoseSearchDatabases_Mover` est une copie du `_Dense` du CMC dont le `ContextData` pointe sur `SandboxCharacter_Mover_ABP` ; ses deux colonnes booléennes (`Is Armed`, `IS Moving Object`) sont désactivées et la ligne « push » restreinte à `Stance = Stand`. +- **Les deux moteurs d'animation de l'ABP (Motion Matching vs state machine)** : l'`AnimGraph` (CMC comme Mover) contient un `Blend Poses by int` dont l'entrée **0 est le nœud Motion Matching** et l'entrée **1 la state machine « State Controller » + Blend Stack** (la voie « expérimentale » du sample GASP). Voie 0 : `Update_MotionMatching` (fonction de nœud) évalue un chooser qui renvoie une LISTE de `PoseSearchDatabase`, `SetDatabasesToSearch` les donne au nœud, qui recherche chaque frame la meilleure pose d'après la trajectoire (`Update_Trajectory`) — variables `ValidDatabases`, `CurrentSelectedDatabase/Anim`, `MM Search Cost`, réglages `Get_MMBlendTime`/`Get_MMInterruptMode`. Voie 1 : à chaque entrée d'état, `SetBlendStackAnimFromChooser` évalue `CHT_MoverCharacterAnimations_PoseMatch` (chooser **par clip**, une ligne = une animation) qui renvoie UNE anim + ses réglages de blend, poussée dans le `Blend Stack` — variables `StateName`, `BlendStackInputs`, `Search Cost`, `NoValidAnim`. Dans les deux ABP l'index valait la constante `0` (Motion Matching en permanence) ; sur le Mover il passe par la variable `AnimBranchIndex`, qui vaut elle aussi `0` en permanence depuis le 2026-09-18 (l'hybride state machine / Motion Matching a été abandonné à la demande de l'utilisateur, voir §4.2.1). Les CVars GASP `DDCvar.UseExperimentalStateMachine` / `DDCvar.ExperimentalStateMachine` n'existent pas dans ce projet (avertissement « Failed to find console variable » en PIE) : elles ne commandent rien. +- **Correction de `MovementModeMap`** : « Ragdoll » pointait sur *Climbing* et « Flying » sur *SwimmingOnSurface* (décalage laissé par la fusion des enums GASP → projet, §8.2). Remis sur `Ragdoll`/`Flying` + ajout de `Swimming` → `SwimmingOnSurface`. Effet de bord bénéfique : le ragdoll du pion refonctionne (son Tick et `EnteredRagdollSuccessfullyCheck` comparent le mode courant à `Ragdoll`). +- **⚠️ Tick du personnage Mover (corrigé le 2026-09-18)** : `SandboxCharacter_Mover` et `_Ragdoll` avaient `PrimaryActorTick.TickInterval = 30 s` (le CMC est à 0). Tout leur `Event Tick` — `CacheInputsFromMover`, `Update_FloorValues`, `Update_ControlRotationRate`, `Update_SlidingAudio`, `Update_TargetedActor`, `Update_TwinStickMode`, `Update_SmoothedAnalogInputAmount`, `DebugDraws` — ne tournait donc qu'une fois toutes les 30 secondes (c'est ce qui empêchait la nage de se déclencher : `Update_Swimming` y était branchée). Intervalle remis à **0** sur les deux pions, et par sécurité `Update_Swimming` + `Update_Cover` ont été déplacées du `Event Tick` vers `On_PreSimulateTick` (délégué du `CharacterMover`, exécuté à chaque pas de simulation). Si un jour le tick de ces pions est de nouveau throttlé (politique `BP_TickManager`), la nage et la couverture continueront de fonctionner, mais les `Update_*` du framework GASP, eux, en souffriront. +- **⚠️ Bases Pose Search de nage vides → T-pose (contourné le 2026-09-18)** : sur les 6 bases de nage, **une seule est réellement remplie**, `Animations/humain/SwimmingAnimation/Swimming_animation/Breastok/surface/PSD_SwimmingMoving` (5 clips de brasse en surface). `PSD_SwimmingIdle`, `PSD_SwimmingMovingSprint`, `PSD_SwimmingDeepIdle`, `PSD_SwimmingDeepMoving`, `PSD_SwimmingDeepMovingSprint` ont des lignes dont l'`AnimAsset` est **None** (log : `OnGetComplete - Database None entry N has no associated animation asset`), et la table imbriquée `SwimmingInDeepIdle` du chooser n'a **aucun résultat**. L'ABP étant désormais 100 % Motion Matching, une base vide = aucune pose = **T-pose**, exactement le bug remonté. Contournement appliqué dans `CHT_PoseSearchDatabases_Mover` : les lignes qui pointent sur une base vide (12, 14, 15, 17) sont rendues inatteignables (`Stance = Prone` alors que `Movement Mode = Swimming`, combinaison impossible par construction) et les deux lignes qui pointent sur `PSD_SwimmingMoving` (13 pour Swinning, 16 pour SwinningDeep) passent `Movement State` et `Gait` en **MatchAny** pour couvrir tous les cas de nage. Vérifié en PIE : nage de surface immobile, nage de surface en mouvement et nage profonde sélectionnent bien `RM_Breastroke_overwater_01_*`. +- **Vraie correction à faire à la main** (impossible par script : la propriété `DatabaseAnimationAssets` d'un `PoseSearchDatabase` et le `ResultsStructs` d'un `ChooserTable` ne sont exposés ni au Python d'UE ni à `ObjectTools.set_properties` — seules `columnsStructs`/`contextData` le sont) : ouvrir chaque base vide et y glisser les clips qui existent déjà sous `Animations/humain/SwimmingAnimation/` — `IDLE/IP_idle_underwater_01_Retargeted` + `IDLE/RM_Idle_turn_*` pour `PSD_SwimmingIdle`, `Swimming_animation/Crawl/RM_Crawl_*` pour `PSD_SwimmingMovingSprint`, `Swimming_animation/Breastok/RM_Breastroke_underwater_*` pour `PSD_SwimmingDeepIdle/Moving/MovingSprint` — puis remettre les lignes 12/14/15/17 du chooser sur leur `Stance` d'origine (3, 3, 4, 4) et donner un résultat à la table imbriquée `SwimmingInDeepIdle`. +- **Restes connus** : le cover du Mover joue les anims accroupies GASP, pas les bases de couverture du CMC (`PSD_Dense_Crouch_Idles_CoverLeft/Right`) ni le nœud `Mirror` de l'AnimGraph du CMC ; en couverture le personnage conserve un écart d'orientation d'une dizaine de degrés par rapport au mur (orientation strafe qui converge lentement). + +#### 4.2.3 Système d'armes porté sur le personnage Mover (2026-09-19) + +Ce qui marchait déjà sur le Mover avant cette session (vérifié en PIE) : le ramassage (`IA_InteractAGIS`), le rangement au dos (socket `SpineRifle`), le passage en main par la roue V/B (`IA_QuickSelectAGIS` / `IA_QuickEquipAGIS` → socket `Rifle`), l'appel de `AC_Weapon::Equip`/`Unequip` via `HandleHeldStateChanged`, et le tir (`IA_UseItemPrimaryAGIS` → `Inventory_Player::UseHeldPrimarySERVER` → `BP_Item_AdvancedRifle::EventPrimaryUse`). `Inventory_Equipper` est générique : son `OwnerMesh` se résout bien sur le composant `SkeletalMesh` du Mover. + +Ce qui ne marchait PAS et a été corrigé : + +- **`AC_Weapon` ne parlait qu'au CMC** : `Equip`/`Unequip` faisaient un `Cast To SandboxCharacter_CMC`, qui échoue sur le Mover (`Pawn` vs `Character`, aucune classe commune). Résultat : arme bien en main, mais `Weapon` et `isArmed` jamais écrits → locomotion désarmée en permanence. Une branche `Cast Failed` → `Cast To SandboxCharacter_Mover` a été ajoutée dans les deux fonctions ; le CMC est inchangé. +- **Nouvelle fonction `SandboxCharacter_Mover::SetEquippedWeapon(WeaponTypeByte)`** (appelée par `AC_Weapon`, `0` = déséquipement) : écrit `Weapon_Equip` (nouvelle variable, enum `Weapon_Equip`), `isArmed` (= byte ≠ 0), `WantToshot` (remis à false au déséquipement) et `Weapon`. ⚠️ **Trois enums d'arme coexistent dans le projet** : `Weapon_Equip` (None/Bow/OneArmPistol/TwoArmPistol/Riffle/Bat — c'est l'espace de `AC_Weapon::WeaponTypeByte` et des colonnes du chooser de locomotion), `E_WaponType` (None/Riffle/Pistoll/Bow — c'est le type de `SandboxCharacter_Mover::Weapon` et du champ `S_CharacterPropertiesForAnimation.Weapon_Type`, lu par les choosers d'aim offset de `Systems/Aiming/`) et `E_WeaponType` (inutilisé ici). `SetEquippedWeapon` fait donc la conversion 1(Bow)→3, 2/3(Pistol)→2, 4(Riffle)→1, reste→0. +- **IA_Aim renseigne `WantToshot`** (nouvelle variable du pion) : `WantToshot = ActionValue AND isArmed` sur `Triggered`, remis à `false` sur `Completed`. C'est ce bool que lit la colonne « Want Toshot » du sous-chooser `Stand Idles Bow` pour passer de l'idle arc à l'idle arc en visée. +- **`SandboxCharacter_Mover_ABP` reçoit l'état d'arme** : nouvelles variables `Weapon_Equip`, `Weapon_Equip Last Frame`, `Want Toshot` (+ `Is Armed` et `IS Moving Object` déjà présentes), toutes alimentées en fin de `Update_PropertiesFromCharacter` (**thread principal**, comme le CMC le fait dans son `EventBlueprintUpdateAnimation` — surtout pas dans `Update_Logic`, qui peut tourner en thread-safe update). +- **`Is Armed` de l'ABP = `isArmed` ET `Weapon_Equip == Bow`** — *stopgap assumé* : l'arc est la SEULE arme qui possède des bases Motion Matching armées (`PSD_Dense_Stand_Bow_Idles`, `_Bow_Aim_Idles`, `PSD_Walk_Bow`). Sans cette condition, un fusil mettait `Is Armed = true`, les lignes 0/2 du chooser (`MatchFalse`) étaient rejetées, les lignes arc 1/3 échouaient sur leur colonne `Weapon_Equip`, et on retombait sur la ligne 18 « Push » (ou sur rien du tout). Avec la condition, fusil/pistolet jouent proprement la locomotion désarmée, arme en main. À retirer le jour où des bases fusil existeront. +- **`Update_MotionMatching`** : le chooser `CHT_PoseSearchDatabases_Mover` n'était consulté que si `Stance` ∉ {Stand, Crouch} (prone/nage). La condition devient `(Stance ≠ Stand ET ≠ Crouch) OU Is Armed`, sinon les lignes arc — qui sont des lignes *debout* — n'étaient jamais atteintes. La sortie `False` du Branch est en plus reliée à `SetDatabasesToSearch` pour que les deux chemins poussent bien leur liste dans le nœud MM. +- **`Get_MMInterruptMode`** : ajout du terme `Weapon_Equip ≠ Weapon_Equip Last Frame` sur le `OR` racine. Sans lui, changer d'arme ne forcçait aucune interruption : Motion Matching gardait la pose continue (anim désarmée) et ne basculait jamais sur la base arc, même une fois celle-ci dans la liste (coût de continuité toujours plus bas). C'est le même piège que celui décrit en §1.3 pour le CMC. +- **`CHT_PoseSearchDatabases_Mover`** : colonne `Is Armed` **réactivée** (elle avait été désactivée le 2026-09-18 faute de propriété correspondante sur l'ABP Mover), colonne `IS Moving Object` réactivée aussi (sinon la ligne 18 « Push » devient un attrape-tout qui remporte tous les cas debout non couverts), et **ligne 1 (« Stand Idles Bow ») : colonne `Gait` passée de `MatchEqual Walk` à `MatchAny`**. C'était le dernier blocage : l'allure par défaut du personnage est `Run`, donc la ligne arc ne pouvait jamais matcher à l'arrêt. (Le même défaut existe dans `CHT_PoseSearchDatabases_Dense` côté CMC, non corrigé ici.) + +Vérifié en PIE, dans cet ordre : ramassage du fusil → dos ; V+B → main + `Weapon = Riffle`, `Weapon_Equip = Riffle`, `isArmed = true` côté pion ET côté ABP ; locomotion désarmée propre avec le fusil en main (pas de T-pose) ; arc → `PSD_Dense_Stand_Bow_Idles` → `StandingIdle01_UE_Anim3` ; arc + clic droit → `Want Toshot = true` → `PSD_Dense_Stand_Bow_Aim_Idles` ; arc en course → repli propre sur `PSD_Dense_Stand_Run_Loops` ; clic gauche → `EventPrimaryUse` du fusil (qui refuse de tirer faute de chargeur équipé — comportement normal, non lié au Mover) ; non-régression prone (`PSD_Dense_Prone_Idles`) et nage (`PSD_SwimmingMoving`). + +Restant à faire : +- Aucune base Motion Matching armée pour le fusil / le pistolet (seul l'arc en a) ; `PSD_Crouch_Bow` existe mais n'est référencée par aucune ligne de chooser. +- `SandboxCharacter_Mover` n'a **pas** de composant `AC_Stats` (le CMC en a un) : `BFL_WeaponDamage::ApplyPointDamage` résout `AC_Stats` sur la cible, donc le pion Mover ne peut pas encaisser de dégâts. Il lui manque aussi les capsules de hitbox et le `PerceptionStimuliSource` du CMC. +- La visée n'a pas d'équivalent de `SandboxCharacter_CMC::ISaiming` sur le Mover (seuls `PlayerInputState.WantsToAim` et `WantToshot` existent). + ### 4.3 Autres systèmes de gameplay (ajouts spécifiques au projet) ```text @@ -451,7 +497,7 @@ Content/Systems/ │ ├── 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) +│ └── Cover/AC_Cover.uasset → ActorComponent : système de couverture (cover system). Générique (tout passe par `GetOwner`) : porté par `SandboxCharacter_CMC` ET, depuis le 2026-09-18, par `SandboxCharacter_Mover` (voir §4.2.2). Entrée/sortie de couverture sur la touche **P** gérée dans le composant lui-même ; `MoveAlongWall` fait un sphere trace le long du mur, `AddMovementInput` sur le pion et diffuse `OnEntreredCover` (InCover, direction `E_CoverD`, EdgeL/EdgeR). │ ├── Scent/BP_ScentPoint.uasset → Point émetteur d'odeur, spawné par `SandboxCharacter_CMC::ScentFunct` (toutes les 2s pendant que le joueur se déplace) et consommé par `AC_AnimalSenses::CheckScent` (Systems/Wildlife/, §4.4). (2026-09-05) Deux bugs corrigés à la réutilisation par la faune : (a) `ScentFunct` ne créait le point QUE via `SpawnActorFromClass`, sans jamais appeler son événement `Custom|Create(life)` — la durée de vie (`TimeToLife`) restait donc à 0 ; ajout d'un appel explicite `Create(life=20.0)` juste après le spawn. (b) Le décompte de durée de vie (`Custom|CustomEvent(DeltaTime)`) existait déjà mais n'était appelé par PERSONNE (`BeginPlay` enregistrait l'acteur auprès de `BP_TickManager` mais rien n'invoquait réellement l'event) — le point ne s'auto-détruisait donc jamais ; ajout d'un `EventTick` natif qui appelle directement ce Custom Event (évite de toucher au brancher `BP_TickManager` partagé, hors-scope). Comparaison de fin de vie durcie de `== 0` à `<= 0` (float exact-equality fragile). Aucune nouvelle logique d'odeur créée — uniquement réparation du mécanisme existant. ├── Movable_Object/BP_Moveble_Object.uasset → Objet physique déplaçable par le joueur @@ -699,6 +745,10 @@ Contenu du framework du sample conservé volontairement (déplacé le 2026-09-14 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 : +- **PIÈGE — un nœud `Evaluate Chooser` sans objet de contexte branché renvoie TOUJOURS une liste vide (2026-09-18)** : constaté sur `SandboxCharacter_Mover_ABP::Update_MotionMatching`, dont les deux nœuds avaient leur pin de contexte (`SandboxCharacter_Mover_ABP_C`) laissé vide — aucune colonne du chooser ne pouvait être résolue, `ValidDatabases` restait vide en permanence et toute la branche Motion Matching de l'`AnimGraph` était inerte (`MM Search Cost` = FLT_MAX, `CurrentSelectedAnim` = None) sans qu'aucune erreur ne soit loguée. Toujours brancher `self` (type id créable : `Variables|Getareferencetoself`). Symptôme jumeau à surveiller : un chooser dupliqué dont on a changé le `ContextData` fonctionne, les liaisons se résolvant par NOM de variable sur la nouvelle classe de contexte. +- **PIÈGE — créer par script un sous-objet instancié dans un template de composant casse la sauvegarde des Blueprints ENFANTS (2026-09-17)** : `unreal.new_object(cls, outer=