diff --git a/.godot/editor/editor_layout.cfg b/.godot/editor/editor_layout.cfg
index 72202bdfd70a235a68ae09d843a23d2b8003e3ac..6c57394a0a6f1d6c4ac75bc9683c77a2903290ec 100644
--- a/.godot/editor/editor_layout.cfg
+++ b/.godot/editor/editor_layout.cfg
@@ -10,7 +10,7 @@ dock_split_2=0
 dock_split_3=0
 dock_hsplit_1=0
 dock_hsplit_2=270
-dock_hsplit_3=-380
+dock_hsplit_3=-254
 dock_hsplit_4=0
 dock_filesystem_h_split_offset=240
 dock_filesystem_v_split_offset=0
@@ -27,15 +27,15 @@ dock_5="Inspector,Node,History"
 
 open_scenes=PackedStringArray("res://scenes/game.tscn", "res://scenes/explosion.tscn", "res://scenes/Pawn.tscn", "res://scenes/Rook.tscn", "res://scenes/Bishop.tscn", "res://scenes/Queen.tscn", "res://scenes/King.tscn", "res://scenes/Knight.tscn", "res://scenes/Assassin.tscn", "res://scenes/Mage.tscn", "res://scenes/Wizard.tscn")
 current_scene="res://scenes/Wizard.tscn"
-center_split_offset=-255
-selected_default_debugger_tab_idx=0
+center_split_offset=-419
+selected_default_debugger_tab_idx=1
 selected_main_editor_idx=2
-selected_bottom_panel_item=0
+selected_bottom_panel_item=1
 
 [ScriptEditor]
 
 open_scripts=["res://scripts/Assassin.gd", "res://scripts/Bishop.gd", "res://scripts/game.gd", "res://scripts/King.gd", "res://scripts/Knight.gd", "res://scripts/Mage.gd", "res://scripts/Pawn.gd", "res://scripts/Piece.gd", "res://scripts/Queen.gd", "res://scripts/Rook.gd", "res://scripts/Wizard.gd"]
-selected_script="res://scripts/Wizard.gd"
+selected_script="res://scripts/game.gd"
 open_help=[]
 script_split_offset=70
 list_split_offset=0
diff --git a/.godot/editor/filesystem_update4 b/.godot/editor/filesystem_update4
index bf3a86c0afe39eded870e268a2f29886bb98485c..c07f4faff46d7164036161ddc6efd8d9427f0d5f 100644
--- a/.godot/editor/filesystem_update4
+++ b/.godot/editor/filesystem_update4
@@ -22,3 +22,7 @@ res://scripts/Mage.gd
 res://scenes/Mage.tscn
 res://scripts/Wizard.gd
 res://scenes/Wizard.tscn
+res://scripts/Piece.gd
+res://scripts/Knight.gd
+res://scripts/King.gd
+res://scripts/Queen.gd
diff --git a/.godot/editor/script_editor_cache.cfg b/.godot/editor/script_editor_cache.cfg
index 7f1ec2292f2d67ac24cb441366286ae6a6f8998e..ead8a9464debffd2df5039e19af3cf5ac3076912 100644
--- a/.godot/editor/script_editor_cache.cfg
+++ b/.godot/editor/script_editor_cache.cfg
@@ -3,11 +3,11 @@
 state={
 "bookmarks": PackedInt32Array(),
 "breakpoints": PackedInt32Array(),
-"column": 22,
+"column": 3,
 "folded_lines": Array[int]([]),
 "h_scroll_position": 0,
-"row": 113,
-"scroll_position": 103.0,
+"row": 151,
+"scroll_position": 143.0,
 "selection": false,
 "syntax_highlighter": "GDScript"
 }
@@ -20,8 +20,8 @@ state={
 "column": 0,
 "folded_lines": Array[int]([]),
 "h_scroll_position": 0,
-"row": 5,
-"scroll_position": 0.0,
+"row": 13,
+"scroll_position": 5.0,
 "selection": false,
 "syntax_highlighter": "GDScript"
 }
diff --git a/scenes/game.tscn b/scenes/game.tscn
index e590e426ac17090c8e3c46fc8133a62264051b5c..5f027e294f8c6e5918dfdcfe49bfded4bf491463 100644
--- a/scenes/game.tscn
+++ b/scenes/game.tscn
@@ -19,8 +19,6 @@ shader_parameter/noise3 = ExtResource("5_hkjcj")
 
 [node name="Game" type="Node"]
 script = ExtResource("1_cbchi")
-X = 8
-Y = 8
 dark = Color(0.1, 0.25, 0.6, 1)
 light = Color(0.826, 0.826, 0.826, 1)
 
diff --git a/scripts/Assassin.gd b/scripts/Assassin.gd
index 4217b3fb035abf577cc528245510a5469326885d..cb26d07c133c03fdaff763dd483780a6f697ed38 100644
--- a/scripts/Assassin.gd
+++ b/scripts/Assassin.gd
@@ -8,51 +8,51 @@ enum Upgrade {
 
 var board_state: Array
 
-func _init(is_white: bool, position: Vector2):
-	super._init(is_white, position)
+func _init(is_white_param: bool, position_param: Vector2):
+	super._init(is_white_param, position_param)
 
 # Capturing is handled in main game.gd
-func get_valid_moves(board_state: Array, pos: Vector2) -> Array[Vector2]:
+func get_valid_moves(board: Array, pos: Vector2) -> Array[Vector2]:
 	var valid_moves: Array[Vector2] = []
 	var sel_x = pos.x
 	var sel_y = pos.y
 
 	# Add moves based on the provided logic
-	for x in range(board_state.size()):
-		for y in range(board_state.size()):
-			if int((x + y)) % 2 == int((sel_x + sel_y)) % 2 and is_empty(board_state, x, y):
+	for x in range(board.size()):
+		for y in range(board.size()):
+			if int((x + y)) % 2 == int((sel_x + sel_y)) % 2 and is_empty(board, x, y):
 				valid_moves.append(Vector2(x, y))
 
-	if is_opponent(board_state, sel_x, sel_y):
+	if is_opponent(board, sel_x, sel_y):
 		if sel_y - 1 >= 0:
-			if is_opposite(board_state, sel_x, sel_y - 1):
+			if is_opposite(board, sel_x, sel_y - 1):
 				valid_moves.append(Vector2(sel_x, sel_y - 1))
-			if sel_x + 1 < board_state.size():
-				if is_opposite(board_state, sel_x + 1, sel_y - 1):
+			if sel_x + 1 < board.size():
+				if is_opposite(board, sel_x + 1, sel_y - 1):
 					valid_moves.append(Vector2(sel_x + 1, sel_y - 1))
 			if sel_x - 1 >= 0:
-				if is_opposite(board_state, sel_x - 1, sel_y - 1):
+				if is_opposite(board, sel_x - 1, sel_y - 1):
 					valid_moves.append(Vector2(sel_x - 1, sel_y - 1))
 	else:
-		if sel_y + 1 < board_state.size():
-			if is_opposite(board_state, sel_x, sel_y + 1):
+		if sel_y + 1 < board.size():
+			if is_opposite(board, sel_x, sel_y + 1):
 				valid_moves.append(Vector2(sel_x, sel_y + 1))
-			if sel_x + 1 < board_state.size():
-				if is_opposite(board_state, sel_x + 1, sel_y + 1):
+			if sel_x + 1 < board.size():
+				if is_opposite(board, sel_x + 1, sel_y + 1):
 					valid_moves.append(Vector2(sel_x + 1, sel_y + 1))
 			if sel_x - 1 >= 0:
-				if is_opposite(board_state, sel_x - 1, sel_y + 1):
+				if is_opposite(board, sel_x - 1, sel_y + 1):
 					valid_moves.append(Vector2(sel_x - 1, sel_y + 1))
 
 	return valid_moves
 
 
 
-func is_empty(board_state: Array, x: int, y: int) -> bool:
-	return board_state[x][y] == null
+func is_empty(board: Array, x: int, y: int) -> bool:
+	return board[x][y] == null
 
-func is_opponent(board_state: Array, x: int, y: int) -> bool:
-	return board_state[x][y] != null and board_state[x][y].is_white != is_white
+func is_opponent(board: Array, x: int, y: int) -> bool:
+	return board[x][y] != null and board[x][y].is_white != is_white
 
-func is_opposite(board_state: Array, x: int, y: int) -> bool:
-	return board_state[x][y] != null and board_state[x][y].is_white == is_white
+func is_opposite(board: Array, x: int, y: int) -> bool:
+	return board[x][y] != null and board[x][y].is_white == is_white
diff --git a/scripts/Bishop.gd b/scripts/Bishop.gd
index 5b69d5fc83f99b42ce6178b93495b5878673c5ea..301f92b43cbfae39443e8838608fd6d3196d2c24 100644
--- a/scripts/Bishop.gd
+++ b/scripts/Bishop.gd
@@ -6,8 +6,8 @@ enum Upgrade {
 	MOVE_CARDINAL_ONE,
 }
 
-func _init(is_white: bool, position: Vector2):
-	super._init(is_white, position)
+func _init(is_white_param: bool, position_param: Vector2):
+	super._init(is_white_param, position_param)
 	# Testing upgrades
 	upgrades.append(Upgrade.MOVE_CARDINAL_ONE)
 
diff --git a/scripts/King.gd b/scripts/King.gd
index 133a17de26b2922572afd42303124ddabf03c25d..ff0f176d0eb3631d26092a2d7035ba491cd4c066 100644
--- a/scripts/King.gd
+++ b/scripts/King.gd
@@ -6,8 +6,8 @@ enum Upgrade {
 	# Add any specific upgrades for King here
 }
 
-func _init(is_white: bool, position: Vector2):
-	super._init(is_white, position)
+func _init(is_white_param: bool, position_param: Vector2):
+	super._init(is_white_param, position_param)
 
 func get_valid_moves(board_state: Array, pos: Vector2) -> Array[Vector2]:
 	var valid_moves: Array[Vector2] = []
diff --git a/scripts/Knight.gd b/scripts/Knight.gd
index 1c3057ed36bc2ef4e5097b1c08790cd92b2aeb5b..173a6e0f442a9ecca190c9a0667a4774985e2f63 100644
--- a/scripts/Knight.gd
+++ b/scripts/Knight.gd
@@ -6,8 +6,8 @@ enum Upgrade {
 	LONGER_L_MOVE,
 }
 
-func _init(is_white: bool, position: Vector2):
-	super._init(is_white, position)
+func _init(is_white_param: bool, position_param: Vector2):
+	super._init(is_white_param, position_param)
 	# Testing upgrades
 	#upgrades.append(Upgrade.LONGER_L_MOVE)
 
diff --git a/scripts/Mage.gd b/scripts/Mage.gd
index 655d49a8ccf3a40a0413acca04c539b34c7c080c..c862e97df6f663df745aac59548e64a7c36e9d15 100644
--- a/scripts/Mage.gd
+++ b/scripts/Mage.gd
@@ -6,10 +6,10 @@ enum Upgrade {
 	# Add any specific upgrades for Mage here
 }
 
-@onready var game = get_tree().root.get_node("Game")
+@onready var game_node = get_tree().root.get_node("Game")
 
-func _init(is_white: bool, position: Vector2):
-	super._init(is_white, position)
+func _init(is_white_param: bool, position_param: Vector2):
+	super._init(is_white_param, position_param)
 
 func get_valid_moves(board_state: Array, pos: Vector2) -> Array[Vector2]:
 	var valid_moves: Array[Vector2] = []
@@ -114,7 +114,7 @@ func get_valid_shots(board_state: Array, pos: Vector2) -> Array[Vector2]:
 	return valid_shots
 
 func shoot_projectile(x: int, y: int):
-	game.shoot_projectile(x, y)
+	game_node.shoot_projectile(x, y)
 
 func is_empty(board_state: Array, x: int, y: int) -> bool:
 	return board_state[x][y] == null
diff --git a/scripts/Pawn.gd b/scripts/Pawn.gd
index 3b1346f79241a24a5b5abb535b1204bad7cb04a3..8a6e6b0354aa40938e6b4f227f4bd1462ca396f3 100644
--- a/scripts/Pawn.gd
+++ b/scripts/Pawn.gd
@@ -9,8 +9,8 @@ enum Upgrade { DOUBLE_MOVE, DIAGONAL_MOVE }
 var tile_size = 64 # Make this global?...
 @onready var opponent_shader = load("res://shaders/BlackShader.shader")
 
-func _init(is_white: bool, position: Vector2):
-	super._init(is_white, position)
+func _init(is_white_param: bool, position_param: Vector2):
+	super._init(is_white_param, position_param)
 	# Testing upgrades
 	upgrades.append(Upgrade.DOUBLE_MOVE)
 	upgrades.append(Upgrade.DIAGONAL_MOVE)
diff --git a/scripts/Piece.gd b/scripts/Piece.gd
index 9a7de828a5dff203aebfa903ef73063e7d5480d1..2b6d30da53aaf666aad6e14b659068f77d8d4815 100644
--- a/scripts/Piece.gd
+++ b/scripts/Piece.gd
@@ -11,11 +11,11 @@ var upgrades: Array = []
 
 
 # initialization method
-func _init(is_white: bool, piece_position: Vector2) -> void:
-	self.is_white = is_white
-	self.piece_position = piece_position
+func _init(is_white_param: bool, piece_position_param: Vector2) -> void:
+	self.is_white = is_white_param
+	self.piece_position = piece_position_param 
 
 # Method to get valid moves (to be overridden by subclasses)
-func get_valid_moves(board_state: Array, pos: Vector2) -> Array[Vector2]:
+func get_valid_moves(_board_state: Array, _pos: Vector2) -> Array[Vector2]:
 	var moves = []
 	return moves
diff --git a/scripts/Queen.gd b/scripts/Queen.gd
index 7e65fc9f82bff6cad48a0dd88c47f1582e7fff1b..0fce2fe3477b8b0e7fa88607ea9725e0011f0b0c 100644
--- a/scripts/Queen.gd
+++ b/scripts/Queen.gd
@@ -6,8 +6,8 @@ enum Upgrade {
 	# Add any specific upgrades for Queen here
 }
 
-func _init(is_white: bool, position: Vector2):
-	super._init(is_white, position)
+func _init(is_white_param: bool, position_param: Vector2):
+	super._init(is_white_param, position_param)
 
 func get_valid_moves(board_state: Array, pos: Vector2) -> Array[Vector2]:
 	var valid_moves: Array[Vector2] = []
diff --git a/scripts/Rook.gd b/scripts/Rook.gd
index 2b53c0fff81a8d41831a77e39016b0177607d9df..d90b32fd28a8601f3ac629d7b82b10c363da2d1e 100644
--- a/scripts/Rook.gd
+++ b/scripts/Rook.gd
@@ -6,8 +6,8 @@ enum Upgrade {
 	DIAGONAL_MOVE_ONE,
 }
 
-func _init(is_white: bool, position: Vector2):
-	super._init(is_white, position)
+func _init(is_white_param: bool, position_param: Vector2):
+	super._init(is_white_param, position_param)
 	# Testing upgrades
 	# upgrades.append(Upgrade.DIAGONAL_MOVE_ONE)
 
diff --git a/scripts/Wizard.gd b/scripts/Wizard.gd
index d71af2fc293598dcfbeb4cd83b967318d3dee4d3..24e694faebaf93eaebd6b888759fecbcc0a9ae0f 100644
--- a/scripts/Wizard.gd
+++ b/scripts/Wizard.gd
@@ -6,10 +6,10 @@ enum Upgrade {
 	# Add any specific upgrades for Wizard here
 }
 
-@onready var game = get_tree().root.get_node("Game")
+@onready var game_node = get_tree().root.get_node("Game")
 
-func _init(is_white: bool, position: Vector2):
-	super._init(is_white, position)
+func _init(is_white_param: bool, position_param: Vector2):
+	super._init(is_white_param, position_param)
 
 func get_valid_moves(board_state: Array, pos: Vector2) -> Array[Vector2]:
 	var valid_moves: Array[Vector2] = []
@@ -110,7 +110,7 @@ func get_valid_shots(board_state: Array, pos: Vector2) -> Array[Vector2]:
 	return valid_shots
 
 func shoot_projectile(x: int, y: int):
-	game.shoot_projectile(x, y)
+	game_node.shoot_projectile(x, y)
 
 func is_empty(board_state: Array, x: int, y: int) -> bool:
 	return board_state[x][y] == null
diff --git a/scripts/game.gd b/scripts/game.gd
index 460e5a70c51990a7f5d14a1d79d4935e97942b20..307f94e048ebadd4a8d050ea4b26cdfec68d140e 100644
--- a/scripts/game.gd
+++ b/scripts/game.gd
@@ -1,8 +1,6 @@
 extends Node
 class_name game
 
-@export var X : int
-@export var Y : int
 @export var tile_size = 64
 @export var dark = Color(0,0,0,1)
 @export var light =Color(1,1,1,1)
@@ -29,6 +27,8 @@ var selected_piece_position
 var valid_moves = []
 @onready var selected_shader: ShaderMaterial = ShaderMaterial.new()
 
+var board_width = 8
+var board_height = 8
 var target_position
 var moving: bool
 var sprite: Sprite2D
@@ -42,9 +42,9 @@ func _ready() -> void:
 	DisplayServer.window_set_min_size(Vector2(1152, 648))  # Set minimum window size
 	
 	#creates 2D array for board, with empty (null) spaces
-	for x in range(X): 
+	for x in range(board_width): 
 		board.append([])
-		for y in range(Y): 
+		for y in range(board_height): 
 			board[x].append(null)
 	
 	
@@ -72,7 +72,7 @@ func _ready() -> void:
 	#potential 'holes', not quite working yet
 	#board[3][3] = '/'
 	
-	draw_board(X,Y)
+	draw_board(board_width,board_height)
 	
 	#set up color for opponent's shader, currently set to black
 	opponent_shader.shader = preload("res://assets/shaders/color.gdshader").duplicate()
@@ -125,8 +125,8 @@ func _process(delta: float) -> void:
 func draw_pieces():
 	#iterate through all tiles, if tile has a piece, 
 	#add corresponding piece with correct sprite to piece_container
-	for x in range(X):
-		for y in range(Y):
+	for x in range(board_width):
+		for y in range(board_height):
 			if !is_empty(x, y):
 				var piece_scene
 				if board[x][y] is Pawn:
@@ -150,9 +150,9 @@ func draw_pieces():
 				
 				if piece_scene:
 					var piece_instance = piece_scene.instantiate()
-					piece_instance.position = Vector2((x * tile_size) + tile_size/2, (y * tile_size) + tile_size/2)
+					piece_instance.position = Vector2((x * tile_size) + tile_size/2.0, (y * tile_size) + tile_size/2.0)
 					piece_instance.z_index = 3
-					
+
 					# Scale the sprite by 25% for all pieces except the king
 					if board[x][y] is King:
 						piece_instance.scale = Vector2(2.0, 2.0)  # Scale the king by 50%
@@ -161,9 +161,9 @@ func draw_pieces():
 
 					# If piece is opponent, add a black shader to piece
 					if board[x][y].is_white == false:
-						var sprite = piece_instance.get_node("Sprite2D") as Sprite2D
-						if sprite:
-							sprite.material = opponent_shader
+						var piece_sprite = piece_instance.get_node("Sprite2D") as Sprite2D
+						if piece_sprite:
+							piece_sprite.material = opponent_shader
 					
 					piece_container.add_child(piece_instance)
 
@@ -172,15 +172,15 @@ func draw_pieces():
 #used to center board, shadow and pieces at 2/3 of x axis and 1/2 of y axis
 func translate() -> Vector2:
 	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 board_x_offset = float(board_width * tile_size) / 2
+	var board_y_offset = float(board_height * tile_size) / 2
 	#places top left corner at 2/3 of x axis and 1/2 of y axis, then translates to center 
 	return Vector2(screen_size.x * 2 / 3 - board_x_offset, screen_size.y / 2 - board_y_offset)
 
 #color rect version
-func draw_board(X, Y):
-	for x in range(X):
-		for y in range(Y):
+func draw_board(width, height):
+	for x in range(width):
+		for y in range(height):
 			var tile = ColorRect.new()
 			if (x + y)%2 == 0:
 				tile.color = light
@@ -190,9 +190,6 @@ func draw_board(X, Y):
 			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")
@@ -205,7 +202,7 @@ func draw_board(X, Y):
 			shadow_container.add_child(shadow)
 
 #textured rect version
-func draw_board_texture_rect(X, Y):
+func draw_board_texture_rect(width, height):
 	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)
@@ -216,8 +213,8 @@ func draw_board_texture_rect(X, Y):
 	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):
+	for x in range(width):
+		for y in range(height):
 			if board[x][y] == '/':
 				pass
 			else:
@@ -231,10 +228,6 @@ func draw_board_texture_rect(X, Y):
 				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")
 				
@@ -247,8 +240,8 @@ func draw_board_texture_rect(X, Y):
 
 #detects if mouse events occur within the board
 func is_on_board(position : Vector2) -> bool:
-	if position.x < (X * tile_size) && position.x > 0:
-		if position.y < (Y * tile_size) && position.y > 0:
+	if position.x < (board_width * tile_size) && position.x > 0:
+		if position.y < (board_height * tile_size) && position.y > 0:
 			return true
 	return false
 
@@ -463,7 +456,7 @@ func move_piece(x, y):
 	board[x][y] = selected_piece_value
 
 	# Update selected_piece's screen coordinate position
-	selected_piece_position = Vector2((x * tile_size) + tile_size / 2, (y * tile_size) + tile_size / 2)
+	selected_piece_position = Vector2((x * tile_size) + tile_size / 2.0, (y * tile_size) + tile_size / 2.0)
 
 	target_position = selected_piece_position
 	moving = true
@@ -475,7 +468,7 @@ func shoot_projectile(x: int, y: int):
 	unselect_piece()
 
 	explosion_effect.color = Color(1, 0, 1)
-	explosion_effect.position = Vector2(x, y) * tile_size + translate() + Vector2(tile_size / 2, tile_size / 2)
+	explosion_effect.position = Vector2(x, y) * tile_size + translate() + Vector2(tile_size / 2.0, tile_size / 2.0)
 	explosion_effect.restart()
 
 	# player_turn = !player_turn