diff --git a/assets/graphics/objects/crate.png b/assets/graphics/objects/crate.png
new file mode 100644
index 0000000..2b8bdcd
Binary files /dev/null and b/assets/graphics/objects/crate.png differ
diff --git a/assets/graphics/objects/crate.png.import b/assets/graphics/objects/crate.png.import
new file mode 100644
index 0000000..c7ebf1a
--- /dev/null
+++ b/assets/graphics/objects/crate.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dwx4x0wq3vetw"
+path="res://.godot/imported/crate.png-b286bd97caa3cbc59746f2db7de46191.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/objects/crate.png"
+dest_files=["res://.godot/imported/crate.png-b286bd97caa3cbc59746f2db7de46191.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/player/idle/Player Idle 48x48.png b/assets/graphics/player/idle/Player Idle 48x48.png
new file mode 100644
index 0000000..b618511
Binary files /dev/null and b/assets/graphics/player/idle/Player Idle 48x48.png differ
diff --git a/assets/graphics/player/idle/Player Idle 48x48.png.import b/assets/graphics/player/idle/Player Idle 48x48.png.import
new file mode 100644
index 0000000..03a840b
--- /dev/null
+++ b/assets/graphics/player/idle/Player Idle 48x48.png.import	
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bfhqvl875is6f"
+path="res://.godot/imported/Player Idle 48x48.png-9f43f14976963a2821a06ddf8579a76a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/player/idle/Player Idle 48x48.png"
+dest_files=["res://.godot/imported/Player Idle 48x48.png-9f43f14976963a2821a06ddf8579a76a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/player/jump/player jump 48x48.png b/assets/graphics/player/jump/player jump 48x48.png
new file mode 100644
index 0000000..dff105c
Binary files /dev/null and b/assets/graphics/player/jump/player jump 48x48.png differ
diff --git a/assets/graphics/player/jump/player jump 48x48.png.import b/assets/graphics/player/jump/player jump 48x48.png.import
new file mode 100644
index 0000000..6f96ba2
--- /dev/null
+++ b/assets/graphics/player/jump/player jump 48x48.png.import	
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c2s48joyna11q"
+path="res://.godot/imported/player jump 48x48.png-1ccba0c36041038682bf917e1f6cf991.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/player/jump/player jump 48x48.png"
+dest_files=["res://.godot/imported/player jump 48x48.png-1ccba0c36041038682bf917e1f6cf991.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/player/run/player run 48x48.png b/assets/graphics/player/run/player run 48x48.png
new file mode 100644
index 0000000..aca5b55
Binary files /dev/null and b/assets/graphics/player/run/player run 48x48.png differ
diff --git a/assets/graphics/player/run/player run 48x48.png.import b/assets/graphics/player/run/player run 48x48.png.import
new file mode 100644
index 0000000..026ab54
--- /dev/null
+++ b/assets/graphics/player/run/player run 48x48.png.import	
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bvat1vqwtua2p"
+path="res://.godot/imported/player run 48x48.png-6d66612d48bfa4c8721495ba557ab7c6.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/player/run/player run 48x48.png"
+dest_files=["res://.godot/imported/player run 48x48.png-6d66612d48bfa4c8721495ba557ab7c6.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/projectiles/pixel_bullet.png b/assets/graphics/projectiles/pixel_bullet.png
new file mode 100644
index 0000000..900d030
Binary files /dev/null and b/assets/graphics/projectiles/pixel_bullet.png differ
diff --git a/assets/graphics/projectiles/pixel_bullet.png.import b/assets/graphics/projectiles/pixel_bullet.png.import
new file mode 100644
index 0000000..1b69b55
--- /dev/null
+++ b/assets/graphics/projectiles/pixel_bullet.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://66hnfsu3e8ll"
+path="res://.godot/imported/pixel_bullet.png-30d6d1e8b5e1332f8b2e2cee72a9e790.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/projectiles/pixel_bullet.png"
+dest_files=["res://.godot/imported/pixel_bullet.png-30d6d1e8b5e1332f8b2e2cee72a9e790.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/assets/graphics/terrains/Terrain (32x32).png b/assets/graphics/terrains/Terrain (32x32).png
new file mode 100644
index 0000000..ddf1eaf
Binary files /dev/null and b/assets/graphics/terrains/Terrain (32x32).png differ
diff --git a/assets/graphics/terrains/Terrain (32x32).png.import b/assets/graphics/terrains/Terrain (32x32).png.import
new file mode 100644
index 0000000..a8b25fc
--- /dev/null
+++ b/assets/graphics/terrains/Terrain (32x32).png.import	
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dktvd8atklmau"
+path="res://.godot/imported/Terrain (32x32).png-7361ca574569f6e5ff16ef11d25a8904.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/graphics/terrains/Terrain (32x32).png"
+dest_files=["res://.godot/imported/Terrain (32x32).png-7361ca574569f6e5ff16ef11d25a8904.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/project.godot b/project.godot
index f74bfc0..6240669 100644
--- a/project.godot
+++ b/project.godot
@@ -15,6 +15,14 @@ run/main_scene="res://scenes/game.tscn"
 config/features=PackedStringArray("4.3", "Forward Plus")
 config/icon="res://icon.svg"
 
+[display]
+
+window/size/viewport_width=320
+window/size/viewport_height=180
+window/size/window_width_override=960
+window/size/window_height_override=540
+window/stretch/mode="viewport"
+
 [file_customization]
 
 folder_colors={
diff --git a/scenes/bullet.tscn b/scenes/bullet.tscn
index 8d2a0c5..acd700f 100644
--- a/scenes/bullet.tscn
+++ b/scenes/bullet.tscn
@@ -1,11 +1,13 @@
-[gd_scene load_steps=3 format=3 uid="uid://b53r5iysu7d4t"]
+[gd_scene load_steps=4 format=3 uid="uid://b53r5iysu7d4t"]
 
 [ext_resource type="Script" path="res://scripts/bullet.gd" id="1_qubif"]
+[ext_resource type="Texture2D" uid="uid://66hnfsu3e8ll" path="res://assets/graphics/projectiles/pixel_bullet.png" id="2_ifgvb"]
 
 [sub_resource type="RectangleShape2D" id="RectangleShape2D_qxj7e"]
 size = Vector2(19, 4)
 
 [node name="Area2D" type="Area2D"]
+position = Vector2(1, 0)
 script = ExtResource("1_qubif")
 metadata/_edit_group_ = true
 
@@ -14,4 +16,11 @@ position = Vector2(-0.5, 0)
 shape = SubResource("RectangleShape2D_qxj7e")
 debug_color = Color(0.717124, 0, 0.290401, 0.42)
 
+[node name="Sprite2D" type="Sprite2D" parent="."]
+texture_filter = 1
+position = Vector2(-6, -2)
+rotation = -3.14159
+scale = Vector2(0.151432, 0.0740068)
+texture = ExtResource("2_ifgvb")
+
 [connection signal="body_entered" from="." to="." method="_on_body_entered"]
diff --git a/scenes/crate.tscn b/scenes/crate.tscn
index a8290a5..433b84f 100644
--- a/scenes/crate.tscn
+++ b/scenes/crate.tscn
@@ -1,11 +1,19 @@
-[gd_scene load_steps=2 format=3 uid="uid://djkjmi7bo58uv"]
+[gd_scene load_steps=3 format=3 uid="uid://djkjmi7bo58uv"]
+
+[ext_resource type="Texture2D" uid="uid://dwx4x0wq3vetw" path="res://assets/graphics/objects/crate.png" id="1_6lxxi"]
 
 [sub_resource type="RectangleShape2D" id="RectangleShape2D_ilk50"]
 size = Vector2(47, 44)
 
-[node name="RigidBody2D" type="RigidBody2D"]
+[node name="RigidBody2D" type="RigidBody2D" groups=["destructables"]]
 metadata/_edit_group_ = true
 
+[node name="Sprite2D" type="Sprite2D" parent="."]
+texture_filter = 1
+position = Vector2(0, 3)
+scale = Vector2(0.1762, 0.152876)
+texture = ExtResource("1_6lxxi")
+
 [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
 shape = SubResource("RectangleShape2D_ilk50")
 debug_color = Color(0.889053, 0.327177, 5.77569e-07, 0.42)
diff --git a/scenes/game.tscn b/scenes/game.tscn
index d069116..d6295c1 100644
--- a/scenes/game.tscn
+++ b/scenes/game.tscn
@@ -1,9 +1,11 @@
-[gd_scene load_steps=8 format=3 uid="uid://dhgts0kodsujx"]
+[gd_scene load_steps=12 format=3 uid="uid://dhgts0kodsujx"]
 
 [ext_resource type="PackedScene" uid="uid://djkjmi7bo58uv" path="res://scenes/crate.tscn" id="1_6shkr"]
-[ext_resource type="Script" path="res://scripts/gameController.gd" id="1_7tjsy"]
+[ext_resource type="Script" path="res://scripts/gameController.gd" id="1_50x63"]
+[ext_resource type="Script" path="res://scripts/sceneManager.gd" id="1_ooich"]
 [ext_resource type="PackedScene" uid="uid://b2hyqfqh02ep6" path="res://scenes/player.tscn" id="3_bssht"]
 [ext_resource type="Script" path="res://scripts/trigger.gd" id="3_t4lk8"]
+[ext_resource type="Texture2D" uid="uid://dktvd8atklmau" path="res://assets/graphics/terrains/Terrain (32x32).png" id="6_jpfcs"]
 
 [sub_resource type="RectangleShape2D" id="RectangleShape2D_n7xvc"]
 size = Vector2(92, 20)
@@ -14,8 +16,63 @@ distance = -484.0
 [sub_resource type="CircleShape2D" id="CircleShape2D_5ph8t"]
 radius = 62.0
 
+[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_v72u6"]
+texture = ExtResource("6_jpfcs")
+texture_region_size = Vector2i(32, 32)
+0:0/0 = 0
+1:0/0 = 0
+2:0/0 = 0
+4:0/0 = 0
+6:0/0 = 0
+7:0/0 = 0
+9:0/0 = 0
+10:0/0 = 0
+12:0/0 = 0
+13:0/0 = 0
+15:0/0 = 0
+0:1/0 = 0
+1:1/0 = 0
+2:1/0 = 0
+4:1/0 = 0
+6:1/0 = 0
+7:1/0 = 0
+9:1/0 = 0
+10:1/0 = 0
+12:1/0 = 0
+13:1/0 = 0
+15:1/0 = 0
+16:1/0 = 0
+0:2/0 = 0
+1:2/0 = 0
+2:2/0 = 0
+4:2/0 = 0
+6:3/0 = 0
+7:3/0 = 0
+9:3/0 = 0
+10:3/0 = 0
+12:3/0 = 0
+13:3/0 = 0
+15:3/0 = 0
+16:3/0 = 0
+0:4/0 = 0
+1:4/0 = 0
+2:4/0 = 0
+4:4/0 = 0
+6:4/0 = 0
+7:4/0 = 0
+9:4/0 = 0
+10:4/0 = 0
+12:4/0 = 0
+13:4/0 = 0
+15:4/0 = 0
+16:4/0 = 0
+
+[sub_resource type="TileSet" id="TileSet_fj5fk"]
+tile_size = Vector2i(32, 32)
+sources/0 = SubResource("TileSetAtlasSource_v72u6")
+
 [node name="Game" type="Node2D"]
-script = ExtResource("1_7tjsy")
+script = ExtResource("1_50x63")
 
 [node name="firstPlatform" type="StaticBody2D" parent="."]
 position = Vector2(595, 310)
@@ -30,7 +87,7 @@ shape = SubResource("RectangleShape2D_n7xvc")
 shape = SubResource("WorldBoundaryShape2D_gasd3")
 
 [node name="CharacterBody2D" parent="." instance=ExtResource("3_bssht")]
-position = Vector2(188, 575)
+position = Vector2(174, 430)
 
 [node name="Area2D" type="Area2D" parent="."]
 position = Vector2(952, 434)
@@ -41,17 +98,32 @@ metadata/_edit_group_ = true
 shape = SubResource("CircleShape2D_5ph8t")
 debug_color = Color(0.630721, 0.529414, 1.92523e-07, 0.42)
 
-[node name="RigidBody2D" parent="." groups=["pushables"] instance=ExtResource("1_6shkr")]
+[node name="SceneManager" type="Node" parent="."]
+unique_name_in_owner = true
+script = ExtResource("1_ooich")
+
+[node name="crates" type="Node2D" parent="."]
+
+[node name="RigidBody2D4" parent="crates" instance=ExtResource("1_6shkr")]
+position = Vector2(603, 24)
+
+[node name="RigidBody2D" parent="crates" groups=["pushables"] instance=ExtResource("1_6shkr")]
 position = Vector2(209, 113)
 rotation = 2.09219
 
-[node name="RigidBody2D2" parent="." groups=["pushables"] instance=ExtResource("1_6shkr")]
+[node name="RigidBody2D2" parent="crates" groups=["pushables"] instance=ExtResource("1_6shkr")]
 position = Vector2(595, 192)
-rotation = 4.86807
+rotation = -1.41512
 
-[node name="RigidBody2D3" parent="." groups=["pushables"] instance=ExtResource("1_6shkr")]
+[node name="RigidBody2D3" parent="crates" groups=["pushables"] instance=ExtResource("1_6shkr")]
 position = Vector2(373, 200)
 rotation = -0.0982481
 
+[node name="RigidBody2D5" parent="crates" instance=ExtResource("1_6shkr")]
+position = Vector2(251, 69)
+
+[node name="TileMapLayer" type="TileMapLayer" parent="."]
+tile_set = SubResource("TileSet_fj5fk")
+
 [connection signal="areaTrigger" from="Area2D" to="." method="_on_trigger"]
 [connection signal="body_entered" from="Area2D" to="Area2D" method="_on_body_entered"]
diff --git a/scenes/player.tscn b/scenes/player.tscn
index 9c25e11..900e4d9 100644
--- a/scenes/player.tscn
+++ b/scenes/player.tscn
@@ -1,11 +1,179 @@
-[gd_scene load_steps=3 format=3 uid="uid://b2hyqfqh02ep6"]
+[gd_scene load_steps=28 format=3 uid="uid://b2hyqfqh02ep6"]
 
 [ext_resource type="Script" path="res://scripts/charController.gd" id="1_4o8do"]
+[ext_resource type="Texture2D" uid="uid://bfhqvl875is6f" path="res://assets/graphics/player/idle/Player Idle 48x48.png" id="2_yfuca"]
+[ext_resource type="Texture2D" uid="uid://c2s48joyna11q" path="res://assets/graphics/player/jump/player jump 48x48.png" id="3_p8gbr"]
+[ext_resource type="Texture2D" uid="uid://bvat1vqwtua2p" path="res://assets/graphics/player/run/player run 48x48.png" id="3_y36hw"]
 
 [sub_resource type="CircleShape2D" id="CircleShape2D_uvblg"]
 radius = 32.5576
 
-[node name="CharacterBody2D" type="CharacterBody2D"]
+[sub_resource type="AtlasTexture" id="AtlasTexture_cdvw1"]
+atlas = ExtResource("2_yfuca")
+region = Rect2(0, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_q1l1v"]
+atlas = ExtResource("2_yfuca")
+region = Rect2(48, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_6hv7e"]
+atlas = ExtResource("2_yfuca")
+region = Rect2(96, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_4h4qw"]
+atlas = ExtResource("2_yfuca")
+region = Rect2(144, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_638nb"]
+atlas = ExtResource("2_yfuca")
+region = Rect2(192, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_73fjy"]
+atlas = ExtResource("2_yfuca")
+region = Rect2(240, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_7r0nq"]
+atlas = ExtResource("2_yfuca")
+region = Rect2(288, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_5potv"]
+atlas = ExtResource("2_yfuca")
+region = Rect2(336, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_c5yi2"]
+atlas = ExtResource("2_yfuca")
+region = Rect2(384, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_flju4"]
+atlas = ExtResource("2_yfuca")
+region = Rect2(432, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_4ckr0"]
+atlas = ExtResource("3_p8gbr")
+region = Rect2(0, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_7vs6r"]
+atlas = ExtResource("3_p8gbr")
+region = Rect2(48, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_ktf26"]
+atlas = ExtResource("3_p8gbr")
+region = Rect2(96, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_csmmg"]
+atlas = ExtResource("3_y36hw")
+region = Rect2(0, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_qwm4e"]
+atlas = ExtResource("3_y36hw")
+region = Rect2(48, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_mynlp"]
+atlas = ExtResource("3_y36hw")
+region = Rect2(96, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_q5scx"]
+atlas = ExtResource("3_y36hw")
+region = Rect2(144, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_j0rp2"]
+atlas = ExtResource("3_y36hw")
+region = Rect2(192, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_7fytd"]
+atlas = ExtResource("3_y36hw")
+region = Rect2(240, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_nw067"]
+atlas = ExtResource("3_y36hw")
+region = Rect2(288, 0, 48, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_1caon"]
+atlas = ExtResource("3_y36hw")
+region = Rect2(336, 0, 48, 48)
+
+[sub_resource type="SpriteFrames" id="SpriteFrames_52pno"]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_cdvw1")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_q1l1v")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_6hv7e")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_4h4qw")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_638nb")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_73fjy")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_7r0nq")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_5potv")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_c5yi2")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_flju4")
+}],
+"loop": true,
+"name": &"playerIdle",
+"speed": 12.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_4ckr0")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_7vs6r")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_ktf26")
+}],
+"loop": false,
+"name": &"playerJump",
+"speed": 5.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_csmmg")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_qwm4e")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_mynlp")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_q5scx")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_j0rp2")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_7fytd")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_nw067")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_1caon")
+}],
+"loop": true,
+"name": &"playerRun",
+"speed": 12.0
+}]
+
+[node name="CharacterBody2D" type="CharacterBody2D" groups=["player"]]
 script = ExtResource("1_4o8do")
 PUSH_FORCE = 100
 metadata/_edit_group_ = true
@@ -25,3 +193,15 @@ position = Vector2(35, -10)
 
 [node name="MarkerLeft" type="Node2D" parent="."]
 position = Vector2(-35, -10)
+
+[node name="Camera2D" type="Camera2D" parent="."]
+position = Vector2(0, -75)
+zoom = Vector2(0.5, 0.5)
+
+[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
+texture_filter = 1
+position = Vector2(-1, -4)
+scale = Vector2(2.22855, 2.22855)
+sprite_frames = SubResource("SpriteFrames_52pno")
+animation = &"playerJump"
+autoplay = "playerIdle"
diff --git a/scripts/bullet.gd b/scripts/bullet.gd
index 3b1aa49..d14bd00 100644
--- a/scripts/bullet.gd
+++ b/scripts/bullet.gd
@@ -1,14 +1,31 @@
-extends Area2D
+class_name Bullet extends Area2D
 
-@export var speed := 700
-signal hit(bullet, body)
+@onready var bulletGraphic: Sprite2D = $Sprite2D
 
-func set_speed(speedval):
-	speed = speedval
+var speed = 700
+signal hit
 
-func _physics_process(delta):
+# Called when the node enters the scene tree for the first time.
+func _ready() -> void:
+	pass # Replace with function body.
+
+
+# Called every frame. 'delta' is the elapsed time since the previous frame.
+func _process(_delta):
+	pass
+
+func _physics_process(delta: float) -> void:
 	position += transform.x * speed * delta
-	
 
-func _on_body_entered(body):
-	print ("Hit a thing") # Replace with function body.
+func setSpeed(value):
+	speed = value
+	if speed < 0:
+		bulletGraphic.flip_h = true
+	else:
+		bulletGraphic.flip_h = false
+
+
+func _on_body_entered(body: Node2D) -> void:
+	print("Bullet hit sumtin")
+	if not body.is_in_group("player"):
+		hit.emit(self, body)
diff --git a/scripts/charController.gd b/scripts/charController.gd
index 8cf212a..556d747 100644
--- a/scripts/charController.gd
+++ b/scripts/charController.gd
@@ -5,7 +5,7 @@ const SPEED = 500.0
 const JUMP_VELOCITY = -600.0
 @export var BUMP_FORCE = 90
 @export var PUSH_FORCE = 700
-
+@onready var animation: AnimatedSprite2D = $AnimatedSprite2D
 
 var faceLeft = false
 var pushLeftEnabled = false
@@ -19,14 +19,18 @@ var bullet = preload("res://scenes/bullet.tscn")
 @onready var marker_right = $MarkerRight
 @onready var marker_left = $MarkerLeft
 
+var isJumping = false
 
 func _physics_process(delta: float) -> void:
 	# Add the gravity.
 	if not is_on_floor():
 		velocity += get_gravity() * delta
+	else:
+		isJumping = false
 
 	# Handle jump.
 	if Input.is_action_just_pressed("ui_accept") and is_on_floor():
+		isJumping = true
 		velocity.y = JUMP_VELOCITY
 		
 	if pushTarget:
@@ -41,32 +45,33 @@ func _physics_process(delta: float) -> void:
 			pushRightEnabled = false
 		
 	if Input.is_action_just_pressed("Shoot"):
-		var mybullet = bullet.instantiate()
-		print("I will shoot")
 		if faceLeft:
-			print("shoot left")
-			mybullet.set_speed(-700)
-			mybullet.transform = marker_right.global_transform
+			var _myBullet = %SceneManager.makeBullet(marker_left.global_transform, -700)
 		else:
-			print("shoot right")
-			mybullet.transform = marker_right.global_transform
-			
-		owner.add_child(mybullet)
+			var _myBullet = %SceneManager.makeBullet(marker_right.global_transform, 700)
 
 	# Get the input direction and handle the movement/deceleration.
 	# As good practice, you should replace UI actions with custom gameplay actions.
 	var direction := Input.get_axis("ui_left", "ui_right")
-	if direction < 0:
-		faceLeft = true
-	if direction > 0:
-		faceLeft = false
 
-	
-	
-	
+
 	if direction:
+		if direction < 0:
+			faceLeft = true
+		if direction > 0:
+			faceLeft = false
+			
+		animation.flip_h = faceLeft
+		if not isJumping:
+			animation.play("playerRun")
+		else:
+			animation.play("playerJump")
 		velocity.x = direction * SPEED
 	else:
+		if not isJumping:
+			animation.play("playerIdle")
+		else:
+			animation.play("playerJump")
 		velocity.x = move_toward(velocity.x, 0, SPEED)
 
 	move_and_slide()
diff --git a/scripts/gameController.gd b/scripts/gameController.gd
index 0b7b3a8..aa6847e 100644
--- a/scripts/gameController.gd
+++ b/scripts/gameController.gd
@@ -1,8 +1,11 @@
 extends Node2D
 
-var boxTotal =  3
 var timer:= Timer.new()
-@export var secondCount= 15
+@export var secondCount= 30
+
+var totalCrates := 0
+
+signal destroyBox
 
 # Called when the node enters the scene tree for the first time.
 func _ready() -> void:
@@ -21,18 +24,21 @@ func secondCounter():
 
 	
 # Called every frame. 'delta' is the elapsed time since the previous frame.
-func _process(delta: float) -> void:
+func _process(_delta: float) -> void:
 	pass
 
-func _on_trigger(effect: Variant, body) -> void:
+func _on_trigger(_effect: Variant, body) -> void:
 	print("they were triggered!")
 	if body is RigidBody2D:
 		print("crate spotted")
-		boxTotal -= 1
 		body.queue_free()
-		if boxTotal <=0:
-			print("A winner is you")
-			get_tree().reload_current_scene()
-			
+
 			
+func bulletHit(body):
+	print("Game controller knows bullet hit something")
+	if body.is_in_group("destructables"):
+	
+		destroyBox.emit(body)
  
+func countCrates(value):
+	totalCrates = value
diff --git a/scripts/sceneManager.gd b/scripts/sceneManager.gd
new file mode 100644
index 0000000..8a7b778
--- /dev/null
+++ b/scripts/sceneManager.gd
@@ -0,0 +1,51 @@
+extends Node
+@onready var game: Node2D = $".."
+@onready var crates: Node2D = $"../crates"
+
+var theBullet = preload("res://scenes/bullet.tscn")
+var bulletArray:Array = []
+var totalCrates := 0
+
+# Called when the node enters the scene tree for the first time.
+func _ready() -> void:
+	game.destroyBox.connect(boxDestroy)
+	for obj in crates.get_children():
+		if obj.is_in_group("destructables"):
+			totalCrates += 1
+
+# Called every frame. 'delta' is the elapsed time since the previous frame.
+func _process(_delta: float) -> void:
+	pass
+
+func bulletFactory():
+	print("Factory will make a bullet")
+	var myBullet
+	if bulletArray.size() < 4:
+		myBullet = theBullet.instantiate()
+		myBullet.connect("hit", onBulletHit)
+		owner.add_child(myBullet)
+	else:
+		myBullet = bulletArray.pop_back()
+		
+	bulletArray.push_front(myBullet)
+	print("there are ", bulletArray.size(), " bullets")
+	return myBullet
+	
+func makeBullet(position, speed):
+	var myBullet = bulletFactory()
+	myBullet.transform = position
+	myBullet.setSpeed(speed)
+	
+	return
+	
+	
+func onBulletHit(bullet, body):
+	bullet.position = Vector2(-100, -100)
+	bullet.setSpeed(0)
+	print("Scene manager knows bullet hit")
+	game.bulletHit(body)
+	
+func boxDestroy(body):
+	print("sceneMgr knows body destroyed")
+	body.queue_free()
+	
diff --git a/scripts/trigger.gd b/scripts/trigger.gd
index 81b6ab8..94066e4 100644
--- a/scripts/trigger.gd
+++ b/scripts/trigger.gd
@@ -9,7 +9,7 @@ func _ready() -> void:
 
 
 # Called every frame. 'delta' is the elapsed time since the previous frame.
-func _process(delta: float) -> void:
+func _process(_delta: float) -> void:
 	pass