diff --git a/agdbentures b/agdbentures
index de3c61fe3073aaa53974631524943ec4dd82fd66..184f8953c7cc9f548af9d5244672dd6ff704fa60 100755
--- a/agdbentures
+++ b/agdbentures
@@ -47,6 +47,69 @@ from graphic.constants import Anim
 
 
 if __name__ == "__main__":
+
+    # début code de tommy
+    # les autres changements sont aux lignes 169, 199, 247, 249
+    langue_default = "en"
+    debug_default = 1
+    speed_default = 5
+    left_default = False
+    win_move_default = False
+    level_default = None
+    import yaml
+
+    # Chargement du fichier
+    try:
+        with open("config.yml", 'r') as f:
+
+            try:
+
+                config = yaml.safe_load(f)
+
+                # Récupération des commandes
+                inputs = config["inputs"]
+
+                # Lecture des argument
+                for key,value in inputs.items():
+                    if key == "language" and value in ["en","fr"]:
+                        langue_default = value
+                    if key == "debug" and value != None:
+                        try :
+                            int_value = int(value)
+                            if 0 <= int_value <= 3:
+                                debug_default = int_value
+                            else :
+                                print(f"la config du yaml sur la valeur : {key} ne correspond pas aux attentes.\n un entier entre 0 et 3 inclus et attendu")
+                        except ValueError:
+                            print(f"la config du yaml sur la valeur : {key} ne correspond pas aux attentes.\n un entier entre 0 et 3 inclus et attendu")
+
+                    if key == "speed" and value != None:
+                        try :
+                            int_value = int(value)
+                            if 1 <= int_value <= 100:
+                                speed_default = int_value
+                            else :
+                                print(f"la config du yaml sur la valeur : {key} ne correspond pas aux attentes.\n un entier entre 1 et 100 inclus et attendu")
+                        except ValueError:
+                            print(f"la config du yaml sur la valeur : {key} ne correspond pas aux attentes.\n un entier entre 1 et 100 inclus et attendu")
+
+                    if key == "left" and value == True:
+                        left_default = True
+                    if key == "win_move" and value == True:
+                        win_move_default = True
+                    if key == "level" :
+                        level_default = value
+                            
+                    
+            except yaml.YAMLError as ex:
+                log.error("YAML FILE HAS SYNTAX ERROR :")
+                log.error(ex)
+    except FileNotFoundError:
+        log.error("\n***************************************\nle fichier de configuration n'existe pas\nLancement du jeu en mode normal\n***************************************")
+
+
+
+    # fin code de tommy
     parser = argparse.ArgumentParser(description="Agdbentures launcher")
     parser.add_argument(
         "-v",
@@ -57,7 +120,7 @@ if __name__ == "__main__":
     parser.add_argument(
         "--lang",
         help="Choose agdbentures language (default: [en]glish)",
-        default="en",
+        default=langue_default,
         choices=["en", "fr"],
     )
     parser.add_argument("-l", "--level", help="Path to launch a single level directly")
@@ -97,7 +160,7 @@ if __name__ == "__main__":
         "-d",
         type=int,
         choices=[0, 1, 2, 3],
-        default=1,
+        default=debug_default,
         help="Set debug level (0 = crit, 1 = warn, 2 = info, 3 = debug, default = 1)",
     )
     parser.add_argument(
@@ -127,7 +190,7 @@ if __name__ == "__main__":
         "--speed",
         "-s",
         type=int,
-        default=5,
+        default= speed_default,
         help="Adjust player movement speed (from 1 to 100), affecting the SPEED constant in lib/graphic/constants.py"
     )
 
@@ -174,9 +237,10 @@ if __name__ == "__main__":
     else:
         code_window_cls = VimServerWindow
 
-    if args.left:
+    # Tommy a fait ça peut être a améliorer
+    if args.left or left_default:
         GenServerWindow.window_alignment = 'left'
-    if args.no_win_move:
+    if args.no_win_move or win_move_default:
         GenServerWindow.window_alignment = 'nothing'
 
     if args.dev:
@@ -194,9 +258,11 @@ if __name__ == "__main__":
     window = MainWindow(code_window_cls)
 
     try:
-        if args.level is None:
+        if args.level is None and level_default is None:
             window.run()
         else:
+            if args.level is None:
+                args.level = level_default
             if args.level[-1] == '/':  # remove trailing slash
                 lvld = args.level[:-1]
             else:
@@ -208,6 +274,7 @@ if __name__ == "__main__":
             log.info(f"Directly loading level '{lvl}'")
             window.load_level(lvl)
             arcade.run()
+
     except Exception as e:
         log.error(f"Exception caught in main thread: {e}")
         log.info(f"Remaining threads running: {threading.active_count()}")
diff --git a/config.yml b/config.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d0d3b36dcfc275695544dd85f4382bcc3b78b14d
--- /dev/null
+++ b/config.yml
@@ -0,0 +1,30 @@
+# pour chaque champ, il est possible de ne rien indiquer et alors le jeu prendra ses paramétres par défaut
+inputs:
+  
+  # le champ langue a deux arguments possibles , ce champ permet de gérer la langue de l'affichage du jeu: "en" ou "fr"
+  language: fr
+  
+  # le champ debug a quatre arguments possibles, ce champ gère les affichages qui seront fait dans la console selon leur type: 
+  # 0 -> critique
+  # 1 -> warning
+  # 2 -> info  ( de plus ce mode indique les FPS)
+  # 3 -> debug ( de plus ce mode indique les FPS)
+  debug : 3
+  
+  # le champ speed prend un argument dans un intervalle allant de 1 à 100 (inclus), ce champ régle la vitesse des animations dans le jeu
+  speed: 70
+  
+  # le champ left gère la disposition dans laquelle les fenetres vont apparaître au lancement du jeu 
+  # True -> La fenêtre du jeu va s'alligner à gauche de l'écran
+  # autre chose que True -> la fenêtre du jeu va se positionner au centre de l'écran
+  left : 
+  
+  # le champ win_move gère la séparation des différentes fenetres de jeu 
+  # True ->  les fenêtres se superposent
+  # autre chose que True -> mode "normal" du jeu ou le jeu va apparaitre à gauche de l'éditeur de code
+  win_move : 
+
+  # le champ level gère le niveau qui va être chargé au lancement du jeu
+  # pour charger un niveau spécifique il faut donner son chemin relatif depuis le répertoire level exemple : basic/command_args  pour charger le niveau command_args
+  # Ne rien mettre lance le jeu dans son interface "normale" ou les niveaux peuvent s'encahiner et ou le joueur peut voir sa progression
+  level : 
\ No newline at end of file
diff --git a/levels/medium/pet_follow/pet_follow.py b/levels/medium/pet_follow/pet_follow.py
index c4614a2911d24598460bae4f28b9beb42c4b01b4..fda2fca92386e1e5bdbd432b88e9e6f25fe5db5a 100644
--- a/levels/medium/pet_follow/pet_follow.py
+++ b/levels/medium/pet_follow/pet_follow.py
@@ -1,14 +1,71 @@
 #!/usr/bin/env python3
 
 from level.level_abc import AbstractLevel
-from lib.loader.loader import load_level, run_level, test_level
-from lib.level.objects import find_map
-from lib.utils import cus
+from loader.loader import load_level, run_level, test_level
+from level.objects import find_map
+from utils import cus
+from language import lmessage, Lang
 
 
 class Level(AbstractLevel):
     def arcade_pre_run(self):
         pass
+    def pre_validation(self):
+        print("salut toi !!!")
+        if 1==1:
+            print("salut")
+            self.checker.failed(
+                    lmessage(
+                                {
+                                    Lang.EN: "You don't have to move the exit.",
+                                    Lang.FR: "Vous n'avez pas à bouger la sortie.",
+                                }
+                            )
+                        )
+            print("hyeh")
+        print("je passe ici ??")
 
+        self.checker.append_inputs(
+            [
+                'UP',
+                'UP',
+                'RIGHT',
+                'RIGHT',
+                'RIGHT',
+                'RIGHT',
+                'UP',
+                'UP',
+                'LEFT',
+                'LEFT',
+                'LEFT',
+                'LEFT',
+                'LEFT',
+                'RIGHT',
+            ]
+        )
+        print("et la ??")
+
+        pass
     def test(self):
+        import tests.lib_test as T
+        self.recompile_bug()
+        for _ in range(120):
+            T.cnext()
+            print("UP")
+
+
+
+        T.expect_defeat()
+        self.run()
+        # self.restart()
+
+        # version qui marche
+        self.recompile_answer()
+        for _ in range(120):
+            T.cnext()
+            print("UP")
+
+
+        T.expect_victory()
+        self.run()
         pass
diff --git a/levels/tutorial/06_key/level.py b/levels/tutorial/06_key/level.py
index a6ca3a4a9ddcb41646e0b08646961b0485d73431..9e6871430b4ca34764e3293ea2961a64d59a4a1c 100755
--- a/levels/tutorial/06_key/level.py
+++ b/levels/tutorial/06_key/level.py
@@ -7,7 +7,7 @@ from utils import lvl
 
 
 class Level(AbstractLevel):
-    """05_key"""
+    """06_key"""
 
     def arcade_custom_first_start(self):
 
@@ -68,6 +68,7 @@ class Level(AbstractLevel):
         if plx != keyx or ply != keyy:
             self.checker.failed("Player is not on key when has_key changes")
 
+
     def check_open_door(self):
         chk = self.checker.tracker
         plx = chk.get_variable_value_as_str('player_x', "int")
@@ -96,6 +97,7 @@ class Level(AbstractLevel):
         if not self.checker.has_opened_door:
            self.checker.failed("Player has not opened the door")
         pass
+        
 
     def setup(self):
         """Set a custom map."""
@@ -110,13 +112,27 @@ class Level(AbstractLevel):
         # char_map = [tile for tile in str_map]
         # self.map.update_floor(char_map)
 
+
     def test(self):
         import tests.lib_test as T
+        self.recompile_bug()
 
-        for _ in range(6):
+        for _ in range(53):
             T.cnext()
+
+        # récupère la position de la clé
+
         T.expect_defeat()
         self.run()
+        # self.restart()
+
+        # version qui marche
+        self.recompile_answer()
+        for _ in range(52):
+            T.cnext()
+
+        T.expect_victory()
+        self.run()        
 
 
 if __name__ == "__main__":