diff --git a/projet-code/scenes_inf443/base/src/ball.cpp b/projet-code/scenes_inf443/base/src/ball.cpp
index 5644ea4ba6da6d683f788907cd3d94f2b611e24b..b6fcb67d05fda71b1f77713c265103b0b1d57468 100644
--- a/projet-code/scenes_inf443/base/src/ball.cpp
+++ b/projet-code/scenes_inf443/base/src/ball.cpp
@@ -1,10 +1,10 @@
 #include "ball.hpp"
 #include "terrain.hpp"
 
-void ball::initialize()
+void ball::initialize(int n)
 {
 
-	N = 10;
+	N = n;
 	pos.resize(N);
 	v.resize(N);
 	color.resize(N);
@@ -18,6 +18,19 @@ void ball::initialize()
 	}
 }
 
+void ball::add_ball(vec3 new_pos, vec3 new_dir) {
+	N++;
+	pos.resize(N);
+	v.resize(N);
+	color.resize(N);
+
+
+	color[N-1] = { rand_interval(0.0f, 1.0f), rand_interval(0.0f, 1.0f), rand_interval(0.0f, 1.0f) };
+	pos[N-1] = new_pos;
+	v[N-1] = new_dir;
+
+}
+
 void ball::simulate(float dt, float terrain_length) {
 	for (int i = 0; i < N; i++) {
 		if (pos[i][2] < -1 || cgp::abs(pos[i][0]) > terrain_length / 2 || cgp::abs(pos[i][1]) > terrain_length / 2) {
diff --git a/projet-code/scenes_inf443/base/src/ball.hpp b/projet-code/scenes_inf443/base/src/ball.hpp
index 03af3f623ec71431f17beffdb9d37a96107f73cd..c1fa9673f41c1fd7ccb5882173400f49a3a1a1e9 100644
--- a/projet-code/scenes_inf443/base/src/ball.hpp
+++ b/projet-code/scenes_inf443/base/src/ball.hpp
@@ -13,8 +13,9 @@ struct ball {
 
 	mesh_drawable mesh;
 
-	void initialize();
+	void initialize(int n);
 	void simulate(float dt, float terrain_length);
+	void add_ball(vec3 new_pos, vec3 new_dir);
 };
 
 vec3 terrain_orientation(float x, float y, float terrain_length);
diff --git a/projet-code/scenes_inf443/base/src/scene.cpp b/projet-code/scenes_inf443/base/src/scene.cpp
index 382fee92b02ff546ba82a16a67094c262afc0e41..7278b0fd5881c095c9ac9f8d3348faf46eee77e1 100644
--- a/projet-code/scenes_inf443/base/src/scene.cpp
+++ b/projet-code/scenes_inf443/base/src/scene.cpp
@@ -93,8 +93,9 @@ void scene_structure::initialize()
 	bird1.initialize_bird();
 	initialize_mvt();
 	chain1.initialize();
-	bouncing.initialize();
+	bouncing.initialize(10); //10 balls
 	bat1.initialize_bat();
+	projectiles.initialize(0);
 }
 
 void scene_structure::initialize_mvt()
@@ -163,6 +164,7 @@ void scene_structure::display_frame()
 	display_chain(p);
 	display_ball();
 	display_bat(p);
+	display_projectiles();
 
 
 	if (gui.display_wireframe)
@@ -353,6 +355,16 @@ void scene_structure::display_ball() {
 	}
 }
 
+void scene_structure::display_projectiles() {
+
+	projectiles.simulate(timer_chain.scale * 0.01f, terrain_length);
+	for (int i = 0; i < projectiles.N; i++) {
+		projectiles.mesh.model.translation = projectiles.pos[i];
+		projectiles.mesh.material.color = projectiles.color[i];
+		draw(projectiles.mesh, environment);
+	}
+}
+
 void scene_structure::mouse_move_event()
 {
 	if (!inputs.keyboard.shift)
@@ -360,6 +372,10 @@ void scene_structure::mouse_move_event()
 }
 void scene_structure::mouse_click_event()
 {
+	if (camera_control.inputs->mouse.click.left){
+		//std::cout << "ball created";
+		projectiles.add_ball(camera_control.camera_model.position_camera + 2*camera_control.camera_model.front(), 20*camera_control.camera_model.front());
+	}
 	camera_control.action_mouse_click(environment.camera_view);
 }
 void scene_structure::keyboard_event()
diff --git a/projet-code/scenes_inf443/base/src/scene.hpp b/projet-code/scenes_inf443/base/src/scene.hpp
index c92a6f7da95f5a5ce1f30c04b3373dafca986a9e..08c797636c7f500162a624ec9ab261ad42cbe753 100644
--- a/projet-code/scenes_inf443/base/src/scene.hpp
+++ b/projet-code/scenes_inf443/base/src/scene.hpp
@@ -71,6 +71,7 @@ struct scene_structure : cgp::scene_inputs_generic {
 	bird bird1;
 	chain chain1;
 	bat bat1;
+	ball projectiles;
 
 	// ****************************** //
 	// Functions
@@ -95,6 +96,7 @@ struct scene_structure : cgp::scene_inputs_generic {
 	void draw_segment(vec3 const& a, vec3 const& b);
 
 	void display_ball();
+	void display_projectiles();
 };