diff --git a/projet-code/scenes_inf443/base/src/dragon.cpp b/projet-code/scenes_inf443/base/src/dragon.cpp
index 1b0cb5115c8ff3228f8225b7f8fa68463211d0b3..cb13e73313d2886b79ae8d71e1313b873819b319 100644
--- a/projet-code/scenes_inf443/base/src/dragon.cpp
+++ b/projet-code/scenes_inf443/base/src/dragon.cpp
@@ -22,7 +22,7 @@ void dragon::initialize_mvt(vec3 p, numarray<vec3> key_positions, numarray<float
 	timer_mvt.t = timer_mvt.t_min;
 
 	//Dragon hitbox
-	dragon_hitbox.initialize_hitbox(2, {{0,2.5*size,0},{0,-1.75*size,0.5*size}}, { size*3, size * 1.5});
+	dragon_hitbox.initialize_hitbox(8, { {3.5 * size,0,0.5 * size},{2.25 * size,0,0.6 * size},{1.25 * size,0,0.5 * size} , {0.25,0,0.5 * size} ,{-1 * size,0,0.5 * size},  {-2 * size,0,0.5 * size}, {-2.9 * size,0,0.4 * size}, {-3.5 * size,0,0.4 * size} }, { size, 0.5 * size, 0.75 * size, 0.9 * size, 0.75 * size, 0.75 * size, 0.4 * size, 0.4 * size });
 }
 
 void dragon::update_mvt()
diff --git a/projet-code/scenes_inf443/base/src/scene.cpp b/projet-code/scenes_inf443/base/src/scene.cpp
index 3a21a828c6eea858778ed070d02414113ea6ace4..96f4f25f6b6280148b2cf204b223f4c652d02c33 100644
--- a/projet-code/scenes_inf443/base/src/scene.cpp
+++ b/projet-code/scenes_inf443/base/src/scene.cpp
@@ -183,30 +183,32 @@ void scene_structure::display_bats()
 	bats.update_mvt();
 
 	for (int i = 0; i < bats.N; i++) {
-		//Wing animation
-		bats.bat_mesh["Bat wing left1"].transform_local.rotation = rotation_transform::from_axis_angle({ 0,1,0 }, 0.5 * cos(5 * bats.bats_prop[i].timer_mvt.t));
-		bats.bat_mesh["Bat wing right1"].transform_local.rotation = rotation_transform::from_axis_angle({ 0,1,0 }, -0.5 * cos(5 * bats.bats_prop[i].timer_mvt.t));
-		//Rescale
-		bats.bat_mesh["Bat base"].drawable.model.scaling = bats.bats_prop[i].size;
-		bats.bat_mesh["Bat wing left1"].drawable.model.scaling = bats.bats_prop[i].size;
-		bats.bat_mesh["Bat wing right1"].drawable.model.scaling = bats.bats_prop[i].size;
-		//Make sure wings are at the right distance
-		bats.bat_mesh["Bat wing left1"].transform_local.translation = { -0.25f * bats.bats_prop[i].size, 0, 0 };
-		bats.bat_mesh["Bat wing right1"].transform_local.translation = { 0.25f * bats.bats_prop[i].size, 0, 0 };
-
-		//Orientation and position of the bat along the path
-		rotation_transform rot = rotation_transform::from_vector_transform({ 0,-1,0 }, normalize(bats.bats_prop[i].pos_futur - bats.bats_prop[i].pos));
-		bats.bat_mesh["Bat base"].transform_local.rotation = rot;
-		bats.bat_mesh["Bat base"].transform_local.translation = bats.bats_prop[i].pos;
-
-		bats.bat_mesh.update_local_to_global_coordinates();
-		if (!bats.bats_prop[i].isdead)	draw(bats.bat_mesh, environment);
-		if (gui.display_wireframe) {
-			draw_wireframe(bats.bat_mesh, environment);
-		}
+		if (!bats.bats_prop[i].isdead) {
+			//Wing animation
+			bats.bat_mesh["Bat wing left1"].transform_local.rotation = rotation_transform::from_axis_angle({ 0,1,0 }, 0.5 * cos(5 * bats.bats_prop[i].timer_mvt.t));
+			bats.bat_mesh["Bat wing right1"].transform_local.rotation = rotation_transform::from_axis_angle({ 0,1,0 }, -0.5 * cos(5 * bats.bats_prop[i].timer_mvt.t));
+			//Rescale
+			bats.bat_mesh["Bat base"].drawable.model.scaling = bats.bats_prop[i].size;
+			bats.bat_mesh["Bat wing left1"].drawable.model.scaling = bats.bats_prop[i].size;
+			bats.bat_mesh["Bat wing right1"].drawable.model.scaling = bats.bats_prop[i].size;
+			//Make sure wings are at the right distance
+			bats.bat_mesh["Bat wing left1"].transform_local.translation = { -0.25f * bats.bats_prop[i].size, 0, 0 };
+			bats.bat_mesh["Bat wing right1"].transform_local.translation = { 0.25f * bats.bats_prop[i].size, 0, 0 };
+
+			//Orientation and position of the bat along the path
+			rotation_transform rot = rotation_transform::from_vector_transform({ 0,-1,0 }, normalize(bats.bats_prop[i].pos_futur - bats.bats_prop[i].pos));
+			bats.bat_mesh["Bat base"].transform_local.rotation = rot;
+			bats.bat_mesh["Bat base"].transform_local.translation = bats.bats_prop[i].pos;
+
+			bats.bat_mesh.update_local_to_global_coordinates();
+			draw(bats.bat_mesh, environment);
+			if (gui.display_wireframe) {
+				draw_wireframe(bats.bat_mesh, environment);
+			}
 
-		if (gui.display_hitbox) {
-			display_hitbox(bats.bats_prop[i].bat_hitbox, bats.bats_prop[i].pos, rot);
+			if (gui.display_hitbox) {
+				display_hitbox(bats.bats_prop[i].bat_hitbox, bats.bats_prop[i].pos, rot);
+			}
 		}
 	}
 }
@@ -216,38 +218,40 @@ void scene_structure::display_dragons()
 	dragons.update_mvt();
 
 	for (int i = 0; i < bats.N; i++) {
-		//Wing animation
-		dragons.dragon_mesh["Dragon wing left"].transform_local.rotation = rotation_transform::from_axis_angle({ 1,0,0.5 }, 0.5 * cos(5 * dragons.dragons_prop[i].timer_mvt.t));
-		dragons.dragon_mesh["Dragon wing right"].transform_local.rotation = rotation_transform::from_axis_angle({ 1,0,0.5 }, -0.5 * cos(5 * dragons.dragons_prop[i].timer_mvt.t));
-		//Rescale
-		dragons.dragon_mesh["Dragon base"].drawable.model.scaling = dragons.dragons_prop[i].size;
-		dragons.dragon_mesh["Dragon wing left"].drawable.model.scaling = dragons.dragons_prop[i].size;
-		dragons.dragon_mesh["Dragon wing right"].drawable.model.scaling = dragons.dragons_prop[i].size;
-		dragons.dragon_mesh["Dragon mouth"].drawable.model.scaling = dragons.dragons_prop[i].size;
-		dragons.dragon_mesh["Dragon tailmiddle"].drawable.model.scaling = dragons.dragons_prop[i].size;
-		dragons.dragon_mesh["Dragon tailend"].drawable.model.scaling = dragons.dragons_prop[i].size;
-		//Make sure wings are at the right distance
-		dragons.dragon_mesh["Dragon wing left"].transform_local.translation = { 0, -0.3f * dragons.dragons_prop[i].size, 0 };
-		dragons.dragon_mesh["Dragon wing right"].transform_local.translation = { 0, 0.3f * dragons.dragons_prop[i].size, 0 };
-
-		//Orientation and position of the bat along the path
-		rotation_transform rot = rotation_transform::from_vector_transform({ 0,-1,0 }, normalize(dragons.dragons_prop[i].pos_futur - dragons.dragons_prop[i].pos));
-		//dragons.dragon_mesh["Dragon base"].transform_local.rotation = rot;
-		dragons.dragon_mesh["Dragon base"].transform_local.translation = dragons.dragons_prop[i].pos;
-
-		dragons.dragon_mesh.update_local_to_global_coordinates();
-		if (!dragons.dragons_prop[i].isdead)	//draw(dragons.dragon_mesh, environment);
-		if (gui.display_wireframe) {
-			draw_wireframe(dragons.dragon_mesh, environment);
-		}
-
-		dragons.dragon_mesh["Dragon base"].transform_local.translation = {10,10, 10 + evaluate_terrain_height(10,10)};
-
-		dragons.dragon_mesh.update_local_to_global_coordinates();
-		draw(dragons.dragon_mesh, environment);
+		if (!dragons.dragons_prop[i].isdead) {
+			//Wing animation
+			dragons.dragon_mesh["Dragon wing left"].transform_local.rotation = rotation_transform::from_axis_angle({ 1,0,0.5 }, 0.5 * cos(5 * dragons.dragons_prop[i].timer_mvt.t));
+			dragons.dragon_mesh["Dragon wing right"].transform_local.rotation = rotation_transform::from_axis_angle({ 1,0,0.5 }, -0.5 * cos(5 * dragons.dragons_prop[i].timer_mvt.t));
+			//Mouth animation
+			dragons.dragon_mesh["Dragon mouth"].transform_local.rotation = rotation_transform::from_axis_angle({ 0,1,0 }, 0.05 * cos(dragons.dragons_prop[i].timer_mvt.t));
+			//Tail animation
+			dragons.dragon_mesh["Dragon tailmiddle"].transform_local.rotation = rotation_transform::from_axis_angle({ 0,1,0.5 }, 0.05 * cos(2 * dragons.dragons_prop[i].timer_mvt.t));
+			dragons.dragon_mesh["Dragon tailend"].transform_local.rotation = rotation_transform::from_axis_angle({ 0.5,1,0.5 }, -0.01 * cos(2 * dragons.dragons_prop[i].timer_mvt.t));
+			//Rescale
+			dragons.dragon_mesh["Dragon base"].drawable.model.scaling = dragons.dragons_prop[i].size;
+			dragons.dragon_mesh["Dragon wing left"].drawable.model.scaling = dragons.dragons_prop[i].size;
+			dragons.dragon_mesh["Dragon wing right"].drawable.model.scaling = dragons.dragons_prop[i].size;
+			dragons.dragon_mesh["Dragon mouth"].drawable.model.scaling = dragons.dragons_prop[i].size;
+			dragons.dragon_mesh["Dragon tailmiddle"].drawable.model.scaling = dragons.dragons_prop[i].size;
+			dragons.dragon_mesh["Dragon tailend"].drawable.model.scaling = dragons.dragons_prop[i].size;
+			//Make sure wings are at the right distance
+			dragons.dragon_mesh["Dragon wing left"].transform_local.translation = { 0, -0.3f * dragons.dragons_prop[i].size, 0 };
+			dragons.dragon_mesh["Dragon wing right"].transform_local.translation = { 0, 0.3f * dragons.dragons_prop[i].size, 0 };
+
+			//Orientation and position of the bat along the path
+			rotation_transform rot = rotation_transform::from_vector_transform({ 1,0,0 }, normalize(dragons.dragons_prop[i].pos_futur - dragons.dragons_prop[i].pos));
+			dragons.dragon_mesh["Dragon base"].transform_local.rotation = rot;
+			dragons.dragon_mesh["Dragon base"].transform_local.translation = dragons.dragons_prop[i].pos;
+
+			dragons.dragon_mesh.update_local_to_global_coordinates();
+			draw(dragons.dragon_mesh, environment);
+			if (gui.display_wireframe) {
+				draw_wireframe(dragons.dragon_mesh, environment);
+			}
 
-		if (gui.display_hitbox) {
-			display_hitbox(dragons.dragons_prop[i].dragon_hitbox, dragons.dragons_prop[i].pos, rot);
+			if (gui.display_hitbox) {
+				display_hitbox(dragons.dragons_prop[i].dragon_hitbox, dragons.dragons_prop[i].pos, rot);
+			}
 		}
 	}
 }
@@ -355,6 +359,7 @@ void scene_structure::display_projectiles() {
 	for (int i = 0; i < projectiles.N; i++) {
 		for (int j = 0; j < bats.N; j++) {
 			if (bats.bats_prop[j].bat_hitbox.is_in_hitbox(projectiles.projectiles_prop[i].pos, bats.bats_prop[j].pos)) bats.bats_prop[j].isdead = true;
+			if (dragons.dragons_prop[j].dragon_hitbox.is_in_hitbox(projectiles.projectiles_prop[i].pos, dragons.dragons_prop[j].pos)) dragons.dragons_prop[j].isdead = true;
 		}
 		projectiles.mesh.model.translation = projectiles.projectiles_prop[i].pos;
 		projectiles.mesh.material.color = projectiles.projectiles_prop[i].color;