diff --git a/RIFI/script.js b/RIFI/script.js
index 71aa0d94c6a41c4231dc91e5455611cd1b90e2ff..b0c796a5ff1a7a7e79d84164eb38e7a7b46e89c7 100644
--- a/RIFI/script.js
+++ b/RIFI/script.js
@@ -13,6 +13,9 @@ var skull;
 var candle, candleHolder, flame; 
 var backgroundMesh; 
 var environmentMap;
+var compass;
+// var waxGroup;
+// var cubeCamera, cubeRenderTarget;
 
 var params = {
 
@@ -70,10 +73,15 @@ function fillScene() {
 scene.environment = environmentMap; 
 
 
-    createTable();
-    loadSkull();
-    createEnhancedCandle();
-    loadFlower();
+createTable();
+loadSkull();
+createEnhancedCandle();
+loadFlower();
+loadCompass();
+loadInk();
+loadWalnut();
+addMeltedWaxOnTable();
+loadKey();
 }
 
 function createGradientBackground() {
@@ -251,6 +259,182 @@ function createGradientTexture(color1, color2) {
     return texture;
 }
 
+
+function loadCompass() {
+    const loader = new OBJLoader();
+    const textureLoader = new THREE.TextureLoader();
+
+    textureLoader.load('textures/compass.jpg', function(texture) {
+        loader.load(
+            'boussole1.obj',  
+            function (compass) {
+                compass.scale.set(30, 30, 30); 
+                compass.position.set(70, -10, 85);
+                compass.rotation.set(0, -Math.PI / 1.5, 0);
+
+                const compassMaterial = new THREE.MeshStandardMaterial({
+                    map: texture, // Appliquer la texture
+                    roughness: 0.3, // Ajuster la rugosité pour un effet réaliste
+                    metalness: 0.8, // Ajuster la métallité pour un effet réaliste
+                    envMap: cubeRenderTarget.texture, // Appliquer la carte d'environnement dynamique
+                    envMapIntensity: 1.0, // Intensité de l'environnement pour un effet réaliste
+                    transparent: false, // Désactiver la transparence
+                    opacity: 1.0 // Opacité complète
+                    
+                });
+
+                compass.traverse(function(child) {
+                    if (child.isMesh) {
+                        child.material = compassMaterial;
+                        child.castShadow = true; // Permettre à l'objet de projeter des ombres
+                        child.receiveShadow = true; // Permettre à l'objet de recevoir des ombres
+                    }
+                });
+
+                scene.add(compass);
+                console.log("Objet chargé :", compass);
+
+                // Ajouter une lumière spécifique pour éclairer la boussole
+                const compassLight = new THREE.PointLight(0xffffff, 1, 100);
+                compassLight.position.set(70, 20, 85); // Positionner la lumière au-dessus de la boussole
+                scene.add(compassLight);
+            },
+            function (xhr) {
+                console.log((xhr.loaded / xhr.total * 100) + '% chargé');
+            },
+            function (error) {
+                console.error('Erreur de chargement:', error);
+            }
+        );
+    }, undefined, function(error) {
+        console.error('Erreur de chargement de la texture:', error);
+    });
+}
+
+function loadWalnut() {
+    const loader = new OBJLoader();
+
+    loader.load(
+        'walnut.obj',  
+        function (walnut) {
+            walnut.scale.set(1, 1, 1); 
+            
+            walnut.position.set(120, 6, 120); 
+            walnut.rotation.set(0, 0, 0); 
+
+            const walnutMaterial = new THREE.MeshPhongMaterial({  
+                color: 0xFFF8F0,      
+                specular: 0xFFF8F0,   
+                shininess: 40,        
+                emissive: 0x332211,   
+                emissiveIntensity: 0.1 
+            });
+            
+            walnut.traverse(function(child) {
+                if (child.isMesh) {
+                    child.material = walnutMaterial;
+                    child.castShadow = true; 
+                    child.receiveShadow = true; 
+                }
+            });
+  
+            scene.add(walnut);
+            console.log("Objet chargé :", walnut);
+        },
+        function (xhr) {
+            console.log((xhr.loaded / xhr.total * 100) + '% chargé');
+        },
+        function (error) {
+            console.error('Erreur de chargement:', error);
+        }
+    );
+}
+
+
+
+
+function loadInk() {
+    const loader = new OBJLoader();
+
+    loader.load(
+        'encre.obj',  
+        function (encre) {
+            encre.scale.set(30, 30, 30); 
+            
+            encre.position.set(-100, -70, -120); 
+            encre.rotation.set(0, 0, 0); 
+
+            const encreMaterial = new THREE.MeshStandardMaterial({
+                map: texture, 
+                roughness: 0.5, 
+                metalness: 0.3,
+                transparent: true, 
+                opacity: 0.95 
+            });
+
+            encre.traverse(function(child) {
+                if (child.isMesh) {
+                    child.material = encreMaterial;
+                    child.castShadow = true;
+                    child.receiveShadow = true; 
+                }
+            });
+
+
+            scene.add(encre);
+            console.log("Objet chargé :", encre);
+        },
+        function (xhr) {
+            console.log((xhr.loaded / xhr.total * 100) + '% chargé');
+        },
+        function (error) {
+            console.error('Erreur de chargement:', error);
+        }
+    );
+}
+
+
+
+function loadKey() {
+    const loader = new OBJLoader();
+
+    loader.load(
+        'key.obj',  
+        function (key) {
+            key.scale.set(12, 12, 12); 
+            
+            key.position.set(-90, 10, 150); 
+            key.rotation.set(0, Math.PI/1.5, 0); 
+
+            
+            const keyMaterial = new THREE.MeshStandardMaterial({
+                color: 0xFFD700, 
+                roughness: 0.3, 
+                metalness: 1.0, 
+                envMapIntensity: 1.0 
+            });
+
+            key.traverse(function(child) {
+                if (child.isMesh) {
+                    child.material = keyMaterial;
+                    child.castShadow = true; 
+                    child.receiveShadow = true; 
+                }
+            });
+ 
+            scene.add(key);
+            console.log("Objet chargé :", key);
+        },
+        function (xhr) {
+            console.log((xhr.loaded / xhr.total * 100) + '% chargé');
+        },
+        function (error) {
+            console.error('Erreur de chargement:', error);
+        }
+    );
+}
+
+
 function loadFlower() {
     var loader = new OBJLoader();
     loader.load(
@@ -773,6 +957,87 @@ function updateBackgroundWithCandleLight(time, flickerFactor, swayX, swayZ) {
     }
 }
 
+
+// function addMeltedWaxOnTable() {
+//     waxGroup = new THREE.Group();
+//     const waxMaterial = new THREE.MeshPhysicalMaterial({
+//         color: 0xf3e5ab, // Couleur de la cire
+//         roughness: 0.8,
+//         metalness: 0.05,
+//         transparent: true,
+//         opacity: 0.95,
+//         thickness: 1.5,
+//         transmission: 0.5
+//     });
+
+//     const waxCount = 8; // Nombre de gouttes de cire
+
+//     for (let i = 0; i < waxCount; i++) {
+//         let waxDroplets = new THREE.Group();
+        
+//         // Position de base près de la bougie
+//         let baseX = -150 + (Math.random() - 0.5) * 20; // Près de la position X de la bougie
+//         let baseZ = 1 + (Math.random() - 0.5) * 20;   // Près de la position Z de la bougie
+
+//         let dropCount = Math.floor(Math.random() * 5) + 3; // Nombre de gouttes par groupe
+
+//         for (let j = 0; j < dropCount; j++) {
+//             let waxRadius = Math.random() * 2 + 1; // Rayon aléatoire pour les gouttes
+//             let waxGeometry = new THREE.SphereGeometry(waxRadius, 16, 16);
+//             let wax = new THREE.Mesh(waxGeometry, waxMaterial);
+
+//             // Position initiale près de la bougie
+//             wax.position.set(
+//                 baseX + Math.random() * 5 - 2.5, 
+//                 50 - j * 5,  // Position Y pour simuler la chute
+//                 baseZ + Math.random() * 5 - 2.5
+//             );
+
+//             // Étirer les gouttes pour un effet de dégoulinement
+//             wax.scale.y = Math.random() * 2 + 1;
+
+//             // Activer les ombres
+//             wax.castShadow = true;
+//             wax.receiveShadow = true;
+
+//             waxDroplets.add(wax);
+//         }
+
+//         waxGroup.add(waxDroplets);
+//     }
+
+//     scene.add(waxGroup);
+//     animateWax(waxGroup); // Animer les gouttes de cire
+// }
+
+// function animateWax(waxGroup) {
+//     waxGroup.children.forEach((waxDroplets) => {
+//         // Position finale sur la table
+//         const targetY = -40;
+
+//         // Durée aléatoire pour chaque goutte
+//         const duration = Math.random() * 2 + 1;
+
+//         // Animation GSAP pour faire tomber les gouttes
+//         gsap.to(waxDroplets.position, {
+//             y: targetY,
+//             duration: duration,
+//             ease: "power2.out",
+//             onComplete: () => {
+//                 // Effet de rebond lorsque la goutte touche la table
+//                 gsap.to(waxDroplets.position, {
+//                     y: targetY + 5, // Petit rebond
+//                     duration: 0.2,
+//                     yoyo: true,
+//                     repeat: 1,
+//                     ease: "power2.out"
+//                 });
+//             }
+//         });
+//     });
+// }
+
+
 function animate() {
     requestAnimationFrame(animate);
     var delta = clock.getDelta();
@@ -780,7 +1045,8 @@ function animate() {
     
    
     animateFlame();
-    
+    // animateWax(waxGroup);
+
     renderer.render(scene, camera);
 }