diff --git a/.godot/editor/create_recent.Node b/.godot/editor/create_recent.Node
index c10194ce5eff4137245f92ba5a228cf3125cc7de..42bcef4dcb37c6796a5da731f49ede69a3164f7b 100644
--- a/.godot/editor/create_recent.Node
+++ b/.godot/editor/create_recent.Node
@@ -1,3 +1,4 @@
+CPUParticles2D
 Node
 Control
 ColorRect
diff --git a/.godot/editor/editor_layout.cfg b/.godot/editor/editor_layout.cfg
index 25a1db8986d6d48902ac5f41a0ac569d668ce3b2..f6013bdaf29dde704d5a7e5701a4863794506061 100644
--- a/.godot/editor/editor_layout.cfg
+++ b/.godot/editor/editor_layout.cfg
@@ -10,14 +10,14 @@ dock_split_2=0
 dock_split_3=0
 dock_hsplit_1=0
 dock_hsplit_2=270
-dock_hsplit_3=-270
+dock_hsplit_3=-380
 dock_hsplit_4=0
 dock_filesystem_h_split_offset=240
 dock_filesystem_v_split_offset=0
 dock_filesystem_display_mode=2
 dock_filesystem_file_sort=0
 dock_filesystem_file_list_display_mode=1
-dock_filesystem_selected_paths=PackedStringArray("res://")
+dock_filesystem_selected_paths=PackedStringArray("res://scenes/")
 dock_filesystem_uncollapsed_paths=PackedStringArray("Favorites", "res://", "res://assets/")
 dock_3="Scene,Import"
 dock_4="FileSystem"
@@ -25,7 +25,7 @@ dock_5="Inspector,Node,History"
 
 [EditorNode]
 
-open_scenes=PackedStringArray("res://scenes/game.tscn")
+open_scenes=PackedStringArray("res://scenes/game.tscn", "res://scenes/explosion.tscn")
 current_scene="res://scenes/game.tscn"
 center_split_offset=0
 selected_default_debugger_tab_idx=0
@@ -39,7 +39,7 @@ selected_script="res://scripts/game.gd"
 open_help=[]
 script_split_offset=70
 list_split_offset=0
-zoom_factor=1.07143
+zoom_factor=1.0
 
 [ShaderEditor]
 
diff --git a/.godot/editor/filesystem_cache8 b/.godot/editor/filesystem_cache8
index ffe98076db4407365f1702a5186dde3767912415..caf51a3afb3d597474dcf30536414431fbbdd874 100644
--- a/.godot/editor/filesystem_cache8
+++ b/.godot/editor/filesystem_cache8
@@ -1,23 +1,24 @@
 ea4bc82a6ad023ab7ee23ee620429895
-::res://::1738186081
+::res://::1738190822
 icon.svg::CompressedTexture2D::6378281210119878262::1738185626::1738186049::1::::<><>::
 README.md::TextFile::-1::1738185626::0::1::::<><>::
+explosion.tscn::PackedScene::69466253159940830::1738190822::0::1::::<><>::
 ::res://assets/::1738185626
 ::res://assets/noise/::1738186081
 noise2.tres::NoiseTexture2D::5054739835828921764::1738186081::0::1::::<><>::
 noise3.tres::NoiseTexture2D::906885015046579772::1738186081::0::1::::<><>::
 noise.tres::NoiseTexture2D::1693764769519573005::1738186081::0::1::::<><>::
-::res://assets/shaders/::1738187247
-bg.gdshader::Shader::-1::1738187247::0::1::::<><>::
-color.gdshader::Shader::-1::1738187247::0::1::::<><>::
-shadow.gdshader::Shader::-1::1738187247::0::1::::<><>::
-::res://assets/sprites/::1738186897
+::res://assets/shaders/::1738190822
+bg.gdshader::Shader::-1::1738190822::0::1::::<><>::
+color.gdshader::Shader::-1::1738190822::0::1::::<><>::
+shadow.gdshader::Shader::-1::1738190822::0::1::::<><>::
+::res://assets/sprites/::1738187427
 bishop.png::CompressedTexture2D::4631301773944929250::1738185626::1738186049::1::::<><>::
 knight.png::CompressedTexture2D::3545640967717948854::1738185626::1738186049::1::::<><>::
 pawn.png::CompressedTexture2D::1338760335342038528::1738185626::1738186049::1::::<><>::
 rook.png::CompressedTexture2D::6790909281007670776::1738185626::1738186049::1::::<><>::
 tile.png::CompressedTexture2D::8704336058451696509::1738187423::1738187427::1::::<><>::
-::res://scenes/::1738187247
-game.tscn::PackedScene::8577524005707705072::1738187247::0::1::::<><>::res://scripts/game.gd<>res://assets/shaders/bg.gdshader<>uid://yeqb8ndri7xp::::res://assets/noise/noise.tres<>uid://ceas3dsjeq4ge::::res://assets/noise/noise2.tres<>uid://m6ki73qfbp2s::::res://assets/noise/noise3.tres
-::res://scripts/::1738187247
-game.gd::GDScript::-1::1738187247::0::1::::game<>Node<>::
+::res://scenes/::1738190331
+game.tscn::PackedScene::8577524005707705072::1738190331::0::1::::<><>::res://scripts/game.gd<>res://assets/shaders/bg.gdshader<>uid://yeqb8ndri7xp::::res://assets/noise/noise.tres<>uid://ceas3dsjeq4ge::::res://assets/noise/noise2.tres<>uid://m6ki73qfbp2s::::res://assets/noise/noise3.tres
+::res://scripts/::1738189838
+game.gd::GDScript::-1::1738189838::0::1::::game<>Node<>::
diff --git a/.godot/editor/filesystem_update4 b/.godot/editor/filesystem_update4
index f65008d859dee7a5e97beb407f338b73646a791f..1db6d1434cafa15adf932a57bce7433e9b193ff7 100644
--- a/.godot/editor/filesystem_update4
+++ b/.godot/editor/filesystem_update4
@@ -6,3 +6,5 @@ res://assets/noise/noise.tres
 res://assets/noise/noise2.tres
 res://assets/noise/noise3.tres
 res://scripts/game.gd
+res://explosion.tscn
+res://scenes/explosion.tscn
diff --git a/.godot/editor/game.tscn-editstate-c2a7af834e91ff64325daddf58e45dc0.cfg b/.godot/editor/game.tscn-editstate-c2a7af834e91ff64325daddf58e45dc0.cfg
index 0f74bc0ce53e7d23718f3c5d69d50743415f006a..c6fde183dce1448eed5cb945780e3a7b1f8bf5ca 100644
--- a/.godot/editor/game.tscn-editstate-c2a7af834e91ff64325daddf58e45dc0.cfg
+++ b/.godot/editor/game.tscn-editstate-c2a7af834e91ff64325daddf58e45dc0.cfg
@@ -8,7 +8,7 @@ Anim={
 "grid_snap_active": false,
 "grid_step": Vector2(8, 8),
 "grid_visibility": 1,
-"ofs": Vector2(-671.966, -320.708),
+"ofs": Vector2(-1180.52, -464.792),
 "primary_grid_step": Vector2i(8, 8),
 "show_group_gizmos": true,
 "show_guides": true,
@@ -34,7 +34,7 @@ Anim={
 "snap_rotation_step": 0.261799,
 "snap_scale": false,
 "snap_scale_step": 0.1,
-"zoom": 0.561231
+"zoom": 0.529732
 }
 3D={
 "fov": 70.01,
diff --git a/.godot/editor/game.tscn-folding-c2a7af834e91ff64325daddf58e45dc0.cfg b/.godot/editor/game.tscn-folding-c2a7af834e91ff64325daddf58e45dc0.cfg
index 205f7ca188ec5d2d9b25c4686acaa99812214909..892d185386b625ec13ffd804bc68044c71b139b5 100644
--- a/.godot/editor/game.tscn-folding-c2a7af834e91ff64325daddf58e45dc0.cfg
+++ b/.godot/editor/game.tscn-folding-c2a7af834e91ff64325daddf58e45dc0.cfg
@@ -1,5 +1,5 @@
 [folding]
 
-node_unfolds=[NodePath("."), PackedStringArray("opponent_shader", "Editor Description"), NodePath("ShadowContainer"), PackedStringArray("Ordering"), NodePath("TileContainer"), PackedStringArray("Transform", "Ordering"), NodePath("PieceContainer"), PackedStringArray("Ordering", "Process", "Texture"), NodePath("Background"), PackedStringArray("Layout", "material", "Ordering", "Layout/Transform", "Layout/Grow Direction", "Layout/Container Sizing", "Layout/Anchor Points", "Layout/Anchor Offsets", "Texture")]
+node_unfolds=[NodePath("."), PackedStringArray("opponent_shader", "Editor Description"), NodePath("ShadowContainer"), PackedStringArray("Ordering"), NodePath("TileContainer"), PackedStringArray("Transform", "Ordering"), NodePath("PieceContainer"), PackedStringArray("Ordering", "Process", "Texture"), NodePath("Background"), PackedStringArray("Layout", "material", "Ordering", "Layout/Transform", "Layout/Grow Direction", "Layout/Container Sizing", "Layout/Anchor Points", "Layout/Anchor Offsets", "Texture"), NodePath("Explosion"), PackedStringArray("Ordering", "Transform", "Scale", "Time")]
 resource_unfolds=["res://scenes/game.tscn::ShaderMaterial_gdbwp", PackedStringArray("Shader Parameters", "Resource")]
 nodes_folded=[]
diff --git a/.godot/editor/project_metadata.cfg b/.godot/editor/project_metadata.cfg
index a5f2614d36a174463dc7ba7266d59a554c0c3cf8..7b43e082670714dad552f9ec77346336770e5e9d 100644
--- a/.godot/editor/project_metadata.cfg
+++ b/.godot/editor/project_metadata.cfg
@@ -19,7 +19,7 @@ scenes=["res://scenes/game.tscn", "res://scenes/chess_board.tscn", "res://chess_
 [color_picker]
 
 picker_shape=3
-recent_presets=PackedColorArray(0.1, 0.25, 0.6, 0.997, 0.1, 0.25, 0.6, 0.996, 0.826, 0.826, 0.826, 0.9, 0.1, 0.25, 0.6, 0.899, 0.1, 0.25, 0.6, 0.8, 0.826, 0.826, 0.826, 0.8, 0.1, 0.25, 0.6, 0.9, 0.1, 0.25, 0.6, 1, 0.826, 0.826, 0.826, 1)
+recent_presets=PackedColorArray(0.1, 0.25, 0.6, 0.996, 0.826, 0.826, 0.826, 0.9, 0.1, 0.25, 0.6, 0.899, 0.1, 0.25, 0.6, 0.8, 0.826, 0.826, 0.826, 0.8, 0.1, 0.25, 0.6, 0.9, 0.1, 0.25, 0.6, 1, 0.826, 0.826, 0.826, 1, 0, 0, 0, 1)
 color_mode=2
 
 [shader_setup]
diff --git a/.godot/editor/script_editor_cache.cfg b/.godot/editor/script_editor_cache.cfg
index 575a982c1cc406450cfa5c1ad6e7ae7de513d20a..3afe2fca03416fad4bf08afdc075a49f6c530e1a 100644
--- a/.godot/editor/script_editor_cache.cfg
+++ b/.godot/editor/script_editor_cache.cfg
@@ -3,10 +3,10 @@
 state={
 "bookmarks": PackedInt32Array(),
 "breakpoints": PackedInt32Array(),
-"column": 25,
+"column": 27,
 "folded_lines": Array[int]([]),
-"h_scroll_position": 139,
-"row": 75,
+"h_scroll_position": 0,
+"row": 99,
 "scroll_position": 75.0,
 "selection": false,
 "syntax_highlighter": "GDScript"
diff --git a/.godot/uid_cache.bin b/.godot/uid_cache.bin
index e90b294fb09102a059760bd16b024bb1e29d38f5..9c0b92ff71f5adcc7c2d531e6b6e658ef8ad0939 100644
Binary files a/.godot/uid_cache.bin and b/.godot/uid_cache.bin differ
diff --git a/scenes/explosion.tscn b/scenes/explosion.tscn
new file mode 100644
index 0000000000000000000000000000000000000000..219401f4c824b2180a2a92974d18e5e34a63bf82
--- /dev/null
+++ b/scenes/explosion.tscn
@@ -0,0 +1,17 @@
+[gd_scene format=3 uid="uid://8wdmqxipuyg"]
+
+[node name="Explosion" type="Node2D"]
+
+[node name="CPUParticles2D" type="CPUParticles2D" parent="."]
+emitting = false
+amount = 40
+lifetime = 5.0
+one_shot = true
+speed_scale = 4.59
+explosiveness = 1.0
+emission_shape = 3
+emission_rect_extents = Vector2(1, 1)
+gravity = Vector2(0, 0)
+radial_accel_min = 29.85
+radial_accel_max = 70.25
+color = Color(0, 0, 0, 1)
diff --git a/scenes/game.tscn b/scenes/game.tscn
index 4882d47db20ceddbb1197e8693aeda43bdf81e7b..50acfb4c32bee12cafb0b5bf5e88b92fd70731d3 100644
--- a/scenes/game.tscn
+++ b/scenes/game.tscn
@@ -41,3 +41,21 @@ anchor_right = 1.0
 anchor_bottom = 1.0
 grow_horizontal = 2
 grow_vertical = 2
+
+[node name="Explosion" type="CPUParticles2D" parent="."]
+z_index = 1
+emitting = false
+amount = 40
+lifetime = 4.0
+one_shot = true
+speed_scale = 5.0
+explosiveness = 1.0
+lifetime_randomness = 1.0
+emission_shape = 3
+emission_rect_extents = Vector2(1, 1)
+gravity = Vector2(0, 0)
+radial_accel_min = 29.85
+radial_accel_max = 70.25
+scale_amount_min = 2.0
+scale_amount_max = 3.0
+color = Color(0, 0, 0, 1)
diff --git a/scripts/game.gd b/scripts/game.gd
index 2ec2bfa078c1c4c36741351f8554df355c940de1..a8fead835668ee575fbb12a125d1b2abe53bd4ae 100644
--- a/scripts/game.gd
+++ b/scripts/game.gd
@@ -28,6 +28,7 @@ var valid_moves = []
 var target_position
 var moving: bool
 
+@onready var explosion_effect = $Explosion
 
 
 func _ready() -> void:
@@ -87,14 +88,18 @@ func _process(delta: float) -> void:
 	
 	#attempt at linear interpolation for smooth movement of pieces#
 
+	#lerp for smooth movement of pieces
 	if moving:
+		#if piece is not at target position, linearly interpolate to target
 		if selected_piece.position != selected_piece_position:
+			#if within threshold, snap to position to avoid floating point error
 			if selected_piece.position.distance_to(target_position) < 0.1:
 				selected_piece.position = selected_piece_position
 				unselect_piece()
 				moving = false
-			else:  # Snap to exact position
-				selected_piece.position = selected_piece.position.lerp(selected_piece_position, 5 * delta)
+			# Snap to exact position
+			else:  
+				selected_piece.position = selected_piece.position.lerp(selected_piece_position, 10 * delta)
 		else:
 			moving = false
 			unselect_piece()
@@ -168,47 +173,46 @@ func draw_board(X, Y):
 				shadow.material = shadow_shader
 				shadow_container.add_child(shadow)
 
-
-##textured rect version
-#func draw_board(X, Y):
-	#dark_tile_shader.shader = preload("res://assets/shaders/color.gdshader").duplicate()
-	#dark_tile_shader.set_shader_parameter('r', 0.1)
-	#dark_tile_shader.set_shader_parameter('g', 0.25)
-	#dark_tile_shader.set_shader_parameter('b', 0.6)
-	#
-	#light_tile_shader.shader = preload("res://assets/shaders/color.gdshader").duplicate()
-	#light_tile_shader.set_shader_parameter('r', 0.85)
-	#light_tile_shader.set_shader_parameter('g', 0.85)
-	#light_tile_shader.set_shader_parameter('b', 0.85)
-	#
-	#for x in range(X):
-		#for y in range(Y):
-			#if board[x][y] == '/':
-				#pass
-			#else:
-				#var tile = TextureRect.new()
-				#tile.texture = preload("res://assets/sprites/tile.png")
-				#if (x + y)%2 == 0:
-					#tile.material = light_tile_shader
-				#else:
-					#tile.material = dark_tile_shader
-				#tile.size = Vector2(tile_size, tile_size)
-				#tile.position = Vector2(x * tile_size, y * tile_size)
-				#
-				#tile_container.add_child(tile)
-				#var screen_size = get_viewport().get_visible_rect().size
-				#var board_x_offset = X * tile_size / 2
-				#var board_y_offset = Y * tile_size / 2
-				#
-				#var shadow_shader = ShaderMaterial.new()
-				#shadow_shader.shader = preload("res://assets/shaders/shadow.gdshader")
-				#
-				#var shadow = ColorRect.new()
-				#shadow.size = Vector2(tile_size, tile_size)
-				#shadow.position = Vector2(x * tile_size + 15, y * tile_size + 15)
-				#
-				#shadow.material = shadow_shader
-				#shadow_container.add_child(shadow)
+#textured rect version
+func draw_board_texture_rect(X, Y):
+	dark_tile_shader.shader = preload("res://assets/shaders/color.gdshader").duplicate()
+	dark_tile_shader.set_shader_parameter('r', 0.1)
+	dark_tile_shader.set_shader_parameter('g', 0.25)
+	dark_tile_shader.set_shader_parameter('b', 0.6)
+	
+	light_tile_shader.shader = preload("res://assets/shaders/color.gdshader").duplicate()
+	light_tile_shader.set_shader_parameter('r', 0.85)
+	light_tile_shader.set_shader_parameter('g', 0.85)
+	light_tile_shader.set_shader_parameter('b', 0.85)
+	
+	for x in range(X):
+		for y in range(Y):
+			if board[x][y] == '/':
+				pass
+			else:
+				var tile = TextureRect.new()
+				tile.texture = preload("res://assets/sprites/tile.png")
+				if (x + y)%2 == 0:
+					tile.material = light_tile_shader
+				else:
+					tile.material = dark_tile_shader
+				tile.size = Vector2(tile_size, tile_size)
+				tile.position = Vector2(x * tile_size, y * tile_size)
+				
+				tile_container.add_child(tile)
+				var screen_size = get_viewport().get_visible_rect().size
+				var board_x_offset = X * tile_size / 2
+				var board_y_offset = Y * tile_size / 2
+				
+				var shadow_shader = ShaderMaterial.new()
+				shadow_shader.shader = preload("res://assets/shaders/shadow.gdshader")
+				
+				var shadow = ColorRect.new()
+				shadow.size = Vector2(tile_size, tile_size)
+				shadow.position = Vector2(x * tile_size + 15, y * tile_size + 15)
+				
+				shadow.material = shadow_shader
+				shadow_container.add_child(shadow)
 
 #detects if mouse events occur within the board
 func is_on_board(position : Vector2) -> bool:
@@ -276,10 +280,14 @@ func remove_piece(x,y):
 	for child in piece_container.get_children():
 		#translate x,y index values to screen coordinates
 		if child.position == Vector2(x*tile_size, y*tile_size):
+			
+			explosion_effect.position = child.position + translate() + Vector2(tile_size/2, tile_size/2)
+			explosion_effect.restart()
 			piece_container.remove_child(child)
 			child.queue_free()
 			break
-			
+
+
 func select_piece(x,y):
 	unselect_piece()
 	
@@ -509,21 +517,20 @@ func move_selected_piece(x,y):
 			#if tile has opponent piece, remove piece
 			if is_opponent(x,y):
 				remove_piece(x,y)
+				
 			#clear the selected_piece's previous position
 			board[selected_piece_position.x][selected_piece_position.y] = '0'
 			#update selected_piece's screen coordinate position
 			selected_piece_position = Vector2(x*tile_size, y*tile_size)
-			#
-			#selected_piece.position = selected_piece_position
 			board[x][y] = selected_piece_value
 			
 			target_position = selected_piece_position
+			moving = true
+		
+		else:
+			unselect_piece()
+		
+	remove_highlight()
 		
-		##clear selection after move
-		#selected_piece.material = null
-		#selected_piece = null
-		#selected_piece_value = null
-		remove_highlight()
-		moving = true